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 <airlied@redhat.com> Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
@@ -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'),
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user