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)
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;
bindings.emplace_back();
VkDescriptorSetLayoutBinding &binding = bindings.back();
binding.binding = b.bind_point;
- binding.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
+ binding.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC;
binding.descriptorCount = 1;
binding.stageFlags = VK_SHADER_STAGE_ALL;
binding.pImmutableSamplers = 0;
}
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);