nvk: Use nvkmd_mem for the nvk_queue_state::push

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30033>
This commit is contained in:
Faith Ekstrand 2024-07-03 15:12:27 -05:00 committed by Marge Bot
parent d0593bb86c
commit 92ac7db7c8
3 changed files with 19 additions and 26 deletions

View file

@ -37,10 +37,8 @@ nvk_queue_state_finish(struct nvk_device *dev,
nvkmd_mem_unref(qs->samplers.mem);
if (qs->slm.mem)
nvkmd_mem_unref(qs->slm.mem);
if (qs->push.bo) {
nouveau_ws_bo_unmap(qs->push.bo, qs->push.bo_map);
nouveau_ws_bo_destroy(qs->push.bo);
}
if (qs->push.mem)
nvkmd_mem_unref(qs->push.mem);
}
static void
@ -50,8 +48,8 @@ nvk_queue_state_dump_push(struct nvk_device *dev,
struct nvk_physical_device *pdev = nvk_device_physical(dev);
struct nv_push push = {
.start = (uint32_t *)qs->push.bo_map,
.end = (uint32_t *)qs->push.bo_map + qs->push.dw_count,
.start = (uint32_t *)qs->push.mem->map,
.end = (uint32_t *)qs->push.mem->map + qs->push.dw_count,
};
vk_push_print(fp, &push, &pdev->info);
}
@ -116,18 +114,17 @@ nvk_queue_state_update(struct nvk_device *dev,
if (!dirty)
return VK_SUCCESS;
struct nouveau_ws_bo *push_bo;
void *push_map;
push_bo = nouveau_ws_bo_new_mapped(dev->ws_dev, 256 * 4, 0,
NOUVEAU_WS_BO_GART |
NOUVEAU_WS_BO_MAP |
NOUVEAU_WS_BO_NO_SHARE,
NOUVEAU_WS_BO_WR, &push_map);
if (push_bo == NULL)
return vk_error(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY);
struct nvkmd_mem *push_mem;
VkResult result = nvkmd_dev_alloc_mapped_mem(dev->nvkmd, &dev->vk.base,
256 * 4, 0,
NVKMD_MEM_GART |
NVKMD_MEM_NO_SHARE,
NVKMD_MEM_MAP_WR, &push_mem);
if (result != VK_SUCCESS)
return result;
struct nv_push push;
nv_push_init(&push, push_map, 256);
nv_push_init(&push, push_mem->map, 256);
struct nv_push *p = &push;
if (qs->images.mem) {
@ -236,13 +233,10 @@ nvk_queue_state_update(struct nvk_device *dev,
*/
P_IMMD(p, NV9097, SET_SHADER_LOCAL_MEMORY_WINDOW, 0xff << 24);
if (qs->push.bo) {
nouveau_ws_bo_unmap(qs->push.bo, qs->push.bo_map);
nouveau_ws_bo_destroy(qs->push.bo);
}
if (qs->push.mem)
nvkmd_mem_unref(qs->push.mem);
qs->push.bo = push_bo;
qs->push.bo_map = push_map;
qs->push.mem = push_mem;
qs->push.dw_count = nv_push_dw_count(&push);
return VK_SUCCESS;

View file

@ -34,8 +34,7 @@ struct nvk_queue_state {
} slm;
struct {
struct nouveau_ws_bo *bo;
void *bo_map;
struct nvkmd_mem *mem;
uint32_t dw_count;
} push;
};

View file

@ -590,8 +590,8 @@ nvk_queue_submit_simple_drm_nouveau(struct nvk_queue *queue,
static void
push_add_queue_state(struct push_builder *pb, struct nvk_queue_state *qs)
{
if (qs->push.bo)
push_add_push(pb, qs->push.bo->offset, qs->push.dw_count * 4, false);
if (qs->push.mem)
push_add_push(pb, qs->push.mem->va->addr, qs->push.dw_count * 4, false);
}
VkResult