radv: use device entrypoints from the SQTT layer if enabled
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 26 Feb 2020 12:59:05 +0000 (13:59 +0100)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Tue, 10 Mar 2020 08:57:53 +0000 (09:57 +0100)
This allows to override RADV device entrypoints if the prefix
is 'sqtt' instead of 'radv'.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4031>

src/amd/vulkan/radv_device.c

index c55e219e6c84bc66879ea7774cc0737ad4a67330..1391456e8df2c44b612e6e5fa4c4cbe13c906901 100644 (file)
@@ -2846,7 +2846,14 @@ static void
 radv_device_init_dispatch(struct radv_device *device)
 {
        const struct radv_instance *instance = device->physical_device->instance;
+       const struct radv_device_dispatch_table *dispatch_table_layer = NULL;
        bool unchecked = instance->debug_flags & RADV_DEBUG_ALL_ENTRYPOINTS;
+       int radv_thread_trace = radv_get_int_debug_option("RADV_THREAD_TRACE", -1);
+
+       if (radv_thread_trace >= 0) {
+               /* Use device entrypoints from the SQTT layer if enabled. */
+               dispatch_table_layer = &sqtt_device_dispatch_table;
+       }
 
        for (unsigned i = 0; i < ARRAY_SIZE(device->dispatch.entrypoints); i++) {
                /* Vulkan requires that entrypoints for extensions which have not been
@@ -2857,6 +2864,10 @@ radv_device_init_dispatch(struct radv_device *device)
                                                       &instance->enabled_extensions,
                                                       &device->enabled_extensions)) {
                        device->dispatch.entrypoints[i] = NULL;
+               } else if (dispatch_table_layer &&
+                          dispatch_table_layer->entrypoints[i]) {
+                       device->dispatch.entrypoints[i] =
+                               dispatch_table_layer->entrypoints[i];
                } else {
                        device->dispatch.entrypoints[i] =
                                radv_device_dispatch_table.entrypoints[i];