]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/vulkan/pipelinestate_backend.cpp
Rebind all descriptor sets if push constant layout changes
[libs/gl.git] / source / backends / vulkan / pipelinestate_backend.cpp
index 4eba2895e4925cd9282672a22d207f248ca4d2a4..d14bc00c6539bb3c9509fab26abf4610cd151d1f 100644 (file)
@@ -41,6 +41,12 @@ void VulkanPipelineState::update() const
        if(changes&PipelineState::VERTEX_SETUP)
                self.vertex_setup->refresh();
 
+       if(changes&PipelineState::SHPROG)
+       {
+               push_const_compat = hash<32>(self.shprog->stage_flags);
+               push_const_compat = hash_update<32>(push_const_compat, self.shprog->get_push_constants_size());
+       }
+
        constexpr unsigned pipeline_mask = PipelineState::SHPROG|PipelineState::VERTEX_SETUP|PipelineState::FACE_CULL|
                PipelineState::DEPTH_TEST|PipelineState::STENCIL_TEST|PipelineState::BLEND|PipelineState::PRIMITIVE_TYPE;
        if(changes&pipeline_mask)
@@ -396,7 +402,7 @@ void VulkanPipelineState::apply(VkCommandBuffer command_buffer, const VulkanPipe
                if(handle!=last->handle)
                {
                        unapplied |= PipelineState::SHPROG;
-                       if(self.shprog->stage_flags!=last_ps.shprog->stage_flags)
+                       if(self.push_const_compat!=last_ps.push_const_compat)
                        {
                                unapplied |= PipelineState::UNIFORMS;
                                first_changed_desc_set = 0;