]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/vulkan/pipelinestate_backend.cpp
Don't try to bind descriptor sets if there aren't any
[libs/gl.git] / source / backends / vulkan / pipelinestate_backend.cpp
index 4f4f5600bb08cd7c0c19a575adaa7ad26cd934f3..efcc961359a547e48721485b49827b4edcc42910 100644 (file)
@@ -35,6 +35,9 @@ void VulkanPipelineState::update() const
 {
        const PipelineState &self = *static_cast<const PipelineState *>(this);
 
+       if(self.changes&PipelineState::VERTEX_SETUP)
+               self.vertex_setup->refresh();
+
        constexpr unsigned pipeline_mask = PipelineState::SHPROG|PipelineState::VERTEX_SETUP|PipelineState::FACE_CULL|
                PipelineState::DEPTH_TEST|PipelineState::STENCIL_TEST|PipelineState::BLEND|PipelineState::PRIMITIVE_TYPE;
        if(self.changes&pipeline_mask)
@@ -257,10 +260,7 @@ void VulkanPipelineState::fill_creation_info(vector<char> &buffer) const
        }
 
        if(self.vertex_setup)
-       {
-               self.vertex_setup->refresh();
                pipeline_info->pVertexInputState = reinterpret_cast<const VkPipelineVertexInputStateCreateInfo *>(self.vertex_setup->creation_info.data());
-       }
 }
 
 uint64_t VulkanPipelineState::compute_descriptor_set_hash(unsigned index) const
@@ -374,7 +374,8 @@ void VulkanPipelineState::apply(VkCommandBuffer command_buffer) const
                }
        }
 
-       vk.CmdBindDescriptorSets(command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, self.shprog->layout_handle, 0, descriptor_set_handles.size(), descriptor_set_handles.data(), 0, 0);
+       if(!descriptor_set_handles.empty())
+               vk.CmdBindDescriptorSets(command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, self.shprog->layout_handle, 0, descriptor_set_handles.size(), descriptor_set_handles.data(), 0, 0);
 
        VkViewport viewport = { };
        if(self.viewport)