From c815ff16615739017e011f9d1de71d88ed1e3803 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Wed, 2 Nov 2022 16:54:33 +1000 Subject: [PATCH] nvk: always sync internal cmd bufs for vma lifetimes. We always sync on the internal push buf submissions for zero vram and ctx setup, these shouldn't be bottlenecks. Reviewed-by: Faith Ekstrand Part-of: --- src/nouveau/vulkan/nvk_cmd_draw.c | 2 +- src/nouveau/vulkan/nvk_device_memory.c | 2 +- src/nouveau/vulkan/nvk_heap.c | 3 +-- src/nouveau/vulkan/nvk_queue.c | 9 +++------ src/nouveau/vulkan/nvk_queue.h | 7 +++---- src/nouveau/vulkan/nvk_queue_drm_nouveau.c | 5 ++--- 6 files changed, 11 insertions(+), 17 deletions(-) diff --git a/src/nouveau/vulkan/nvk_cmd_draw.c b/src/nouveau/vulkan/nvk_cmd_draw.c index 209b0484871..b130fd20a33 100644 --- a/src/nouveau/vulkan/nvk_cmd_draw.c +++ b/src/nouveau/vulkan/nvk_cmd_draw.c @@ -427,7 +427,7 @@ nvk_queue_init_context_draw_state(struct nvk_queue *queue) P_IMMD(p, NVB0C0, SET_SELECT_MAXWELL_TEXTURE_HEADERS, V_TRUE); return nvk_queue_submit_simple(queue, nv_push_dw_count(&push), push_data, - 0, NULL, false /* sync */); + 0, NULL); } void diff --git a/src/nouveau/vulkan/nvk_device_memory.c b/src/nouveau/vulkan/nvk_device_memory.c index 0f29d132b29..8863040aebb 100644 --- a/src/nouveau/vulkan/nvk_device_memory.c +++ b/src/nouveau/vulkan/nvk_device_memory.c @@ -89,7 +89,7 @@ zero_vram(struct nvk_device *dev, struct nouveau_ws_bo *bo) P_NV902D_RENDER_SOLID_PRIM_POINT_Y(p, 1, height); return nvk_queue_submit_simple(&dev->queue, nv_push_dw_count(&push), - push_data, 1, &bo, false /* sync */); + push_data, 1, &bo); } static enum nouveau_ws_bo_flags diff --git a/src/nouveau/vulkan/nvk_heap.c b/src/nouveau/vulkan/nvk_heap.c index 762064e16c0..79c586e36a8 100644 --- a/src/nouveau/vulkan/nvk_heap.c +++ b/src/nouveau/vulkan/nvk_heap.c @@ -131,8 +131,7 @@ nvk_heap_grow_locked(struct nvk_device *dev, struct nvk_heap *heap) struct nouveau_ws_bo *push_bos[] = { new_bo, old_bo, }; result = nvk_queue_submit_simple(&dev->queue, nv_push_dw_count(&push), push_dw, - ARRAY_SIZE(push_bos), push_bos, - true /* sync */); + ARRAY_SIZE(push_bos), push_bos); if (result != VK_SUCCESS) { nouveau_ws_bo_unmap(new_bo, new_bo_map); nouveau_ws_bo_destroy(new_bo); diff --git a/src/nouveau/vulkan/nvk_queue.c b/src/nouveau/vulkan/nvk_queue.c index 60b6fd0abe1..d6eb74a3f31 100644 --- a/src/nouveau/vulkan/nvk_queue.c +++ b/src/nouveau/vulkan/nvk_queue.c @@ -365,8 +365,7 @@ VkResult nvk_queue_submit_simple(struct nvk_queue *queue, uint32_t dw_count, const uint32_t *dw, uint32_t extra_bo_count, - struct nouveau_ws_bo **extra_bos, - bool sync) + struct nouveau_ws_bo **extra_bos) { struct nvk_device *dev = nvk_queue_device(queue); struct nouveau_ws_bo *push_bo; @@ -384,12 +383,10 @@ nvk_queue_submit_simple(struct nvk_queue *queue, memcpy(push_map, dw, dw_count * 4); - const bool debug_sync = dev->ws_dev->debug_flags & NVK_DEBUG_PUSH_SYNC; - result = nvk_queue_submit_simple_drm_nouveau(queue, dw_count, push_bo, - extra_bo_count, extra_bos, - sync || debug_sync); + extra_bo_count, extra_bos); + const bool debug_sync = dev->ws_dev->debug_flags & NVK_DEBUG_PUSH_SYNC; if ((debug_sync && result != VK_SUCCESS) || (dev->ws_dev->debug_flags & NVK_DEBUG_PUSH_DUMP)) { struct nv_push push = { diff --git a/src/nouveau/vulkan/nvk_queue.h b/src/nouveau/vulkan/nvk_queue.h index 25e20591636..21a1726348d 100644 --- a/src/nouveau/vulkan/nvk_queue.h +++ b/src/nouveau/vulkan/nvk_queue.h @@ -63,18 +63,17 @@ void nvk_queue_finish(struct nvk_device *dev, struct nvk_queue *queue); VkResult nvk_queue_init_context_draw_state(struct nvk_queue *queue); +/* this always syncs, so only use when that doesn't matter */ VkResult nvk_queue_submit_simple(struct nvk_queue *queue, uint32_t dw_count, const uint32_t *dw, uint32_t extra_bo_count, - struct nouveau_ws_bo **extra_bos, - bool sync); + struct nouveau_ws_bo **extra_bos); VkResult nvk_queue_submit_simple_drm_nouveau(struct nvk_queue *queue, uint32_t push_dw_count, struct nouveau_ws_bo *push_bo, uint32_t extra_bo_count, - struct nouveau_ws_bo **extra_bos, - bool sync); + struct nouveau_ws_bo **extra_bos); VkResult nvk_queue_submit_drm_nouveau(struct nvk_queue *queue, struct vk_queue_submit *submit, diff --git a/src/nouveau/vulkan/nvk_queue_drm_nouveau.c b/src/nouveau/vulkan/nvk_queue_drm_nouveau.c index 619e2723fd4..44ca437fc1f 100644 --- a/src/nouveau/vulkan/nvk_queue_drm_nouveau.c +++ b/src/nouveau/vulkan/nvk_queue_drm_nouveau.c @@ -118,8 +118,7 @@ nvk_queue_submit_simple_drm_nouveau(struct nvk_queue *queue, uint32_t push_dw_count, struct nouveau_ws_bo *push_bo, uint32_t extra_bo_count, - struct nouveau_ws_bo **extra_bos, - bool sync) + struct nouveau_ws_bo **extra_bos) { struct nvk_device *dev = nvk_queue_device(queue); @@ -130,7 +129,7 @@ nvk_queue_submit_simple_drm_nouveau(struct nvk_queue *queue, for (uint32_t i = 0; i < extra_bo_count; i++) push_add_bo(&pb, extra_bos[i], NOUVEAU_WS_BO_RDWR); - return push_submit(&pb, queue, sync); + return push_submit(&pb, queue, true); } static void