radv: Implement VK_EXT_debug_report.
[mesa.git] / src / amd / vulkan / radv_device.c
index 55ffebb20ac2d5dd67f41451fd991ab70dc3a56d..1d838afa3e6f99ffb956a8fbe6f5f4ed9b81be7d 100644 (file)
@@ -385,6 +385,7 @@ VkResult radv_CreateInstance(
        VkInstance*                                 pInstance)
 {
        struct radv_instance *instance;
+       VkResult result;
 
        assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO);
 
@@ -426,6 +427,12 @@ VkResult radv_CreateInstance(
        instance->apiVersion = client_version;
        instance->physicalDeviceCount = -1;
 
+       result = vk_debug_report_instance_init(&instance->debug_report_callbacks);
+       if (result != VK_SUCCESS) {
+               vk_free2(&default_alloc, pAllocator, instance);
+               return vk_error(result);
+       }
+
        _mesa_locale_init();
 
        VG(VALGRIND_CREATE_MEMPOOL(instance, 0, false));
@@ -468,6 +475,8 @@ void radv_DestroyInstance(
 
        _mesa_locale_fini();
 
+       vk_debug_report_instance_destroy(&instance->debug_report_callbacks);
+
        vk_free(&instance->alloc, instance);
 }
 
@@ -3942,3 +3951,40 @@ void radv_GetPhysicalDeviceExternalFencePropertiesKHR(
                pExternalFenceProperties->externalFenceFeatures = 0;
        }
 }
+
+VkResult
+radv_CreateDebugReportCallbackEXT(VkInstance _instance,
+                                 const VkDebugReportCallbackCreateInfoEXT* pCreateInfo,
+                                 const VkAllocationCallbacks* pAllocator,
+                                 VkDebugReportCallbackEXT* pCallback)
+{
+       RADV_FROM_HANDLE(radv_instance, instance, _instance);
+       return vk_create_debug_report_callback(&instance->debug_report_callbacks,
+                                              pCreateInfo, pAllocator, &instance->alloc,
+                                              pCallback);
+}
+
+void
+radv_DestroyDebugReportCallbackEXT(VkInstance _instance,
+                                  VkDebugReportCallbackEXT _callback,
+                                  const VkAllocationCallbacks* pAllocator)
+{
+       RADV_FROM_HANDLE(radv_instance, instance, _instance);
+       vk_destroy_debug_report_callback(&instance->debug_report_callbacks,
+                                        _callback, pAllocator, &instance->alloc);
+}
+
+void
+radv_DebugReportMessageEXT(VkInstance _instance,
+                          VkDebugReportFlagsEXT flags,
+                          VkDebugReportObjectTypeEXT objectType,
+                          uint64_t object,
+                          size_t location,
+                          int32_t messageCode,
+                          const char* pLayerPrefix,
+                          const char* pMessage)
+{
+       RADV_FROM_HANDLE(radv_instance, instance, _instance);
+       vk_debug_report(&instance->debug_report_callbacks, flags, objectType,
+                       object, location, messageCode, pLayerPrefix, pMessage);
+}