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