From 7ae2cc7f0a6419ba96e3ce451f12c5eeafc03f62 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Mon, 14 Oct 2024 10:33:52 -0500 Subject: [PATCH] nvk: Add an nvkmd_engines bitfield to nvk_queue Part-of: --- src/nouveau/vulkan/nvk_queue.c | 33 ++++++++++++++++----------------- src/nouveau/vulkan/nvk_queue.h | 6 +++--- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/nouveau/vulkan/nvk_queue.c b/src/nouveau/vulkan/nvk_queue.c index eebc5b754f6..e072b27b258 100644 --- a/src/nouveau/vulkan/nvk_queue.c +++ b/src/nouveau/vulkan/nvk_queue.c @@ -52,10 +52,11 @@ nvk_queue_state_dump_push(struct nvk_device *dev, vk_push_print(fp, &push, &pdev->info); } -VkResult -nvk_queue_state_update(struct nvk_device *dev, +static VkResult +nvk_queue_state_update(struct nvk_queue *queue, struct nvk_queue_state *qs) { + struct nvk_device *dev = nvk_queue_device(queue); struct nvk_physical_device *pdev = nvk_device_physical(dev); struct nvkmd_mem *mem; uint32_t alloc_count, bytes_per_warp, bytes_per_tpc; @@ -377,7 +378,6 @@ nvk_queue_submit(struct vk_queue *vk_queue, struct vk_queue_submit *submit) { struct nvk_queue *queue = container_of(vk_queue, struct nvk_queue, vk); - struct nvk_device *dev = nvk_queue_device(queue); VkResult result; if (vk_queue_is_lost(&queue->vk)) @@ -391,7 +391,7 @@ nvk_queue_submit(struct vk_queue *vk_queue, if (result != VK_SUCCESS) return vk_queue_set_lost(&queue->vk, "Bind operation failed"); } else { - result = nvk_queue_state_update(dev, &queue->state); + result = nvk_queue_state_update(queue, &queue->state); if (result != VK_SUCCESS) { return vk_queue_set_lost(&queue->vk, "Failed to update queue base " "pointers pushbuf"); @@ -453,8 +453,7 @@ nvk_queue_submit_simple(struct nvk_queue *queue, } static VkResult -nvk_queue_init_context_state(struct nvk_queue *queue, - enum nvkmd_engines engines) +nvk_queue_init_context_state(struct nvk_queue *queue) { struct nvk_device *dev = nvk_queue_device(queue); struct nvk_physical_device *pdev = nvk_device_physical(dev); @@ -477,13 +476,13 @@ nvk_queue_init_context_state(struct nvk_queue *queue, }); } - if (engines & NVKMD_ENGINE_3D) { + if (queue->engines & NVKMD_ENGINE_3D) { result = nvk_push_draw_state_init(queue, p); if (result != VK_SUCCESS) return result; } - if (engines & NVKMD_ENGINE_COMPUTE) { + if (queue->engines & NVKMD_ENGINE_COMPUTE) { result = nvk_push_dispatch_state_init(queue, p); if (result != VK_SUCCESS) return result; @@ -510,23 +509,23 @@ nvk_queue_init(struct nvk_device *dev, struct nvk_queue *queue, nvk_queue_state_init(&queue->state); - enum nvkmd_engines engines = 0; + queue->engines = 0; if (queue_family->queue_flags & VK_QUEUE_GRAPHICS_BIT) { - engines |= NVKMD_ENGINE_3D; + queue->engines |= NVKMD_ENGINE_3D; /* We rely on compute shaders for queries */ - engines |= NVKMD_ENGINE_COMPUTE; + queue->engines |= NVKMD_ENGINE_COMPUTE; } if (queue_family->queue_flags & VK_QUEUE_COMPUTE_BIT) { - engines |= NVKMD_ENGINE_COMPUTE; + queue->engines |= NVKMD_ENGINE_COMPUTE; /* We currently rely on 3D engine MMEs for indirect dispatch */ - engines |= NVKMD_ENGINE_3D; + queue->engines |= NVKMD_ENGINE_3D; } if (queue_family->queue_flags & VK_QUEUE_TRANSFER_BIT) - engines |= NVKMD_ENGINE_COPY; + queue->engines |= NVKMD_ENGINE_COPY; - if (engines) { + if (queue->engines) { result = nvkmd_dev_create_ctx(dev->nvkmd, &dev->vk.base, - engines, &queue->exec_ctx); + queue->engines, &queue->exec_ctx); if (result != VK_SUCCESS) goto fail_init; @@ -550,7 +549,7 @@ nvk_queue_init(struct nvk_device *dev, struct nvk_queue *queue, goto fail_draw_cb0; } - result = nvk_queue_init_context_state(queue, engines); + result = nvk_queue_init_context_state(queue); if (result != VK_SUCCESS) goto fail_bind_ctx; diff --git a/src/nouveau/vulkan/nvk_queue.h b/src/nouveau/vulkan/nvk_queue.h index 0d669dcf4e0..c39e06a8f7d 100644 --- a/src/nouveau/vulkan/nvk_queue.h +++ b/src/nouveau/vulkan/nvk_queue.h @@ -8,6 +8,7 @@ #include "nvk_private.h" #include "vk_queue.h" +#include "nvkmd/nvkmd.h" struct nouveau_ws_bo; struct nouveau_ws_context; @@ -40,12 +41,11 @@ struct nvk_queue_state { } push; }; -VkResult nvk_queue_state_update(struct nvk_device *dev, - struct nvk_queue_state *qs); - struct nvk_queue { struct vk_queue vk; + enum nvkmd_engines engines; + struct nvkmd_ctx *bind_ctx; struct nvkmd_ctx *exec_ctx;