radv: add RADV_DEBUG=allentrypoints
authorAndres Rodriguez <andresx7@gmail.com>
Wed, 14 Aug 2019 01:49:52 +0000 (21:49 -0400)
committerAndres Rodriguez <andresx7@gmail.com>
Wed, 21 Aug 2019 17:47:35 +0000 (17:47 +0000)
This debug option allows vkGet[Instance/Device]ProcAddr() to succeed
even if the extension associated with the requested entrypoint was not
enabled.

This has come in handy in a few instances when debugging VR
applications, so I thought it would be good to have a cleaned up version
upstreamed.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
src/amd/vulkan/radv_debug.h
src/amd/vulkan/radv_device.c

index 1a8b9a42c2064ba1146158d743fd06ff8b4e9d48..0e22e1663aa7523769660c8aab4a35608370b633 100644 (file)
@@ -54,6 +54,7 @@ enum {
        RADV_DEBUG_NO_LOAD_STORE_OPT = 0x1000000,
        RADV_DEBUG_NO_NGG            = 0x2000000,
        RADV_DEBUG_NO_SHADER_BALLOT  = 0x4000000,
+       RADV_DEBUG_ALL_ENTRYPOINTS   = 0x8000000,
 };
 
 enum {
index 7f89c27ad3d490dc93dc4aa39e0d28663d7f6d33..2d5b006c1cf361350b4bb9f40e2af1c6ddd9af8a 100644 (file)
@@ -497,6 +497,7 @@ static const struct debug_control radv_debug_options[] = {
        {"noloadstoreopt", RADV_DEBUG_NO_LOAD_STORE_OPT},
        {"nongg", RADV_DEBUG_NO_NGG},
        {"noshaderballot", RADV_DEBUG_NO_SHADER_BALLOT},
+       {"allentrypoints", RADV_DEBUG_ALL_ENTRYPOINTS},
        {NULL, 0}
 };
 
@@ -3271,11 +3272,16 @@ PFN_vkVoidFunction radv_GetInstanceProcAddr(
        const char*                                 pName)
 {
        RADV_FROM_HANDLE(radv_instance, instance, _instance);
+       bool unchecked = instance ? instance->debug_flags & RADV_DEBUG_ALL_ENTRYPOINTS : false;
 
-       return radv_lookup_entrypoint_checked(pName,
-                                             instance ? instance->apiVersion : 0,
-                                             instance ? &instance->enabled_extensions : NULL,
-                                             NULL);
+       if (unchecked) {
+               return radv_lookup_entrypoint_unchecked(pName);
+       } else {
+               return radv_lookup_entrypoint_checked(pName,
+                                                     instance ? instance->apiVersion : 0,
+                                                     instance ? &instance->enabled_extensions : NULL,
+                                                     NULL);
+       }
 }
 
 /* The loader wants us to expose a second GetInstanceProcAddr function
@@ -3316,11 +3322,16 @@ PFN_vkVoidFunction radv_GetDeviceProcAddr(
        const char*                                 pName)
 {
        RADV_FROM_HANDLE(radv_device, device, _device);
+       bool unchecked = device ? device->instance->debug_flags & RADV_DEBUG_ALL_ENTRYPOINTS : false;
 
-       return radv_lookup_entrypoint_checked(pName,
-                                             device->instance->apiVersion,
-                                             &device->instance->enabled_extensions,
-                                             &device->enabled_extensions);
+       if (unchecked) {
+               return radv_lookup_entrypoint_unchecked(pName);
+       } else {
+               return radv_lookup_entrypoint_checked(pName,
+                                                     device->instance->apiVersion,
+                                                     &device->instance->enabled_extensions,
+                                                     &device->enabled_extensions);
+       }
 }
 
 bool radv_get_memory_fd(struct radv_device *device,