1 /* 2 * Copyright © 2023 Google Inc. 3 * 4 * derived from panvk_private.h driver which is: 5 * Copyright © 2021 Collabora Ltd. 6 * Copyright © 2016 Red Hat. 7 * Copyright © 2016 Bas Nieuwenhuizen 8 * Copyright © 2015 Intel Corporation 9 * 10 * Permission is hereby granted, free of charge, to any person obtaining a 11 * copy of this software and associated documentation files (the "Software"), 12 * to deal in the Software without restriction, including without limitation 13 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 14 * and/or sell copies of the Software, and to permit persons to whom the 15 * Software is furnished to do so, subject to the following conditions: 16 * 17 * The above copyright notice and this permission notice (including the next 18 * paragraph) shall be included in all copies or substantial portions of the 19 * Software. 20 * 21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 24 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 26 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 27 * DEALINGS IN THE SOFTWARE. 28 */ 29 30 #ifndef GFXSTREAM_VK_PRIVATE_H 31 #define GFXSTREAM_VK_PRIVATE_H 32 33 #include <assert.h> 34 #include <stdint.h> 35 #include <stdio.h> 36 #include <stdlib.h> 37 #include <string.h> 38 #include <vulkan/vk_icd.h> 39 #include <vulkan/vulkan.h> 40 41 #include <vector> 42 43 #include "gfxstream_vk_entrypoints.h" 44 #include "vk_alloc.h" 45 #include "vk_buffer.h" 46 #include "vk_buffer_view.h" 47 #include "vk_command_buffer.h" 48 #include "vk_command_pool.h" 49 #include "vk_descriptor_update_template.h" 50 #include "vk_device.h" 51 #include "vk_device_memory.h" 52 #include "vk_extensions.h" 53 #include "vk_fence.h" 54 #include "vk_image.h" 55 #include "vk_instance.h" 56 #include "vk_log.h" 57 #include "vk_object.h" 58 #include "vk_physical_device.h" 59 #include "vk_query_pool.h" 60 #include "vk_queue.h" 61 #include "vk_semaphore.h" 62 #include "vulkan/wsi/wsi_common.h" 63 64 struct gfxstream_vk_instance { 65 struct vk_instance vk; 66 uint32_t api_version; 67 VkInstance internal_object; 68 }; 69 70 struct gfxstream_vk_physical_device { 71 struct vk_physical_device vk; 72 73 struct wsi_device wsi_device; 74 const struct vk_sync_type* sync_types[2]; 75 struct gfxstream_vk_instance* instance; 76 VkPhysicalDevice internal_object; 77 }; 78 79 struct gfxstream_vk_device { 80 struct vk_device vk; 81 82 struct vk_device_dispatch_table cmd_dispatch; 83 struct gfxstream_vk_physical_device* physical_device; 84 VkDevice internal_object; 85 }; 86 87 struct gfxstream_vk_queue { 88 struct vk_queue vk; 89 struct gfxstream_vk_device* device; 90 VkQueue internal_object; 91 }; 92 93 struct gfxstream_vk_pipeline_cache { 94 struct vk_object_base base; 95 VkPipelineCache internal_object; 96 }; 97 98 struct gfxstream_vk_device_memory { 99 struct vk_device_memory vk; 100 VkDeviceMemory internal_object; 101 }; 102 103 struct gfxstream_vk_descriptor_set_layout { 104 struct vk_object_base base; 105 VkDescriptorSetLayout internal_object; 106 }; 107 108 struct gfxstream_vk_pipeline_layout { 109 struct vk_object_base base; 110 VkPipelineLayout internal_object; 111 }; 112 113 struct gfxstream_vk_descriptor_pool { 114 struct vk_object_base base; 115 VkDescriptorPool internal_object; 116 }; 117 118 struct gfxstream_vk_buffer { 119 struct vk_buffer vk; 120 VkBuffer internal_object; 121 }; 122 123 struct gfxstream_vk_command_pool { 124 struct vk_command_pool vk; 125 VkCommandPool internal_object; 126 }; 127 128 struct gfxstream_vk_command_buffer { 129 struct vk_command_buffer vk; 130 VkCommandBuffer internal_object; 131 }; 132 133 struct gfxstream_vk_event { 134 struct vk_object_base base; 135 VkEvent internal_object; 136 }; 137 138 struct gfxstream_vk_pipeline { 139 struct vk_object_base base; 140 VkPipeline internal_object; 141 }; 142 143 struct gfxstream_vk_image { 144 struct vk_image vk; 145 VkImage internal_object; 146 }; 147 148 struct gfxstream_vk_image_view { 149 struct vk_image_view vk; 150 VkImageView internal_object; 151 }; 152 153 struct gfxstream_vk_buffer_view { 154 struct vk_buffer_view vk; 155 VkBufferView internal_object; 156 }; 157 158 struct gfxstream_vk_framebuffer { 159 struct vk_object_base base; 160 VkFramebuffer internal_object; 161 }; 162 163 struct gfxstream_vk_render_pass { 164 struct vk_object_base base; 165 VkRenderPass internal_object; 166 }; 167 168 struct gfxstream_vk_fence { 169 struct vk_fence vk; 170 VkFence internal_object; 171 }; 172 173 struct gfxstream_vk_semaphore { 174 struct vk_semaphore vk; 175 VkSemaphore internal_object; 176 }; 177 178 struct gfxstream_vk_query_pool { 179 struct vk_query_pool vk; 180 VkQueryPool internal_object; 181 }; 182 183 struct gfxstream_vk_shader_module { 184 struct vk_object_base base; 185 VkShaderModule internal_object; 186 }; 187 188 struct gfxstream_vk_descriptor_update_template { 189 struct vk_object_base base; 190 VkDescriptorUpdateTemplate internal_object; 191 }; 192 193 VK_DEFINE_HANDLE_CASTS(gfxstream_vk_command_buffer, vk.base, VkCommandBuffer, 194 VK_OBJECT_TYPE_COMMAND_BUFFER) 195 VK_DEFINE_HANDLE_CASTS(gfxstream_vk_device, vk.base, VkDevice, VK_OBJECT_TYPE_DEVICE) 196 VK_DEFINE_HANDLE_CASTS(gfxstream_vk_instance, vk.base, VkInstance, VK_OBJECT_TYPE_INSTANCE) 197 VK_DEFINE_HANDLE_CASTS(gfxstream_vk_physical_device, vk.base, VkPhysicalDevice, 198 VK_OBJECT_TYPE_PHYSICAL_DEVICE) 199 VK_DEFINE_HANDLE_CASTS(gfxstream_vk_queue, vk.base, VkQueue, VK_OBJECT_TYPE_QUEUE) 200 201 VK_DEFINE_NONDISP_HANDLE_CASTS(gfxstream_vk_command_pool, vk.base, VkCommandPool, 202 VK_OBJECT_TYPE_COMMAND_POOL) 203 VK_DEFINE_NONDISP_HANDLE_CASTS(gfxstream_vk_buffer, vk.base, VkBuffer, VK_OBJECT_TYPE_BUFFER) 204 VK_DEFINE_NONDISP_HANDLE_CASTS(gfxstream_vk_buffer_view, vk.base, VkBufferView, 205 VK_OBJECT_TYPE_BUFFER_VIEW) 206 VK_DEFINE_NONDISP_HANDLE_CASTS(gfxstream_vk_descriptor_pool, base, VkDescriptorPool, 207 VK_OBJECT_TYPE_DESCRIPTOR_POOL) 208 VK_DEFINE_NONDISP_HANDLE_CASTS(gfxstream_vk_descriptor_set_layout, base, VkDescriptorSetLayout, 209 VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT) 210 VK_DEFINE_NONDISP_HANDLE_CASTS(gfxstream_vk_device_memory, vk.base, VkDeviceMemory, 211 VK_OBJECT_TYPE_DEVICE_MEMORY) 212 VK_DEFINE_NONDISP_HANDLE_CASTS(gfxstream_vk_event, base, VkEvent, VK_OBJECT_TYPE_EVENT) 213 VK_DEFINE_NONDISP_HANDLE_CASTS(gfxstream_vk_framebuffer, base, VkFramebuffer, 214 VK_OBJECT_TYPE_FRAMEBUFFER) 215 VK_DEFINE_NONDISP_HANDLE_CASTS(gfxstream_vk_image, vk.base, VkImage, VK_OBJECT_TYPE_IMAGE) 216 VK_DEFINE_NONDISP_HANDLE_CASTS(gfxstream_vk_image_view, vk.base, VkImageView, 217 VK_OBJECT_TYPE_IMAGE_VIEW); 218 VK_DEFINE_NONDISP_HANDLE_CASTS(gfxstream_vk_pipeline_cache, base, VkPipelineCache, 219 VK_OBJECT_TYPE_PIPELINE_CACHE) 220 VK_DEFINE_NONDISP_HANDLE_CASTS(gfxstream_vk_pipeline, base, VkPipeline, VK_OBJECT_TYPE_PIPELINE) 221 VK_DEFINE_NONDISP_HANDLE_CASTS(gfxstream_vk_pipeline_layout, base, VkPipelineLayout, 222 VK_OBJECT_TYPE_PIPELINE_LAYOUT) 223 VK_DEFINE_NONDISP_HANDLE_CASTS(gfxstream_vk_render_pass, base, VkRenderPass, 224 VK_OBJECT_TYPE_RENDER_PASS) 225 VK_DEFINE_NONDISP_HANDLE_CASTS(gfxstream_vk_fence, vk.base, VkFence, VK_OBJECT_TYPE_FENCE) 226 VK_DEFINE_NONDISP_HANDLE_CASTS(gfxstream_vk_semaphore, vk.base, VkSemaphore, 227 VK_OBJECT_TYPE_SEMAPHORE) 228 VK_DEFINE_NONDISP_HANDLE_CASTS(gfxstream_vk_query_pool, vk.base, VkQueryPool, 229 VK_OBJECT_TYPE_QUERY_POOL) 230 VK_DEFINE_NONDISP_HANDLE_CASTS(gfxstream_vk_shader_module, base, VkShaderModule, 231 VK_OBJECT_TYPE_SHADER_MODULE) 232 VK_DEFINE_NONDISP_HANDLE_CASTS(gfxstream_vk_descriptor_update_template, base, 233 VkDescriptorUpdateTemplate, 234 VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE) 235 236 VkResult gfxstream_vk_wsi_init(struct gfxstream_vk_physical_device* physical_device); 237 238 void gfxstream_vk_wsi_finish(struct gfxstream_vk_physical_device* physical_device); 239 240 std::vector<VkSemaphore> transformVkSemaphoreList(const VkSemaphore* pSemaphores, 241 uint32_t semaphoreCount); 242 243 std::vector<VkSemaphoreSubmitInfo> transformVkSemaphoreSubmitInfoList( 244 const VkSemaphoreSubmitInfo* pSemaphoreSubmitInfos, uint32_t semaphoreSubmitInfoCount); 245 246 #endif /* GFXSTREAM_VK_PRIVATE_H */ 247