X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbackends%2Fvulkan%2Fprogram_backend.cpp;h=a2c40ad3fec3feb0492a49f8f3296ed8d6c1eb2b;hb=9ef77734bac36f2b16380ef3e131d3164fe241ce;hp=60e96698bd313242374911112359a01c117ba446;hpb=27c06dbcd3af468933170e9f8c738b53b53e0277;p=libs%2Fgl.git diff --git a/source/backends/vulkan/program_backend.cpp b/source/backends/vulkan/program_backend.cpp index 60e96698..a2c40ad3 100644 --- a/source/backends/vulkan/program_backend.cpp +++ b/source/backends/vulkan/program_backend.cpp @@ -22,7 +22,8 @@ VulkanProgram::VulkanProgram(VulkanProgram &&other): 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) + layout_handle(other.layout_handle), + debug_name(move(other.debug_name)) { other.desc_set_layout_handles.clear(); other.layout_handle = 0; @@ -43,7 +44,7 @@ bool VulkanProgram::has_stages() const return n_stages; } -void VulkanProgram::add_glsl_stages(const GlslModule &, const map &, TransientData &) +void VulkanProgram::add_glsl_stages(const GlslModule &, const map &) { throw invalid_operation("VulkanProgram::add_glsl_stages"); } @@ -99,6 +100,12 @@ void VulkanProgram::add_spirv_stages(const SpirVModule &mod, const map(this)->specialized_spirv) + spirv->set_debug_name(debug_name); +#endif } void VulkanProgram::finalize_uniforms() @@ -118,10 +125,10 @@ void VulkanProgram::finalize_uniforms() { bindings.emplace_back(); VkDescriptorSetLayoutBinding &binding = bindings.back(); - binding.binding = b.bind_point; + binding.binding = b.bind_point&0xFFFFF; binding.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; binding.descriptorCount = 1; - binding.stageFlags = VK_SHADER_STAGE_ALL; + binding.stageFlags = stage_flags; binding.pImmutableSamplers = 0; } @@ -130,10 +137,10 @@ void VulkanProgram::finalize_uniforms() { bindings.emplace_back(); VkDescriptorSetLayoutBinding &binding = bindings.back(); - binding.binding = u.binding; + binding.binding = u.binding&0xFFFFF; binding.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; binding.descriptorCount = 1; - binding.stageFlags = VK_SHADER_STAGE_ALL; + binding.stageFlags = stage_flags; binding.pImmutableSamplers = 0; } @@ -158,6 +165,48 @@ void VulkanProgram::finalize_uniforms() layout_info.pPushConstantRanges = &push_const_range; vk.CreatePipelineLayout(layout_info, layout_handle); + +#if DEBUG + if(!debug_name.empty()) + set_vulkan_object_name(); +#endif +} + +void VulkanProgram::set_debug_name(const string &name) +{ +#ifdef DEBUG + debug_name = name; + set_vulkan_object_name(); + if(SpirVModule *spirv = static_cast(this)->specialized_spirv) + spirv->set_debug_name(debug_name); +#else + (void)name; +#endif +} + +void VulkanProgram::set_vulkan_object_name() const +{ +#ifdef DEBUG + const VulkanFunctions &vk = device.get_functions(); + + string layout_name = debug_name+" [layout]"; + + VkDebugUtilsObjectNameInfoEXT name_info = { }; + name_info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; + name_info.objectType = VK_OBJECT_TYPE_PIPELINE_LAYOUT; + name_info.objectHandle = reinterpret_cast(layout_handle); + name_info.pObjectName = layout_name.c_str(); + vk.SetDebugUtilsObjectName(name_info); + + name_info.objectType = VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT; + for(unsigned i=0; i(desc_set_layout_handles[i]); + name_info.pObjectName = layout_name.c_str(); + vk.SetDebugUtilsObjectName(name_info); + } +#endif } } // namespace GL