1 /* 2 * Copyright © 2024 Collabora Ltd. and Red Hat Inc. 3 * SPDX-License-Identifier: MIT 4 */ 5 #ifndef NVK_DMA_QUEUE_H 6 #define NVK_DMA_QUEUE_H 1 7 8 #include "nvk_private.h" 9 10 #include "util/list.h" 11 #include "util/simple_mtx.h" 12 13 struct nouveau_ws_context; 14 struct nvk_device; 15 struct nvk_upload_bo; 16 17 struct nvk_upload_queue { 18 simple_mtx_t mutex; 19 20 struct { 21 struct nouveau_ws_context *ws_ctx; 22 uint32_t syncobj; 23 } drm; 24 25 uint64_t last_time_point; 26 27 struct nvk_upload_bo *bo; 28 29 /* We grow the buffer from both ends. Pushbuf data goes at the start of 30 * the buffer and upload data at the tail. 31 */ 32 uint32_t bo_push_start; 33 uint32_t bo_push_end; 34 uint32_t bo_data_start; 35 36 /* BO recycle pool */ 37 struct list_head bos; 38 }; 39 40 VkResult nvk_upload_queue_init(struct nvk_device *dev, 41 struct nvk_upload_queue *queue); 42 void nvk_upload_queue_finish(struct nvk_device *dev, 43 struct nvk_upload_queue *queue); 44 45 VkResult nvk_upload_queue_flush(struct nvk_device *dev, 46 struct nvk_upload_queue *queue, 47 uint64_t *time_point_out); 48 49 VkResult nvk_upload_queue_sync(struct nvk_device *dev, 50 struct nvk_upload_queue *queue); 51 52 VkResult nvk_upload_queue_upload(struct nvk_device *dev, 53 struct nvk_upload_queue *queue, 54 uint64_t dst_addr, 55 const void *src, size_t size); 56 57 #endif /* NVK_DMA_QUEUE_H */ 58