xref: /aosp_15_r20/external/mesa3d/src/nouveau/vulkan/nvk_upload_queue.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
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