• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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