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

Author: Jason Ekstrand <[email protected]>
Date:   Thu Sep 23 11:14:36 2021 -0500

vulkan: Add the pCreateInfo to vk_queue_init()

Reviewed-by: Lionel Landwerlin <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13003>

---

 src/amd/vulkan/radv_device.c                | 13 ++++++-------
 src/broadcom/vulkan/v3dv_device.c           | 10 +++++++---
 src/freedreno/vulkan/tu_device.c            | 13 ++++++-------
 src/gallium/frontends/lavapipe/lvp_device.c | 12 +++++++++---
 src/intel/vulkan/anv_device.c               |  2 +-
 src/intel/vulkan/anv_private.h              |  3 ++-
 src/intel/vulkan/anv_queue.c                |  6 ++++--
 src/panfrost/vulkan/panvk_device.c          | 13 ++++++-------
 src/vulkan/util/vk_queue.c                  | 10 +++++++++-
 src/vulkan/util/vk_queue.h                  | 13 ++++++++++++-
 10 files changed, 62 insertions(+), 33 deletions(-)

diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index f62379ba762..e3a2b48cdbe 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -2503,18 +2503,18 @@ radv_get_queue_global_priority(const 
VkDeviceQueueGlobalPriorityCreateInfoEXT *p
 }
 
 static int
