• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*
3  * Copyright 2024 The Android Open Source Project
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17 */
18 
19 // clang-format off
20 
21 #ifndef VULKAN_PROFILES_H_
22 #define VULKAN_PROFILES_H_ 1
23 
24 #define VPAPI_ATTR
25 
26 #ifdef __cplusplus
27     extern "C" {
28 #endif
29 
30 #include <vulkan/vulkan.h>
31 
32 #if defined(VK_VERSION_1_1) && \
33     defined(VK_ANDROID_external_memory_android_hardware_buffer) && \
34     defined(VK_EXT_queue_family_foreign) && \
35     defined(VK_EXT_swapchain_colorspace) && \
36     defined(VK_GOOGLE_display_timing) && \
37     defined(VK_KHR_android_surface) && \
38     defined(VK_KHR_create_renderpass2) && \
39     defined(VK_KHR_dedicated_allocation) && \
40     defined(VK_KHR_descriptor_update_template) && \
41     defined(VK_KHR_driver_properties) && \
42     defined(VK_KHR_external_fence) && \
43     defined(VK_KHR_external_fence_capabilities) && \
44     defined(VK_KHR_external_fence_fd) && \
45     defined(VK_KHR_external_memory) && \
46     defined(VK_KHR_external_memory_capabilities) && \
47     defined(VK_KHR_external_semaphore) && \
48     defined(VK_KHR_external_semaphore_capabilities) && \
49     defined(VK_KHR_external_semaphore_fd) && \
50     defined(VK_KHR_get_memory_requirements2) && \
51     defined(VK_KHR_get_physical_device_properties2) && \
52     defined(VK_KHR_get_surface_capabilities2) && \
53     defined(VK_KHR_incremental_present) && \
54     defined(VK_KHR_maintenance1) && \
55     defined(VK_KHR_sampler_mirror_clamp_to_edge) && \
56     defined(VK_KHR_storage_buffer_storage_class) && \
57     defined(VK_KHR_surface) && \
58     defined(VK_KHR_swapchain) && \
59     defined(VK_KHR_variable_pointers)
60 #define VP_ANDROID_baseline_2022 1
61 #define VP_ANDROID_BASELINE_2022_NAME "VP_ANDROID_baseline_2022"
62 #define VP_ANDROID_BASELINE_2022_SPEC_VERSION 1
63 #define VP_ANDROID_BASELINE_2022_MIN_API_VERSION VK_MAKE_VERSION(1, 1, 106)
64 #endif
65 
66 #if defined(VK_VERSION_1_3) && \
67     defined(VP_ANDROID_baseline_2022) && \
68     defined(VK_ANDROID_external_format_resolve) && \
69     defined(VK_EXT_4444_formats) && \
70     defined(VK_EXT_custom_border_color) && \
71     defined(VK_EXT_device_memory_report) && \
72     defined(VK_EXT_external_memory_acquire_unmodified) && \
73     defined(VK_EXT_index_type_uint8) && \
74     defined(VK_EXT_line_rasterization) && \
75     defined(VK_EXT_load_store_op_none) && \
76     defined(VK_EXT_primitive_topology_list_restart) && \
77     defined(VK_EXT_primitives_generated_query) && \
78     defined(VK_EXT_provoking_vertex) && \
79     defined(VK_EXT_scalar_block_layout) && \
80     defined(VK_EXT_surface_maintenance1) && \
81     defined(VK_EXT_swapchain_maintenance1) && \
82     defined(VK_GOOGLE_surfaceless_query) && \
83     defined(VK_IMG_relaxed_line_rasterization) && \
84     defined(VK_KHR_16bit_storage) && \
85     defined(VK_KHR_maintenance5) && \
86     defined(VK_KHR_shader_float16_int8) && \
87     defined(VK_KHR_vertex_attribute_divisor)
88 #define VP_ANDROID_15_minimums 1
89 #define VP_ANDROID_15_MINIMUMS_NAME "VP_ANDROID_15_minimums"
90 #define VP_ANDROID_15_MINIMUMS_SPEC_VERSION 1
91 #define VP_ANDROID_15_MINIMUMS_MIN_API_VERSION VK_MAKE_VERSION(1, 3, 273)
92 #endif
93 
94 #if defined(VK_VERSION_1_3) && \
95     defined(VP_ANDROID_15_minimums) && \
96     defined(VP_ANDROID_baseline_2022) && \
97     defined(VK_EXT_host_image_copy) && \
98     defined(VK_EXT_image_2d_view_of_3d) && \
99     defined(VK_EXT_multisampled_render_to_single_sampled) && \
100     defined(VK_EXT_pipeline_protected_access) && \
101     defined(VK_EXT_pipeline_robustness) && \
102     defined(VK_EXT_shader_stencil_export) && \
103     defined(VK_EXT_transform_feedback) && \
104     defined(VK_KHR_8bit_storage) && \
105     defined(VK_KHR_load_store_op_none) && \
106     defined(VK_KHR_maintenance6) && \
107     defined(VK_KHR_map_memory2) && \
108     defined(VK_KHR_shader_expect_assume) && \
109     defined(VK_KHR_shader_float_controls2) && \
110     defined(VK_KHR_shader_maximal_reconvergence) && \
111     defined(VK_KHR_shader_subgroup_rotate) && \
112     defined(VK_KHR_shader_subgroup_uniform_control_flow) && \
113     defined(VK_KHR_swapchain_mutable_format)
114 #define VP_ANDROID_16_minimums 1
115 #define VP_ANDROID_16_MINIMUMS_NAME "VP_ANDROID_16_minimums"
116 #define VP_ANDROID_16_MINIMUMS_SPEC_VERSION 1
117 #define VP_ANDROID_16_MINIMUMS_MIN_API_VERSION VK_MAKE_VERSION(1, 3, 276)
118 #endif
119 
120 #if defined(VK_VERSION_1_0) && \
121     defined(VK_EXT_swapchain_colorspace) && \
122     defined(VK_GOOGLE_display_timing) && \
123     defined(VK_KHR_android_surface) && \
124     defined(VK_KHR_dedicated_allocation) && \
125     defined(VK_KHR_descriptor_update_template) && \
126     defined(VK_KHR_external_fence) && \
127     defined(VK_KHR_external_fence_capabilities) && \
128     defined(VK_KHR_external_fence_fd) && \
129     defined(VK_KHR_external_memory) && \
130     defined(VK_KHR_external_memory_capabilities) && \
131     defined(VK_KHR_external_semaphore) && \
132     defined(VK_KHR_external_semaphore_capabilities) && \
133     defined(VK_KHR_external_semaphore_fd) && \
134     defined(VK_KHR_get_memory_requirements2) && \
135     defined(VK_KHR_get_physical_device_properties2) && \
136     defined(VK_KHR_get_surface_capabilities2) && \
137     defined(VK_KHR_incremental_present) && \
138     defined(VK_KHR_maintenance1) && \
139     defined(VK_KHR_storage_buffer_storage_class) && \
140     defined(VK_KHR_surface) && \
141     defined(VK_KHR_swapchain) && \
142     defined(VK_KHR_variable_pointers)
143 #define VP_ANDROID_baseline_2021 1
144 #define VP_ANDROID_BASELINE_2021_NAME "VP_ANDROID_baseline_2021"
145 #define VP_ANDROID_BASELINE_2021_SPEC_VERSION 2
146 #define VP_ANDROID_BASELINE_2021_MIN_API_VERSION VK_MAKE_VERSION(1, 0, 68)
147 #endif
148 
149 #if defined(VK_VERSION_1_0) && \
150     defined(VK_EXT_swapchain_colorspace) && \
151     defined(VK_KHR_android_surface) && \
152     defined(VK_KHR_dedicated_allocation) && \
153     defined(VK_KHR_descriptor_update_template) && \
154     defined(VK_KHR_external_fence) && \
155     defined(VK_KHR_external_fence_capabilities) && \
156     defined(VK_KHR_external_memory) && \
157     defined(VK_KHR_external_memory_capabilities) && \
158     defined(VK_KHR_external_semaphore) && \
159     defined(VK_KHR_external_semaphore_capabilities) && \
160     defined(VK_KHR_external_semaphore_fd) && \
161     defined(VK_KHR_get_memory_requirements2) && \
162     defined(VK_KHR_get_physical_device_properties2) && \
163     defined(VK_KHR_get_surface_capabilities2) && \
164     defined(VK_KHR_incremental_present) && \
165     defined(VK_KHR_maintenance1) && \
166     defined(VK_KHR_storage_buffer_storage_class) && \
167     defined(VK_KHR_surface) && \
168     defined(VK_KHR_swapchain)
169 #define VP_ANDROID_baseline_2021_cpu_only 1
170 #define VP_ANDROID_BASELINE_2021_CPU_ONLY_NAME "VP_ANDROID_baseline_2021_cpu_only"
171 #define VP_ANDROID_BASELINE_2021_CPU_ONLY_SPEC_VERSION 1
172 #define VP_ANDROID_BASELINE_2021_CPU_ONLY_MIN_API_VERSION VK_MAKE_VERSION(1, 0, 68)
173 #endif
174 
175 #define VP_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 2, 0, VK_HEADER_VERSION)
176 
177 #define VP_MAX_PROFILE_NAME_SIZE 256U
178 
179 typedef struct VpProfileProperties {
180     char        profileName[VP_MAX_PROFILE_NAME_SIZE];
181     uint32_t    specVersion;
182 } VpProfileProperties;
183 
184 typedef struct VpBlockProperties {
185     VpProfileProperties profiles;
186     uint32_t apiVersion;
187     char blockName[VP_MAX_PROFILE_NAME_SIZE];
188 } VpBlockProperties;
189 
190 typedef struct VpVideoProfileProperties {
191     char name[VP_MAX_PROFILE_NAME_SIZE];
192 } VpVideoProfileProperties;
193 
194 typedef enum VpInstanceCreateFlagBits {
195     VP_INSTANCE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
196 } VpInstanceCreateFlagBits;
197 typedef VkFlags VpInstanceCreateFlags;
198 
199 typedef struct VpInstanceCreateInfo {
200     const VkInstanceCreateInfo* pCreateInfo;
201     VpInstanceCreateFlags       flags;
202     uint32_t                    enabledFullProfileCount;
203     const VpProfileProperties*  pEnabledFullProfiles;
204     uint32_t                    enabledProfileBlockCount;
205     const VpBlockProperties*    pEnabledProfileBlocks;
206 } VpInstanceCreateInfo;
207 
208 typedef enum VpDeviceCreateFlagBits {
209     VP_DEVICE_CREATE_DISABLE_ROBUST_BUFFER_ACCESS_BIT = 0x0000001,
210     VP_DEVICE_CREATE_DISABLE_ROBUST_IMAGE_ACCESS_BIT = 0x0000002,
211     VP_DEVICE_CREATE_DISABLE_ROBUST_ACCESS =
212         VP_DEVICE_CREATE_DISABLE_ROBUST_BUFFER_ACCESS_BIT | VP_DEVICE_CREATE_DISABLE_ROBUST_IMAGE_ACCESS_BIT,
213 
214     VP_DEVICE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
215 } VpDeviceCreateFlagBits;
216 typedef VkFlags VpDeviceCreateFlags;
217 
218 typedef struct VpDeviceCreateInfo {
219     const VkDeviceCreateInfo*   pCreateInfo;
220     VpDeviceCreateFlags         flags;
221     uint32_t                    enabledFullProfileCount;
222     const VpProfileProperties*  pEnabledFullProfiles;
223     uint32_t                    enabledProfileBlockCount;
224     const VpBlockProperties*    pEnabledProfileBlocks;
225 } VpDeviceCreateInfo;
226 
227 VK_DEFINE_HANDLE(VpCapabilities)
228 
229 typedef enum VpCapabilitiesCreateFlagBits {
230     VP_PROFILE_CREATE_STATIC_BIT = (1 << 0),
231     //VP_PROFILE_CREATE_DYNAMIC_BIT = (1 << 1),
232     VP_PROFILE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
233 } VpCapabilitiesCreateFlagBits;
234 
235 typedef VkFlags VpCapabilitiesCreateFlags;
236 
237 // Pointers to some Vulkan functions - a subset used by the library.
238 // Used in VpCapabilitiesCreateInfo::pVulkanFunctions.
239 
240 typedef struct VpVulkanFunctions {
241     /// Required when using VP_DYNAMIC_VULKAN_FUNCTIONS.
242     PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
243     /// Required when using VP_DYNAMIC_VULKAN_FUNCTIONS.
244     PFN_vkGetDeviceProcAddr GetDeviceProcAddr;
245     PFN_vkEnumerateInstanceVersion EnumerateInstanceVersion;
246     PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties;
247     PFN_vkEnumerateDeviceExtensionProperties EnumerateDeviceExtensionProperties;
248     PFN_vkGetPhysicalDeviceFeatures2 GetPhysicalDeviceFeatures2;
249     PFN_vkGetPhysicalDeviceProperties2 GetPhysicalDeviceProperties2;
250     PFN_vkGetPhysicalDeviceFormatProperties2 GetPhysicalDeviceFormatProperties2;
251     PFN_vkGetPhysicalDeviceQueueFamilyProperties2 GetPhysicalDeviceQueueFamilyProperties2;
252     PFN_vkCreateInstance CreateInstance;
253     PFN_vkCreateDevice CreateDevice;
254 } VpVulkanFunctions;
255 
256 /// Description of a Allocator to be created.
257 typedef struct VpCapabilitiesCreateInfo
258 {
259     /// Flags for created allocator. Use #VpInstanceCreateFlagBits enum.
260     VpCapabilitiesCreateFlags       flags;
261     uint32_t                        apiVersion;
262     const VpVulkanFunctions*        pVulkanFunctions;
263 } VpCapabilitiesCreateInfo;
264 
265 VPAPI_ATTR VkResult vpCreateCapabilities(
266     const VpCapabilitiesCreateInfo*             pCreateInfo,
267     const VkAllocationCallbacks*                pAllocator,
268     VpCapabilities*                             pCapabilities);
269 
270 /// Destroys allocator object.
271 VPAPI_ATTR void vpDestroyCapabilities(
272     VpCapabilities                              capabilities,
273     const VkAllocationCallbacks*                pAllocator);
274 
275 // Query the list of available profiles in the library
276 VPAPI_ATTR VkResult vpGetProfiles(
277 #ifdef VP_USE_OBJECT
278     VpCapabilities                              capabilities,
279 #endif//VP_USE_OBJECT
280     uint32_t*                                   pPropertyCount,
281     VpProfileProperties*                        pProperties);
282 
283 // List the required profiles of a profile
284 VPAPI_ATTR VkResult vpGetProfileRequiredProfiles(
285 #ifdef VP_USE_OBJECT
286     VpCapabilities                              capabilities,
287 #endif//VP_USE_OBJECT
288     const VpProfileProperties*                  pProfile,
289     uint32_t*                                   pPropertyCount,
290     VpProfileProperties*                        pProperties);
291 
292 // Query the profile required Vulkan API version
293 VPAPI_ATTR uint32_t vpGetProfileAPIVersion(
294 #ifdef VP_USE_OBJECT
295     VpCapabilities                              capabilities,
296 #endif//VP_USE_OBJECT
297     const VpProfileProperties*                  pProfile);
298 
299 // List the recommended fallback profiles of a profile
300 VPAPI_ATTR VkResult vpGetProfileFallbacks(
301 #ifdef VP_USE_OBJECT
302     VpCapabilities                              capabilities,
303 #endif//VP_USE_OBJECT
304     const VpProfileProperties*                  pProfile,
305     uint32_t*                                   pPropertyCount,
306     VpProfileProperties*                        pProperties);
307 
308 // Query whether the profile has multiple variants. Profiles with multiple variants can only use vpGetInstanceProfileSupport and vpGetPhysicalDeviceProfileSupport capabilities of the library. Other function will return a VK_ERROR_UNKNOWN error
309 VPAPI_ATTR VkResult vpHasMultipleVariantsProfile(
310 #ifdef VP_USE_OBJECT
311     VpCapabilities                              capabilities,
312 #endif//VP_USE_OBJECT
313     const VpProfileProperties*                  pProfile,
314     VkBool32*                                   pHasMultipleVariants);
315 
316 // Check whether a profile is supported at the instance level
317 VPAPI_ATTR VkResult vpGetInstanceProfileSupport(
318 #ifdef VP_USE_OBJECT
319     VpCapabilities                              capabilities,
320 #endif//VP_USE_OBJECT
321     const char*                                 pLayerName,
322     const VpProfileProperties*                  pProfile,
323     VkBool32*                                   pSupported);
324 
325 // Check whether a variant of a profile is supported at the instance level and report this list of blocks used to validate the profiles
326 VPAPI_ATTR VkResult vpGetInstanceProfileVariantsSupport(
327 #ifdef VP_USE_OBJECT
328     VpCapabilities                              capabilities,
329 #endif//VP_USE_OBJECT
330     const char*                                 pLayerName,
331     const VpProfileProperties*                  pProfile,
332     VkBool32*                                   pSupported,
333     uint32_t*                                   pPropertyCount,
334     VpBlockProperties*                          pProperties);
335 
336 // Create a VkInstance with the profile instance extensions enabled
337 VPAPI_ATTR VkResult vpCreateInstance(
338 #ifdef VP_USE_OBJECT
339     VpCapabilities                              capabilities,
340 #endif//VP_USE_OBJECT
341     const VpInstanceCreateInfo*                 pCreateInfo,
342     const VkAllocationCallbacks*                pAllocator,
343     VkInstance*                                 pInstance);
344 
345 // Check whether a profile is supported by the physical device
346 VPAPI_ATTR VkResult vpGetPhysicalDeviceProfileSupport(
347 #ifdef VP_USE_OBJECT
348     VpCapabilities                              capabilities,
349 #endif//VP_USE_OBJECT
350     VkInstance                                  instance,
351     VkPhysicalDevice                            physicalDevice,
352     const VpProfileProperties*                  pProfile,
353     VkBool32*                                   pSupported);
354 
355 // Check whether a variant of a profile is supported by the physical device and report this list of blocks used to validate the profiles
356 VPAPI_ATTR VkResult vpGetPhysicalDeviceProfileVariantsSupport(
357 #ifdef VP_USE_OBJECT
358     VpCapabilities                              capabilities,
359 #endif//VP_USE_OBJECT
360     VkInstance                                  instance,
361     VkPhysicalDevice                            physicalDevice,
362     const VpProfileProperties*                  pProfile,
363     VkBool32*                                   pSupported,
364     uint32_t*                                   pPropertyCount,
365     VpBlockProperties*                          pProperties);
366 
367 // Create a VkDevice with the profile features and device extensions enabled
368 VPAPI_ATTR VkResult vpCreateDevice(
369 #ifdef VP_USE_OBJECT
370     VpCapabilities                              capabilities,
371 #endif//VP_USE_OBJECT
372     VkPhysicalDevice                            physicalDevice,
373     const VpDeviceCreateInfo*                   pCreateInfo,
374     const VkAllocationCallbacks*                pAllocator,
375     VkDevice*                                   pDevice);
376 
377 // Query the list of instance extensions of a profile
378 VPAPI_ATTR VkResult vpGetProfileInstanceExtensionProperties(
379 #ifdef VP_USE_OBJECT
380     VpCapabilities                              capabilities,
381 #endif//VP_USE_OBJECT
382     const VpProfileProperties*                  pProfile,
383     const char*                                 pBlockName,
384     uint32_t*                                   pPropertyCount,
385     VkExtensionProperties*                      pProperties);
386 
387 // Query the list of device extensions of a profile
388 VPAPI_ATTR VkResult vpGetProfileDeviceExtensionProperties(
389 #ifdef VP_USE_OBJECT
390     VpCapabilities                              capabilities,
391 #endif//VP_USE_OBJECT
392     const VpProfileProperties*                  pProfile,
393     const char*                                 pBlockName,
394     uint32_t*                                   pPropertyCount,
395     VkExtensionProperties*                      pProperties);
396 
397 // Fill the feature structures with the requirements of a profile
398 VPAPI_ATTR VkResult vpGetProfileFeatures(
399 #ifdef VP_USE_OBJECT
400     VpCapabilities                              capabilities,
401 #endif//VP_USE_OBJECT
402     const VpProfileProperties*                  pProfile,
403     const char*                                 pBlockName,
404     void*                                       pNext);
405 
406 // Query the list of feature structure types specified by the profile
407 VPAPI_ATTR VkResult vpGetProfileFeatureStructureTypes(
408 #ifdef VP_USE_OBJECT
409     VpCapabilities                              capabilities,
410 #endif//VP_USE_OBJECT
411     const VpProfileProperties*                  pProfile,
412     const char*                                 pBlockName,
413     uint32_t*                                   pStructureTypeCount,
414     VkStructureType*                            pStructureTypes);
415 
416 // Fill the property structures with the requirements of a profile
417 VPAPI_ATTR VkResult vpGetProfileProperties(
418 #ifdef VP_USE_OBJECT
419     VpCapabilities                              capabilities,
420 #endif//VP_USE_OBJECT
421     const VpProfileProperties*                  pProfile,
422     const char*                                 pBlockName,
423     void*                                       pNext);
424 
425 // Query the list of property structure types specified by the profile
426 VPAPI_ATTR VkResult vpGetProfilePropertyStructureTypes(
427 #ifdef VP_USE_OBJECT
428     VpCapabilities                              capabilities,
429 #endif//VP_USE_OBJECT
430     const VpProfileProperties*                  pProfile,
431     const char*                                 pBlockName,
432     uint32_t*                                   pStructureTypeCount,
433     VkStructureType*                            pStructureTypes);
434 
435 // Fill the queue family property structures with the requirements of a profile
436 VPAPI_ATTR VkResult vpGetProfileQueueFamilyProperties(
437 #ifdef VP_USE_OBJECT
438     VpCapabilities                              capabilities,
439 #endif//VP_USE_OBJECT
440     const VpProfileProperties*                  pProfile,
441     const char*                                 pBlockName,
442     uint32_t*                                   pPropertyCount,
443     VkQueueFamilyProperties2KHR*                pProperties);
444 
445 // Query the list of queue family property structure types specified by the profile
446 VPAPI_ATTR VkResult vpGetProfileQueueFamilyStructureTypes(
447 #ifdef VP_USE_OBJECT
448     VpCapabilities                              capabilities,
449 #endif//VP_USE_OBJECT
450     const VpProfileProperties*                  pProfile,
451     const char*                                 pBlockName,
452     uint32_t*                                   pStructureTypeCount,
453     VkStructureType*                            pStructureTypes);
454 
455 // Query the list of formats with specified requirements by a profile
456 VPAPI_ATTR VkResult vpGetProfileFormats(
457 #ifdef VP_USE_OBJECT
458     VpCapabilities                              capabilities,
459 #endif//VP_USE_OBJECT
460     const VpProfileProperties*                  pProfile,
461     const char*                                 pBlockName,
462     uint32_t*                                   pFormatCount,
463     VkFormat*                                   pFormats);
464 
465 // Query the requirements of a format for a profile
466 VPAPI_ATTR VkResult vpGetProfileFormatProperties(
467 #ifdef VP_USE_OBJECT
468     VpCapabilities                              capabilities,
469 #endif//VP_USE_OBJECT
470     const VpProfileProperties*                  pProfile,
471     const char*                                 pBlockName,
472     VkFormat                                    format,
473     void*                                       pNext);
474 
475 // Query the list of format structure types specified by the profile
476 VPAPI_ATTR VkResult vpGetProfileFormatStructureTypes(
477 #ifdef VP_USE_OBJECT
478     VpCapabilities                              capabilities,
479 #endif//VP_USE_OBJECT
480     const VpProfileProperties*                  pProfile,
481     const char*                                 pBlockName,
482     uint32_t*                                   pStructureTypeCount,
483     VkStructureType*                            pStructureTypes);
484 
485 #ifdef VK_KHR_video_queue
486 // Query the list of video profiles specified by the profile
487 VPAPI_ATTR VkResult vpGetProfileVideoProfiles(
488 #ifdef VP_USE_OBJECT
489     VpCapabilities                              capabilities,
490 #endif//VP_USE_OBJECT
491     const VpProfileProperties*                  pProfile,
492     const char*                                 pBlockName,
493     uint32_t*                                   pVideoProfileCount,
494     VpVideoProfileProperties*                   pVideoProfiles);
495 
496 // Query the video profile info structures for a video profile defined by a profile
497 VPAPI_ATTR VkResult vpGetProfileVideoProfileInfo(
498 #ifdef VP_USE_OBJECT
499     VpCapabilities                              capabilities,
500 #endif//VP_USE_OBJECT
501     const VpProfileProperties*                  pProfile,
502     const char*                                 pBlockName,
503     uint32_t                                    videoProfileIndex,
504     VkVideoProfileInfoKHR*                      pVideoProfileInfo);
505 
506 // Query the list of video profile info structure types specified by the profile for a video profile
507 VPAPI_ATTR VkResult vpGetProfileVideoProfileInfoStructureTypes(
508 #ifdef VP_USE_OBJECT
509     VpCapabilities                              capabilities,
510 #endif//VP_USE_OBJECT
511     const VpProfileProperties*                  pProfile,
512     const char*                                 pBlockName,
513     uint32_t                                    videoProfileIndex,
514     uint32_t*                                   pStructureTypeCount,
515     VkStructureType*                            pStructureTypes);
516 
517 // Query the video capabilities requirements for a video profile defined by a profile
518 VPAPI_ATTR VkResult vpGetProfileVideoCapabilities(
519 #ifdef VP_USE_OBJECT
520     VpCapabilities                              capabilities,
521 #endif//VP_USE_OBJECT
522     const VpProfileProperties*                  pProfile,
523     const char*                                 pBlockName,
524     uint32_t                                    videoProfileIndex,
525     void*                                       pNext);
526 
527 // Query the list of video capability structure types specified by the profile for a video profile
528 VPAPI_ATTR VkResult vpGetProfileVideoCapabilityStructureTypes(
529 #ifdef VP_USE_OBJECT
530     VpCapabilities                              capabilities,
531 #endif//VP_USE_OBJECT
532     const VpProfileProperties*                  pProfile,
533     const char*                                 pBlockName,
534     uint32_t                                    videoProfileIndex,
535     uint32_t*                                   pStructureTypeCount,
536     VkStructureType*                            pStructureTypes);
537 
538 // Query the video format property requirements for a video profile defined by a profile
539 VPAPI_ATTR VkResult vpGetProfileVideoFormatProperties(
540 #ifdef VP_USE_OBJECT
541     VpCapabilities                              capabilities,
542 #endif//VP_USE_OBJECT
543     const VpProfileProperties*                  pProfile,
544     const char*                                 pBlockName,
545     uint32_t                                    videoProfileIndex,
546     uint32_t*                                   pPropertyCount,
547     VkVideoFormatPropertiesKHR*                 pProperties);
548 
549 // Query the list of video format property structure types specified by the profile for a video profile
550 VPAPI_ATTR VkResult vpGetProfileVideoFormatStructureTypes(
551 #ifdef VP_USE_OBJECT
552     VpCapabilities                              capabilities,
553 #endif//VP_USE_OBJECT
554     const VpProfileProperties*                  pProfile,
555     const char*                                 pBlockName,
556     uint32_t                                    videoProfileIndex,
557     uint32_t*                                   pStructureTypeCount,
558     VkStructureType*                            pStructureTypes);
559 #endif  // VK_KHR_video_queue
560 
561 #ifdef __cplusplus
562 }
563 #endif
564 
565 #endif // VULKAN_PROFILES_H_
566