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