xref: /aosp_15_r20/external/mesa3d/src/nouveau/vulkan/nvk_device.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright © 2022 Collabora Ltd. and Red Hat Inc.
3  * SPDX-License-Identifier: MIT
4  */
5 #ifndef NVK_DEVICE_H
6 #define NVK_DEVICE_H 1
7 
8 #include "nvk_private.h"
9 
10 #include "nvk_edb_bview_cache.h"
11 #include "nvk_descriptor_table.h"
12 #include "nvk_heap.h"
13 #include "nvk_queue.h"
14 #include "nvk_upload_queue.h"
15 #include "vk_device.h"
16 #include "vk_meta.h"
17 #include "vk_queue.h"
18 
19 struct nvk_physical_device;
20 struct nvkmd_dev;
21 struct nvkmd_mem;
22 struct vk_pipeline_cache;
23 
24 struct nvk_slm_area {
25    simple_mtx_t mutex;
26    struct nvkmd_mem *mem;
27    uint32_t bytes_per_warp;
28    uint32_t bytes_per_tpc;
29 };
30 
31 struct nvkmd_mem *
32 nvk_slm_area_get_mem_ref(struct nvk_slm_area *area,
33                          uint32_t *bytes_per_warp_out,
34                          uint32_t *bytes_per_mp_out);
35 
36 struct nvk_device {
37    struct vk_device vk;
38 
39    struct nvkmd_dev *nvkmd;
40 
41    struct nvk_upload_queue upload;
42 
43    struct nvkmd_mem *zero_page;
44    struct nvk_descriptor_table images;
45    struct nvk_descriptor_table samplers;
46    struct nvk_edb_bview_cache edb_bview_cache;
47    struct nvk_heap shader_heap;
48    struct nvk_heap event_heap;
49    struct nvk_slm_area slm;
50    struct nvkmd_mem *vab_memory;
51 
52    struct nvk_queue queue;
53 
54    struct vk_meta_device meta;
55 
56    struct nvk_shader *copy_queries;
57 };
58 
59 VK_DEFINE_HANDLE_CASTS(nvk_device, vk.base, VkDevice, VK_OBJECT_TYPE_DEVICE)
60 
61 VkResult nvk_device_ensure_slm(struct nvk_device *dev,
62                                uint32_t slm_bytes_per_lane,
63                                uint32_t crs_bytes_per_warp);
64 
65 static inline struct nvk_physical_device *
nvk_device_physical(struct nvk_device * dev)66 nvk_device_physical(struct nvk_device *dev)
67 {
68    return (struct nvk_physical_device *)dev->vk.physical;
69 }
70 
71 VkResult nvk_device_init_meta(struct nvk_device *dev);
72 void nvk_device_finish_meta(struct nvk_device *dev);
73 
74 #endif
75