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);
