module_info.pCode = code.data();
vk.CreateShaderModule(module_info, handle);
+
+ if(!debug_name.empty())
+ set_vulkan_object_name();
+}
+
+void VulkanSpirVModule::set_debug_name(const string &name)
+{
+#ifdef DEBUG
+ debug_name = name;
+ if(handle)
+ set_vulkan_object_name();
+#else
+ (void)name;
+#endif
+}
+
+void VulkanSpirVModule::set_vulkan_object_name() const
+{
+#ifdef DEBUG
+ const VulkanFunctions &vk = device.get_functions();
+
+ VkDebugUtilsObjectNameInfoEXT name_info = { };
+ name_info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT;
+ name_info.objectType = VK_OBJECT_TYPE_SHADER_MODULE;
+ name_info.objectHandle = reinterpret_cast<uint64_t>(handle);
+ name_info.pObjectName = debug_name.c_str();
+ vk.SetDebugUtilsObjectName(name_info);
+#endif
}
case SpirVModule::VERTEX: return VK_SHADER_STAGE_VERTEX_BIT;
case SpirVModule::GEOMETRY: return VK_SHADER_STAGE_GEOMETRY_BIT;
case SpirVModule::FRAGMENT: return VK_SHADER_STAGE_FRAGMENT_BIT;
+ case SpirVModule::COMPUTE: return VK_SHADER_STAGE_COMPUTE_BIT;
default: throw invalid_argument("get_vulkan_stage");
}
}