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 nvk_device; 14 struct nvk_upload_mem; 15 struct nvkmd_mem; 16 struct nvkmd_ctx; 17 struct vk_sync; 18 19 struct nvk_upload_queue { 20 simple_mtx_t mutex; 21 22 struct nvkmd_ctx *ctx; 23 24 struct vk_sync *sync; 25 uint64_t last_time_point; 26 27 struct nvk_upload_mem *mem; 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 mem_push_start; 33 uint32_t mem_push_end; 34 uint32_t mem_data_start; 35 36 /* list of nvk_upload_mem */ 37 struct list_head recycle; 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 VkResult nvk_upload_queue_fill(struct nvk_device *dev, 58 struct nvk_upload_queue *queue, 59 uint64_t dst_addr, uint32_t data, size_t size); 60 61 #endif /* NVK_DMA_QUEUE_H */ 62