• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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