nvk: Add an nvk_queue_submit_simple helper

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24326>
This commit is contained in:
Faith Ekstrand
2023-01-30 20:11:58 -06:00
committed by Marge Bot
parent 1094ffa82c
commit b660d064c2
3 changed files with 55 additions and 0 deletions
+27
View File
@@ -272,3 +272,30 @@ nvk_queue_finish(struct nvk_device *dev, struct nvk_queue *queue)
nouveau_ws_bo_destroy(queue->empty_push);
vk_queue_finish(&queue->vk);
}
VkResult
nvk_queue_submit_simple(struct nvk_queue *queue,
const uint32_t *dw, uint32_t dw_count,
struct nouveau_ws_bo *extra_bo)
{
struct nvk_device *dev = nvk_queue_device(queue);
struct nouveau_ws_bo *push_bo;
VkResult result;
void *push_map;
push_bo = nouveau_ws_bo_new_mapped(dev->pdev->dev, dw_count * 4, 0,
NOUVEAU_WS_BO_GART | NOUVEAU_WS_BO_MAP,
NOUVEAU_WS_BO_WR, &push_map);
if (push_bo == NULL)
return vk_error(queue, VK_ERROR_OUT_OF_DEVICE_MEMORY);
memcpy(push_map, dw, dw_count * 4);
result = nvk_queue_submit_simple_drm_nouveau(queue, push_bo, dw_count,
extra_bo);
nouveau_ws_bo_unmap(push_bo, push_map);
nouveau_ws_bo_destroy(push_bo);
return result;
}
+9
View File
@@ -56,6 +56,15 @@ VkResult nvk_queue_init(struct nvk_device *dev, struct nvk_queue *queue,
void nvk_queue_finish(struct nvk_device *dev, struct nvk_queue *queue);
VkResult nvk_queue_submit_simple(struct nvk_queue *queue,
const uint32_t *dw, uint32_t dw_count,
struct nouveau_ws_bo *extra_bo);
VkResult nvk_queue_submit_simple_drm_nouveau(struct nvk_queue *queue,
struct nouveau_ws_bo *push_bo,
uint32_t push_dw_count,
struct nouveau_ws_bo *extra_bo);
VkResult nvk_queue_submit_drm_nouveau(struct vk_queue *vkqueue,
struct vk_queue_submit *submit);
@@ -107,6 +107,25 @@ push_submit(struct push_builder *pb, struct nvk_queue *queue)
return VK_SUCCESS;
}
VkResult
nvk_queue_submit_simple_drm_nouveau(struct nvk_queue *queue,
struct nouveau_ws_bo *push_bo,
uint32_t push_dw_count,
struct nouveau_ws_bo *extra_bo)
{
struct nvk_device *dev = nvk_queue_device(queue);
struct push_builder pb;
push_builder_init(dev, &pb);
push_add_push(&pb, push_bo, 0, push_dw_count);
if (extra_bo)
push_add_bo(&pb, extra_bo, NOUVEAU_WS_BO_RDWR);
return push_submit(&pb, queue);
}
static void
push_add_queue_state(struct push_builder *pb, struct nvk_queue_state *qs)
{