input_assembly_info->sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;
input_assembly_info->topology = static_cast<VkPrimitiveTopology>(get_vulkan_primitive_type(self.primitive_type));
- input_assembly_info->primitiveRestartEnable = !has_tessellation;
+ input_assembly_info->primitiveRestartEnable = (self.primitive_type!=POINTS && self.primitive_type!=LINES && self.primitive_type!=TRIANGLES && self.primitive_type!=PATCHES);
if(has_tessellation)
{
const PipelineState &self = *static_cast<const PipelineState *>(this);
for(const PipelineState::BoundResource &r: self.resources)
- if(r.type==PipelineState::STORAGE_TEXTURE)
- r.texture->change_layout(-1, VK_IMAGE_LAYOUT_GENERAL, false);
+ if(r.used)
+ {
+ if(r.type==PipelineState::STORAGE_TEXTURE)
+ r.texture->change_layout(-1, VK_IMAGE_LAYOUT_GENERAL, false);
+ else if(r.type==PipelineState::SAMPLED_TEXTURE)
+ r.texture->change_layout(-1, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, false);
+ }
}
void VulkanPipelineState::apply(const VulkanCommandRecorder &vkCmd, const VulkanPipelineState *last, unsigned frame, bool negative_viewport) const