]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/vulkan/program_backend.cpp
Set push constants only for enabled shader stages
[libs/gl.git] / source / backends / vulkan / program_backend.cpp
index 61b5efaefd93f4b96fdef3892cf09fc9ff29468b..60e96698bd313242374911112359a01c117ba446 100644 (file)
@@ -19,6 +19,7 @@ VulkanProgram::VulkanProgram():
 VulkanProgram::VulkanProgram(VulkanProgram &&other):
        device(other.device),
        n_stages(other.n_stages),
+       stage_flags(other.stage_flags),
        creation_info(move(other.creation_info)),
        desc_set_layout_handles(move(other.desc_set_layout_handles)),
        layout_handle(other.layout_handle)
@@ -86,8 +87,11 @@ void VulkanProgram::add_spirv_stages(const SpirVModule &mod, const map<string, i
        i = 0;
        for(const SpirVModule::EntryPoint &e: entry_points)
        {
+               unsigned stage_bit = get_vulkan_stage(e.stage);
+               stage_flags |= stage_bit;
+
                stage_infos[i].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
-               stage_infos[i].stage = static_cast<VkShaderStageFlagBits>(get_vulkan_stage(e.stage));
+               stage_infos[i].stage = static_cast<VkShaderStageFlagBits>(stage_bit);
                stage_infos[i].module = handle_cast<::VkShaderModule>(mod.handle);
                strcpy(name_ptr, e.name.c_str());
                stage_infos[i].pName = name_ptr;
@@ -142,7 +146,7 @@ void VulkanProgram::finalize_uniforms()
        }
 
        VkPushConstantRange push_const_range = { };
-       push_const_range.stageFlags = VK_SHADER_STAGE_ALL;
+       push_const_range.stageFlags = stage_flags;
        push_const_range.offset = 0;
        push_const_range.size = (push_const_block ? push_const_block->data_size : 0);