X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbackends%2Fvulkan%2Fprogram_backend.cpp;h=993a3e38ef965d11b838fb9b41653cb2fe5b3b29;hb=cebf1330ef6773b7b4496dc279ec02a7ca4351bb;hp=a2c40ad3fec3feb0492a49f8f3296ed8d6c1eb2b;hpb=9ef77734bac36f2b16380ef3e131d3164fe241ce;p=libs%2Fgl.git diff --git a/source/backends/vulkan/program_backend.cpp b/source/backends/vulkan/program_backend.cpp index a2c40ad3..993a3e38 100644 --- a/source/backends/vulkan/program_backend.cpp +++ b/source/backends/vulkan/program_backend.cpp @@ -59,11 +59,11 @@ void VulkanProgram::add_spirv_stages(const SpirVModule &mod, const map(n_stages); - char *&name_table = sb.add(entry_names_size); - VkSpecializationInfo *&spec_info = sb.add(); - VkSpecializationMapEntry *&spec_map = sb.add(spec_values.size()); - int *&spec_data = sb.add(spec_values.size()); + VkPipelineShaderStageCreateInfo *const &stage_infos = sb.add(n_stages); + char *const &name_table = sb.add(entry_names_size); + VkSpecializationInfo *const &spec_info = sb.add(); + VkSpecializationMapEntry *const &spec_map = sb.add(spec_values.size()); + int *const &spec_data = sb.add(spec_values.size()); unsigned i = 0; for(const SpirVModule::Constant &c: mod.get_spec_constants()) @@ -138,7 +138,10 @@ void VulkanProgram::finalize_uniforms() bindings.emplace_back(); VkDescriptorSetLayoutBinding &binding = bindings.back(); binding.binding = u.binding&0xFFFFF; - binding.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; + if(is_sampled_image(u.type)) + binding.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; + else + binding.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE; binding.descriptorCount = 1; binding.stageFlags = stage_flags; binding.pImmutableSamplers = 0; @@ -172,6 +175,11 @@ void VulkanProgram::finalize_uniforms() #endif } +bool VulkanProgram::is_compute() const +{ + return stage_flags&VK_SHADER_STAGE_COMPUTE_BIT; +} + void VulkanProgram::set_debug_name(const string &name) { #ifdef DEBUG