Mesa (master): vulkan/overlay: properly register layer object with loader

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Mar 22 11:42:34 UTC 2019


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

Author: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Date:   Sat Mar 16 18:50:40 2019 +0000

vulkan/overlay: properly register layer object with loader

This is required by the validation layers if we want to validate the
commands inserted by the overlay layer.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Reviewed-by: Tapani Pälli <tapani.palli at intel.com>

---

 src/vulkan/overlay-layer/overlay.cpp | 33 ++++++++++++++++++++++++---------
 1 file changed, 24 insertions(+), 9 deletions(-)

diff --git a/src/vulkan/overlay-layer/overlay.cpp b/src/vulkan/overlay-layer/overlay.cpp
index 19a4de27997..2cb9fdc8afa 100644
--- a/src/vulkan/overlay-layer/overlay.cpp
+++ b/src/vulkan/overlay-layer/overlay.cpp
@@ -58,6 +58,8 @@ struct queue_data;
 struct device_data {
    struct instance_data *instance;
 
+   PFN_vkSetDeviceLoaderData set_device_loader_data;
+
    struct vk_device_dispatch_table vtable;
    VkPhysicalDevice physical_device;
    VkDevice device;
@@ -198,6 +200,14 @@ static void unmap_object(void *obj)
 
 /**/
 
+static void check_vk_result(VkResult err)
+{
+   if (err != VK_SUCCESS)
+      printf("ERROR!\n");
+}
+
+/**/
+
 static VkLayerInstanceCreateInfo *get_instance_chain_info(const VkInstanceCreateInfo *pCreateInfo,
                                                           VkLayerFunction func)
 {
@@ -316,6 +326,10 @@ static void device_map_queues(struct device_data *data,
          data->vtable.GetDeviceQueue(data->device,
                                      pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex,
                                      j, &queue);
+
+         VkResult err = data->set_device_loader_data(data->device, queue);
+         check_vk_result(err);
+
          data->queues[queue_index++] =
             new_queue_data(queue, &family_props[pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex],
                            pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex, data);
@@ -337,12 +351,6 @@ static void destroy_device_data(struct device_data *data)
    ralloc_free(data);
 }
 
-static void check_vk_result(VkResult err)
-{
-   if (err != VK_SUCCESS)
-      printf("ERROR!\n");
-}
-
 /**/
 static struct swapchain_data *new_swapchain_data(VkSwapchainKHR swapchain,
                                                  struct device_data *device_data)
@@ -1314,9 +1322,13 @@ static void setup_swapchain_data(struct swapchain_data *data,
                                                     cmd_bufs);
    check_vk_result(err);
 
-   for (uint32_t i = 0; i < ARRAY_SIZE(data->frame_data); i++)
-      data->frame_data[i].command_buffer = cmd_bufs[i];
+   for (uint32_t i = 0; i < ARRAY_SIZE(data->frame_data); i++) {
+      err = device_data->set_device_loader_data(device_data->device,
+                                                cmd_bufs[i]);
+      check_vk_result(err);
 
+      data->frame_data[i].command_buffer = cmd_bufs[i];
+   }
 
    /* Submission fence */
    VkFenceCreateInfo fence_info = {};
@@ -1325,7 +1337,6 @@ static void setup_swapchain_data(struct swapchain_data *data,
    err = device_data->vtable.CreateFence(device_data->device, &fence_info,
                                          NULL, &data->fence);
    check_vk_result(err);
-
 }
 
 static void shutdown_swapchain_data(struct swapchain_data *data)
@@ -1692,6 +1703,10 @@ VKAPI_ATTR VkResult VKAPI_CALL overlay_CreateDevice(
    instance_data->vtable.GetPhysicalDeviceProperties(device_data->physical_device,
                                                      &device_data->properties);
 
+   VkLayerDeviceCreateInfo *load_data_info =
+      get_device_chain_info(pCreateInfo, VK_LOADER_DATA_CALLBACK);
+   device_data->set_device_loader_data = load_data_info->u.pfnSetDeviceLoaderData;
+
    device_map_queues(device_data, pCreateInfo);
 
    return result;




More information about the mesa-commit mailing list