From 29e3b198600e4340e1f74bae7944e9fda01007d9 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Wed, 3 Jul 2024 15:13:53 -0500 Subject: [PATCH] nvk: Use nvkmd_mem for the zero page, VAB, and CB0 Part-of: --- src/nouveau/vulkan/nvk_cmd_draw.c | 6 +++--- src/nouveau/vulkan/nvk_device.c | 32 +++++++++++++++---------------- src/nouveau/vulkan/nvk_device.h | 4 ++-- src/nouveau/vulkan/nvk_queue.c | 19 +++++++++--------- src/nouveau/vulkan/nvk_queue.h | 4 ++-- 5 files changed, 32 insertions(+), 33 deletions(-) diff --git a/src/nouveau/vulkan/nvk_cmd_draw.c b/src/nouveau/vulkan/nvk_cmd_draw.c index 4106270e961..75782d6bd56 100644 --- a/src/nouveau/vulkan/nvk_cmd_draw.c +++ b/src/nouveau/vulkan/nvk_cmd_draw.c @@ -486,7 +486,7 @@ nvk_push_draw_state_init(struct nvk_queue *queue, struct nv_push *p) P_IMMD(p, NV9097, SET_EDGE_FLAG, V_TRUE); P_IMMD(p, NV9097, SET_SAMPLER_BINDING, V_INDEPENDENTLY); - uint64_t zero_addr = dev->zero_page->offset; + uint64_t zero_addr = dev->zero_page->va->addr; P_MTHD(p, NV9097, SET_VERTEX_STREAM_SUBSTITUTE_A); P_NV9097_SET_VERTEX_STREAM_SUBSTITUTE_A(p, zero_addr >> 32); P_NV9097_SET_VERTEX_STREAM_SUBSTITUTE_B(p, zero_addr); @@ -494,7 +494,7 @@ nvk_push_draw_state_init(struct nvk_queue *queue, struct nv_push *p) if (pdev->info.cls_eng3d >= FERMI_A && pdev->info.cls_eng3d < MAXWELL_A) { assert(dev->vab_memory); - uint64_t vab_addr = dev->vab_memory->offset; + uint64_t vab_addr = dev->vab_memory->va->addr; P_MTHD(p, NV9097, SET_VAB_MEMORY_AREA_A); P_NV9097_SET_VAB_MEMORY_AREA_A(p, vab_addr >> 32); P_NV9097_SET_VAB_MEMORY_AREA_B(p, vab_addr); @@ -505,7 +505,7 @@ nvk_push_draw_state_init(struct nvk_queue *queue, struct nv_push *p) P_IMMD(p, NVB097, SET_SELECT_MAXWELL_TEXTURE_HEADERS, V_TRUE); /* Store the address to CB0 in a pair of state registers */ - uint64_t cb0_addr = queue->draw_cb0->offset; + uint64_t cb0_addr = queue->draw_cb0->va->addr; P_MTHD(p, NV9097, SET_MME_SHADOW_SCRATCH(NVK_MME_SCRATCH_CB0_ADDR_HI)); P_NV9097_SET_MME_SHADOW_SCRATCH(p, NVK_MME_SCRATCH_CB0_ADDR_HI, cb0_addr >> 32); P_NV9097_SET_MME_SHADOW_SCRATCH(p, NVK_MME_SCRATCH_CB0_ADDR_LO, cb0_addr); diff --git a/src/nouveau/vulkan/nvk_device.c b/src/nouveau/vulkan/nvk_device.c index cdb14e01587..45b7918d881 100644 --- a/src/nouveau/vulkan/nvk_device.c +++ b/src/nouveau/vulkan/nvk_device.c @@ -214,24 +214,24 @@ nvk_CreateDevice(VkPhysicalDevice physicalDevice, nvk_slm_area_init(&dev->slm); - void *zero_map; - dev->zero_page = nouveau_ws_bo_new_mapped(dev->ws_dev, 0x1000, 0, - NOUVEAU_WS_BO_LOCAL | - NOUVEAU_WS_BO_NO_SHARE, - NOUVEAU_WS_BO_WR, &zero_map); - if (dev->zero_page == NULL) + result = nvkmd_dev_alloc_mapped_mem(dev->nvkmd, &pdev->vk.base, + 0x1000, 0, + NVKMD_MEM_LOCAL | NVKMD_MEM_NO_SHARE, + NVKMD_MEM_MAP_WR, &dev->zero_page); + if (result != VK_SUCCESS) goto fail_slm; - memset(zero_map, 0, 0x1000); - nouveau_ws_bo_unmap(dev->zero_page, zero_map); + memset(dev->zero_page->map, 0, 0x1000); + nvkmd_mem_unmap(dev->zero_page); if (pdev->info.cls_eng3d >= FERMI_A && pdev->info.cls_eng3d < MAXWELL_A) { /* max size is 256k */ - dev->vab_memory = nouveau_ws_bo_new(dev->ws_dev, 1 << 17, 1 << 20, - NOUVEAU_WS_BO_LOCAL | - NOUVEAU_WS_BO_NO_SHARE); - if (dev->vab_memory == NULL) + result = nvkmd_dev_alloc_mem(dev->nvkmd, &pdev->vk.base, + 1 << 17, 1 << 20, + NVKMD_MEM_LOCAL | NVKMD_MEM_NO_SHARE, + &dev->vab_memory); + if (result != VK_SUCCESS) goto fail_zero_page; } @@ -263,9 +263,9 @@ fail_queue: nvk_queue_finish(dev, &dev->queue); fail_vab_memory: if (dev->vab_memory) - nouveau_ws_bo_destroy(dev->vab_memory); + nvkmd_mem_unref(dev->vab_memory); fail_zero_page: - nouveau_ws_bo_destroy(dev->zero_page); + nvkmd_mem_unref(dev->zero_page); fail_slm: nvk_slm_area_finish(&dev->slm); nvk_heap_finish(dev, &dev->event_heap); @@ -299,8 +299,8 @@ nvk_DestroyDevice(VkDevice _device, const VkAllocationCallbacks *pAllocator) vk_pipeline_cache_destroy(dev->vk.mem_cache, NULL); nvk_queue_finish(dev, &dev->queue); if (dev->vab_memory) - nouveau_ws_bo_destroy(dev->vab_memory); - nouveau_ws_bo_destroy(dev->zero_page); + nvkmd_mem_unref(dev->vab_memory); + nvkmd_mem_unref(dev->zero_page); vk_device_finish(&dev->vk); /* Idle the upload queue before we tear down heaps */ diff --git a/src/nouveau/vulkan/nvk_device.h b/src/nouveau/vulkan/nvk_device.h index 1806c2545fd..7ee20d8b468 100644 --- a/src/nouveau/vulkan/nvk_device.h +++ b/src/nouveau/vulkan/nvk_device.h @@ -47,8 +47,8 @@ struct nvk_device { struct nvk_heap shader_heap; struct nvk_heap event_heap; struct nvk_slm_area slm; - struct nouveau_ws_bo *zero_page; - struct nouveau_ws_bo *vab_memory; + struct nvkmd_mem *zero_page; + struct nvkmd_mem *vab_memory; struct nvk_queue queue; diff --git a/src/nouveau/vulkan/nvk_queue.c b/src/nouveau/vulkan/nvk_queue.c index 7b986f75bc3..6d1c5c8d919 100644 --- a/src/nouveau/vulkan/nvk_queue.c +++ b/src/nouveau/vulkan/nvk_queue.c @@ -353,17 +353,16 @@ nvk_queue_init(struct nvk_device *dev, struct nvk_queue *queue, nvk_queue_state_init(&queue->state); if (queue_flags & VK_QUEUE_GRAPHICS_BIT) { - queue->draw_cb0 = nouveau_ws_bo_new(dev->ws_dev, 4096, 0, - NOUVEAU_WS_BO_LOCAL | - NOUVEAU_WS_BO_NO_SHARE); - if (queue->draw_cb0 == NULL) { - result = VK_ERROR_OUT_OF_DEVICE_MEMORY; + result = nvkmd_dev_alloc_mem(dev->nvkmd, &dev->vk.base, + 4096, 0, + NVKMD_MEM_LOCAL | NVKMD_MEM_NO_SHARE, + &queue->draw_cb0); + if (result != VK_SUCCESS) goto fail_state; - } result = nvk_upload_queue_fill(dev, &dev->upload, - queue->draw_cb0->offset, 0, - queue->draw_cb0->size); + queue->draw_cb0->va->addr, 0, + queue->draw_cb0->size_B); if (result != VK_SUCCESS) goto fail_draw_cb0; } @@ -382,7 +381,7 @@ fail_drm: nvk_queue_finish_drm_nouveau(dev, queue); fail_draw_cb0: if (queue->draw_cb0 != NULL) - nouveau_ws_bo_destroy(queue->draw_cb0); + nvkmd_mem_unref(queue->draw_cb0); fail_state: nvk_queue_state_finish(dev, &queue->state); vk_queue_finish(&queue->vk); @@ -395,7 +394,7 @@ nvk_queue_finish(struct nvk_device *dev, struct nvk_queue *queue) { if (queue->draw_cb0 != NULL) { nvk_upload_queue_sync(dev, &dev->upload); - nouveau_ws_bo_destroy(queue->draw_cb0); + nvkmd_mem_unref(queue->draw_cb0); } nvk_queue_state_finish(dev, &queue->state); nvk_queue_finish_drm_nouveau(dev, queue); diff --git a/src/nouveau/vulkan/nvk_queue.h b/src/nouveau/vulkan/nvk_queue.h index 7abe1c8c464..99e14014582 100644 --- a/src/nouveau/vulkan/nvk_queue.h +++ b/src/nouveau/vulkan/nvk_queue.h @@ -9,7 +9,7 @@ #include "vk_queue.h" -struct novueau_ws_bo; +struct nouveau_ws_bo; struct nouveau_ws_context; struct novueau_ws_push; struct nv_push; @@ -53,7 +53,7 @@ struct nvk_queue { struct nvk_queue_state state; /* CB0 for all draw commands on this queue */ - struct nouveau_ws_bo *draw_cb0; + struct nvkmd_mem *draw_cb0; }; static inline struct nvk_device *