xref: /aosp_15_r20/external/mesa3d/src/virtio/vulkan/vn_buffer.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright 2019 Google LLC
3  * SPDX-License-Identifier: MIT
4  *
5  * based in part on anv and radv which are:
6  * Copyright © 2015 Intel Corporation
7  * Copyright © 2016 Red Hat.
8  * Copyright © 2016 Bas Nieuwenhuizen
9  */
10 
11 #ifndef VN_BUFFER_H
12 #define VN_BUFFER_H
13 
14 #include "vn_common.h"
15 
16 struct vn_buffer_memory_requirements {
17    VkMemoryRequirements2 memory;
18    VkMemoryDedicatedRequirements dedicated;
19 };
20 
21 struct vn_buffer_reqs_cache_entry {
22    struct vn_buffer_memory_requirements requirements;
23    atomic_bool valid;
24 };
25 
26 struct vn_buffer_reqs_cache {
27    uint64_t max_buffer_size;
28    uint32_t queue_family_count;
29 
30    /* cache memory type requirement for AHB backed VkBuffer */
31    uint32_t ahb_mem_type_bits;
32    atomic_bool ahb_mem_type_bits_valid;
33 
34    /* lazily cache memory requirements for native buffer infos */
35    struct util_sparse_array entries;
36 
37    /* protect both entries and ahb_mem_type_bits */
38    simple_mtx_t mutex;
39 
40    struct {
41       uint32_t cache_skip_count;
42       uint32_t cache_hit_count;
43       uint32_t cache_miss_count;
44    } debug;
45 };
46 
47 struct vn_buffer {
48    struct vn_object_base base;
49 
50    struct vn_buffer_memory_requirements requirements;
51 };
52 VK_DEFINE_NONDISP_HANDLE_CASTS(vn_buffer,
53                                base.base,
54                                VkBuffer,
55                                VK_OBJECT_TYPE_BUFFER)
56 
57 struct vn_buffer_view {
58    struct vn_object_base base;
59 };
60 VK_DEFINE_NONDISP_HANDLE_CASTS(vn_buffer_view,
61                                base.base,
62                                VkBufferView,
63                                VK_OBJECT_TYPE_BUFFER_VIEW)
64 
65 VkResult
66 vn_buffer_create(struct vn_device *dev,
67                  const VkBufferCreateInfo *create_info,
68                  const VkAllocationCallbacks *alloc,
69                  struct vn_buffer **out_buf);
70 
71 void
72 vn_buffer_reqs_cache_init(struct vn_device *dev);
73 
74 void
75 vn_buffer_reqs_cache_fini(struct vn_device *dev);
76 
77 #endif /* VN_BUFFER_H */
78