-radv_queue_init(struct radv_device *device, struct radv_queue *queue, uint32_t 
queue_family_index,
-                int idx, VkDeviceQueueCreateFlags flags,
+radv_queue_init(struct radv_device *device, struct radv_queue *queue,
+                int idx, const VkDeviceQueueCreateInfo *create_info,
                 const VkDeviceQueueGlobalPriorityCreateInfoEXT 
*global_priority)
 {
    queue->device = device;
-   queue->queue_family_index = queue_family_index;
+   queue->queue_family_index = create_info->queueFamilyIndex;
    queue->queue_idx = idx;
    queue->priority = radv_get_queue_global_priority(global_priority);
-   queue->flags = flags;
+   queue->flags = create_info->flags;
    queue->hw_ctx = device->hw_ctx[queue->priority];
 
-   VkResult result = vk_queue_init(&queue->vk, &device->vk);
+   VkResult result = vk_queue_init(&queue->vk, &device->vk, create_info, idx);
    if (result != VK_SUCCESS)
       return result;
 
@@ -2931,8 +2931,7 @@ radv_CreateDevice(VkPhysicalDevice physicalDevice, const 
VkDeviceCreateInfo *pCr
       device->queue_count[qfi] = queue_create->queueCount;
 
       for (unsigned q = 0; q < queue_create->queueCount; q++) {
-         result = radv_queue_init(device, &device->queues[qfi][q], qfi, q, 
queue_create->flags,
-                                  global_priority);
+         result = radv_queue_init(device, &device->queues[qfi][q], q, 
queue_create, global_priority);
          if (result != VK_SUCCESS)
             goto fail;
       }
diff --git a/src/broadcom/vulkan/v3dv_device.c 
b/src/broadcom/vulkan/v3dv_device.c
index 0d104ec3674..4d990d4a4a6 100644
--- a/src/broadcom/vulkan/v3dv_device.c
+++ b/src/broadcom/vulkan/v3dv_device.c
@@ -1676,9 +1676,12 @@ v3dv_EnumerateDeviceLayerProperties(VkPhysicalDevice 
physicalDevice,
 }
 
 static VkResult
-queue_init(struct v3dv_device *device, struct v3dv_queue *queue)
+queue_init(struct v3dv_device *device, struct v3dv_queue *queue,
+           const VkDeviceQueueCreateInfo *create_info,
+           uint32_t index_in_family)
 {
-   VkResult result = vk_queue_init(&queue->vk, &device->vk);
+   VkResult result = vk_queue_init(&queue->vk, &device->vk, create_info,
+                                   index_in_family);
    if (result != VK_SUCCESS)
       return result;
    queue->device = device;
@@ -1778,7 +1781,8 @@ v3dv_CreateDevice(VkPhysicalDevice physicalDevice,
 
    pthread_mutex_init(&device->mutex, NULL);
 
-   result = queue_init(device, &device->queue);
+   result = queue_init(device, &device->queue,
+                       pCreateInfo->pQueueCreateInfos, 0);
    if (result != VK_SUCCESS)
       goto fail;
 
diff --git a/src/freedreno/vulkan/tu_device.c b/src/freedreno/vulkan/tu_device.c
index 5710dc43989..ba6b65f9f84 100644
--- a/src/freedreno/vulkan/tu_device.c
+++ b/src/freedreno/vulkan/tu_device.c
@@ -1169,18 +1169,17 @@ tu_GetPhysicalDeviceMemoryProperties2(VkPhysicalDevice 
pdev,
 static VkResult
 tu_queue_init(struct tu_device *device,
               struct tu_queue *queue,
-              uint32_t queue_family_index,
               int idx,
-              VkDeviceQueueCreateFlags flags)
+              const VkDeviceQueueCreateInfo *create_info)
 {
-   VkResult result = vk_queue_init(&queue->vk, &device->vk);
+   VkResult result = vk_queue_init(&queue->vk, &device->vk, create_info, idx);
    if (result != VK_SUCCESS)
       return result;
 
    queue->device = device;
-   queue->queue_family_index = queue_family_index;
+   queue->queue_family_index = create_info->queueFamilyIndex;
    queue->queue_idx = idx;
-   queue->flags = flags;
+   queue->flags = create_info->flags;
 
    list_inithead(&queue->queued_submits);
 
@@ -1463,8 +1462,8 @@ tu_CreateDevice(VkPhysicalDevice physicalDevice,
       device->queue_count[qfi] = queue_create->queueCount;
 
       for (unsigned q = 0; q < queue_create->queueCount; q++) {
-         result = tu_queue_init(device, &device->queues[qfi][q], qfi, q,
-                                queue_create->flags);
+         result = tu_queue_init(device, &device->queues[qfi][q], q,
+                                queue_create);
          if (result != VK_SUCCESS)
             goto fail_queues;
       }
diff --git a/src/gallium/frontends/lavapipe/lvp_device.c 
b/src/gallium/frontends/lavapipe/lvp_device.c
index e9c9bee6ff3..d2b12296db9 100644
--- a/src/gallium/frontends/lavapipe/lvp_device.c
+++ b/src/gallium/frontends/lavapipe/lvp_device.c
@@ -1356,9 +1356,12 @@ queue_thread(void *data, void *gdata, int thread_index)
 }
 
 static VkResult
-lvp_queue_init(struct lvp_device *device, struct lvp_queue *queue)
+lvp_queue_init(struct lvp_device *device, struct lvp_queue *queue,
+               const VkDeviceQueueCreateInfo *create_info,
+               uint32_t index_in_family)
 {
-   VkResult result = vk_queue_init(&queue->vk, &device->vk);
+   VkResult result = vk_queue_init(&queue->vk, &device->vk, create_info,
+                                   index_in_family);
    if (result != VK_SUCCESS)
       return result;
 
@@ -1438,7 +1441,10 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateDevice(
 
    device->pscreen = physical_device->pscreen;
 
-   lvp_queue_init(device, &device->queue);
+   assert(pCreateInfo->queueCreateInfoCount == 1);
+   assert(pCreateInfo->pQueueCreateInfos[0].queueFamilyIndex == 0);
+   assert(pCreateInfo->pQueueCreateInfos[0].queueCount == 1);
+   lvp_queue_init(device, &device->queue, pCreateInfo->pQueueCreateInfos, 0);
 
    *pDevice = lvp_device_to_handle(device);
 
diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index 4080930a057..cf7082edc63 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -3033,7 +3033,7 @@ VkResult anv_CreateDevice(
                                device->queue_count : I915_EXEC_RENDER;
 
          result = anv_queue_init(device, &device->queues[device->queue_count],
-                                 exec_flags, queueCreateInfo);
+                                 exec_flags, queueCreateInfo, j);
          if (result != VK_SUCCESS)
             goto fail_queues;
 
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index 88f7aaab057..a60427e22db 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -1446,7 +1446,8 @@ VkResult anv_device_wait(struct anv_device *device, 
struct anv_bo *bo,
 
 VkResult anv_queue_init(struct anv_device *device, struct anv_queue *queue,
                         uint32_t exec_flags,
-                        const VkDeviceQueueCreateInfo *pCreateInfo);
+                        const VkDeviceQueueCreateInfo *pCreateInfo,
+                        uint32_t index_in_family);
 void anv_queue_finish(struct anv_queue *queue);
 
 VkResult anv_queue_execbuf_locked(struct anv_queue *queue, struct 
anv_queue_submit *submit);
diff --git a/src/intel/vulkan/anv_queue.c b/src/intel/vulkan/anv_queue.c
index cef9f314f96..aa1a511fc0d 100644
--- a/src/intel/vulkan/anv_queue.c
+++ b/src/intel/vulkan/anv_queue.c
@@ -473,12 +473,14 @@ anv_queue_submit_post(struct anv_queue *queue,
 VkResult
 anv_queue_init(struct anv_device *device, struct anv_queue *queue,
                uint32_t exec_flags,
-               const VkDeviceQueueCreateInfo *pCreateInfo)
+               const VkDeviceQueueCreateInfo *pCreateInfo,
+               uint32_t index_in_family)
 {
    struct anv_physical_device *pdevice = device->physical;
    VkResult result;
 
-   result = vk_queue_init(&queue->vk, &device->vk);
+   result = vk_queue_init(&queue->vk, &device->vk, pCreateInfo,
+                          index_in_family);
    if (result != VK_SUCCESS)
       return result;
 
diff --git a/src/panfrost/vulkan/panvk_device.c 
b/src/panfrost/vulkan/panvk_device.c
index 0cb1127220e..1488bab40dc 100644
--- a/src/panfrost/vulkan/panvk_device.c
+++ b/src/panfrost/vulkan/panvk_device.c
@@ -908,18 +908,17 @@ panvk_GetPhysicalDeviceMemoryProperties2(VkPhysicalDevice 
physicalDevice,
 static VkResult
 panvk_queue_init(struct panvk_device *device,
                  struct panvk_queue *queue,
-                 uint32_t queue_family_index,
                  int idx,
-                 VkDeviceQueueCreateFlags flags)
+                 const VkDeviceQueueCreateInfo *create_info)
 {
    const struct panfrost_device *pdev = &device->physical_device->pdev;
 
-   VkResult result = vk_queue_init(&queue->vk, &device->vk);
+   VkResult result = vk_queue_init(&queue->vk, &device->vk, create_info, idx);
    if (result != VK_SUCCESS)
       return result;
    queue->device = device;
-   queue->queue_family_index = queue_family_index;
-   queue->flags = flags;
+   queue->queue_family_index = create_info->queueFamilyIndex;
+   queue->flags = create_info->flags;
 
    struct drm_syncobj_create create = {
       .flags = DRM_SYNCOBJ_CREATE_SIGNALED,
@@ -1025,8 +1024,8 @@ panvk_CreateDevice(VkPhysicalDevice physicalDevice,
       device->queue_count[qfi] = queue_create->queueCount;
 
       for (unsigned q = 0; q < queue_create->queueCount; q++) {
-         result = panvk_queue_init(device, &device->queues[qfi][q], qfi, q,
-                                   queue_create->flags);
+         result = panvk_queue_init(device, &device->queues[qfi][q], q,
+                                   queue_create);
          if (result != VK_SUCCESS)
             goto fail;
       }
diff --git a/src/vulkan/util/vk_queue.c b/src/vulkan/util/vk_queue.c
index 1ed48155584..aa4eb3f838f 100644
--- a/src/vulkan/util/vk_queue.c
+++ b/src/vulkan/util/vk_queue.c
@@ -24,11 +24,19 @@
 #include "vk_queue.h"
 
 VkResult
-vk_queue_init(struct vk_queue *queue, struct vk_device *device)
+vk_queue_init(struct vk_queue *queue, struct vk_device *device,
+              const VkDeviceQueueCreateInfo *pCreateInfo,
+              uint32_t index_in_family)
 {
    memset(queue, 0, sizeof(*queue));
    vk_object_base_init(device, &queue->base, VK_OBJECT_TYPE_QUEUE);
 
+   queue->flags = pCreateInfo->flags;
+   queue->queue_family_index = pCreateInfo->queueFamilyIndex;
+
+   assert(index_in_family < pCreateInfo->queueCount);
+   queue->index_in_family = index_in_family;
+
    util_dynarray_init(&queue->labels, NULL);
    queue->region_begin = true;
 
diff --git a/src/vulkan/util/vk_queue.h b/src/vulkan/util/vk_queue.h
index 14d7f0f2fd8..2f808024c8f 100644
--- a/src/vulkan/util/vk_queue.h
+++ b/src/vulkan/util/vk_queue.h
@@ -34,6 +34,15 @@ extern "C" {
 struct vk_queue {
    struct vk_object_base base;
 
+   /* VkDeviceQueueCreateInfo::flags */
+   VkDeviceQueueCreateFlags flags;
+
+   /* VkDeviceQueueCreateInfo::queueFamilyIndex */
+   uint32_t queue_family_index;
+
+   /* Which queue this is within the queue family */
+   uint32_t index_in_family;
+
    /**
     * VK_EXT_debug_utils
     *
@@ -78,7 +87,9 @@ struct vk_queue {
 VK_DEFINE_HANDLE_CASTS(vk_queue, base, VkQueue, VK_OBJECT_TYPE_QUEUE)
 
 VkResult MUST_CHECK
-vk_queue_init(struct vk_queue *queue, struct vk_device *device);
+vk_queue_init(struct vk_queue *queue, struct vk_device *device,
+              const VkDeviceQueueCreateInfo *pCreateInfo,
+              uint32_t index_in_family);
 
 void
 vk_queue_finish(struct vk_queue *queue);

Reply via email to