]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/vulkan/module_backend.cpp
Support compute shaders and compute operations
[libs/gl.git] / source / backends / vulkan / module_backend.cpp
index 759497ab6ed1fb9252a21abfe8c30c7ce271cf25..492de9a6311ac9ac5d00207724fba93b1c47d32e 100644 (file)
@@ -39,6 +39,34 @@ void VulkanSpirVModule::create()
        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
 }
 
 
@@ -49,6 +77,7 @@ unsigned get_vulkan_stage(unsigned stage)
        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");
        }
 }