Module: Mesa
Branch: master
Commit: 0b8991c0b609831cdcb255cc5e9c516657dc8703
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0b8991c0b609831cdcb255cc5e9c516657dc8703

Author: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl>
Date:   Tue Jan  9 03:35:53 2018 +0100

radv: Implement VK_EXT_debug_report.

This is not hooked up to any messages yet, but useful for e.g.
renderdoc if you add some messages during development.

Reviewed-by: Dave Airlie <airl...@redhat.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>

---

 src/amd/vulkan/radv_device.c      | 46 +++++++++++++++++++++++++++++++++++++++
 src/amd/vulkan/radv_extensions.py |  1 +
 src/amd/vulkan/radv_private.h     |  3 +++
 3 files changed, 50 insertions(+)

diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 55ffebb20a..1d838afa3e 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -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);
+}
diff --git a/src/amd/vulkan/radv_extensions.py 
b/src/amd/vulkan/radv_extensions.py
index 9980cfc398..f11540a5c9 100644
--- a/src/amd/vulkan/radv_extensions.py
+++ b/src/amd/vulkan/radv_extensions.py
@@ -81,6 +81,7 @@ EXTENSIONS = [
     Extension('VK_KHR_xcb_surface',                       6, 
'VK_USE_PLATFORM_XCB_KHR'),
     Extension('VK_KHR_xlib_surface',                      6, 
'VK_USE_PLATFORM_XLIB_KHR'),
     Extension('VK_KHX_multiview',                         1, True),
+    Extension('VK_EXT_debug_report',                      9, True),
     Extension('VK_EXT_discard_rectangles',                1, True),
     Extension('VK_EXT_external_memory_dma_buf',           1, True),
     Extension('VK_EXT_global_priority',                   1, 
'device->rad_info.has_ctx_priority'),
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index c39358951d..d51a669b38 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -49,6 +49,7 @@
 #include "util/list.h"
 #include "main/macros.h"
 #include "vk_alloc.h"
+#include "vk_debug_report.h"
 
 #include "radv_radeon_winsys.h"
 #include "ac_binary.h"
@@ -296,6 +297,8 @@ struct radv_instance {
 
        uint64_t debug_flags;
        uint64_t perftest_flags;
+
+       struct vk_debug_report_instance             debug_report_callbacks;
 };
 
 VkResult radv_init_wsi(struct radv_physical_device *physical_device);

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to