build: Update to header 1.3.297
[KhronosGroup/Vulkan-Tools.git] / icd / generated / function_definitions.h
blob9cde3184dd98d4d66500fb58be454b4ddfff0715
1 /*
2 ** Copyright (c) 2015-2024 The Khronos Group Inc.
3 **
4 ** Licensed under the Apache License, Version 2.0 (the "License");
5 ** you may not use this file except in compliance with the License.
6 ** You may obtain a copy of the License at
7 **
8 ** http://www.apache.org/licenses/LICENSE-2.0
9 **
10 ** Unless required by applicable law or agreed to in writing, software
11 ** distributed under the License is distributed on an "AS IS" BASIS,
12 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 ** See the License for the specific language governing permissions and
14 ** limitations under the License.
18 ** This header is generated from the Khronos Vulkan XML API Registry.
22 #pragma once
24 #include "mock_icd.h"
25 #include "function_declarations.h"
27 namespace vkmock {
30 static VKAPI_ATTR VkResult VKAPI_CALL CreateInstance(
31 const VkInstanceCreateInfo* pCreateInfo,
32 const VkAllocationCallbacks* pAllocator,
33 VkInstance* pInstance)
36 // TODO: If loader ver <=4 ICD must fail with VK_ERROR_INCOMPATIBLE_DRIVER for all vkCreateInstance calls with
37 // apiVersion set to > Vulkan 1.0 because the loader is still at interface version <= 4. Otherwise, the
38 // ICD should behave as normal.
39 if (loader_interface_version <= 4) {
40 return VK_ERROR_INCOMPATIBLE_DRIVER;
42 *pInstance = (VkInstance)CreateDispObjHandle();
43 for (auto& physical_device : physical_device_map[*pInstance])
44 physical_device = (VkPhysicalDevice)CreateDispObjHandle();
45 // TODO: If emulating specific device caps, will need to add intelligence here
46 return VK_SUCCESS;
49 static VKAPI_ATTR void VKAPI_CALL DestroyInstance(
50 VkInstance instance,
51 const VkAllocationCallbacks* pAllocator)
54 if (instance) {
55 for (const auto physical_device : physical_device_map.at(instance)) {
56 display_map.erase(physical_device);
57 DestroyDispObjHandle((void*)physical_device);
59 physical_device_map.erase(instance);
60 DestroyDispObjHandle((void*)instance);
64 static VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDevices(
65 VkInstance instance,
66 uint32_t* pPhysicalDeviceCount,
67 VkPhysicalDevice* pPhysicalDevices)
69 VkResult result_code = VK_SUCCESS;
70 if (pPhysicalDevices) {
71 const auto return_count = (std::min)(*pPhysicalDeviceCount, icd_physical_device_count);
72 for (uint32_t i = 0; i < return_count; ++i) pPhysicalDevices[i] = physical_device_map.at(instance)[i];
73 if (return_count < icd_physical_device_count) result_code = VK_INCOMPLETE;
74 *pPhysicalDeviceCount = return_count;
75 } else {
76 *pPhysicalDeviceCount = icd_physical_device_count;
78 return result_code;
81 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures(
82 VkPhysicalDevice physicalDevice,
83 VkPhysicalDeviceFeatures* pFeatures)
85 uint32_t num_bools = sizeof(VkPhysicalDeviceFeatures) / sizeof(VkBool32);
86 VkBool32 *bool_array = &pFeatures->robustBufferAccess;
87 SetBoolArrayTrue(bool_array, num_bools);
90 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties(
91 VkPhysicalDevice physicalDevice,
92 VkFormat format,
93 VkFormatProperties* pFormatProperties)
95 if (VK_FORMAT_UNDEFINED == format) {
96 *pFormatProperties = { 0x0, 0x0, 0x0 };
97 } else {
98 // Default to a color format, skip DS bit
99 *pFormatProperties = { 0x00FFFDFF, 0x00FFFDFF, 0x00FFFDFF };
100 switch (format) {
101 case VK_FORMAT_D16_UNORM:
102 case VK_FORMAT_X8_D24_UNORM_PACK32:
103 case VK_FORMAT_D32_SFLOAT:
104 case VK_FORMAT_S8_UINT:
105 case VK_FORMAT_D16_UNORM_S8_UINT:
106 case VK_FORMAT_D24_UNORM_S8_UINT:
107 case VK_FORMAT_D32_SFLOAT_S8_UINT:
108 // Don't set color bits for DS formats
109 *pFormatProperties = { 0x00FFFE7F, 0x00FFFE7F, 0x00FFFE7F };
110 break;
111 case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
112 case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
113 case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:
114 case VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16:
115 case VK_FORMAT_G8_B8R8_2PLANE_444_UNORM:
116 // Set decode/encode bits for these formats
117 *pFormatProperties = { 0x1EFFFDFF, 0x1EFFFDFF, 0x00FFFDFF };
118 break;
119 default:
120 break;
125 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties(
126 VkPhysicalDevice physicalDevice,
127 VkFormat format,
128 VkImageType type,
129 VkImageTiling tiling,
130 VkImageUsageFlags usage,
131 VkImageCreateFlags flags,
132 VkImageFormatProperties* pImageFormatProperties)
134 // A hardcoded unsupported format
135 if (format == VK_FORMAT_E5B9G9R9_UFLOAT_PACK32) {
136 return VK_ERROR_FORMAT_NOT_SUPPORTED;
139 // TODO: Just hard-coding some values for now
140 // TODO: If tiling is linear, limit the mips, levels, & sample count
141 if (VK_IMAGE_TILING_LINEAR == tiling) {
142 *pImageFormatProperties = { { 4096, 4096, 256 }, 1, 1, VK_SAMPLE_COUNT_1_BIT, 4294967296 };
143 } else {
144 // We hard-code support for all sample counts except 64 bits.
145 *pImageFormatProperties = { { 4096, 4096, 256 }, 12, 256, 0x7F & ~VK_SAMPLE_COUNT_64_BIT, 4294967296 };
147 return VK_SUCCESS;
150 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties(
151 VkPhysicalDevice physicalDevice,
152 VkPhysicalDeviceProperties* pProperties)
154 pProperties->apiVersion = VK_HEADER_VERSION_COMPLETE;
155 pProperties->driverVersion = 1;
156 pProperties->vendorID = 0xba5eba11;
157 pProperties->deviceID = 0xf005ba11;
158 pProperties->deviceType = VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU;
159 //std::string devName = "Vulkan Mock Device";
160 strcpy(pProperties->deviceName, "Vulkan Mock Device");
161 pProperties->pipelineCacheUUID[0] = 18;
162 pProperties->limits = SetLimits(&pProperties->limits);
163 pProperties->sparseProperties = { VK_TRUE, VK_TRUE, VK_TRUE, VK_TRUE, VK_TRUE };
166 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties(
167 VkPhysicalDevice physicalDevice,
168 uint32_t* pQueueFamilyPropertyCount,
169 VkQueueFamilyProperties* pQueueFamilyProperties)
171 if (pQueueFamilyProperties) {
172 std::vector<VkQueueFamilyProperties2KHR> props2(*pQueueFamilyPropertyCount, {
173 VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR});
174 GetPhysicalDeviceQueueFamilyProperties2KHR(physicalDevice, pQueueFamilyPropertyCount, props2.data());
175 for (uint32_t i = 0; i < *pQueueFamilyPropertyCount; ++i) {
176 pQueueFamilyProperties[i] = props2[i].queueFamilyProperties;
178 } else {
179 GetPhysicalDeviceQueueFamilyProperties2KHR(physicalDevice, pQueueFamilyPropertyCount, nullptr);
183 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties(
184 VkPhysicalDevice physicalDevice,
185 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
187 pMemoryProperties->memoryTypeCount = 6;
188 // Host visible Coherent
189 pMemoryProperties->memoryTypes[0].propertyFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
190 pMemoryProperties->memoryTypes[0].heapIndex = 0;
191 // Host visible Cached
192 pMemoryProperties->memoryTypes[1].propertyFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT;
193 pMemoryProperties->memoryTypes[1].heapIndex = 0;
194 // Device local and Host visible
195 pMemoryProperties->memoryTypes[2].propertyFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
196 pMemoryProperties->memoryTypes[2].heapIndex = 1;
197 // Device local lazily
198 pMemoryProperties->memoryTypes[3].propertyFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT;
199 pMemoryProperties->memoryTypes[3].heapIndex = 1;
200 // Device local protected
201 pMemoryProperties->memoryTypes[4].propertyFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_PROTECTED_BIT;
202 pMemoryProperties->memoryTypes[4].heapIndex = 1;
203 // Device local only
204 pMemoryProperties->memoryTypes[5].propertyFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
205 pMemoryProperties->memoryTypes[5].heapIndex = 1;
206 pMemoryProperties->memoryHeapCount = 2;
207 pMemoryProperties->memoryHeaps[0].flags = VK_MEMORY_HEAP_MULTI_INSTANCE_BIT;
208 pMemoryProperties->memoryHeaps[0].size = 8000000000;
209 pMemoryProperties->memoryHeaps[1].flags = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT;
210 pMemoryProperties->memoryHeaps[1].size = 8000000000;
213 static VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetInstanceProcAddr(
214 VkInstance instance,
215 const char* pName)
218 if (!negotiate_loader_icd_interface_called) {
219 loader_interface_version = 0;
221 const auto &item = name_to_funcptr_map.find(pName);
222 if (item != name_to_funcptr_map.end()) {
223 return reinterpret_cast<PFN_vkVoidFunction>(item->second);
225 // Mock should intercept all functions so if we get here just return null
226 return nullptr;
229 static VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(
230 VkDevice device,
231 const char* pName)
234 return GetInstanceProcAddr(nullptr, pName);
237 static VKAPI_ATTR VkResult VKAPI_CALL CreateDevice(
238 VkPhysicalDevice physicalDevice,
239 const VkDeviceCreateInfo* pCreateInfo,
240 const VkAllocationCallbacks* pAllocator,
241 VkDevice* pDevice)
244 *pDevice = (VkDevice)CreateDispObjHandle();
245 // TODO: If emulating specific device caps, will need to add intelligence here
246 return VK_SUCCESS;
249 static VKAPI_ATTR void VKAPI_CALL DestroyDevice(
250 VkDevice device,
251 const VkAllocationCallbacks* pAllocator)
254 unique_lock_t lock(global_lock);
255 // First destroy sub-device objects
256 // Destroy Queues
257 for (auto queue_family_map_pair : queue_map[device]) {
258 for (auto index_queue_pair : queue_map[device][queue_family_map_pair.first]) {
259 DestroyDispObjHandle((void*)index_queue_pair.second);
263 for (auto& cp : command_pool_map[device]) {
264 for (auto& cb : command_pool_buffer_map[cp]) {
265 DestroyDispObjHandle((void*) cb);
267 command_pool_buffer_map.erase(cp);
269 command_pool_map[device].clear();
271 queue_map.erase(device);
272 buffer_map.erase(device);
273 image_memory_size_map.erase(device);
274 // Now destroy device
275 DestroyDispObjHandle((void*)device);
276 // TODO: If emulating specific device caps, will need to add intelligence here
279 static VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceExtensionProperties(
280 const char* pLayerName,
281 uint32_t* pPropertyCount,
282 VkExtensionProperties* pProperties)
285 // If requesting number of extensions, return that
286 if (!pLayerName) {
287 if (!pProperties) {
288 *pPropertyCount = (uint32_t)instance_extension_map.size();
289 } else {
290 uint32_t i = 0;
291 for (const auto &name_ver_pair : instance_extension_map) {
292 if (i == *pPropertyCount) {
293 break;
295 std::strncpy(pProperties[i].extensionName, name_ver_pair.first.c_str(), sizeof(pProperties[i].extensionName));
296 pProperties[i].extensionName[sizeof(pProperties[i].extensionName) - 1] = 0;
297 pProperties[i].specVersion = name_ver_pair.second;
298 ++i;
300 if (i != instance_extension_map.size()) {
301 return VK_INCOMPLETE;
305 // If requesting extension properties, fill in data struct for number of extensions
306 return VK_SUCCESS;
309 static VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceExtensionProperties(
310 VkPhysicalDevice physicalDevice,
311 const char* pLayerName,
312 uint32_t* pPropertyCount,
313 VkExtensionProperties* pProperties)
316 // If requesting number of extensions, return that
317 if (!pLayerName) {
318 if (!pProperties) {
319 *pPropertyCount = (uint32_t)device_extension_map.size();
320 } else {
321 uint32_t i = 0;
322 for (const auto &name_ver_pair : device_extension_map) {
323 if (i == *pPropertyCount) {
324 break;
326 std::strncpy(pProperties[i].extensionName, name_ver_pair.first.c_str(), sizeof(pProperties[i].extensionName));
327 pProperties[i].extensionName[sizeof(pProperties[i].extensionName) - 1] = 0;
328 pProperties[i].specVersion = name_ver_pair.second;
329 ++i;
331 if (i != device_extension_map.size()) {
332 return VK_INCOMPLETE;
336 // If requesting extension properties, fill in data struct for number of extensions
337 return VK_SUCCESS;
340 static VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceLayerProperties(
341 uint32_t* pPropertyCount,
342 VkLayerProperties* pProperties)
345 return VK_SUCCESS;
348 static VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceLayerProperties(
349 VkPhysicalDevice physicalDevice,
350 uint32_t* pPropertyCount,
351 VkLayerProperties* pProperties)
354 return VK_SUCCESS;
357 static VKAPI_ATTR void VKAPI_CALL GetDeviceQueue(
358 VkDevice device,
359 uint32_t queueFamilyIndex,
360 uint32_t queueIndex,
361 VkQueue* pQueue)
363 unique_lock_t lock(global_lock);
364 auto queue = queue_map[device][queueFamilyIndex][queueIndex];
365 if (queue) {
366 *pQueue = queue;
367 } else {
368 *pQueue = queue_map[device][queueFamilyIndex][queueIndex] = (VkQueue)CreateDispObjHandle();
370 // TODO: If emulating specific device caps, will need to add intelligence here
371 return;
374 static VKAPI_ATTR VkResult VKAPI_CALL QueueSubmit(
375 VkQueue queue,
376 uint32_t submitCount,
377 const VkSubmitInfo* pSubmits,
378 VkFence fence)
380 // Special way to cause DEVICE_LOST
381 // Picked VkExportFenceCreateInfo because needed some struct that wouldn't get cleared by validation Safe Struct
382 // ... TODO - It would be MUCH nicer to have a layer or other setting control when this occured
383 // For now this is used to allow Validation Layers test reacting to device losts
384 if (submitCount > 0 && pSubmits) {
385 auto pNext = reinterpret_cast<const VkBaseInStructure *>(pSubmits[0].pNext);
386 if (pNext && pNext->sType == VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO && pNext->pNext == nullptr) {
387 return VK_ERROR_DEVICE_LOST;
390 return VK_SUCCESS;
393 static VKAPI_ATTR VkResult VKAPI_CALL QueueWaitIdle(
394 VkQueue queue)
396 //Not a CREATE or DESTROY function
397 return VK_SUCCESS;
400 static VKAPI_ATTR VkResult VKAPI_CALL DeviceWaitIdle(
401 VkDevice device)
403 //Not a CREATE or DESTROY function
404 return VK_SUCCESS;
407 static VKAPI_ATTR VkResult VKAPI_CALL AllocateMemory(
408 VkDevice device,
409 const VkMemoryAllocateInfo* pAllocateInfo,
410 const VkAllocationCallbacks* pAllocator,
411 VkDeviceMemory* pMemory)
413 unique_lock_t lock(global_lock);
414 allocated_memory_size_map[(VkDeviceMemory)global_unique_handle] = pAllocateInfo->allocationSize;
415 *pMemory = (VkDeviceMemory)global_unique_handle++;
416 return VK_SUCCESS;
419 static VKAPI_ATTR void VKAPI_CALL FreeMemory(
420 VkDevice device,
421 VkDeviceMemory memory,
422 const VkAllocationCallbacks* pAllocator)
424 //Destroy object
425 UnmapMemory(device, memory);
426 unique_lock_t lock(global_lock);
427 allocated_memory_size_map.erase(memory);
430 static VKAPI_ATTR VkResult VKAPI_CALL MapMemory(
431 VkDevice device,
432 VkDeviceMemory memory,
433 VkDeviceSize offset,
434 VkDeviceSize size,
435 VkMemoryMapFlags flags,
436 void** ppData)
438 unique_lock_t lock(global_lock);
439 if (VK_WHOLE_SIZE == size) {
440 if (allocated_memory_size_map.count(memory) != 0)
441 size = allocated_memory_size_map[memory] - offset;
442 else
443 size = 0x10000;
445 void* map_addr = malloc((size_t)size);
446 mapped_memory_map[memory].push_back(map_addr);
447 *ppData = map_addr;
448 return VK_SUCCESS;
451 static VKAPI_ATTR void VKAPI_CALL UnmapMemory(
452 VkDevice device,
453 VkDeviceMemory memory)
455 unique_lock_t lock(global_lock);
456 for (auto map_addr : mapped_memory_map[memory]) {
457 free(map_addr);
459 mapped_memory_map.erase(memory);
462 static VKAPI_ATTR VkResult VKAPI_CALL FlushMappedMemoryRanges(
463 VkDevice device,
464 uint32_t memoryRangeCount,
465 const VkMappedMemoryRange* pMemoryRanges)
467 //Not a CREATE or DESTROY function
468 return VK_SUCCESS;
471 static VKAPI_ATTR VkResult VKAPI_CALL InvalidateMappedMemoryRanges(
472 VkDevice device,
473 uint32_t memoryRangeCount,
474 const VkMappedMemoryRange* pMemoryRanges)
476 //Not a CREATE or DESTROY function
477 return VK_SUCCESS;
480 static VKAPI_ATTR void VKAPI_CALL GetDeviceMemoryCommitment(
481 VkDevice device,
482 VkDeviceMemory memory,
483 VkDeviceSize* pCommittedMemoryInBytes)
485 //Not a CREATE or DESTROY function
488 static VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory(
489 VkDevice device,
490 VkBuffer buffer,
491 VkDeviceMemory memory,
492 VkDeviceSize memoryOffset)
494 //Not a CREATE or DESTROY function
495 return VK_SUCCESS;
498 static VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory(
499 VkDevice device,
500 VkImage image,
501 VkDeviceMemory memory,
502 VkDeviceSize memoryOffset)
504 //Not a CREATE or DESTROY function
505 return VK_SUCCESS;
508 static VKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements(
509 VkDevice device,
510 VkBuffer buffer,
511 VkMemoryRequirements* pMemoryRequirements)
513 // TODO: Just hard-coding reqs for now
514 pMemoryRequirements->size = 4096;
515 pMemoryRequirements->alignment = 1;
516 pMemoryRequirements->memoryTypeBits = 0xFFFF;
517 // Return a better size based on the buffer size from the create info.
518 unique_lock_t lock(global_lock);
519 auto d_iter = buffer_map.find(device);
520 if (d_iter != buffer_map.end()) {
521 auto iter = d_iter->second.find(buffer);
522 if (iter != d_iter->second.end()) {
523 pMemoryRequirements->size = ((iter->second.size + 4095) / 4096) * 4096;
528 static VKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements(
529 VkDevice device,
530 VkImage image,
531 VkMemoryRequirements* pMemoryRequirements)
533 pMemoryRequirements->size = 0;
534 pMemoryRequirements->alignment = 1;
536 unique_lock_t lock(global_lock);
537 auto d_iter = image_memory_size_map.find(device);
538 if(d_iter != image_memory_size_map.end()){
539 auto iter = d_iter->second.find(image);
540 if (iter != d_iter->second.end()) {
541 pMemoryRequirements->size = iter->second;
544 // Here we hard-code that the memory type at index 3 doesn't support this image.
545 pMemoryRequirements->memoryTypeBits = 0xFFFF & ~(0x1 << 3);
548 static VKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements(
549 VkDevice device,
550 VkImage image,
551 uint32_t* pSparseMemoryRequirementCount,
552 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
554 if (!pSparseMemoryRequirements) {
555 *pSparseMemoryRequirementCount = 1;
556 } else {
557 // arbitrary
558 pSparseMemoryRequirements->imageMipTailFirstLod = 0;
559 pSparseMemoryRequirements->imageMipTailSize = 8;
560 pSparseMemoryRequirements->imageMipTailOffset = 0;
561 pSparseMemoryRequirements->imageMipTailStride = 4;
562 pSparseMemoryRequirements->formatProperties.imageGranularity = {4, 4, 4};
563 pSparseMemoryRequirements->formatProperties.flags = VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT;
564 // Would need to track the VkImage to know format for better value here
565 pSparseMemoryRequirements->formatProperties.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT;
570 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties(
571 VkPhysicalDevice physicalDevice,
572 VkFormat format,
573 VkImageType type,
574 VkSampleCountFlagBits samples,
575 VkImageUsageFlags usage,
576 VkImageTiling tiling,
577 uint32_t* pPropertyCount,
578 VkSparseImageFormatProperties* pProperties)
580 if (!pProperties) {
581 *pPropertyCount = 1;
582 } else {
583 // arbitrary
584 pProperties->imageGranularity = {4, 4, 4};
585 pProperties->flags = VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT;
586 switch (format) {
587 case VK_FORMAT_D16_UNORM:
588 case VK_FORMAT_D32_SFLOAT:
589 pProperties->aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT;
590 break;
591 case VK_FORMAT_S8_UINT:
592 pProperties->aspectMask = VK_IMAGE_ASPECT_STENCIL_BIT;
593 break;
594 case VK_FORMAT_X8_D24_UNORM_PACK32:
595 case VK_FORMAT_D16_UNORM_S8_UINT:
596 case VK_FORMAT_D24_UNORM_S8_UINT:
597 case VK_FORMAT_D32_SFLOAT_S8_UINT:
598 pProperties->aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT;
599 break;
600 default:
601 pProperties->aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
602 break;
607 static VKAPI_ATTR VkResult VKAPI_CALL QueueBindSparse(
608 VkQueue queue,
609 uint32_t bindInfoCount,
610 const VkBindSparseInfo* pBindInfo,
611 VkFence fence)
613 //Not a CREATE or DESTROY function
614 return VK_SUCCESS;
617 static VKAPI_ATTR VkResult VKAPI_CALL CreateFence(
618 VkDevice device,
619 const VkFenceCreateInfo* pCreateInfo,
620 const VkAllocationCallbacks* pAllocator,
621 VkFence* pFence)
623 unique_lock_t lock(global_lock);
624 *pFence = (VkFence)global_unique_handle++;
625 return VK_SUCCESS;
628 static VKAPI_ATTR void VKAPI_CALL DestroyFence(
629 VkDevice device,
630 VkFence fence,
631 const VkAllocationCallbacks* pAllocator)
633 //Destroy object
636 static VKAPI_ATTR VkResult VKAPI_CALL ResetFences(
637 VkDevice device,
638 uint32_t fenceCount,
639 const VkFence* pFences)
641 //Not a CREATE or DESTROY function
642 return VK_SUCCESS;
645 static VKAPI_ATTR VkResult VKAPI_CALL GetFenceStatus(
646 VkDevice device,
647 VkFence fence)
649 //Not a CREATE or DESTROY function
650 return VK_SUCCESS;
653 static VKAPI_ATTR VkResult VKAPI_CALL WaitForFences(
654 VkDevice device,
655 uint32_t fenceCount,
656 const VkFence* pFences,
657 VkBool32 waitAll,
658 uint64_t timeout)
660 //Not a CREATE or DESTROY function
661 return VK_SUCCESS;
664 static VKAPI_ATTR VkResult VKAPI_CALL CreateSemaphore(
665 VkDevice device,
666 const VkSemaphoreCreateInfo* pCreateInfo,
667 const VkAllocationCallbacks* pAllocator,
668 VkSemaphore* pSemaphore)
670 unique_lock_t lock(global_lock);
671 *pSemaphore = (VkSemaphore)global_unique_handle++;
672 return VK_SUCCESS;
675 static VKAPI_ATTR void VKAPI_CALL DestroySemaphore(
676 VkDevice device,
677 VkSemaphore semaphore,
678 const VkAllocationCallbacks* pAllocator)
680 //Destroy object
683 static VKAPI_ATTR VkResult VKAPI_CALL CreateEvent(
684 VkDevice device,
685 const VkEventCreateInfo* pCreateInfo,
686 const VkAllocationCallbacks* pAllocator,
687 VkEvent* pEvent)
689 unique_lock_t lock(global_lock);
690 *pEvent = (VkEvent)global_unique_handle++;
691 return VK_SUCCESS;
694 static VKAPI_ATTR void VKAPI_CALL DestroyEvent(
695 VkDevice device,
696 VkEvent event,
697 const VkAllocationCallbacks* pAllocator)
699 //Destroy object
702 static VKAPI_ATTR VkResult VKAPI_CALL GetEventStatus(
703 VkDevice device,
704 VkEvent event)
706 //Not a CREATE or DESTROY function
707 return VK_EVENT_SET;
710 static VKAPI_ATTR VkResult VKAPI_CALL SetEvent(
711 VkDevice device,
712 VkEvent event)
714 //Not a CREATE or DESTROY function
715 return VK_SUCCESS;
718 static VKAPI_ATTR VkResult VKAPI_CALL ResetEvent(
719 VkDevice device,
720 VkEvent event)
722 //Not a CREATE or DESTROY function
723 return VK_SUCCESS;
726 static VKAPI_ATTR VkResult VKAPI_CALL CreateQueryPool(
727 VkDevice device,
728 const VkQueryPoolCreateInfo* pCreateInfo,
729 const VkAllocationCallbacks* pAllocator,
730 VkQueryPool* pQueryPool)
732 unique_lock_t lock(global_lock);
733 *pQueryPool = (VkQueryPool)global_unique_handle++;
734 return VK_SUCCESS;
737 static VKAPI_ATTR void VKAPI_CALL DestroyQueryPool(
738 VkDevice device,
739 VkQueryPool queryPool,
740 const VkAllocationCallbacks* pAllocator)
742 //Destroy object
745 static VKAPI_ATTR VkResult VKAPI_CALL GetQueryPoolResults(
746 VkDevice device,
747 VkQueryPool queryPool,
748 uint32_t firstQuery,
749 uint32_t queryCount,
750 size_t dataSize,
751 void* pData,
752 VkDeviceSize stride,
753 VkQueryResultFlags flags)
755 //Not a CREATE or DESTROY function
756 return VK_SUCCESS;
759 static VKAPI_ATTR VkResult VKAPI_CALL CreateBuffer(
760 VkDevice device,
761 const VkBufferCreateInfo* pCreateInfo,
762 const VkAllocationCallbacks* pAllocator,
763 VkBuffer* pBuffer)
765 unique_lock_t lock(global_lock);
766 *pBuffer = (VkBuffer)global_unique_handle++;
767 buffer_map[device][*pBuffer] = {
768 pCreateInfo->size,
769 current_available_address
771 current_available_address += pCreateInfo->size;
772 // Always align to next 64-bit pointer
773 const uint64_t alignment = current_available_address % 64;
774 if (alignment != 0) {
775 current_available_address += (64 - alignment);
777 return VK_SUCCESS;
780 static VKAPI_ATTR void VKAPI_CALL DestroyBuffer(
781 VkDevice device,
782 VkBuffer buffer,
783 const VkAllocationCallbacks* pAllocator)
785 unique_lock_t lock(global_lock);
786 buffer_map[device].erase(buffer);
789 static VKAPI_ATTR VkResult VKAPI_CALL CreateBufferView(
790 VkDevice device,
791 const VkBufferViewCreateInfo* pCreateInfo,
792 const VkAllocationCallbacks* pAllocator,
793 VkBufferView* pView)
795 unique_lock_t lock(global_lock);
796 *pView = (VkBufferView)global_unique_handle++;
797 return VK_SUCCESS;
800 static VKAPI_ATTR void VKAPI_CALL DestroyBufferView(
801 VkDevice device,
802 VkBufferView bufferView,
803 const VkAllocationCallbacks* pAllocator)
805 //Destroy object
808 static VKAPI_ATTR VkResult VKAPI_CALL CreateImage(
809 VkDevice device,
810 const VkImageCreateInfo* pCreateInfo,
811 const VkAllocationCallbacks* pAllocator,
812 VkImage* pImage)
814 unique_lock_t lock(global_lock);
815 *pImage = (VkImage)global_unique_handle++;
816 image_memory_size_map[device][*pImage] = GetImageSizeFromCreateInfo(pCreateInfo);
817 return VK_SUCCESS;
820 static VKAPI_ATTR void VKAPI_CALL DestroyImage(
821 VkDevice device,
822 VkImage image,
823 const VkAllocationCallbacks* pAllocator)
825 unique_lock_t lock(global_lock);
826 image_memory_size_map[device].erase(image);
829 static VKAPI_ATTR void VKAPI_CALL GetImageSubresourceLayout(
830 VkDevice device,
831 VkImage image,
832 const VkImageSubresource* pSubresource,
833 VkSubresourceLayout* pLayout)
835 // Need safe values. Callers are computing memory offsets from pLayout, with no return code to flag failure.
836 *pLayout = VkSubresourceLayout(); // Default constructor zero values.
839 static VKAPI_ATTR VkResult VKAPI_CALL CreateImageView(
840 VkDevice device,
841 const VkImageViewCreateInfo* pCreateInfo,
842 const VkAllocationCallbacks* pAllocator,
843 VkImageView* pView)
845 unique_lock_t lock(global_lock);
846 *pView = (VkImageView)global_unique_handle++;
847 return VK_SUCCESS;
850 static VKAPI_ATTR void VKAPI_CALL DestroyImageView(
851 VkDevice device,
852 VkImageView imageView,
853 const VkAllocationCallbacks* pAllocator)
855 //Destroy object
858 static VKAPI_ATTR VkResult VKAPI_CALL CreateShaderModule(
859 VkDevice device,
860 const VkShaderModuleCreateInfo* pCreateInfo,
861 const VkAllocationCallbacks* pAllocator,
862 VkShaderModule* pShaderModule)
864 unique_lock_t lock(global_lock);
865 *pShaderModule = (VkShaderModule)global_unique_handle++;
866 return VK_SUCCESS;
869 static VKAPI_ATTR void VKAPI_CALL DestroyShaderModule(
870 VkDevice device,
871 VkShaderModule shaderModule,
872 const VkAllocationCallbacks* pAllocator)
874 //Destroy object
877 static VKAPI_ATTR VkResult VKAPI_CALL CreatePipelineCache(
878 VkDevice device,
879 const VkPipelineCacheCreateInfo* pCreateInfo,
880 const VkAllocationCallbacks* pAllocator,
881 VkPipelineCache* pPipelineCache)
883 unique_lock_t lock(global_lock);
884 *pPipelineCache = (VkPipelineCache)global_unique_handle++;
885 return VK_SUCCESS;
888 static VKAPI_ATTR void VKAPI_CALL DestroyPipelineCache(
889 VkDevice device,
890 VkPipelineCache pipelineCache,
891 const VkAllocationCallbacks* pAllocator)
893 //Destroy object
896 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineCacheData(
897 VkDevice device,
898 VkPipelineCache pipelineCache,
899 size_t* pDataSize,
900 void* pData)
902 //Not a CREATE or DESTROY function
903 return VK_SUCCESS;
906 static VKAPI_ATTR VkResult VKAPI_CALL MergePipelineCaches(
907 VkDevice device,
908 VkPipelineCache dstCache,
909 uint32_t srcCacheCount,
910 const VkPipelineCache* pSrcCaches)
912 //Not a CREATE or DESTROY function
913 return VK_SUCCESS;
916 static VKAPI_ATTR VkResult VKAPI_CALL CreateGraphicsPipelines(
917 VkDevice device,
918 VkPipelineCache pipelineCache,
919 uint32_t createInfoCount,
920 const VkGraphicsPipelineCreateInfo* pCreateInfos,
921 const VkAllocationCallbacks* pAllocator,
922 VkPipeline* pPipelines)
924 unique_lock_t lock(global_lock);
925 for (uint32_t i = 0; i < createInfoCount; ++i) {
926 pPipelines[i] = (VkPipeline)global_unique_handle++;
928 return VK_SUCCESS;
931 static VKAPI_ATTR VkResult VKAPI_CALL CreateComputePipelines(
932 VkDevice device,
933 VkPipelineCache pipelineCache,
934 uint32_t createInfoCount,
935 const VkComputePipelineCreateInfo* pCreateInfos,
936 const VkAllocationCallbacks* pAllocator,
937 VkPipeline* pPipelines)
939 unique_lock_t lock(global_lock);
940 for (uint32_t i = 0; i < createInfoCount; ++i) {
941 pPipelines[i] = (VkPipeline)global_unique_handle++;
943 return VK_SUCCESS;
946 static VKAPI_ATTR void VKAPI_CALL DestroyPipeline(
947 VkDevice device,
948 VkPipeline pipeline,
949 const VkAllocationCallbacks* pAllocator)
951 //Destroy object
954 static VKAPI_ATTR VkResult VKAPI_CALL CreatePipelineLayout(
955 VkDevice device,
956 const VkPipelineLayoutCreateInfo* pCreateInfo,
957 const VkAllocationCallbacks* pAllocator,
958 VkPipelineLayout* pPipelineLayout)
960 unique_lock_t lock(global_lock);
961 *pPipelineLayout = (VkPipelineLayout)global_unique_handle++;
962 return VK_SUCCESS;
965 static VKAPI_ATTR void VKAPI_CALL DestroyPipelineLayout(
966 VkDevice device,
967 VkPipelineLayout pipelineLayout,
968 const VkAllocationCallbacks* pAllocator)
970 //Destroy object
973 static VKAPI_ATTR VkResult VKAPI_CALL CreateSampler(
974 VkDevice device,
975 const VkSamplerCreateInfo* pCreateInfo,
976 const VkAllocationCallbacks* pAllocator,
977 VkSampler* pSampler)
979 unique_lock_t lock(global_lock);
980 *pSampler = (VkSampler)global_unique_handle++;
981 return VK_SUCCESS;
984 static VKAPI_ATTR void VKAPI_CALL DestroySampler(
985 VkDevice device,
986 VkSampler sampler,
987 const VkAllocationCallbacks* pAllocator)
989 //Destroy object
992 static VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorSetLayout(
993 VkDevice device,
994 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
995 const VkAllocationCallbacks* pAllocator,
996 VkDescriptorSetLayout* pSetLayout)
998 unique_lock_t lock(global_lock);
999 *pSetLayout = (VkDescriptorSetLayout)global_unique_handle++;
1000 return VK_SUCCESS;
1003 static VKAPI_ATTR void VKAPI_CALL DestroyDescriptorSetLayout(
1004 VkDevice device,
1005 VkDescriptorSetLayout descriptorSetLayout,
1006 const VkAllocationCallbacks* pAllocator)
1008 //Destroy object
1011 static VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorPool(
1012 VkDevice device,
1013 const VkDescriptorPoolCreateInfo* pCreateInfo,
1014 const VkAllocationCallbacks* pAllocator,
1015 VkDescriptorPool* pDescriptorPool)
1017 unique_lock_t lock(global_lock);
1018 *pDescriptorPool = (VkDescriptorPool)global_unique_handle++;
1019 return VK_SUCCESS;
1022 static VKAPI_ATTR void VKAPI_CALL DestroyDescriptorPool(
1023 VkDevice device,
1024 VkDescriptorPool descriptorPool,
1025 const VkAllocationCallbacks* pAllocator)
1027 //Destroy object
1030 static VKAPI_ATTR VkResult VKAPI_CALL ResetDescriptorPool(
1031 VkDevice device,
1032 VkDescriptorPool descriptorPool,
1033 VkDescriptorPoolResetFlags flags)
1035 //Not a CREATE or DESTROY function
1036 return VK_SUCCESS;
1039 static VKAPI_ATTR VkResult VKAPI_CALL AllocateDescriptorSets(
1040 VkDevice device,
1041 const VkDescriptorSetAllocateInfo* pAllocateInfo,
1042 VkDescriptorSet* pDescriptorSets)
1044 unique_lock_t lock(global_lock);
1045 for (uint32_t i = 0; i < pAllocateInfo->descriptorSetCount; ++i) {
1046 pDescriptorSets[i] = (VkDescriptorSet)global_unique_handle++;
1048 return VK_SUCCESS;
1051 static VKAPI_ATTR VkResult VKAPI_CALL FreeDescriptorSets(
1052 VkDevice device,
1053 VkDescriptorPool descriptorPool,
1054 uint32_t descriptorSetCount,
1055 const VkDescriptorSet* pDescriptorSets)
1057 //Destroy object
1058 return VK_SUCCESS;
1061 static VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSets(
1062 VkDevice device,
1063 uint32_t descriptorWriteCount,
1064 const VkWriteDescriptorSet* pDescriptorWrites,
1065 uint32_t descriptorCopyCount,
1066 const VkCopyDescriptorSet* pDescriptorCopies)
1068 //Not a CREATE or DESTROY function
1071 static VKAPI_ATTR VkResult VKAPI_CALL CreateFramebuffer(
1072 VkDevice device,
1073 const VkFramebufferCreateInfo* pCreateInfo,
1074 const VkAllocationCallbacks* pAllocator,
1075 VkFramebuffer* pFramebuffer)
1077 unique_lock_t lock(global_lock);
1078 *pFramebuffer = (VkFramebuffer)global_unique_handle++;
1079 return VK_SUCCESS;
1082 static VKAPI_ATTR void VKAPI_CALL DestroyFramebuffer(
1083 VkDevice device,
1084 VkFramebuffer framebuffer,
1085 const VkAllocationCallbacks* pAllocator)
1087 //Destroy object
1090 static VKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass(
1091 VkDevice device,
1092 const VkRenderPassCreateInfo* pCreateInfo,
1093 const VkAllocationCallbacks* pAllocator,
1094 VkRenderPass* pRenderPass)
1096 unique_lock_t lock(global_lock);
1097 *pRenderPass = (VkRenderPass)global_unique_handle++;
1098 return VK_SUCCESS;
1101 static VKAPI_ATTR void VKAPI_CALL DestroyRenderPass(
1102 VkDevice device,
1103 VkRenderPass renderPass,
1104 const VkAllocationCallbacks* pAllocator)
1106 //Destroy object
1109 static VKAPI_ATTR void VKAPI_CALL GetRenderAreaGranularity(
1110 VkDevice device,
1111 VkRenderPass renderPass,
1112 VkExtent2D* pGranularity)
1114 pGranularity->width = 1;
1115 pGranularity->height = 1;
1118 static VKAPI_ATTR VkResult VKAPI_CALL CreateCommandPool(
1119 VkDevice device,
1120 const VkCommandPoolCreateInfo* pCreateInfo,
1121 const VkAllocationCallbacks* pAllocator,
1122 VkCommandPool* pCommandPool)
1124 unique_lock_t lock(global_lock);
1125 *pCommandPool = (VkCommandPool)global_unique_handle++;
1126 command_pool_map[device].insert(*pCommandPool);
1127 return VK_SUCCESS;
1130 static VKAPI_ATTR void VKAPI_CALL DestroyCommandPool(
1131 VkDevice device,
1132 VkCommandPool commandPool,
1133 const VkAllocationCallbacks* pAllocator)
1136 // destroy command buffers for this pool
1137 unique_lock_t lock(global_lock);
1138 auto it = command_pool_buffer_map.find(commandPool);
1139 if (it != command_pool_buffer_map.end()) {
1140 for (auto& cb : it->second) {
1141 DestroyDispObjHandle((void*) cb);
1143 command_pool_buffer_map.erase(it);
1145 command_pool_map[device].erase(commandPool);
1148 static VKAPI_ATTR VkResult VKAPI_CALL ResetCommandPool(
1149 VkDevice device,
1150 VkCommandPool commandPool,
1151 VkCommandPoolResetFlags flags)
1153 //Not a CREATE or DESTROY function
1154 return VK_SUCCESS;
1157 static VKAPI_ATTR VkResult VKAPI_CALL AllocateCommandBuffers(
1158 VkDevice device,
1159 const VkCommandBufferAllocateInfo* pAllocateInfo,
1160 VkCommandBuffer* pCommandBuffers)
1163 unique_lock_t lock(global_lock);
1164 for (uint32_t i = 0; i < pAllocateInfo->commandBufferCount; ++i) {
1165 pCommandBuffers[i] = (VkCommandBuffer)CreateDispObjHandle();
1166 command_pool_buffer_map[pAllocateInfo->commandPool].push_back(pCommandBuffers[i]);
1168 return VK_SUCCESS;
1171 static VKAPI_ATTR void VKAPI_CALL FreeCommandBuffers(
1172 VkDevice device,
1173 VkCommandPool commandPool,
1174 uint32_t commandBufferCount,
1175 const VkCommandBuffer* pCommandBuffers)
1178 unique_lock_t lock(global_lock);
1179 for (auto i = 0u; i < commandBufferCount; ++i) {
1180 if (!pCommandBuffers[i]) {
1181 continue;
1184 for (auto& pair : command_pool_buffer_map) {
1185 auto& cbs = pair.second;
1186 auto it = std::find(cbs.begin(), cbs.end(), pCommandBuffers[i]);
1187 if (it != cbs.end()) {
1188 cbs.erase(it);
1192 DestroyDispObjHandle((void*) pCommandBuffers[i]);
1196 static VKAPI_ATTR VkResult VKAPI_CALL BeginCommandBuffer(
1197 VkCommandBuffer commandBuffer,
1198 const VkCommandBufferBeginInfo* pBeginInfo)
1200 //Not a CREATE or DESTROY function
1201 return VK_SUCCESS;
1204 static VKAPI_ATTR VkResult VKAPI_CALL EndCommandBuffer(
1205 VkCommandBuffer commandBuffer)
1207 //Not a CREATE or DESTROY function
1208 return VK_SUCCESS;
1211 static VKAPI_ATTR VkResult VKAPI_CALL ResetCommandBuffer(
1212 VkCommandBuffer commandBuffer,
1213 VkCommandBufferResetFlags flags)
1215 //Not a CREATE or DESTROY function
1216 return VK_SUCCESS;
1219 static VKAPI_ATTR void VKAPI_CALL CmdBindPipeline(
1220 VkCommandBuffer commandBuffer,
1221 VkPipelineBindPoint pipelineBindPoint,
1222 VkPipeline pipeline)
1224 //Not a CREATE or DESTROY function
1227 static VKAPI_ATTR void VKAPI_CALL CmdSetViewport(
1228 VkCommandBuffer commandBuffer,
1229 uint32_t firstViewport,
1230 uint32_t viewportCount,
1231 const VkViewport* pViewports)
1233 //Not a CREATE or DESTROY function
1236 static VKAPI_ATTR void VKAPI_CALL CmdSetScissor(
1237 VkCommandBuffer commandBuffer,
1238 uint32_t firstScissor,
1239 uint32_t scissorCount,
1240 const VkRect2D* pScissors)
1242 //Not a CREATE or DESTROY function
1245 static VKAPI_ATTR void VKAPI_CALL CmdSetLineWidth(
1246 VkCommandBuffer commandBuffer,
1247 float lineWidth)
1249 //Not a CREATE or DESTROY function
1252 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthBias(
1253 VkCommandBuffer commandBuffer,
1254 float depthBiasConstantFactor,
1255 float depthBiasClamp,
1256 float depthBiasSlopeFactor)
1258 //Not a CREATE or DESTROY function
1261 static VKAPI_ATTR void VKAPI_CALL CmdSetBlendConstants(
1262 VkCommandBuffer commandBuffer,
1263 const float blendConstants[4])
1265 //Not a CREATE or DESTROY function
1268 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthBounds(
1269 VkCommandBuffer commandBuffer,
1270 float minDepthBounds,
1271 float maxDepthBounds)
1273 //Not a CREATE or DESTROY function
1276 static VKAPI_ATTR void VKAPI_CALL CmdSetStencilCompareMask(
1277 VkCommandBuffer commandBuffer,
1278 VkStencilFaceFlags faceMask,
1279 uint32_t compareMask)
1281 //Not a CREATE or DESTROY function
1284 static VKAPI_ATTR void VKAPI_CALL CmdSetStencilWriteMask(
1285 VkCommandBuffer commandBuffer,
1286 VkStencilFaceFlags faceMask,
1287 uint32_t writeMask)
1289 //Not a CREATE or DESTROY function
1292 static VKAPI_ATTR void VKAPI_CALL CmdSetStencilReference(
1293 VkCommandBuffer commandBuffer,
1294 VkStencilFaceFlags faceMask,
1295 uint32_t reference)
1297 //Not a CREATE or DESTROY function
1300 static VKAPI_ATTR void VKAPI_CALL CmdBindDescriptorSets(
1301 VkCommandBuffer commandBuffer,
1302 VkPipelineBindPoint pipelineBindPoint,
1303 VkPipelineLayout layout,
1304 uint32_t firstSet,
1305 uint32_t descriptorSetCount,
1306 const VkDescriptorSet* pDescriptorSets,
1307 uint32_t dynamicOffsetCount,
1308 const uint32_t* pDynamicOffsets)
1310 //Not a CREATE or DESTROY function
1313 static VKAPI_ATTR void VKAPI_CALL CmdBindIndexBuffer(
1314 VkCommandBuffer commandBuffer,
1315 VkBuffer buffer,
1316 VkDeviceSize offset,
1317 VkIndexType indexType)
1319 //Not a CREATE or DESTROY function
1322 static VKAPI_ATTR void VKAPI_CALL CmdBindVertexBuffers(
1323 VkCommandBuffer commandBuffer,
1324 uint32_t firstBinding,
1325 uint32_t bindingCount,
1326 const VkBuffer* pBuffers,
1327 const VkDeviceSize* pOffsets)
1329 //Not a CREATE or DESTROY function
1332 static VKAPI_ATTR void VKAPI_CALL CmdDraw(
1333 VkCommandBuffer commandBuffer,
1334 uint32_t vertexCount,
1335 uint32_t instanceCount,
1336 uint32_t firstVertex,
1337 uint32_t firstInstance)
1339 //Not a CREATE or DESTROY function
1342 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndexed(
1343 VkCommandBuffer commandBuffer,
1344 uint32_t indexCount,
1345 uint32_t instanceCount,
1346 uint32_t firstIndex,
1347 int32_t vertexOffset,
1348 uint32_t firstInstance)
1350 //Not a CREATE or DESTROY function
1353 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirect(
1354 VkCommandBuffer commandBuffer,
1355 VkBuffer buffer,
1356 VkDeviceSize offset,
1357 uint32_t drawCount,
1358 uint32_t stride)
1360 //Not a CREATE or DESTROY function
1363 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirect(
1364 VkCommandBuffer commandBuffer,
1365 VkBuffer buffer,
1366 VkDeviceSize offset,
1367 uint32_t drawCount,
1368 uint32_t stride)
1370 //Not a CREATE or DESTROY function
1373 static VKAPI_ATTR void VKAPI_CALL CmdDispatch(
1374 VkCommandBuffer commandBuffer,
1375 uint32_t groupCountX,
1376 uint32_t groupCountY,
1377 uint32_t groupCountZ)
1379 //Not a CREATE or DESTROY function
1382 static VKAPI_ATTR void VKAPI_CALL CmdDispatchIndirect(
1383 VkCommandBuffer commandBuffer,
1384 VkBuffer buffer,
1385 VkDeviceSize offset)
1387 //Not a CREATE or DESTROY function
1390 static VKAPI_ATTR void VKAPI_CALL CmdCopyBuffer(
1391 VkCommandBuffer commandBuffer,
1392 VkBuffer srcBuffer,
1393 VkBuffer dstBuffer,
1394 uint32_t regionCount,
1395 const VkBufferCopy* pRegions)
1397 //Not a CREATE or DESTROY function
1400 static VKAPI_ATTR void VKAPI_CALL CmdCopyImage(
1401 VkCommandBuffer commandBuffer,
1402 VkImage srcImage,
1403 VkImageLayout srcImageLayout,
1404 VkImage dstImage,
1405 VkImageLayout dstImageLayout,
1406 uint32_t regionCount,
1407 const VkImageCopy* pRegions)
1409 //Not a CREATE or DESTROY function
1412 static VKAPI_ATTR void VKAPI_CALL CmdBlitImage(
1413 VkCommandBuffer commandBuffer,
1414 VkImage srcImage,
1415 VkImageLayout srcImageLayout,
1416 VkImage dstImage,
1417 VkImageLayout dstImageLayout,
1418 uint32_t regionCount,
1419 const VkImageBlit* pRegions,
1420 VkFilter filter)
1422 //Not a CREATE or DESTROY function
1425 static VKAPI_ATTR void VKAPI_CALL CmdCopyBufferToImage(
1426 VkCommandBuffer commandBuffer,
1427 VkBuffer srcBuffer,
1428 VkImage dstImage,
1429 VkImageLayout dstImageLayout,
1430 uint32_t regionCount,
1431 const VkBufferImageCopy* pRegions)
1433 //Not a CREATE or DESTROY function
1436 static VKAPI_ATTR void VKAPI_CALL CmdCopyImageToBuffer(
1437 VkCommandBuffer commandBuffer,
1438 VkImage srcImage,
1439 VkImageLayout srcImageLayout,
1440 VkBuffer dstBuffer,
1441 uint32_t regionCount,
1442 const VkBufferImageCopy* pRegions)
1444 //Not a CREATE or DESTROY function
1447 static VKAPI_ATTR void VKAPI_CALL CmdUpdateBuffer(
1448 VkCommandBuffer commandBuffer,
1449 VkBuffer dstBuffer,
1450 VkDeviceSize dstOffset,
1451 VkDeviceSize dataSize,
1452 const void* pData)
1454 //Not a CREATE or DESTROY function
1457 static VKAPI_ATTR void VKAPI_CALL CmdFillBuffer(
1458 VkCommandBuffer commandBuffer,
1459 VkBuffer dstBuffer,
1460 VkDeviceSize dstOffset,
1461 VkDeviceSize size,
1462 uint32_t data)
1464 //Not a CREATE or DESTROY function
1467 static VKAPI_ATTR void VKAPI_CALL CmdClearColorImage(
1468 VkCommandBuffer commandBuffer,
1469 VkImage image,
1470 VkImageLayout imageLayout,
1471 const VkClearColorValue* pColor,
1472 uint32_t rangeCount,
1473 const VkImageSubresourceRange* pRanges)
1475 //Not a CREATE or DESTROY function
1478 static VKAPI_ATTR void VKAPI_CALL CmdClearDepthStencilImage(
1479 VkCommandBuffer commandBuffer,
1480 VkImage image,
1481 VkImageLayout imageLayout,
1482 const VkClearDepthStencilValue* pDepthStencil,
1483 uint32_t rangeCount,
1484 const VkImageSubresourceRange* pRanges)
1486 //Not a CREATE or DESTROY function
1489 static VKAPI_ATTR void VKAPI_CALL CmdClearAttachments(
1490 VkCommandBuffer commandBuffer,
1491 uint32_t attachmentCount,
1492 const VkClearAttachment* pAttachments,
1493 uint32_t rectCount,
1494 const VkClearRect* pRects)
1496 //Not a CREATE or DESTROY function
1499 static VKAPI_ATTR void VKAPI_CALL CmdResolveImage(
1500 VkCommandBuffer commandBuffer,
1501 VkImage srcImage,
1502 VkImageLayout srcImageLayout,
1503 VkImage dstImage,
1504 VkImageLayout dstImageLayout,
1505 uint32_t regionCount,
1506 const VkImageResolve* pRegions)
1508 //Not a CREATE or DESTROY function
1511 static VKAPI_ATTR void VKAPI_CALL CmdSetEvent(
1512 VkCommandBuffer commandBuffer,
1513 VkEvent event,
1514 VkPipelineStageFlags stageMask)
1516 //Not a CREATE or DESTROY function
1519 static VKAPI_ATTR void VKAPI_CALL CmdResetEvent(
1520 VkCommandBuffer commandBuffer,
1521 VkEvent event,
1522 VkPipelineStageFlags stageMask)
1524 //Not a CREATE or DESTROY function
1527 static VKAPI_ATTR void VKAPI_CALL CmdWaitEvents(
1528 VkCommandBuffer commandBuffer,
1529 uint32_t eventCount,
1530 const VkEvent* pEvents,
1531 VkPipelineStageFlags srcStageMask,
1532 VkPipelineStageFlags dstStageMask,
1533 uint32_t memoryBarrierCount,
1534 const VkMemoryBarrier* pMemoryBarriers,
1535 uint32_t bufferMemoryBarrierCount,
1536 const VkBufferMemoryBarrier* pBufferMemoryBarriers,
1537 uint32_t imageMemoryBarrierCount,
1538 const VkImageMemoryBarrier* pImageMemoryBarriers)
1540 //Not a CREATE or DESTROY function
1543 static VKAPI_ATTR void VKAPI_CALL CmdPipelineBarrier(
1544 VkCommandBuffer commandBuffer,
1545 VkPipelineStageFlags srcStageMask,
1546 VkPipelineStageFlags dstStageMask,
1547 VkDependencyFlags dependencyFlags,
1548 uint32_t memoryBarrierCount,
1549 const VkMemoryBarrier* pMemoryBarriers,
1550 uint32_t bufferMemoryBarrierCount,
1551 const VkBufferMemoryBarrier* pBufferMemoryBarriers,
1552 uint32_t imageMemoryBarrierCount,
1553 const VkImageMemoryBarrier* pImageMemoryBarriers)
1555 //Not a CREATE or DESTROY function
1558 static VKAPI_ATTR void VKAPI_CALL CmdBeginQuery(
1559 VkCommandBuffer commandBuffer,
1560 VkQueryPool queryPool,
1561 uint32_t query,
1562 VkQueryControlFlags flags)
1564 //Not a CREATE or DESTROY function
1567 static VKAPI_ATTR void VKAPI_CALL CmdEndQuery(
1568 VkCommandBuffer commandBuffer,
1569 VkQueryPool queryPool,
1570 uint32_t query)
1572 //Not a CREATE or DESTROY function
1575 static VKAPI_ATTR void VKAPI_CALL CmdResetQueryPool(
1576 VkCommandBuffer commandBuffer,
1577 VkQueryPool queryPool,
1578 uint32_t firstQuery,
1579 uint32_t queryCount)
1581 //Not a CREATE or DESTROY function
1584 static VKAPI_ATTR void VKAPI_CALL CmdWriteTimestamp(
1585 VkCommandBuffer commandBuffer,
1586 VkPipelineStageFlagBits pipelineStage,
1587 VkQueryPool queryPool,
1588 uint32_t query)
1590 //Not a CREATE or DESTROY function
1593 static VKAPI_ATTR void VKAPI_CALL CmdCopyQueryPoolResults(
1594 VkCommandBuffer commandBuffer,
1595 VkQueryPool queryPool,
1596 uint32_t firstQuery,
1597 uint32_t queryCount,
1598 VkBuffer dstBuffer,
1599 VkDeviceSize dstOffset,
1600 VkDeviceSize stride,
1601 VkQueryResultFlags flags)
1603 //Not a CREATE or DESTROY function
1606 static VKAPI_ATTR void VKAPI_CALL CmdPushConstants(
1607 VkCommandBuffer commandBuffer,
1608 VkPipelineLayout layout,
1609 VkShaderStageFlags stageFlags,
1610 uint32_t offset,
1611 uint32_t size,
1612 const void* pValues)
1614 //Not a CREATE or DESTROY function
1617 static VKAPI_ATTR void VKAPI_CALL CmdBeginRenderPass(
1618 VkCommandBuffer commandBuffer,
1619 const VkRenderPassBeginInfo* pRenderPassBegin,
1620 VkSubpassContents contents)
1622 //Not a CREATE or DESTROY function
1625 static VKAPI_ATTR void VKAPI_CALL CmdNextSubpass(
1626 VkCommandBuffer commandBuffer,
1627 VkSubpassContents contents)
1629 //Not a CREATE or DESTROY function
1632 static VKAPI_ATTR void VKAPI_CALL CmdEndRenderPass(
1633 VkCommandBuffer commandBuffer)
1635 //Not a CREATE or DESTROY function
1638 static VKAPI_ATTR void VKAPI_CALL CmdExecuteCommands(
1639 VkCommandBuffer commandBuffer,
1640 uint32_t commandBufferCount,
1641 const VkCommandBuffer* pCommandBuffers)
1643 //Not a CREATE or DESTROY function
1647 static VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceVersion(
1648 uint32_t* pApiVersion)
1651 *pApiVersion = VK_HEADER_VERSION_COMPLETE;
1652 return VK_SUCCESS;
1655 static VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory2(
1656 VkDevice device,
1657 uint32_t bindInfoCount,
1658 const VkBindBufferMemoryInfo* pBindInfos)
1660 //Not a CREATE or DESTROY function
1661 return VK_SUCCESS;
1664 static VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory2(
1665 VkDevice device,
1666 uint32_t bindInfoCount,
1667 const VkBindImageMemoryInfo* pBindInfos)
1669 //Not a CREATE or DESTROY function
1670 return VK_SUCCESS;
1673 static VKAPI_ATTR void VKAPI_CALL GetDeviceGroupPeerMemoryFeatures(
1674 VkDevice device,
1675 uint32_t heapIndex,
1676 uint32_t localDeviceIndex,
1677 uint32_t remoteDeviceIndex,
1678 VkPeerMemoryFeatureFlags* pPeerMemoryFeatures)
1680 //Not a CREATE or DESTROY function
1683 static VKAPI_ATTR void VKAPI_CALL CmdSetDeviceMask(
1684 VkCommandBuffer commandBuffer,
1685 uint32_t deviceMask)
1687 //Not a CREATE or DESTROY function
1690 static VKAPI_ATTR void VKAPI_CALL CmdDispatchBase(
1691 VkCommandBuffer commandBuffer,
1692 uint32_t baseGroupX,
1693 uint32_t baseGroupY,
1694 uint32_t baseGroupZ,
1695 uint32_t groupCountX,
1696 uint32_t groupCountY,
1697 uint32_t groupCountZ)
1699 //Not a CREATE or DESTROY function
1702 static VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDeviceGroups(
1703 VkInstance instance,
1704 uint32_t* pPhysicalDeviceGroupCount,
1705 VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties)
1707 return EnumeratePhysicalDeviceGroupsKHR(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
1710 static VKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements2(
1711 VkDevice device,
1712 const VkImageMemoryRequirementsInfo2* pInfo,
1713 VkMemoryRequirements2* pMemoryRequirements)
1715 GetImageMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
1718 static VKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements2(
1719 VkDevice device,
1720 const VkBufferMemoryRequirementsInfo2* pInfo,
1721 VkMemoryRequirements2* pMemoryRequirements)
1723 GetBufferMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
1726 static VKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements2(
1727 VkDevice device,
1728 const VkImageSparseMemoryRequirementsInfo2* pInfo,
1729 uint32_t* pSparseMemoryRequirementCount,
1730 VkSparseImageMemoryRequirements2* pSparseMemoryRequirements)
1732 GetImageSparseMemoryRequirements2KHR(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
1735 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures2(
1736 VkPhysicalDevice physicalDevice,
1737 VkPhysicalDeviceFeatures2* pFeatures)
1739 GetPhysicalDeviceFeatures2KHR(physicalDevice, pFeatures);
1742 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties2(
1743 VkPhysicalDevice physicalDevice,
1744 VkPhysicalDeviceProperties2* pProperties)
1746 GetPhysicalDeviceProperties2KHR(physicalDevice, pProperties);
1749 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties2(
1750 VkPhysicalDevice physicalDevice,
1751 VkFormat format,
1752 VkFormatProperties2* pFormatProperties)
1754 GetPhysicalDeviceFormatProperties2KHR(physicalDevice, format, pFormatProperties);
1757 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties2(
1758 VkPhysicalDevice physicalDevice,
1759 const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
1760 VkImageFormatProperties2* pImageFormatProperties)
1762 return GetPhysicalDeviceImageFormatProperties2KHR(physicalDevice, pImageFormatInfo, pImageFormatProperties);
1765 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties2(
1766 VkPhysicalDevice physicalDevice,
1767 uint32_t* pQueueFamilyPropertyCount,
1768 VkQueueFamilyProperties2* pQueueFamilyProperties)
1770 GetPhysicalDeviceQueueFamilyProperties2KHR(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
1773 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties2(
1774 VkPhysicalDevice physicalDevice,
1775 VkPhysicalDeviceMemoryProperties2* pMemoryProperties)
1777 GetPhysicalDeviceMemoryProperties2KHR(physicalDevice, pMemoryProperties);
1780 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties2(
1781 VkPhysicalDevice physicalDevice,
1782 const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
1783 uint32_t* pPropertyCount,
1784 VkSparseImageFormatProperties2* pProperties)
1786 GetPhysicalDeviceSparseImageFormatProperties2KHR(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
1789 static VKAPI_ATTR void VKAPI_CALL TrimCommandPool(
1790 VkDevice device,
1791 VkCommandPool commandPool,
1792 VkCommandPoolTrimFlags flags)
1794 //Not a CREATE or DESTROY function
1797 static VKAPI_ATTR void VKAPI_CALL GetDeviceQueue2(
1798 VkDevice device,
1799 const VkDeviceQueueInfo2* pQueueInfo,
1800 VkQueue* pQueue)
1802 GetDeviceQueue(device, pQueueInfo->queueFamilyIndex, pQueueInfo->queueIndex, pQueue);
1803 // TODO: Add further support for GetDeviceQueue2 features
1806 static VKAPI_ATTR VkResult VKAPI_CALL CreateSamplerYcbcrConversion(
1807 VkDevice device,
1808 const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
1809 const VkAllocationCallbacks* pAllocator,
1810 VkSamplerYcbcrConversion* pYcbcrConversion)
1812 unique_lock_t lock(global_lock);
1813 *pYcbcrConversion = (VkSamplerYcbcrConversion)global_unique_handle++;
1814 return VK_SUCCESS;
1817 static VKAPI_ATTR void VKAPI_CALL DestroySamplerYcbcrConversion(
1818 VkDevice device,
1819 VkSamplerYcbcrConversion ycbcrConversion,
1820 const VkAllocationCallbacks* pAllocator)
1822 //Destroy object
1825 static VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorUpdateTemplate(
1826 VkDevice device,
1827 const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
1828 const VkAllocationCallbacks* pAllocator,
1829 VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate)
1831 unique_lock_t lock(global_lock);
1832 *pDescriptorUpdateTemplate = (VkDescriptorUpdateTemplate)global_unique_handle++;
1833 return VK_SUCCESS;
1836 static VKAPI_ATTR void VKAPI_CALL DestroyDescriptorUpdateTemplate(
1837 VkDevice device,
1838 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
1839 const VkAllocationCallbacks* pAllocator)
1841 //Destroy object
1844 static VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSetWithTemplate(
1845 VkDevice device,
1846 VkDescriptorSet descriptorSet,
1847 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
1848 const void* pData)
1850 //Not a CREATE or DESTROY function
1853 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalBufferProperties(
1854 VkPhysicalDevice physicalDevice,
1855 const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
1856 VkExternalBufferProperties* pExternalBufferProperties)
1858 constexpr VkExternalMemoryHandleTypeFlags supported_flags = 0x1FF;
1859 if (pExternalBufferInfo->handleType & VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID) {
1860 // Can't have dedicated memory with AHB
1861 pExternalBufferProperties->externalMemoryProperties.externalMemoryFeatures = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT | VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT;
1862 pExternalBufferProperties->externalMemoryProperties.exportFromImportedHandleTypes = pExternalBufferInfo->handleType;
1863 pExternalBufferProperties->externalMemoryProperties.compatibleHandleTypes = pExternalBufferInfo->handleType;
1864 } else if (pExternalBufferInfo->handleType & supported_flags) {
1865 pExternalBufferProperties->externalMemoryProperties.externalMemoryFeatures = 0x7;
1866 pExternalBufferProperties->externalMemoryProperties.exportFromImportedHandleTypes = supported_flags;
1867 pExternalBufferProperties->externalMemoryProperties.compatibleHandleTypes = supported_flags;
1868 } else {
1869 pExternalBufferProperties->externalMemoryProperties.externalMemoryFeatures = 0;
1870 pExternalBufferProperties->externalMemoryProperties.exportFromImportedHandleTypes = 0;
1871 // According to spec, handle type is always compatible with itself. Even if export/import
1872 // not supported, it's important to properly implement self-compatibility property since
1873 // application's control flow can rely on this.
1874 pExternalBufferProperties->externalMemoryProperties.compatibleHandleTypes = pExternalBufferInfo->handleType;
1878 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalFenceProperties(
1879 VkPhysicalDevice physicalDevice,
1880 const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
1881 VkExternalFenceProperties* pExternalFenceProperties)
1883 // Hard-code support for all handle types and features
1884 pExternalFenceProperties->exportFromImportedHandleTypes = 0xF;
1885 pExternalFenceProperties->compatibleHandleTypes = 0xF;
1886 pExternalFenceProperties->externalFenceFeatures = 0x3;
1889 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalSemaphoreProperties(
1890 VkPhysicalDevice physicalDevice,
1891 const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
1892 VkExternalSemaphoreProperties* pExternalSemaphoreProperties)
1894 // Hard code support for all handle types and features
1895 pExternalSemaphoreProperties->exportFromImportedHandleTypes = 0x1F;
1896 pExternalSemaphoreProperties->compatibleHandleTypes = 0x1F;
1897 pExternalSemaphoreProperties->externalSemaphoreFeatures = 0x3;
1900 static VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutSupport(
1901 VkDevice device,
1902 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
1903 VkDescriptorSetLayoutSupport* pSupport)
1905 if (pSupport) {
1906 pSupport->supported = VK_TRUE;
1911 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCount(
1912 VkCommandBuffer commandBuffer,
1913 VkBuffer buffer,
1914 VkDeviceSize offset,
1915 VkBuffer countBuffer,
1916 VkDeviceSize countBufferOffset,
1917 uint32_t maxDrawCount,
1918 uint32_t stride)
1920 //Not a CREATE or DESTROY function
1923 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirectCount(
1924 VkCommandBuffer commandBuffer,
1925 VkBuffer buffer,
1926 VkDeviceSize offset,
1927 VkBuffer countBuffer,
1928 VkDeviceSize countBufferOffset,
1929 uint32_t maxDrawCount,
1930 uint32_t stride)
1932 //Not a CREATE or DESTROY function
1935 static VKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass2(
1936 VkDevice device,
1937 const VkRenderPassCreateInfo2* pCreateInfo,
1938 const VkAllocationCallbacks* pAllocator,
1939 VkRenderPass* pRenderPass)
1941 unique_lock_t lock(global_lock);
1942 *pRenderPass = (VkRenderPass)global_unique_handle++;
1943 return VK_SUCCESS;
1946 static VKAPI_ATTR void VKAPI_CALL CmdBeginRenderPass2(
1947 VkCommandBuffer commandBuffer,
1948 const VkRenderPassBeginInfo* pRenderPassBegin,
1949 const VkSubpassBeginInfo* pSubpassBeginInfo)
1951 //Not a CREATE or DESTROY function
1954 static VKAPI_ATTR void VKAPI_CALL CmdNextSubpass2(
1955 VkCommandBuffer commandBuffer,
1956 const VkSubpassBeginInfo* pSubpassBeginInfo,
1957 const VkSubpassEndInfo* pSubpassEndInfo)
1959 //Not a CREATE or DESTROY function
1962 static VKAPI_ATTR void VKAPI_CALL CmdEndRenderPass2(
1963 VkCommandBuffer commandBuffer,
1964 const VkSubpassEndInfo* pSubpassEndInfo)
1966 //Not a CREATE or DESTROY function
1969 static VKAPI_ATTR void VKAPI_CALL ResetQueryPool(
1970 VkDevice device,
1971 VkQueryPool queryPool,
1972 uint32_t firstQuery,
1973 uint32_t queryCount)
1975 //Not a CREATE or DESTROY function
1978 static VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreCounterValue(
1979 VkDevice device,
1980 VkSemaphore semaphore,
1981 uint64_t* pValue)
1983 //Not a CREATE or DESTROY function
1984 return VK_SUCCESS;
1987 static VKAPI_ATTR VkResult VKAPI_CALL WaitSemaphores(
1988 VkDevice device,
1989 const VkSemaphoreWaitInfo* pWaitInfo,
1990 uint64_t timeout)
1992 //Not a CREATE or DESTROY function
1993 return VK_SUCCESS;
1996 static VKAPI_ATTR VkResult VKAPI_CALL SignalSemaphore(
1997 VkDevice device,
1998 const VkSemaphoreSignalInfo* pSignalInfo)
2000 //Not a CREATE or DESTROY function
2001 return VK_SUCCESS;
2004 static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetBufferDeviceAddress(
2005 VkDevice device,
2006 const VkBufferDeviceAddressInfo* pInfo)
2008 VkDeviceAddress address = 0;
2009 auto d_iter = buffer_map.find(device);
2010 if (d_iter != buffer_map.end()) {
2011 auto iter = d_iter->second.find(pInfo->buffer);
2012 if (iter != d_iter->second.end()) {
2013 address = iter->second.address;
2016 return address;
2019 static VKAPI_ATTR uint64_t VKAPI_CALL GetBufferOpaqueCaptureAddress(
2020 VkDevice device,
2021 const VkBufferDeviceAddressInfo* pInfo)
2023 //Not a CREATE or DESTROY function
2024 return VK_SUCCESS;
2027 static VKAPI_ATTR uint64_t VKAPI_CALL GetDeviceMemoryOpaqueCaptureAddress(
2028 VkDevice device,
2029 const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo)
2031 //Not a CREATE or DESTROY function
2032 return VK_SUCCESS;
2036 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceToolProperties(
2037 VkPhysicalDevice physicalDevice,
2038 uint32_t* pToolCount,
2039 VkPhysicalDeviceToolProperties* pToolProperties)
2041 //Not a CREATE or DESTROY function
2042 return VK_SUCCESS;
2045 static VKAPI_ATTR VkResult VKAPI_CALL CreatePrivateDataSlot(
2046 VkDevice device,
2047 const VkPrivateDataSlotCreateInfo* pCreateInfo,
2048 const VkAllocationCallbacks* pAllocator,
2049 VkPrivateDataSlot* pPrivateDataSlot)
2051 unique_lock_t lock(global_lock);
2052 *pPrivateDataSlot = (VkPrivateDataSlot)global_unique_handle++;
2053 return VK_SUCCESS;
2056 static VKAPI_ATTR void VKAPI_CALL DestroyPrivateDataSlot(
2057 VkDevice device,
2058 VkPrivateDataSlot privateDataSlot,
2059 const VkAllocationCallbacks* pAllocator)
2061 //Destroy object
2064 static VKAPI_ATTR VkResult VKAPI_CALL SetPrivateData(
2065 VkDevice device,
2066 VkObjectType objectType,
2067 uint64_t objectHandle,
2068 VkPrivateDataSlot privateDataSlot,
2069 uint64_t data)
2071 //Not a CREATE or DESTROY function
2072 return VK_SUCCESS;
2075 static VKAPI_ATTR void VKAPI_CALL GetPrivateData(
2076 VkDevice device,
2077 VkObjectType objectType,
2078 uint64_t objectHandle,
2079 VkPrivateDataSlot privateDataSlot,
2080 uint64_t* pData)
2082 //Not a CREATE or DESTROY function
2085 static VKAPI_ATTR void VKAPI_CALL CmdSetEvent2(
2086 VkCommandBuffer commandBuffer,
2087 VkEvent event,
2088 const VkDependencyInfo* pDependencyInfo)
2090 //Not a CREATE or DESTROY function
2093 static VKAPI_ATTR void VKAPI_CALL CmdResetEvent2(
2094 VkCommandBuffer commandBuffer,
2095 VkEvent event,
2096 VkPipelineStageFlags2 stageMask)
2098 //Not a CREATE or DESTROY function
2101 static VKAPI_ATTR void VKAPI_CALL CmdWaitEvents2(
2102 VkCommandBuffer commandBuffer,
2103 uint32_t eventCount,
2104 const VkEvent* pEvents,
2105 const VkDependencyInfo* pDependencyInfos)
2107 //Not a CREATE or DESTROY function
2110 static VKAPI_ATTR void VKAPI_CALL CmdPipelineBarrier2(
2111 VkCommandBuffer commandBuffer,
2112 const VkDependencyInfo* pDependencyInfo)
2114 //Not a CREATE or DESTROY function
2117 static VKAPI_ATTR void VKAPI_CALL CmdWriteTimestamp2(
2118 VkCommandBuffer commandBuffer,
2119 VkPipelineStageFlags2 stage,
2120 VkQueryPool queryPool,
2121 uint32_t query)
2123 //Not a CREATE or DESTROY function
2126 static VKAPI_ATTR VkResult VKAPI_CALL QueueSubmit2(
2127 VkQueue queue,
2128 uint32_t submitCount,
2129 const VkSubmitInfo2* pSubmits,
2130 VkFence fence)
2132 //Not a CREATE or DESTROY function
2133 return VK_SUCCESS;
2136 static VKAPI_ATTR void VKAPI_CALL CmdCopyBuffer2(
2137 VkCommandBuffer commandBuffer,
2138 const VkCopyBufferInfo2* pCopyBufferInfo)
2140 //Not a CREATE or DESTROY function
2143 static VKAPI_ATTR void VKAPI_CALL CmdCopyImage2(
2144 VkCommandBuffer commandBuffer,
2145 const VkCopyImageInfo2* pCopyImageInfo)
2147 //Not a CREATE or DESTROY function
2150 static VKAPI_ATTR void VKAPI_CALL CmdCopyBufferToImage2(
2151 VkCommandBuffer commandBuffer,
2152 const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo)
2154 //Not a CREATE or DESTROY function
2157 static VKAPI_ATTR void VKAPI_CALL CmdCopyImageToBuffer2(
2158 VkCommandBuffer commandBuffer,
2159 const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo)
2161 //Not a CREATE or DESTROY function
2164 static VKAPI_ATTR void VKAPI_CALL CmdBlitImage2(
2165 VkCommandBuffer commandBuffer,
2166 const VkBlitImageInfo2* pBlitImageInfo)
2168 //Not a CREATE or DESTROY function
2171 static VKAPI_ATTR void VKAPI_CALL CmdResolveImage2(
2172 VkCommandBuffer commandBuffer,
2173 const VkResolveImageInfo2* pResolveImageInfo)
2175 //Not a CREATE or DESTROY function
2178 static VKAPI_ATTR void VKAPI_CALL CmdBeginRendering(
2179 VkCommandBuffer commandBuffer,
2180 const VkRenderingInfo* pRenderingInfo)
2182 //Not a CREATE or DESTROY function
2185 static VKAPI_ATTR void VKAPI_CALL CmdEndRendering(
2186 VkCommandBuffer commandBuffer)
2188 //Not a CREATE or DESTROY function
2191 static VKAPI_ATTR void VKAPI_CALL CmdSetCullMode(
2192 VkCommandBuffer commandBuffer,
2193 VkCullModeFlags cullMode)
2195 //Not a CREATE or DESTROY function
2198 static VKAPI_ATTR void VKAPI_CALL CmdSetFrontFace(
2199 VkCommandBuffer commandBuffer,
2200 VkFrontFace frontFace)
2202 //Not a CREATE or DESTROY function
2205 static VKAPI_ATTR void VKAPI_CALL CmdSetPrimitiveTopology(
2206 VkCommandBuffer commandBuffer,
2207 VkPrimitiveTopology primitiveTopology)
2209 //Not a CREATE or DESTROY function
2212 static VKAPI_ATTR void VKAPI_CALL CmdSetViewportWithCount(
2213 VkCommandBuffer commandBuffer,
2214 uint32_t viewportCount,
2215 const VkViewport* pViewports)
2217 //Not a CREATE or DESTROY function
2220 static VKAPI_ATTR void VKAPI_CALL CmdSetScissorWithCount(
2221 VkCommandBuffer commandBuffer,
2222 uint32_t scissorCount,
2223 const VkRect2D* pScissors)
2225 //Not a CREATE or DESTROY function
2228 static VKAPI_ATTR void VKAPI_CALL CmdBindVertexBuffers2(
2229 VkCommandBuffer commandBuffer,
2230 uint32_t firstBinding,
2231 uint32_t bindingCount,
2232 const VkBuffer* pBuffers,
2233 const VkDeviceSize* pOffsets,
2234 const VkDeviceSize* pSizes,
2235 const VkDeviceSize* pStrides)
2237 //Not a CREATE or DESTROY function
2240 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthTestEnable(
2241 VkCommandBuffer commandBuffer,
2242 VkBool32 depthTestEnable)
2244 //Not a CREATE or DESTROY function
2247 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthWriteEnable(
2248 VkCommandBuffer commandBuffer,
2249 VkBool32 depthWriteEnable)
2251 //Not a CREATE or DESTROY function
2254 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthCompareOp(
2255 VkCommandBuffer commandBuffer,
2256 VkCompareOp depthCompareOp)
2258 //Not a CREATE or DESTROY function
2261 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthBoundsTestEnable(
2262 VkCommandBuffer commandBuffer,
2263 VkBool32 depthBoundsTestEnable)
2265 //Not a CREATE or DESTROY function
2268 static VKAPI_ATTR void VKAPI_CALL CmdSetStencilTestEnable(
2269 VkCommandBuffer commandBuffer,
2270 VkBool32 stencilTestEnable)
2272 //Not a CREATE or DESTROY function
2275 static VKAPI_ATTR void VKAPI_CALL CmdSetStencilOp(
2276 VkCommandBuffer commandBuffer,
2277 VkStencilFaceFlags faceMask,
2278 VkStencilOp failOp,
2279 VkStencilOp passOp,
2280 VkStencilOp depthFailOp,
2281 VkCompareOp compareOp)
2283 //Not a CREATE or DESTROY function
2286 static VKAPI_ATTR void VKAPI_CALL CmdSetRasterizerDiscardEnable(
2287 VkCommandBuffer commandBuffer,
2288 VkBool32 rasterizerDiscardEnable)
2290 //Not a CREATE or DESTROY function
2293 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthBiasEnable(
2294 VkCommandBuffer commandBuffer,
2295 VkBool32 depthBiasEnable)
2297 //Not a CREATE or DESTROY function
2300 static VKAPI_ATTR void VKAPI_CALL CmdSetPrimitiveRestartEnable(
2301 VkCommandBuffer commandBuffer,
2302 VkBool32 primitiveRestartEnable)
2304 //Not a CREATE or DESTROY function
2307 static VKAPI_ATTR void VKAPI_CALL GetDeviceBufferMemoryRequirements(
2308 VkDevice device,
2309 const VkDeviceBufferMemoryRequirements* pInfo,
2310 VkMemoryRequirements2* pMemoryRequirements)
2312 // TODO: Just hard-coding reqs for now
2313 pMemoryRequirements->memoryRequirements.alignment = 1;
2314 pMemoryRequirements->memoryRequirements.memoryTypeBits = 0xFFFF;
2316 // Return a size based on the buffer size from the create info.
2317 pMemoryRequirements->memoryRequirements.size = ((pInfo->pCreateInfo->size + 4095) / 4096) * 4096;
2320 static VKAPI_ATTR void VKAPI_CALL GetDeviceImageMemoryRequirements(
2321 VkDevice device,
2322 const VkDeviceImageMemoryRequirements* pInfo,
2323 VkMemoryRequirements2* pMemoryRequirements)
2325 pMemoryRequirements->memoryRequirements.size = GetImageSizeFromCreateInfo(pInfo->pCreateInfo);
2326 pMemoryRequirements->memoryRequirements.alignment = 1;
2327 // Here we hard-code that the memory type at index 3 doesn't support this image.
2328 pMemoryRequirements->memoryRequirements.memoryTypeBits = 0xFFFF & ~(0x1 << 3);
2331 static VKAPI_ATTR void VKAPI_CALL GetDeviceImageSparseMemoryRequirements(
2332 VkDevice device,
2333 const VkDeviceImageMemoryRequirements* pInfo,
2334 uint32_t* pSparseMemoryRequirementCount,
2335 VkSparseImageMemoryRequirements2* pSparseMemoryRequirements)
2337 //Not a CREATE or DESTROY function
2341 static VKAPI_ATTR void VKAPI_CALL DestroySurfaceKHR(
2342 VkInstance instance,
2343 VkSurfaceKHR surface,
2344 const VkAllocationCallbacks* pAllocator)
2346 //Destroy object
2349 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceSupportKHR(
2350 VkPhysicalDevice physicalDevice,
2351 uint32_t queueFamilyIndex,
2352 VkSurfaceKHR surface,
2353 VkBool32* pSupported)
2355 // Currently say that all surface/queue combos are supported
2356 *pSupported = VK_TRUE;
2357 return VK_SUCCESS;
2360 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilitiesKHR(
2361 VkPhysicalDevice physicalDevice,
2362 VkSurfaceKHR surface,
2363 VkSurfaceCapabilitiesKHR* pSurfaceCapabilities)
2365 // In general just say max supported is available for requested surface
2366 pSurfaceCapabilities->minImageCount = 1;
2367 pSurfaceCapabilities->maxImageCount = 0;
2368 pSurfaceCapabilities->currentExtent.width = 0xFFFFFFFF;
2369 pSurfaceCapabilities->currentExtent.height = 0xFFFFFFFF;
2370 pSurfaceCapabilities->minImageExtent.width = 1;
2371 pSurfaceCapabilities->minImageExtent.height = 1;
2372 pSurfaceCapabilities->maxImageExtent.width = 0xFFFF;
2373 pSurfaceCapabilities->maxImageExtent.height = 0xFFFF;
2374 pSurfaceCapabilities->maxImageArrayLayers = 128;
2375 pSurfaceCapabilities->supportedTransforms = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR |
2376 VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR |
2377 VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR |
2378 VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR |
2379 VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR |
2380 VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR |
2381 VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR |
2382 VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR |
2383 VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR;
2384 pSurfaceCapabilities->currentTransform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
2385 pSurfaceCapabilities->supportedCompositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR |
2386 VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR |
2387 VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR |
2388 VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR;
2389 pSurfaceCapabilities->supportedUsageFlags = VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
2390 VK_IMAGE_USAGE_TRANSFER_DST_BIT |
2391 VK_IMAGE_USAGE_SAMPLED_BIT |
2392 VK_IMAGE_USAGE_STORAGE_BIT |
2393 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
2394 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
2395 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
2396 VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT;
2397 return VK_SUCCESS;
2400 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceFormatsKHR(
2401 VkPhysicalDevice physicalDevice,
2402 VkSurfaceKHR surface,
2403 uint32_t* pSurfaceFormatCount,
2404 VkSurfaceFormatKHR* pSurfaceFormats)
2406 // Currently always say that RGBA8 & BGRA8 are supported
2407 if (!pSurfaceFormats) {
2408 *pSurfaceFormatCount = 2;
2409 } else {
2410 if (*pSurfaceFormatCount >= 2) {
2411 pSurfaceFormats[1].format = VK_FORMAT_R8G8B8A8_UNORM;
2412 pSurfaceFormats[1].colorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;
2414 if (*pSurfaceFormatCount >= 1) {
2415 pSurfaceFormats[0].format = VK_FORMAT_B8G8R8A8_UNORM;
2416 pSurfaceFormats[0].colorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;
2419 return VK_SUCCESS;
2422 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModesKHR(
2423 VkPhysicalDevice physicalDevice,
2424 VkSurfaceKHR surface,
2425 uint32_t* pPresentModeCount,
2426 VkPresentModeKHR* pPresentModes)
2428 // Currently always say that all present modes are supported
2429 if (!pPresentModes) {
2430 *pPresentModeCount = 6;
2431 } else {
2432 if (*pPresentModeCount >= 6) pPresentModes[5] = VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR;
2433 if (*pPresentModeCount >= 5) pPresentModes[4] = VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR;
2434 if (*pPresentModeCount >= 4) pPresentModes[3] = VK_PRESENT_MODE_FIFO_RELAXED_KHR;
2435 if (*pPresentModeCount >= 3) pPresentModes[2] = VK_PRESENT_MODE_FIFO_KHR;
2436 if (*pPresentModeCount >= 2) pPresentModes[1] = VK_PRESENT_MODE_MAILBOX_KHR;
2437 if (*pPresentModeCount >= 1) pPresentModes[0] = VK_PRESENT_MODE_IMMEDIATE_KHR;
2439 return VK_SUCCESS;
2443 static VKAPI_ATTR VkResult VKAPI_CALL CreateSwapchainKHR(
2444 VkDevice device,
2445 const VkSwapchainCreateInfoKHR* pCreateInfo,
2446 const VkAllocationCallbacks* pAllocator,
2447 VkSwapchainKHR* pSwapchain)
2449 unique_lock_t lock(global_lock);
2450 *pSwapchain = (VkSwapchainKHR)global_unique_handle++;
2451 for(uint32_t i = 0; i < icd_swapchain_image_count; ++i){
2452 swapchain_image_map[*pSwapchain][i] = (VkImage)global_unique_handle++;
2454 return VK_SUCCESS;
2457 static VKAPI_ATTR void VKAPI_CALL DestroySwapchainKHR(
2458 VkDevice device,
2459 VkSwapchainKHR swapchain,
2460 const VkAllocationCallbacks* pAllocator)
2462 unique_lock_t lock(global_lock);
2463 swapchain_image_map.clear();
2466 static VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainImagesKHR(
2467 VkDevice device,
2468 VkSwapchainKHR swapchain,
2469 uint32_t* pSwapchainImageCount,
2470 VkImage* pSwapchainImages)
2472 if (!pSwapchainImages) {
2473 *pSwapchainImageCount = icd_swapchain_image_count;
2474 } else {
2475 unique_lock_t lock(global_lock);
2476 for (uint32_t img_i = 0; img_i < (std::min)(*pSwapchainImageCount, icd_swapchain_image_count); ++img_i){
2477 pSwapchainImages[img_i] = swapchain_image_map.at(swapchain)[img_i];
2480 if (*pSwapchainImageCount < icd_swapchain_image_count) return VK_INCOMPLETE;
2481 else if (*pSwapchainImageCount > icd_swapchain_image_count) *pSwapchainImageCount = icd_swapchain_image_count;
2483 return VK_SUCCESS;
2486 static VKAPI_ATTR VkResult VKAPI_CALL AcquireNextImageKHR(
2487 VkDevice device,
2488 VkSwapchainKHR swapchain,
2489 uint64_t timeout,
2490 VkSemaphore semaphore,
2491 VkFence fence,
2492 uint32_t* pImageIndex)
2494 *pImageIndex = 0;
2495 return VK_SUCCESS;
2498 static VKAPI_ATTR VkResult VKAPI_CALL QueuePresentKHR(
2499 VkQueue queue,
2500 const VkPresentInfoKHR* pPresentInfo)
2502 //Not a CREATE or DESTROY function
2503 return VK_SUCCESS;
2506 static VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupPresentCapabilitiesKHR(
2507 VkDevice device,
2508 VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities)
2510 //Not a CREATE or DESTROY function
2511 return VK_SUCCESS;
2514 static VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupSurfacePresentModesKHR(
2515 VkDevice device,
2516 VkSurfaceKHR surface,
2517 VkDeviceGroupPresentModeFlagsKHR* pModes)
2519 //Not a CREATE or DESTROY function
2520 return VK_SUCCESS;
2523 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDevicePresentRectanglesKHR(
2524 VkPhysicalDevice physicalDevice,
2525 VkSurfaceKHR surface,
2526 uint32_t* pRectCount,
2527 VkRect2D* pRects)
2529 //Not a CREATE or DESTROY function
2530 return VK_SUCCESS;
2533 static VKAPI_ATTR VkResult VKAPI_CALL AcquireNextImage2KHR(
2534 VkDevice device,
2535 const VkAcquireNextImageInfoKHR* pAcquireInfo,
2536 uint32_t* pImageIndex)
2538 *pImageIndex = 0;
2539 return VK_SUCCESS;
2543 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPropertiesKHR(
2544 VkPhysicalDevice physicalDevice,
2545 uint32_t* pPropertyCount,
2546 VkDisplayPropertiesKHR* pProperties)
2548 if (!pProperties) {
2549 *pPropertyCount = 1;
2550 } else {
2551 unique_lock_t lock(global_lock);
2552 pProperties[0].display = (VkDisplayKHR)global_unique_handle++;
2553 display_map[physicalDevice].insert(pProperties[0].display);
2555 return VK_SUCCESS;
2558 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPlanePropertiesKHR(
2559 VkPhysicalDevice physicalDevice,
2560 uint32_t* pPropertyCount,
2561 VkDisplayPlanePropertiesKHR* pProperties)
2563 //Not a CREATE or DESTROY function
2564 return VK_SUCCESS;
2567 static VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneSupportedDisplaysKHR(
2568 VkPhysicalDevice physicalDevice,
2569 uint32_t planeIndex,
2570 uint32_t* pDisplayCount,
2571 VkDisplayKHR* pDisplays)
2573 //Not a CREATE or DESTROY function
2574 return VK_SUCCESS;
2577 static VKAPI_ATTR VkResult VKAPI_CALL GetDisplayModePropertiesKHR(
2578 VkPhysicalDevice physicalDevice,
2579 VkDisplayKHR display,
2580 uint32_t* pPropertyCount,
2581 VkDisplayModePropertiesKHR* pProperties)
2583 //Not a CREATE or DESTROY function
2584 return VK_SUCCESS;
2587 static VKAPI_ATTR VkResult VKAPI_CALL CreateDisplayModeKHR(
2588 VkPhysicalDevice physicalDevice,
2589 VkDisplayKHR display,
2590 const VkDisplayModeCreateInfoKHR* pCreateInfo,
2591 const VkAllocationCallbacks* pAllocator,
2592 VkDisplayModeKHR* pMode)
2594 unique_lock_t lock(global_lock);
2595 *pMode = (VkDisplayModeKHR)global_unique_handle++;
2596 return VK_SUCCESS;
2599 static VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneCapabilitiesKHR(
2600 VkPhysicalDevice physicalDevice,
2601 VkDisplayModeKHR mode,
2602 uint32_t planeIndex,
2603 VkDisplayPlaneCapabilitiesKHR* pCapabilities)
2605 //Not a CREATE or DESTROY function
2606 return VK_SUCCESS;
2609 static VKAPI_ATTR VkResult VKAPI_CALL CreateDisplayPlaneSurfaceKHR(
2610 VkInstance instance,
2611 const VkDisplaySurfaceCreateInfoKHR* pCreateInfo,
2612 const VkAllocationCallbacks* pAllocator,
2613 VkSurfaceKHR* pSurface)
2615 unique_lock_t lock(global_lock);
2616 *pSurface = (VkSurfaceKHR)global_unique_handle++;
2617 return VK_SUCCESS;
2621 static VKAPI_ATTR VkResult VKAPI_CALL CreateSharedSwapchainsKHR(
2622 VkDevice device,
2623 uint32_t swapchainCount,
2624 const VkSwapchainCreateInfoKHR* pCreateInfos,
2625 const VkAllocationCallbacks* pAllocator,
2626 VkSwapchainKHR* pSwapchains)
2628 unique_lock_t lock(global_lock);
2629 for (uint32_t i = 0; i < swapchainCount; ++i) {
2630 pSwapchains[i] = (VkSwapchainKHR)global_unique_handle++;
2632 return VK_SUCCESS;
2635 #ifdef VK_USE_PLATFORM_XLIB_KHR
2637 static VKAPI_ATTR VkResult VKAPI_CALL CreateXlibSurfaceKHR(
2638 VkInstance instance,
2639 const VkXlibSurfaceCreateInfoKHR* pCreateInfo,
2640 const VkAllocationCallbacks* pAllocator,
2641 VkSurfaceKHR* pSurface)
2643 unique_lock_t lock(global_lock);
2644 *pSurface = (VkSurfaceKHR)global_unique_handle++;
2645 return VK_SUCCESS;
2648 static VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceXlibPresentationSupportKHR(
2649 VkPhysicalDevice physicalDevice,
2650 uint32_t queueFamilyIndex,
2651 Display* dpy,
2652 VisualID visualID)
2654 //Not a CREATE or DESTROY function
2655 return VK_SUCCESS;
2657 #endif /* VK_USE_PLATFORM_XLIB_KHR */
2659 #ifdef VK_USE_PLATFORM_XCB_KHR
2661 static VKAPI_ATTR VkResult VKAPI_CALL CreateXcbSurfaceKHR(
2662 VkInstance instance,
2663 const VkXcbSurfaceCreateInfoKHR* pCreateInfo,
2664 const VkAllocationCallbacks* pAllocator,
2665 VkSurfaceKHR* pSurface)
2667 unique_lock_t lock(global_lock);
2668 *pSurface = (VkSurfaceKHR)global_unique_handle++;
2669 return VK_SUCCESS;
2672 static VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceXcbPresentationSupportKHR(
2673 VkPhysicalDevice physicalDevice,
2674 uint32_t queueFamilyIndex,
2675 xcb_connection_t* connection,
2676 xcb_visualid_t visual_id)
2678 //Not a CREATE or DESTROY function
2679 return VK_SUCCESS;
2681 #endif /* VK_USE_PLATFORM_XCB_KHR */
2683 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
2685 static VKAPI_ATTR VkResult VKAPI_CALL CreateWaylandSurfaceKHR(
2686 VkInstance instance,
2687 const VkWaylandSurfaceCreateInfoKHR* pCreateInfo,
2688 const VkAllocationCallbacks* pAllocator,
2689 VkSurfaceKHR* pSurface)
2691 unique_lock_t lock(global_lock);
2692 *pSurface = (VkSurfaceKHR)global_unique_handle++;
2693 return VK_SUCCESS;
2696 static VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceWaylandPresentationSupportKHR(
2697 VkPhysicalDevice physicalDevice,
2698 uint32_t queueFamilyIndex,
2699 struct wl_display* display)
2701 //Not a CREATE or DESTROY function
2702 return VK_SUCCESS;
2704 #endif /* VK_USE_PLATFORM_WAYLAND_KHR */
2706 #ifdef VK_USE_PLATFORM_ANDROID_KHR
2708 static VKAPI_ATTR VkResult VKAPI_CALL CreateAndroidSurfaceKHR(
2709 VkInstance instance,
2710 const VkAndroidSurfaceCreateInfoKHR* pCreateInfo,
2711 const VkAllocationCallbacks* pAllocator,
2712 VkSurfaceKHR* pSurface)
2714 unique_lock_t lock(global_lock);
2715 *pSurface = (VkSurfaceKHR)global_unique_handle++;
2716 return VK_SUCCESS;
2718 #endif /* VK_USE_PLATFORM_ANDROID_KHR */
2720 #ifdef VK_USE_PLATFORM_WIN32_KHR
2722 static VKAPI_ATTR VkResult VKAPI_CALL CreateWin32SurfaceKHR(
2723 VkInstance instance,
2724 const VkWin32SurfaceCreateInfoKHR* pCreateInfo,
2725 const VkAllocationCallbacks* pAllocator,
2726 VkSurfaceKHR* pSurface)
2728 unique_lock_t lock(global_lock);
2729 *pSurface = (VkSurfaceKHR)global_unique_handle++;
2730 return VK_SUCCESS;
2733 static VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceWin32PresentationSupportKHR(
2734 VkPhysicalDevice physicalDevice,
2735 uint32_t queueFamilyIndex)
2737 //Not a CREATE or DESTROY function
2738 return VK_SUCCESS;
2740 #endif /* VK_USE_PLATFORM_WIN32_KHR */
2744 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceVideoCapabilitiesKHR(
2745 VkPhysicalDevice physicalDevice,
2746 const VkVideoProfileInfoKHR* pVideoProfile,
2747 VkVideoCapabilitiesKHR* pCapabilities)
2749 // We include some reasonable set of capability combinations to cover a wide range of use cases
2750 auto caps = pCapabilities;
2751 auto caps_decode = lvl_find_mod_in_chain<VkVideoDecodeCapabilitiesKHR>(pCapabilities->pNext);
2752 auto caps_decode_h264 = lvl_find_mod_in_chain<VkVideoDecodeH264CapabilitiesKHR>(pCapabilities->pNext);
2753 auto caps_decode_h265 = lvl_find_mod_in_chain<VkVideoDecodeH265CapabilitiesKHR>(pCapabilities->pNext);
2754 auto caps_decode_av1 = lvl_find_mod_in_chain<VkVideoDecodeAV1CapabilitiesKHR>(pCapabilities->pNext);
2755 auto caps_encode = lvl_find_mod_in_chain<VkVideoEncodeCapabilitiesKHR>(pCapabilities->pNext);
2756 auto caps_encode_h264 = lvl_find_mod_in_chain<VkVideoEncodeH264CapabilitiesKHR>(pCapabilities->pNext);
2757 auto caps_encode_h265 = lvl_find_mod_in_chain<VkVideoEncodeH265CapabilitiesKHR>(pCapabilities->pNext);
2759 switch (pVideoProfile->videoCodecOperation) {
2760 case VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR: {
2761 auto profile = lvl_find_in_chain<VkVideoDecodeH264ProfileInfoKHR>(pVideoProfile->pNext);
2762 if (profile->stdProfileIdc != STD_VIDEO_H264_PROFILE_IDC_BASELINE &&
2763 profile->stdProfileIdc != STD_VIDEO_H264_PROFILE_IDC_MAIN) {
2764 return VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR;
2767 caps->flags = VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR;
2768 caps->minBitstreamBufferOffsetAlignment = 256;
2769 caps->minBitstreamBufferSizeAlignment = 256;
2770 caps->pictureAccessGranularity = {16,16};
2771 caps->minCodedExtent = {16,16};
2772 caps->maxCodedExtent = {1920,1080};
2773 caps->maxDpbSlots = 33;
2774 caps->maxActiveReferencePictures = 32;
2775 std::strncpy(caps->stdHeaderVersion.extensionName, VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_EXTENSION_NAME,
2776 sizeof(caps->stdHeaderVersion.extensionName));
2777 caps->stdHeaderVersion.specVersion = VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_SPEC_VERSION;
2779 switch (pVideoProfile->chromaSubsampling) {
2780 case VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR:
2781 if (profile->pictureLayout != VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_KHR) {
2782 return VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR;
2784 caps_decode->flags = VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR;
2785 caps_decode_h264->maxLevelIdc = STD_VIDEO_H264_LEVEL_IDC_6_2;
2786 caps_decode_h264->fieldOffsetGranularity = {0,0};
2787 break;
2788 case VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR:
2789 if (profile->pictureLayout != VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_KHR &&
2790 profile->pictureLayout != VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR) {
2791 return VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR;
2793 caps_decode->flags = VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR;
2794 caps_decode_h264->maxLevelIdc = STD_VIDEO_H264_LEVEL_IDC_5_0;
2795 caps_decode_h264->fieldOffsetGranularity = {0,16};
2796 break;
2797 case VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR:
2798 if (profile->pictureLayout != VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_KHR &&
2799 profile->pictureLayout != VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_KHR) {
2800 return VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR;
2802 caps_decode->flags = VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR
2803 | VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR;
2804 caps_decode_h264->maxLevelIdc = STD_VIDEO_H264_LEVEL_IDC_3_2;
2805 caps_decode_h264->fieldOffsetGranularity = {0,1};
2806 break;
2807 default:
2808 return VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR;
2810 break;
2812 case VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR: {
2813 auto profile = lvl_find_in_chain<VkVideoDecodeH265ProfileInfoKHR>(pVideoProfile->pNext);
2814 if (profile->stdProfileIdc != STD_VIDEO_H265_PROFILE_IDC_MAIN) {
2815 return VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR;
2818 caps->flags = VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR;
2819 caps->minBitstreamBufferOffsetAlignment = 64;
2820 caps->minBitstreamBufferSizeAlignment = 64;
2821 caps->pictureAccessGranularity = {32,32};
2822 caps->minCodedExtent = {48,48};
2823 caps->maxCodedExtent = {3840,2160};
2824 caps->maxDpbSlots = 16;
2825 caps->maxActiveReferencePictures = 15;
2826 std::strncpy(caps->stdHeaderVersion.extensionName, VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_EXTENSION_NAME,
2827 sizeof(caps->stdHeaderVersion.extensionName));
2828 caps->stdHeaderVersion.specVersion = VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_SPEC_VERSION;
2830 switch (pVideoProfile->chromaSubsampling) {
2831 case VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR:
2832 caps_decode->flags = VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR;
2833 caps_decode_h265->maxLevelIdc = STD_VIDEO_H265_LEVEL_IDC_6_0;
2834 break;
2835 case VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR:
2836 caps_decode->flags = VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR;
2837 caps_decode_h265->maxLevelIdc = STD_VIDEO_H265_LEVEL_IDC_5_2;
2838 break;
2839 case VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR:
2840 caps_decode->flags = VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR
2841 | VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR;
2842 caps_decode_h265->maxLevelIdc = STD_VIDEO_H265_LEVEL_IDC_4_1;
2843 break;
2844 default:
2845 return VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR;
2847 break;
2849 case VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR: {
2850 auto profile = lvl_find_in_chain<VkVideoDecodeAV1ProfileInfoKHR>(pVideoProfile->pNext);
2851 if (profile->stdProfile != STD_VIDEO_AV1_PROFILE_MAIN) {
2852 return VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR;
2855 caps->flags = VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR;
2856 caps->minBitstreamBufferOffsetAlignment = 256;
2857 caps->minBitstreamBufferSizeAlignment = 256;
2858 caps->pictureAccessGranularity = {16,16};
2859 caps->minCodedExtent = {16,16};
2860 caps->maxCodedExtent = {1920,1080};
2861 caps->maxDpbSlots = 8;
2862 caps->maxActiveReferencePictures = 7;
2863 std::strncpy(caps->stdHeaderVersion.extensionName, VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_EXTENSION_NAME,
2864 sizeof(caps->stdHeaderVersion.extensionName));
2865 caps->stdHeaderVersion.specVersion = VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_SPEC_VERSION;
2867 switch (pVideoProfile->chromaSubsampling) {
2868 case VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR:
2869 caps_decode->flags = VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR;
2870 caps_decode_av1->maxLevel = STD_VIDEO_AV1_LEVEL_6_2;
2871 break;
2872 case VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR:
2873 if (profile->filmGrainSupport) {
2874 return VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR;
2876 caps_decode->flags = VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR;
2877 caps_decode_av1->maxLevel = STD_VIDEO_AV1_LEVEL_5_0;
2878 break;
2879 case VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR:
2880 caps_decode->flags = VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR
2881 | VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR;
2882 caps_decode_av1->maxLevel = STD_VIDEO_AV1_LEVEL_3_2;
2883 break;
2884 default:
2885 return VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR;
2887 break;
2889 case VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR: {
2890 auto profile = lvl_find_in_chain<VkVideoEncodeH264ProfileInfoKHR>(pVideoProfile->pNext);
2891 if (profile->stdProfileIdc != STD_VIDEO_H264_PROFILE_IDC_BASELINE) {
2892 return VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR;
2895 caps->flags = VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR;
2896 caps->minBitstreamBufferOffsetAlignment = 4096;
2897 caps->minBitstreamBufferSizeAlignment = 4096;
2898 caps->pictureAccessGranularity = {16,16};
2899 caps->minCodedExtent = {160,128};
2900 caps->maxCodedExtent = {1920,1080};
2901 caps->maxDpbSlots = 10;
2902 caps->maxActiveReferencePictures = 4;
2903 std::strncpy(caps->stdHeaderVersion.extensionName, VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_EXTENSION_NAME,
2904 sizeof(caps->stdHeaderVersion.extensionName));
2905 caps->stdHeaderVersion.specVersion = VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_SPEC_VERSION;
2907 switch (pVideoProfile->chromaSubsampling) {
2908 case VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR:
2909 caps_encode->flags = VK_VIDEO_ENCODE_CAPABILITY_PRECEDING_EXTERNALLY_ENCODED_BYTES_BIT_KHR;
2910 caps_encode->rateControlModes = VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR
2911 | VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR
2912 | VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR;
2913 caps_encode->maxRateControlLayers = 4;
2914 caps_encode->maxBitrate = 800000000;
2915 caps_encode->maxQualityLevels = 4;
2916 caps_encode->encodeInputPictureGranularity = {16,16};
2917 caps_encode->supportedEncodeFeedbackFlags = VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BUFFER_OFFSET_BIT_KHR
2918 | VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BYTES_WRITTEN_BIT_KHR
2919 | VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_HAS_OVERRIDES_BIT_KHR;
2920 caps_encode_h264->flags = VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_KHR
2921 | VK_VIDEO_ENCODE_H264_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_KHR
2922 | VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_KHR
2923 | VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_KHR
2924 | VK_VIDEO_ENCODE_H264_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR
2925 | VK_VIDEO_ENCODE_H264_CAPABILITY_GENERATE_PREFIX_NALU_BIT_KHR;
2926 caps_encode_h264->maxLevelIdc = STD_VIDEO_H264_LEVEL_IDC_6_2;
2927 caps_encode_h264->maxSliceCount = 8;
2928 caps_encode_h264->maxPPictureL0ReferenceCount = 4;
2929 caps_encode_h264->maxBPictureL0ReferenceCount = 3;
2930 caps_encode_h264->maxL1ReferenceCount = 2;
2931 caps_encode_h264->maxTemporalLayerCount = 4;
2932 caps_encode_h264->expectDyadicTemporalLayerPattern = VK_FALSE;
2933 caps_encode_h264->minQp = 0;
2934 caps_encode_h264->maxQp = 51;
2935 caps_encode_h264->prefersGopRemainingFrames = VK_FALSE;
2936 caps_encode_h264->requiresGopRemainingFrames = VK_FALSE;
2937 break;
2938 case VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR:
2939 caps_encode->flags = VK_VIDEO_ENCODE_CAPABILITY_PRECEDING_EXTERNALLY_ENCODED_BYTES_BIT_KHR;
2940 caps_encode->rateControlModes = VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR
2941 | VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR;
2942 caps_encode->maxRateControlLayers = 1;
2943 caps_encode->maxBitrate = 480000000;
2944 caps_encode->maxQualityLevels = 3;
2945 caps_encode->encodeInputPictureGranularity = {32,32};
2946 caps_encode->supportedEncodeFeedbackFlags = VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BUFFER_OFFSET_BIT_KHR
2947 | VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BYTES_WRITTEN_BIT_KHR;
2948 caps_encode_h264->flags = VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_KHR
2949 | VK_VIDEO_ENCODE_H264_CAPABILITY_PER_SLICE_CONSTANT_QP_BIT_KHR
2950 | VK_VIDEO_ENCODE_H264_CAPABILITY_GENERATE_PREFIX_NALU_BIT_KHR;
2951 caps_encode_h264->maxLevelIdc = STD_VIDEO_H264_LEVEL_IDC_6_1;
2952 caps_encode_h264->maxSliceCount = 4;
2953 caps_encode_h264->maxPPictureL0ReferenceCount = 4;
2954 caps_encode_h264->maxBPictureL0ReferenceCount = 0;
2955 caps_encode_h264->maxL1ReferenceCount = 0;
2956 caps_encode_h264->maxTemporalLayerCount = 4;
2957 caps_encode_h264->expectDyadicTemporalLayerPattern = VK_TRUE;
2958 caps_encode_h264->minQp = 0;
2959 caps_encode_h264->maxQp = 30;
2960 caps_encode_h264->prefersGopRemainingFrames = VK_TRUE;
2961 caps_encode_h264->requiresGopRemainingFrames = VK_FALSE;
2962 break;
2963 case VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR:
2964 caps_encode->flags = 0;
2965 caps_encode->rateControlModes = VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR;
2966 caps_encode->maxRateControlLayers = 1;
2967 caps_encode->maxBitrate = 240000000;
2968 caps_encode->maxQualityLevels = 1;
2969 caps_encode->encodeInputPictureGranularity = {1,1};
2970 caps_encode->supportedEncodeFeedbackFlags = VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BUFFER_OFFSET_BIT_KHR
2971 | VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BYTES_WRITTEN_BIT_KHR;
2972 caps_encode_h264->flags = VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_KHR
2973 | VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_KHR
2974 | VK_VIDEO_ENCODE_H264_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR;
2975 caps_encode_h264->maxLevelIdc = STD_VIDEO_H264_LEVEL_IDC_5_1;
2976 caps_encode_h264->maxSliceCount = 1;
2977 caps_encode_h264->maxPPictureL0ReferenceCount = 0;
2978 caps_encode_h264->maxBPictureL0ReferenceCount = 2;
2979 caps_encode_h264->maxL1ReferenceCount = 2;
2980 caps_encode_h264->maxTemporalLayerCount = 1;
2981 caps_encode_h264->expectDyadicTemporalLayerPattern = VK_FALSE;
2982 caps_encode_h264->minQp = 5;
2983 caps_encode_h264->maxQp = 40;
2984 caps_encode_h264->prefersGopRemainingFrames = VK_TRUE;
2985 caps_encode_h264->requiresGopRemainingFrames = VK_TRUE;
2986 break;
2987 default:
2988 return VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR;
2990 break;
2992 case VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR: {
2993 auto profile = lvl_find_in_chain<VkVideoEncodeH265ProfileInfoKHR>(pVideoProfile->pNext);
2994 if (profile->stdProfileIdc != STD_VIDEO_H265_PROFILE_IDC_MAIN) {
2995 return VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR;
2998 caps->flags = VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR;
2999 caps->minBitstreamBufferOffsetAlignment = 1;
3000 caps->minBitstreamBufferSizeAlignment = 1;
3001 caps->pictureAccessGranularity = {8,8};
3002 caps->minCodedExtent = {64,48};
3003 caps->maxCodedExtent = {4096,2560};
3004 caps->maxDpbSlots = 8;
3005 caps->maxActiveReferencePictures = 2;
3006 std::strncpy(caps->stdHeaderVersion.extensionName, VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_EXTENSION_NAME, sizeof(caps->stdHeaderVersion.extensionName));
3007 caps->stdHeaderVersion.specVersion = VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_SPEC_VERSION;
3009 switch (pVideoProfile->chromaSubsampling) {
3010 case VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR:
3011 caps_encode->flags = 0;
3012 caps_encode->rateControlModes = VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR;
3013 caps_encode->maxRateControlLayers = 1;
3014 caps_encode->maxBitrate = 800000000;
3015 caps_encode->maxQualityLevels = 1;
3016 caps_encode->encodeInputPictureGranularity = {64,64};
3017 caps_encode->supportedEncodeFeedbackFlags = VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BUFFER_OFFSET_BIT_KHR
3018 | VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BYTES_WRITTEN_BIT_KHR;
3019 caps_encode_h265->flags = VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_KHR
3020 | VK_VIDEO_ENCODE_H265_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_KHR
3021 | VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_KHR
3022 | VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_KHR
3023 | VK_VIDEO_ENCODE_H265_CAPABILITY_PER_SLICE_SEGMENT_CONSTANT_QP_BIT_KHR
3024 | VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_SEGMENTS_PER_TILE_BIT_KHR;
3025 caps_encode_h265->maxLevelIdc = STD_VIDEO_H265_LEVEL_IDC_6_2;
3026 caps_encode_h265->maxSliceSegmentCount = 8;
3027 caps_encode_h265->maxTiles = {1,1};
3028 caps_encode_h265->ctbSizes = VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_KHR
3029 | VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_KHR;
3030 caps_encode_h265->transformBlockSizes = VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_KHR
3031 | VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_KHR
3032 | VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_KHR;
3033 caps_encode_h265->maxPPictureL0ReferenceCount = 4;
3034 caps_encode_h265->maxBPictureL0ReferenceCount = 3;
3035 caps_encode_h265->maxL1ReferenceCount = 2;
3036 caps_encode_h265->maxSubLayerCount = 1;
3037 caps_encode_h265->expectDyadicTemporalSubLayerPattern = VK_FALSE;
3038 caps_encode_h265->minQp = 16;
3039 caps_encode_h265->maxQp = 32;
3040 caps_encode_h265->prefersGopRemainingFrames = VK_FALSE;
3041 caps_encode_h265->requiresGopRemainingFrames = VK_FALSE;
3042 break;
3043 case VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR:
3044 caps_encode->flags = 0;
3045 caps_encode->rateControlModes = VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR;
3046 caps_encode->maxRateControlLayers = 0;
3047 caps_encode->maxBitrate = 480000000;
3048 caps_encode->maxQualityLevels = 2;
3049 caps_encode->encodeInputPictureGranularity = {32,32};
3050 caps_encode->supportedEncodeFeedbackFlags = VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BUFFER_OFFSET_BIT_KHR
3051 | VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BYTES_WRITTEN_BIT_KHR;
3052 caps_encode_h265->flags = VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_SEGMENT_TYPE_BIT_KHR;
3053 caps_encode_h265->maxLevelIdc = STD_VIDEO_H265_LEVEL_IDC_6_1;
3054 caps_encode_h265->maxSliceSegmentCount = 4;
3055 caps_encode_h265->maxTiles = {2,2};
3056 caps_encode_h265->ctbSizes = VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_KHR
3057 | VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_KHR;
3058 caps_encode_h265->transformBlockSizes = VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_KHR
3059 | VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_KHR
3060 | VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_KHR;
3061 caps_encode_h265->maxPPictureL0ReferenceCount = 4;
3062 caps_encode_h265->maxBPictureL0ReferenceCount = 0;
3063 caps_encode_h265->maxL1ReferenceCount = 0;
3064 caps_encode_h265->maxSubLayerCount = 1;
3065 caps_encode_h265->expectDyadicTemporalSubLayerPattern = VK_FALSE;
3066 caps_encode_h265->minQp = 0;
3067 caps_encode_h265->maxQp = 51;
3068 caps_encode_h265->prefersGopRemainingFrames = VK_TRUE;
3069 caps_encode_h265->requiresGopRemainingFrames = VK_FALSE;
3070 break;
3071 case VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR:
3072 caps_encode->flags = VK_VIDEO_ENCODE_CAPABILITY_PRECEDING_EXTERNALLY_ENCODED_BYTES_BIT_KHR;
3073 caps_encode->rateControlModes = VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR
3074 | VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR
3075 | VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR;
3076 caps_encode->maxRateControlLayers = 2;
3077 caps_encode->maxBitrate = 240000000;
3078 caps_encode->maxQualityLevels = 3;
3079 caps_encode->encodeInputPictureGranularity = {16,16};
3080 caps_encode->supportedEncodeFeedbackFlags = VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BUFFER_OFFSET_BIT_KHR
3081 | VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BYTES_WRITTEN_BIT_KHR
3082 | VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_HAS_OVERRIDES_BIT_KHR;
3083 caps_encode_h265->flags = VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_KHR
3084 | VK_VIDEO_ENCODE_H265_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR
3085 | VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILES_PER_SLICE_SEGMENT_BIT_KHR;
3086 caps_encode_h265->maxLevelIdc = STD_VIDEO_H265_LEVEL_IDC_5_1;
3087 caps_encode_h265->maxSliceSegmentCount = 1;
3088 caps_encode_h265->maxTiles = {2,2};
3089 caps_encode_h265->ctbSizes = VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_KHR;
3090 caps_encode_h265->transformBlockSizes = VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_KHR;
3091 caps_encode_h265->maxPPictureL0ReferenceCount = 0;
3092 caps_encode_h265->maxBPictureL0ReferenceCount = 2;
3093 caps_encode_h265->maxL1ReferenceCount = 2;
3094 caps_encode_h265->maxSubLayerCount = 4;
3095 caps_encode_h265->expectDyadicTemporalSubLayerPattern = VK_TRUE;
3096 caps_encode_h265->minQp = 16;
3097 caps_encode_h265->maxQp = 51;
3098 caps_encode_h265->prefersGopRemainingFrames = VK_TRUE;
3099 caps_encode_h265->requiresGopRemainingFrames = VK_TRUE;
3100 break;
3101 default:
3102 return VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR;
3104 break;
3107 default:
3108 break;
3110 return VK_SUCCESS;
3113 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceVideoFormatPropertiesKHR(
3114 VkPhysicalDevice physicalDevice,
3115 const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo,
3116 uint32_t* pVideoFormatPropertyCount,
3117 VkVideoFormatPropertiesKHR* pVideoFormatProperties)
3119 // We include some reasonable set of format combinations to cover a wide range of use cases
3120 auto profile_list = lvl_find_in_chain<VkVideoProfileListInfoKHR>(pVideoFormatInfo->pNext);
3121 if (profile_list->profileCount != 1) {
3122 return VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR;
3125 std::vector<VkVideoFormatPropertiesKHR> format_props{};
3127 VkVideoFormatPropertiesKHR props = {};
3128 props.sType = VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR;
3129 props.imageCreateFlags = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT
3130 | VK_IMAGE_CREATE_ALIAS_BIT
3131 | VK_IMAGE_CREATE_EXTENDED_USAGE_BIT
3132 | VK_IMAGE_CREATE_PROTECTED_BIT
3133 | VK_IMAGE_CREATE_DISJOINT_BIT;
3134 props.imageType = VK_IMAGE_TYPE_2D;
3135 props.imageTiling = VK_IMAGE_TILING_OPTIMAL;
3137 switch (profile_list->pProfiles[0].videoCodecOperation) {
3138 case VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR:
3139 case VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR:
3140 case VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR:
3141 switch (profile_list->pProfiles[0].chromaSubsampling) {
3142 case VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR:
3143 props.format = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM;
3144 props.imageUsageFlags = VK_IMAGE_USAGE_TRANSFER_SRC_BIT
3145 | VK_IMAGE_USAGE_TRANSFER_DST_BIT
3146 | VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR;
3147 format_props.push_back(props);
3148 props.imageUsageFlags = VK_IMAGE_USAGE_TRANSFER_SRC_BIT
3149 | VK_IMAGE_USAGE_TRANSFER_DST_BIT
3150 | VK_IMAGE_USAGE_SAMPLED_BIT
3151 | VK_IMAGE_USAGE_STORAGE_BIT
3152 | VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR
3153 | VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR
3154 | VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR;
3155 format_props.push_back(props);
3156 props.format = VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM;
3157 format_props.push_back(props);
3158 break;
3159 case VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR:
3160 props.imageUsageFlags = VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR;
3161 props.format = VK_FORMAT_G8_B8R8_2PLANE_422_UNORM;
3162 format_props.push_back(props);
3163 props.imageUsageFlags = VK_IMAGE_USAGE_TRANSFER_SRC_BIT
3164 | VK_IMAGE_USAGE_TRANSFER_DST_BIT
3165 | VK_IMAGE_USAGE_SAMPLED_BIT
3166 | VK_IMAGE_USAGE_STORAGE_BIT
3167 | VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR
3168 | VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR;
3169 format_props.push_back(props);
3170 props.format = VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16;
3171 format_props.push_back(props);
3172 break;
3173 case VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR:
3174 props.format = VK_FORMAT_G8_B8R8_2PLANE_444_UNORM;
3175 props.imageUsageFlags = VK_IMAGE_USAGE_TRANSFER_SRC_BIT
3176 | VK_IMAGE_USAGE_TRANSFER_DST_BIT
3177 | VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR;
3178 format_props.push_back(props);
3179 props.imageUsageFlags = VK_IMAGE_USAGE_TRANSFER_SRC_BIT
3180 | VK_IMAGE_USAGE_TRANSFER_DST_BIT
3181 | VK_IMAGE_USAGE_SAMPLED_BIT
3182 | VK_IMAGE_USAGE_STORAGE_BIT
3183 | VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR
3184 | VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR
3185 | VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR;
3186 format_props.push_back(props);
3187 break;
3188 default:
3189 return VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR;
3191 break;
3192 case VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR:
3193 case VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR:
3194 switch (profile_list->pProfiles[0].chromaSubsampling) {
3195 case VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR:
3196 props.format = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM;
3197 props.imageUsageFlags = VK_IMAGE_USAGE_TRANSFER_SRC_BIT
3198 | VK_IMAGE_USAGE_TRANSFER_DST_BIT
3199 | VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR;
3200 format_props.push_back(props);
3201 props.imageUsageFlags = VK_IMAGE_USAGE_TRANSFER_SRC_BIT
3202 | VK_IMAGE_USAGE_TRANSFER_DST_BIT
3203 | VK_IMAGE_USAGE_SAMPLED_BIT
3204 | VK_IMAGE_USAGE_STORAGE_BIT
3205 | VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR
3206 | VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR;
3207 format_props.push_back(props);
3208 props.format = VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM;
3209 format_props.push_back(props);
3210 break;
3211 case VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR:
3212 props.format = VK_FORMAT_G8_B8R8_2PLANE_422_UNORM;
3213 props.imageUsageFlags = VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR;
3214 format_props.push_back(props);
3215 props.imageUsageFlags = VK_IMAGE_USAGE_TRANSFER_SRC_BIT
3216 | VK_IMAGE_USAGE_TRANSFER_DST_BIT
3217 | VK_IMAGE_USAGE_SAMPLED_BIT
3218 | VK_IMAGE_USAGE_STORAGE_BIT
3219 | VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR
3220 | VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR;
3221 format_props.push_back(props);
3222 props.format = VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16;
3223 format_props.push_back(props);
3224 break;
3225 case VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR:
3226 props.format = VK_FORMAT_G8_B8R8_2PLANE_444_UNORM;
3227 props.imageUsageFlags = VK_IMAGE_USAGE_TRANSFER_SRC_BIT
3228 | VK_IMAGE_USAGE_TRANSFER_DST_BIT
3229 | VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR;
3230 format_props.push_back(props);
3231 props.imageUsageFlags = VK_IMAGE_USAGE_TRANSFER_SRC_BIT
3232 | VK_IMAGE_USAGE_TRANSFER_DST_BIT
3233 | VK_IMAGE_USAGE_SAMPLED_BIT
3234 | VK_IMAGE_USAGE_STORAGE_BIT
3235 | VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR
3236 | VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR;
3237 format_props.push_back(props);
3238 break;
3239 default:
3240 return VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR;
3242 break;
3244 default:
3245 break;
3248 std::vector<VkVideoFormatPropertiesKHR> filtered_props;
3249 for (const auto& fmt_props : format_props) {
3250 if ((pVideoFormatInfo->imageUsage & fmt_props.imageUsageFlags) == pVideoFormatInfo->imageUsage) {
3251 filtered_props.push_back(fmt_props);
3255 if (pVideoFormatProperties != nullptr) {
3256 for (uint32_t i = 0; i < (std::min)(*pVideoFormatPropertyCount, (uint32_t)filtered_props.size()); ++i) {
3257 pVideoFormatProperties[i] = filtered_props[i];
3260 *pVideoFormatPropertyCount = (uint32_t)filtered_props.size();
3261 return VK_SUCCESS;
3264 static VKAPI_ATTR VkResult VKAPI_CALL CreateVideoSessionKHR(
3265 VkDevice device,
3266 const VkVideoSessionCreateInfoKHR* pCreateInfo,
3267 const VkAllocationCallbacks* pAllocator,
3268 VkVideoSessionKHR* pVideoSession)
3270 unique_lock_t lock(global_lock);
3271 *pVideoSession = (VkVideoSessionKHR)global_unique_handle++;
3272 return VK_SUCCESS;
3275 static VKAPI_ATTR void VKAPI_CALL DestroyVideoSessionKHR(
3276 VkDevice device,
3277 VkVideoSessionKHR videoSession,
3278 const VkAllocationCallbacks* pAllocator)
3280 //Destroy object
3283 static VKAPI_ATTR VkResult VKAPI_CALL GetVideoSessionMemoryRequirementsKHR(
3284 VkDevice device,
3285 VkVideoSessionKHR videoSession,
3286 uint32_t* pMemoryRequirementsCount,
3287 VkVideoSessionMemoryRequirementsKHR* pMemoryRequirements)
3289 if (!pMemoryRequirements) {
3290 *pMemoryRequirementsCount = 1;
3291 } else {
3292 // arbitrary
3293 pMemoryRequirements[0].memoryBindIndex = 0;
3294 pMemoryRequirements[0].memoryRequirements.size = 4096;
3295 pMemoryRequirements[0].memoryRequirements.alignment = 1;
3296 pMemoryRequirements[0].memoryRequirements.memoryTypeBits = 0xFFFF;
3298 return VK_SUCCESS;
3301 static VKAPI_ATTR VkResult VKAPI_CALL BindVideoSessionMemoryKHR(
3302 VkDevice device,
3303 VkVideoSessionKHR videoSession,
3304 uint32_t bindSessionMemoryInfoCount,
3305 const VkBindVideoSessionMemoryInfoKHR* pBindSessionMemoryInfos)
3307 //Not a CREATE or DESTROY function
3308 return VK_SUCCESS;
3311 static VKAPI_ATTR VkResult VKAPI_CALL CreateVideoSessionParametersKHR(
3312 VkDevice device,
3313 const VkVideoSessionParametersCreateInfoKHR* pCreateInfo,
3314 const VkAllocationCallbacks* pAllocator,
3315 VkVideoSessionParametersKHR* pVideoSessionParameters)
3317 unique_lock_t lock(global_lock);
3318 *pVideoSessionParameters = (VkVideoSessionParametersKHR)global_unique_handle++;
3319 return VK_SUCCESS;
3322 static VKAPI_ATTR VkResult VKAPI_CALL UpdateVideoSessionParametersKHR(
3323 VkDevice device,
3324 VkVideoSessionParametersKHR videoSessionParameters,
3325 const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo)
3327 //Not a CREATE or DESTROY function
3328 return VK_SUCCESS;
3331 static VKAPI_ATTR void VKAPI_CALL DestroyVideoSessionParametersKHR(
3332 VkDevice device,
3333 VkVideoSessionParametersKHR videoSessionParameters,
3334 const VkAllocationCallbacks* pAllocator)
3336 //Destroy object
3339 static VKAPI_ATTR void VKAPI_CALL CmdBeginVideoCodingKHR(
3340 VkCommandBuffer commandBuffer,
3341 const VkVideoBeginCodingInfoKHR* pBeginInfo)
3343 //Not a CREATE or DESTROY function
3346 static VKAPI_ATTR void VKAPI_CALL CmdEndVideoCodingKHR(
3347 VkCommandBuffer commandBuffer,
3348 const VkVideoEndCodingInfoKHR* pEndCodingInfo)
3350 //Not a CREATE or DESTROY function
3353 static VKAPI_ATTR void VKAPI_CALL CmdControlVideoCodingKHR(
3354 VkCommandBuffer commandBuffer,
3355 const VkVideoCodingControlInfoKHR* pCodingControlInfo)
3357 //Not a CREATE or DESTROY function
3361 static VKAPI_ATTR void VKAPI_CALL CmdDecodeVideoKHR(
3362 VkCommandBuffer commandBuffer,
3363 const VkVideoDecodeInfoKHR* pDecodeInfo)
3365 //Not a CREATE or DESTROY function
3372 static VKAPI_ATTR void VKAPI_CALL CmdBeginRenderingKHR(
3373 VkCommandBuffer commandBuffer,
3374 const VkRenderingInfo* pRenderingInfo)
3376 //Not a CREATE or DESTROY function
3379 static VKAPI_ATTR void VKAPI_CALL CmdEndRenderingKHR(
3380 VkCommandBuffer commandBuffer)
3382 //Not a CREATE or DESTROY function
3387 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures2KHR(
3388 VkPhysicalDevice physicalDevice,
3389 VkPhysicalDeviceFeatures2* pFeatures)
3391 GetPhysicalDeviceFeatures(physicalDevice, &pFeatures->features);
3392 uint32_t num_bools = 0; // Count number of VkBool32s in extension structs
3393 VkBool32* feat_bools = nullptr;
3394 auto vk_1_1_features = lvl_find_mod_in_chain<VkPhysicalDeviceVulkan11Features>(pFeatures->pNext);
3395 if (vk_1_1_features) {
3396 vk_1_1_features->protectedMemory = VK_TRUE;
3398 auto vk_1_3_features = lvl_find_mod_in_chain<VkPhysicalDeviceVulkan13Features>(pFeatures->pNext);
3399 if (vk_1_3_features) {
3400 vk_1_3_features->synchronization2 = VK_TRUE;
3402 auto prot_features = lvl_find_mod_in_chain<VkPhysicalDeviceProtectedMemoryFeatures>(pFeatures->pNext);
3403 if (prot_features) {
3404 prot_features->protectedMemory = VK_TRUE;
3406 auto sync2_features = lvl_find_mod_in_chain<VkPhysicalDeviceSynchronization2FeaturesKHR>(pFeatures->pNext);
3407 if (sync2_features) {
3408 sync2_features->synchronization2 = VK_TRUE;
3410 auto video_maintenance1_features = lvl_find_mod_in_chain<VkPhysicalDeviceVideoMaintenance1FeaturesKHR>(pFeatures->pNext);
3411 if (video_maintenance1_features) {
3412 video_maintenance1_features->videoMaintenance1 = VK_TRUE;
3414 const auto *desc_idx_features = lvl_find_in_chain<VkPhysicalDeviceDescriptorIndexingFeaturesEXT>(pFeatures->pNext);
3415 if (desc_idx_features) {
3416 const auto bool_size = sizeof(VkPhysicalDeviceDescriptorIndexingFeaturesEXT) - offsetof(VkPhysicalDeviceDescriptorIndexingFeaturesEXT, shaderInputAttachmentArrayDynamicIndexing);
3417 num_bools = bool_size/sizeof(VkBool32);
3418 feat_bools = (VkBool32*)&desc_idx_features->shaderInputAttachmentArrayDynamicIndexing;
3419 SetBoolArrayTrue(feat_bools, num_bools);
3421 const auto *blendop_features = lvl_find_in_chain<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>(pFeatures->pNext);
3422 if (blendop_features) {
3423 const auto bool_size = sizeof(VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT) - offsetof(VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT, advancedBlendCoherentOperations);
3424 num_bools = bool_size/sizeof(VkBool32);
3425 feat_bools = (VkBool32*)&blendop_features->advancedBlendCoherentOperations;
3426 SetBoolArrayTrue(feat_bools, num_bools);
3428 const auto *host_image_copy_features = lvl_find_in_chain<VkPhysicalDeviceHostImageCopyFeaturesEXT>(pFeatures->pNext);
3429 if (host_image_copy_features) {
3430 feat_bools = (VkBool32*)&host_image_copy_features->hostImageCopy;
3431 SetBoolArrayTrue(feat_bools, 1);
3435 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties2KHR(
3436 VkPhysicalDevice physicalDevice,
3437 VkPhysicalDeviceProperties2* pProperties)
3439 // The only value that need to be set are those the Profile layer can't set
3440 // see https://github.com/KhronosGroup/Vulkan-Profiles/issues/352
3441 // All values set are arbitrary
3442 GetPhysicalDeviceProperties(physicalDevice, &pProperties->properties);
3444 auto *props_11 = lvl_find_mod_in_chain<VkPhysicalDeviceVulkan11Properties>(pProperties->pNext);
3445 if (props_11) {
3446 props_11->protectedNoFault = VK_FALSE;
3449 auto *props_12 = lvl_find_mod_in_chain<VkPhysicalDeviceVulkan12Properties>(pProperties->pNext);
3450 if (props_12) {
3451 props_12->denormBehaviorIndependence = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL;
3452 props_12->roundingModeIndependence = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL;
3455 auto *props_13 = lvl_find_mod_in_chain<VkPhysicalDeviceVulkan13Properties>(pProperties->pNext);
3456 if (props_13) {
3457 props_13->storageTexelBufferOffsetSingleTexelAlignment = VK_TRUE;
3458 props_13->uniformTexelBufferOffsetSingleTexelAlignment = VK_TRUE;
3459 props_13->storageTexelBufferOffsetAlignmentBytes = 16;
3460 props_13->uniformTexelBufferOffsetAlignmentBytes = 16;
3463 auto *protected_memory_props = lvl_find_mod_in_chain<VkPhysicalDeviceProtectedMemoryProperties>(pProperties->pNext);
3464 if (protected_memory_props) {
3465 protected_memory_props->protectedNoFault = VK_FALSE;
3468 auto *float_controls_props = lvl_find_mod_in_chain<VkPhysicalDeviceFloatControlsProperties>(pProperties->pNext);
3469 if (float_controls_props) {
3470 float_controls_props->denormBehaviorIndependence = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL;
3471 float_controls_props->roundingModeIndependence = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL;
3474 auto *conservative_raster_props = lvl_find_mod_in_chain<VkPhysicalDeviceConservativeRasterizationPropertiesEXT>(pProperties->pNext);
3475 if (conservative_raster_props) {
3476 conservative_raster_props->primitiveOverestimationSize = 0.00195313f;
3477 conservative_raster_props->conservativePointAndLineRasterization = VK_TRUE;
3478 conservative_raster_props->degenerateTrianglesRasterized = VK_TRUE;
3479 conservative_raster_props->degenerateLinesRasterized = VK_TRUE;
3482 auto *rt_pipeline_props = lvl_find_mod_in_chain<VkPhysicalDeviceRayTracingPipelinePropertiesKHR>(pProperties->pNext);
3483 if (rt_pipeline_props) {
3484 rt_pipeline_props->shaderGroupHandleSize = 32;
3485 rt_pipeline_props->shaderGroupBaseAlignment = 64;
3486 rt_pipeline_props->shaderGroupHandleCaptureReplaySize = 32;
3489 auto *rt_pipeline_nv_props = lvl_find_mod_in_chain<VkPhysicalDeviceRayTracingPropertiesNV>(pProperties->pNext);
3490 if (rt_pipeline_nv_props) {
3491 rt_pipeline_nv_props->shaderGroupHandleSize = 32;
3492 rt_pipeline_nv_props->shaderGroupBaseAlignment = 64;
3495 auto *texel_buffer_props = lvl_find_mod_in_chain<VkPhysicalDeviceTexelBufferAlignmentProperties>(pProperties->pNext);
3496 if (texel_buffer_props) {
3497 texel_buffer_props->storageTexelBufferOffsetSingleTexelAlignment = VK_TRUE;
3498 texel_buffer_props->uniformTexelBufferOffsetSingleTexelAlignment = VK_TRUE;
3499 texel_buffer_props->storageTexelBufferOffsetAlignmentBytes = 16;
3500 texel_buffer_props->uniformTexelBufferOffsetAlignmentBytes = 16;
3503 auto *descriptor_buffer_props = lvl_find_mod_in_chain<VkPhysicalDeviceDescriptorBufferPropertiesEXT>(pProperties->pNext);
3504 if (descriptor_buffer_props) {
3505 descriptor_buffer_props->combinedImageSamplerDescriptorSingleArray = VK_TRUE;
3506 descriptor_buffer_props->bufferlessPushDescriptors = VK_TRUE;
3507 descriptor_buffer_props->allowSamplerImageViewPostSubmitCreation = VK_TRUE;
3508 descriptor_buffer_props->descriptorBufferOffsetAlignment = 4;
3511 auto *mesh_shader_props = lvl_find_mod_in_chain<VkPhysicalDeviceMeshShaderPropertiesEXT>(pProperties->pNext);
3512 if (mesh_shader_props) {
3513 mesh_shader_props->meshOutputPerVertexGranularity = 32;
3514 mesh_shader_props->meshOutputPerPrimitiveGranularity = 32;
3515 mesh_shader_props->prefersLocalInvocationVertexOutput = VK_TRUE;
3516 mesh_shader_props->prefersLocalInvocationPrimitiveOutput = VK_TRUE;
3517 mesh_shader_props->prefersCompactVertexOutput = VK_TRUE;
3518 mesh_shader_props->prefersCompactPrimitiveOutput = VK_TRUE;
3521 auto *fragment_density_map2_props = lvl_find_mod_in_chain<VkPhysicalDeviceFragmentDensityMap2PropertiesEXT>(pProperties->pNext);
3522 if (fragment_density_map2_props) {
3523 fragment_density_map2_props->subsampledLoads = VK_FALSE;
3524 fragment_density_map2_props->subsampledCoarseReconstructionEarlyAccess = VK_FALSE;
3525 fragment_density_map2_props->maxSubsampledArrayLayers = 2;
3526 fragment_density_map2_props->maxDescriptorSetSubsampledSamplers = 1;
3529 const uint32_t num_copy_layouts = 5;
3530 const VkImageLayout HostCopyLayouts[]{
3531 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
3532 VK_IMAGE_LAYOUT_GENERAL,
3533 VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
3534 VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL,
3535 VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
3538 auto *host_image_copy_props = lvl_find_mod_in_chain<VkPhysicalDeviceHostImageCopyPropertiesEXT>(pProperties->pNext);
3539 if (host_image_copy_props){
3540 if (host_image_copy_props->pCopyDstLayouts == nullptr) host_image_copy_props->copyDstLayoutCount = num_copy_layouts;
3541 else {
3542 uint32_t num_layouts = (std::min)(host_image_copy_props->copyDstLayoutCount, num_copy_layouts);
3543 for (uint32_t i = 0; i < num_layouts; i++) {
3544 host_image_copy_props->pCopyDstLayouts[i] = HostCopyLayouts[i];
3547 if (host_image_copy_props->pCopySrcLayouts == nullptr) host_image_copy_props->copySrcLayoutCount = num_copy_layouts;
3548 else {
3549 uint32_t num_layouts = (std::min)(host_image_copy_props->copySrcLayoutCount, num_copy_layouts);
3550 for (uint32_t i = 0; i < num_layouts; i++) {
3551 host_image_copy_props->pCopySrcLayouts[i] = HostCopyLayouts[i];
3556 auto *driver_properties = lvl_find_mod_in_chain<VkPhysicalDeviceDriverProperties>(pProperties->pNext);
3557 if (driver_properties) {
3558 std::strncpy(driver_properties->driverName, "Vulkan Mock Device", VK_MAX_DRIVER_NAME_SIZE);
3559 #if defined(GIT_BRANCH_NAME) && defined(GIT_TAG_INFO)
3560 std::strncpy(driver_properties->driverInfo, "Branch: " GIT_BRANCH_NAME " Tag Info: " GIT_TAG_INFO, VK_MAX_DRIVER_INFO_SIZE);
3561 #else
3562 std::strncpy(driver_properties->driverInfo, "Branch: --unknown-- Tag Info: --unknown--", VK_MAX_DRIVER_INFO_SIZE);
3563 #endif
3567 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties2KHR(
3568 VkPhysicalDevice physicalDevice,
3569 VkFormat format,
3570 VkFormatProperties2* pFormatProperties)
3572 GetPhysicalDeviceFormatProperties(physicalDevice, format, &pFormatProperties->formatProperties);
3573 VkFormatProperties3KHR *props_3 = lvl_find_mod_in_chain<VkFormatProperties3KHR>(pFormatProperties->pNext);
3574 if (props_3) {
3575 props_3->linearTilingFeatures = pFormatProperties->formatProperties.linearTilingFeatures;
3576 props_3->optimalTilingFeatures = pFormatProperties->formatProperties.optimalTilingFeatures;
3577 props_3->bufferFeatures = pFormatProperties->formatProperties.bufferFeatures;
3578 props_3->optimalTilingFeatures |= VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT;
3582 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties2KHR(
3583 VkPhysicalDevice physicalDevice,
3584 const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
3585 VkImageFormatProperties2* pImageFormatProperties)
3587 auto *external_image_prop = lvl_find_mod_in_chain<VkExternalImageFormatProperties>(pImageFormatProperties->pNext);
3588 auto *external_image_format = lvl_find_in_chain<VkPhysicalDeviceExternalImageFormatInfo>(pImageFormatInfo->pNext);
3589 if (external_image_prop && external_image_format) {
3590 external_image_prop->externalMemoryProperties.externalMemoryFeatures = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT | VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT;
3591 external_image_prop->externalMemoryProperties.compatibleHandleTypes = external_image_format->handleType;
3594 GetPhysicalDeviceImageFormatProperties(physicalDevice, pImageFormatInfo->format, pImageFormatInfo->type, pImageFormatInfo->tiling, pImageFormatInfo->usage, pImageFormatInfo->flags, &pImageFormatProperties->imageFormatProperties);
3595 return VK_SUCCESS;
3598 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties2KHR(
3599 VkPhysicalDevice physicalDevice,
3600 uint32_t* pQueueFamilyPropertyCount,
3601 VkQueueFamilyProperties2* pQueueFamilyProperties)
3603 if (pQueueFamilyProperties) {
3604 if (*pQueueFamilyPropertyCount >= 1) {
3605 auto props = &pQueueFamilyProperties[0].queueFamilyProperties;
3606 props->queueFlags = VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | VK_QUEUE_TRANSFER_BIT
3607 | VK_QUEUE_SPARSE_BINDING_BIT | VK_QUEUE_PROTECTED_BIT;
3608 props->queueCount = 1;
3609 props->timestampValidBits = 16;
3610 props->minImageTransferGranularity = {1,1,1};
3612 if (*pQueueFamilyPropertyCount >= 2) {
3613 auto props = &pQueueFamilyProperties[1].queueFamilyProperties;
3614 props->queueFlags = VK_QUEUE_TRANSFER_BIT | VK_QUEUE_PROTECTED_BIT | VK_QUEUE_VIDEO_DECODE_BIT_KHR;
3615 props->queueCount = 1;
3616 props->timestampValidBits = 16;
3617 props->minImageTransferGranularity = {1,1,1};
3619 auto status_query_props = lvl_find_mod_in_chain<VkQueueFamilyQueryResultStatusPropertiesKHR>(pQueueFamilyProperties[1].pNext);
3620 if (status_query_props) {
3621 status_query_props->queryResultStatusSupport = VK_TRUE;
3623 auto video_props = lvl_find_mod_in_chain<VkQueueFamilyVideoPropertiesKHR>(pQueueFamilyProperties[1].pNext);
3624 if (video_props) {
3625 video_props->videoCodecOperations = VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR
3626 | VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR
3627 | VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR;
3630 if (*pQueueFamilyPropertyCount >= 3) {
3631 auto props = &pQueueFamilyProperties[2].queueFamilyProperties;
3632 props->queueFlags = VK_QUEUE_TRANSFER_BIT | VK_QUEUE_PROTECTED_BIT | VK_QUEUE_VIDEO_ENCODE_BIT_KHR;
3633 props->queueCount = 1;
3634 props->timestampValidBits = 16;
3635 props->minImageTransferGranularity = {1,1,1};
3637 auto status_query_props = lvl_find_mod_in_chain<VkQueueFamilyQueryResultStatusPropertiesKHR>(pQueueFamilyProperties[2].pNext);
3638 if (status_query_props) {
3639 status_query_props->queryResultStatusSupport = VK_TRUE;
3641 auto video_props = lvl_find_mod_in_chain<VkQueueFamilyVideoPropertiesKHR>(pQueueFamilyProperties[2].pNext);
3642 if (video_props) {
3643 video_props->videoCodecOperations = VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR
3644 | VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR;
3647 if (*pQueueFamilyPropertyCount > 3) {
3648 *pQueueFamilyPropertyCount = 3;
3650 } else {
3651 *pQueueFamilyPropertyCount = 3;
3655 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties2KHR(
3656 VkPhysicalDevice physicalDevice,
3657 VkPhysicalDeviceMemoryProperties2* pMemoryProperties)
3659 GetPhysicalDeviceMemoryProperties(physicalDevice, &pMemoryProperties->memoryProperties);
3662 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties2KHR(
3663 VkPhysicalDevice physicalDevice,
3664 const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
3665 uint32_t* pPropertyCount,
3666 VkSparseImageFormatProperties2* pProperties)
3668 if (pPropertyCount && pProperties) {
3669 GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, pFormatInfo->format, pFormatInfo->type, pFormatInfo->samples, pFormatInfo->usage, pFormatInfo->tiling, pPropertyCount, &pProperties->properties);
3670 } else {
3671 GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, pFormatInfo->format, pFormatInfo->type, pFormatInfo->samples, pFormatInfo->usage, pFormatInfo->tiling, pPropertyCount, nullptr);
3676 static VKAPI_ATTR void VKAPI_CALL GetDeviceGroupPeerMemoryFeaturesKHR(
3677 VkDevice device,
3678 uint32_t heapIndex,
3679 uint32_t localDeviceIndex,
3680 uint32_t remoteDeviceIndex,
3681 VkPeerMemoryFeatureFlags* pPeerMemoryFeatures)
3683 //Not a CREATE or DESTROY function
3686 static VKAPI_ATTR void VKAPI_CALL CmdSetDeviceMaskKHR(
3687 VkCommandBuffer commandBuffer,
3688 uint32_t deviceMask)
3690 //Not a CREATE or DESTROY function
3693 static VKAPI_ATTR void VKAPI_CALL CmdDispatchBaseKHR(
3694 VkCommandBuffer commandBuffer,
3695 uint32_t baseGroupX,
3696 uint32_t baseGroupY,
3697 uint32_t baseGroupZ,
3698 uint32_t groupCountX,
3699 uint32_t groupCountY,
3700 uint32_t groupCountZ)
3702 //Not a CREATE or DESTROY function
3707 static VKAPI_ATTR void VKAPI_CALL TrimCommandPoolKHR(
3708 VkDevice device,
3709 VkCommandPool commandPool,
3710 VkCommandPoolTrimFlags flags)
3712 //Not a CREATE or DESTROY function
3716 static VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDeviceGroupsKHR(
3717 VkInstance instance,
3718 uint32_t* pPhysicalDeviceGroupCount,
3719 VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties)
3721 if (!pPhysicalDeviceGroupProperties) {
3722 *pPhysicalDeviceGroupCount = 1;
3723 } else {
3724 // arbitrary
3725 pPhysicalDeviceGroupProperties->physicalDeviceCount = 1;
3726 pPhysicalDeviceGroupProperties->physicalDevices[0] = physical_device_map.at(instance)[0];
3727 pPhysicalDeviceGroupProperties->subsetAllocation = VK_FALSE;
3729 return VK_SUCCESS;
3733 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalBufferPropertiesKHR(
3734 VkPhysicalDevice physicalDevice,
3735 const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
3736 VkExternalBufferProperties* pExternalBufferProperties)
3738 GetPhysicalDeviceExternalBufferProperties(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
3742 #ifdef VK_USE_PLATFORM_WIN32_KHR
3744 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandleKHR(
3745 VkDevice device,
3746 const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo,
3747 HANDLE* pHandle)
3749 //Not a CREATE or DESTROY function
3750 return VK_SUCCESS;
3753 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandlePropertiesKHR(
3754 VkDevice device,
3755 VkExternalMemoryHandleTypeFlagBits handleType,
3756 HANDLE handle,
3757 VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties)
3759 pMemoryWin32HandleProperties->memoryTypeBits = 0xFFFF;
3760 return VK_SUCCESS;
3762 #endif /* VK_USE_PLATFORM_WIN32_KHR */
3765 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryFdKHR(
3766 VkDevice device,
3767 const VkMemoryGetFdInfoKHR* pGetFdInfo,
3768 int* pFd)
3770 *pFd = 1;
3771 return VK_SUCCESS;
3774 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryFdPropertiesKHR(
3775 VkDevice device,
3776 VkExternalMemoryHandleTypeFlagBits handleType,
3777 int fd,
3778 VkMemoryFdPropertiesKHR* pMemoryFdProperties)
3780 //Not a CREATE or DESTROY function
3781 return VK_SUCCESS;
3784 #ifdef VK_USE_PLATFORM_WIN32_KHR
3785 #endif /* VK_USE_PLATFORM_WIN32_KHR */
3788 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalSemaphorePropertiesKHR(
3789 VkPhysicalDevice physicalDevice,
3790 const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
3791 VkExternalSemaphoreProperties* pExternalSemaphoreProperties)
3793 GetPhysicalDeviceExternalSemaphoreProperties(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
3797 #ifdef VK_USE_PLATFORM_WIN32_KHR
3799 static VKAPI_ATTR VkResult VKAPI_CALL ImportSemaphoreWin32HandleKHR(
3800 VkDevice device,
3801 const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo)
3803 //Not a CREATE or DESTROY function
3804 return VK_SUCCESS;
3807 static VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreWin32HandleKHR(
3808 VkDevice device,
3809 const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo,
3810 HANDLE* pHandle)
3812 //Not a CREATE or DESTROY function
3813 return VK_SUCCESS;
3815 #endif /* VK_USE_PLATFORM_WIN32_KHR */
3818 static VKAPI_ATTR VkResult VKAPI_CALL ImportSemaphoreFdKHR(
3819 VkDevice device,
3820 const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo)
3822 //Not a CREATE or DESTROY function
3823 return VK_SUCCESS;
3826 static VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreFdKHR(
3827 VkDevice device,
3828 const VkSemaphoreGetFdInfoKHR* pGetFdInfo,
3829 int* pFd)
3831 //Not a CREATE or DESTROY function
3832 return VK_SUCCESS;
3836 static VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetKHR(
3837 VkCommandBuffer commandBuffer,
3838 VkPipelineBindPoint pipelineBindPoint,
3839 VkPipelineLayout layout,
3840 uint32_t set,
3841 uint32_t descriptorWriteCount,
3842 const VkWriteDescriptorSet* pDescriptorWrites)
3844 //Not a CREATE or DESTROY function
3847 static VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetWithTemplateKHR(
3848 VkCommandBuffer commandBuffer,
3849 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
3850 VkPipelineLayout layout,
3851 uint32_t set,
3852 const void* pData)
3854 //Not a CREATE or DESTROY function
3861 static VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorUpdateTemplateKHR(
3862 VkDevice device,
3863 const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
3864 const VkAllocationCallbacks* pAllocator,
3865 VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate)
3867 unique_lock_t lock(global_lock);
3868 *pDescriptorUpdateTemplate = (VkDescriptorUpdateTemplate)global_unique_handle++;
3869 return VK_SUCCESS;
3872 static VKAPI_ATTR void VKAPI_CALL DestroyDescriptorUpdateTemplateKHR(
3873 VkDevice device,
3874 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
3875 const VkAllocationCallbacks* pAllocator)
3877 //Destroy object
3880 static VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSetWithTemplateKHR(
3881 VkDevice device,
3882 VkDescriptorSet descriptorSet,
3883 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
3884 const void* pData)
3886 //Not a CREATE or DESTROY function
3891 static VKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass2KHR(
3892 VkDevice device,
3893 const VkRenderPassCreateInfo2* pCreateInfo,
3894 const VkAllocationCallbacks* pAllocator,
3895 VkRenderPass* pRenderPass)
3897 unique_lock_t lock(global_lock);
3898 *pRenderPass = (VkRenderPass)global_unique_handle++;
3899 return VK_SUCCESS;
3902 static VKAPI_ATTR void VKAPI_CALL CmdBeginRenderPass2KHR(
3903 VkCommandBuffer commandBuffer,
3904 const VkRenderPassBeginInfo* pRenderPassBegin,
3905 const VkSubpassBeginInfo* pSubpassBeginInfo)
3907 //Not a CREATE or DESTROY function
3910 static VKAPI_ATTR void VKAPI_CALL CmdNextSubpass2KHR(
3911 VkCommandBuffer commandBuffer,
3912 const VkSubpassBeginInfo* pSubpassBeginInfo,
3913 const VkSubpassEndInfo* pSubpassEndInfo)
3915 //Not a CREATE or DESTROY function
3918 static VKAPI_ATTR void VKAPI_CALL CmdEndRenderPass2KHR(
3919 VkCommandBuffer commandBuffer,
3920 const VkSubpassEndInfo* pSubpassEndInfo)
3922 //Not a CREATE or DESTROY function
3926 static VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainStatusKHR(
3927 VkDevice device,
3928 VkSwapchainKHR swapchain)
3930 //Not a CREATE or DESTROY function
3931 return VK_SUCCESS;
3935 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalFencePropertiesKHR(
3936 VkPhysicalDevice physicalDevice,
3937 const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
3938 VkExternalFenceProperties* pExternalFenceProperties)
3940 GetPhysicalDeviceExternalFenceProperties(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
3944 #ifdef VK_USE_PLATFORM_WIN32_KHR
3946 static VKAPI_ATTR VkResult VKAPI_CALL ImportFenceWin32HandleKHR(
3947 VkDevice device,
3948 const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo)
3950 //Not a CREATE or DESTROY function
3951 return VK_SUCCESS;
3954 static VKAPI_ATTR VkResult VKAPI_CALL GetFenceWin32HandleKHR(
3955 VkDevice device,
3956 const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo,
3957 HANDLE* pHandle)
3959 *pHandle = (HANDLE)0x12345678;
3960 return VK_SUCCESS;
3962 #endif /* VK_USE_PLATFORM_WIN32_KHR */
3965 static VKAPI_ATTR VkResult VKAPI_CALL ImportFenceFdKHR(
3966 VkDevice device,
3967 const VkImportFenceFdInfoKHR* pImportFenceFdInfo)
3969 //Not a CREATE or DESTROY function
3970 return VK_SUCCESS;
3973 static VKAPI_ATTR VkResult VKAPI_CALL GetFenceFdKHR(
3974 VkDevice device,
3975 const VkFenceGetFdInfoKHR* pGetFdInfo,
3976 int* pFd)
3978 *pFd = 0x42;
3979 return VK_SUCCESS;
3983 static VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(
3984 VkPhysicalDevice physicalDevice,
3985 uint32_t queueFamilyIndex,
3986 uint32_t* pCounterCount,
3987 VkPerformanceCounterKHR* pCounters,
3988 VkPerformanceCounterDescriptionKHR* pCounterDescriptions)
3990 if (!pCounters) {
3991 *pCounterCount = 3;
3992 } else {
3993 if (*pCounterCount == 0){
3994 return VK_INCOMPLETE;
3996 // arbitrary
3997 pCounters[0].unit = VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR;
3998 pCounters[0].scope = VK_QUERY_SCOPE_COMMAND_BUFFER_KHR;
3999 pCounters[0].storage = VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR;
4000 pCounters[0].uuid[0] = 0x01;
4001 if (*pCounterCount == 1){
4002 return VK_INCOMPLETE;
4004 pCounters[1].unit = VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR;
4005 pCounters[1].scope = VK_QUERY_SCOPE_RENDER_PASS_KHR;
4006 pCounters[1].storage = VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR;
4007 pCounters[1].uuid[0] = 0x02;
4008 if (*pCounterCount == 2){
4009 return VK_INCOMPLETE;
4011 pCounters[2].unit = VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR;
4012 pCounters[2].scope = VK_QUERY_SCOPE_COMMAND_KHR;
4013 pCounters[2].storage = VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR;
4014 pCounters[2].uuid[0] = 0x03;
4015 *pCounterCount = 3;
4017 return VK_SUCCESS;
4020 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR(
4021 VkPhysicalDevice physicalDevice,
4022 const VkQueryPoolPerformanceCreateInfoKHR* pPerformanceQueryCreateInfo,
4023 uint32_t* pNumPasses)
4025 if (pNumPasses) {
4026 // arbitrary
4027 *pNumPasses = 1;
4031 static VKAPI_ATTR VkResult VKAPI_CALL AcquireProfilingLockKHR(
4032 VkDevice device,
4033 const VkAcquireProfilingLockInfoKHR* pInfo)
4035 //Not a CREATE or DESTROY function
4036 return VK_SUCCESS;
4039 static VKAPI_ATTR void VKAPI_CALL ReleaseProfilingLockKHR(
4040 VkDevice device)
4042 //Not a CREATE or DESTROY function
4047 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilities2KHR(
4048 VkPhysicalDevice physicalDevice,
4049 const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
4050 VkSurfaceCapabilities2KHR* pSurfaceCapabilities)
4052 GetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, pSurfaceInfo->surface, &pSurfaceCapabilities->surfaceCapabilities);
4054 auto *present_mode_compatibility = lvl_find_mod_in_chain<VkSurfacePresentModeCompatibilityEXT>(pSurfaceCapabilities->pNext);
4055 if (present_mode_compatibility) {
4056 if (!present_mode_compatibility->pPresentModes) {
4057 present_mode_compatibility->presentModeCount = 3;
4058 } else {
4059 // arbitrary
4060 present_mode_compatibility->pPresentModes[0] = VK_PRESENT_MODE_IMMEDIATE_KHR;
4061 present_mode_compatibility->pPresentModes[1] = VK_PRESENT_MODE_FIFO_KHR;
4062 present_mode_compatibility->pPresentModes[2] = VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR;
4065 return VK_SUCCESS;
4068 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceFormats2KHR(
4069 VkPhysicalDevice physicalDevice,
4070 const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
4071 uint32_t* pSurfaceFormatCount,
4072 VkSurfaceFormat2KHR* pSurfaceFormats)
4074 // Currently always say that RGBA8 & BGRA8 are supported
4075 if (!pSurfaceFormats) {
4076 *pSurfaceFormatCount = 2;
4077 } else {
4078 if (*pSurfaceFormatCount >= 2) {
4079 pSurfaceFormats[1].pNext = nullptr;
4080 pSurfaceFormats[1].surfaceFormat.format = VK_FORMAT_R8G8B8A8_UNORM;
4081 pSurfaceFormats[1].surfaceFormat.colorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;
4083 if (*pSurfaceFormatCount >= 1) {
4084 pSurfaceFormats[1].pNext = nullptr;
4085 pSurfaceFormats[0].surfaceFormat.format = VK_FORMAT_B8G8R8A8_UNORM;
4086 pSurfaceFormats[0].surfaceFormat.colorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;
4089 return VK_SUCCESS;
4094 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayProperties2KHR(
4095 VkPhysicalDevice physicalDevice,
4096 uint32_t* pPropertyCount,
4097 VkDisplayProperties2KHR* pProperties)
4099 //Not a CREATE or DESTROY function
4100 return VK_SUCCESS;
4103 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPlaneProperties2KHR(
4104 VkPhysicalDevice physicalDevice,
4105 uint32_t* pPropertyCount,
4106 VkDisplayPlaneProperties2KHR* pProperties)
4108 //Not a CREATE or DESTROY function
4109 return VK_SUCCESS;
4112 static VKAPI_ATTR VkResult VKAPI_CALL GetDisplayModeProperties2KHR(
4113 VkPhysicalDevice physicalDevice,
4114 VkDisplayKHR display,
4115 uint32_t* pPropertyCount,
4116 VkDisplayModeProperties2KHR* pProperties)
4118 //Not a CREATE or DESTROY function
4119 return VK_SUCCESS;
4122 static VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneCapabilities2KHR(
4123 VkPhysicalDevice physicalDevice,
4124 const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo,
4125 VkDisplayPlaneCapabilities2KHR* pCapabilities)
4127 //Not a CREATE or DESTROY function
4128 return VK_SUCCESS;
4135 static VKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements2KHR(
4136 VkDevice device,
4137 const VkImageMemoryRequirementsInfo2* pInfo,
4138 VkMemoryRequirements2* pMemoryRequirements)
4140 GetImageMemoryRequirements(device, pInfo->image, &pMemoryRequirements->memoryRequirements);
4143 static VKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements2KHR(
4144 VkDevice device,
4145 const VkBufferMemoryRequirementsInfo2* pInfo,
4146 VkMemoryRequirements2* pMemoryRequirements)
4148 GetBufferMemoryRequirements(device, pInfo->buffer, &pMemoryRequirements->memoryRequirements);
4151 static VKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements2KHR(
4152 VkDevice device,
4153 const VkImageSparseMemoryRequirementsInfo2* pInfo,
4154 uint32_t* pSparseMemoryRequirementCount,
4155 VkSparseImageMemoryRequirements2* pSparseMemoryRequirements)
4157 if (pSparseMemoryRequirementCount && pSparseMemoryRequirements) {
4158 GetImageSparseMemoryRequirements(device, pInfo->image, pSparseMemoryRequirementCount, &pSparseMemoryRequirements->memoryRequirements);
4159 } else {
4160 GetImageSparseMemoryRequirements(device, pInfo->image, pSparseMemoryRequirementCount, nullptr);
4166 static VKAPI_ATTR VkResult VKAPI_CALL CreateSamplerYcbcrConversionKHR(
4167 VkDevice device,
4168 const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
4169 const VkAllocationCallbacks* pAllocator,
4170 VkSamplerYcbcrConversion* pYcbcrConversion)
4172 unique_lock_t lock(global_lock);
4173 *pYcbcrConversion = (VkSamplerYcbcrConversion)global_unique_handle++;
4174 return VK_SUCCESS;
4177 static VKAPI_ATTR void VKAPI_CALL DestroySamplerYcbcrConversionKHR(
4178 VkDevice device,
4179 VkSamplerYcbcrConversion ycbcrConversion,
4180 const VkAllocationCallbacks* pAllocator)
4182 //Destroy object
4186 static VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory2KHR(
4187 VkDevice device,
4188 uint32_t bindInfoCount,
4189 const VkBindBufferMemoryInfo* pBindInfos)
4191 //Not a CREATE or DESTROY function
4192 return VK_SUCCESS;
4195 static VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory2KHR(
4196 VkDevice device,
4197 uint32_t bindInfoCount,
4198 const VkBindImageMemoryInfo* pBindInfos)
4200 //Not a CREATE or DESTROY function
4201 return VK_SUCCESS;
4204 #ifdef VK_ENABLE_BETA_EXTENSIONS
4205 #endif /* VK_ENABLE_BETA_EXTENSIONS */
4208 static VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutSupportKHR(
4209 VkDevice device,
4210 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
4211 VkDescriptorSetLayoutSupport* pSupport)
4213 GetDescriptorSetLayoutSupport(device, pCreateInfo, pSupport);
4217 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCountKHR(
4218 VkCommandBuffer commandBuffer,
4219 VkBuffer buffer,
4220 VkDeviceSize offset,
4221 VkBuffer countBuffer,
4222 VkDeviceSize countBufferOffset,
4223 uint32_t maxDrawCount,
4224 uint32_t stride)
4226 //Not a CREATE or DESTROY function
4229 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirectCountKHR(
4230 VkCommandBuffer commandBuffer,
4231 VkBuffer buffer,
4232 VkDeviceSize offset,
4233 VkBuffer countBuffer,
4234 VkDeviceSize countBufferOffset,
4235 uint32_t maxDrawCount,
4236 uint32_t stride)
4238 //Not a CREATE or DESTROY function
4252 static VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreCounterValueKHR(
4253 VkDevice device,
4254 VkSemaphore semaphore,
4255 uint64_t* pValue)
4257 //Not a CREATE or DESTROY function
4258 return VK_SUCCESS;
4261 static VKAPI_ATTR VkResult VKAPI_CALL WaitSemaphoresKHR(
4262 VkDevice device,
4263 const VkSemaphoreWaitInfo* pWaitInfo,
4264 uint64_t timeout)
4266 //Not a CREATE or DESTROY function
4267 return VK_SUCCESS;
4270 static VKAPI_ATTR VkResult VKAPI_CALL SignalSemaphoreKHR(
4271 VkDevice device,
4272 const VkSemaphoreSignalInfo* pSignalInfo)
4274 //Not a CREATE or DESTROY function
4275 return VK_SUCCESS;
4281 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceFragmentShadingRatesKHR(
4282 VkPhysicalDevice physicalDevice,
4283 uint32_t* pFragmentShadingRateCount,
4284 VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates)
4286 if (!pFragmentShadingRates) {
4287 *pFragmentShadingRateCount = 1;
4288 } else {
4289 // arbitrary
4290 pFragmentShadingRates->sampleCounts = VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT;
4291 pFragmentShadingRates->fragmentSize = {8, 8};
4293 return VK_SUCCESS;
4296 static VKAPI_ATTR void VKAPI_CALL CmdSetFragmentShadingRateKHR(
4297 VkCommandBuffer commandBuffer,
4298 const VkExtent2D* pFragmentSize,
4299 const VkFragmentShadingRateCombinerOpKHR combinerOps[2])
4301 //Not a CREATE or DESTROY function
4305 static VKAPI_ATTR void VKAPI_CALL CmdSetRenderingAttachmentLocationsKHR(
4306 VkCommandBuffer commandBuffer,
4307 const VkRenderingAttachmentLocationInfoKHR* pLocationInfo)
4309 //Not a CREATE or DESTROY function
4312 static VKAPI_ATTR void VKAPI_CALL CmdSetRenderingInputAttachmentIndicesKHR(
4313 VkCommandBuffer commandBuffer,
4314 const VkRenderingInputAttachmentIndexInfoKHR* pInputAttachmentIndexInfo)
4316 //Not a CREATE or DESTROY function
4324 static VKAPI_ATTR VkResult VKAPI_CALL WaitForPresentKHR(
4325 VkDevice device,
4326 VkSwapchainKHR swapchain,
4327 uint64_t presentId,
4328 uint64_t timeout)
4330 //Not a CREATE or DESTROY function
4331 return VK_SUCCESS;
4336 static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetBufferDeviceAddressKHR(
4337 VkDevice device,
4338 const VkBufferDeviceAddressInfo* pInfo)
4340 return GetBufferDeviceAddress(device, pInfo);
4343 static VKAPI_ATTR uint64_t VKAPI_CALL GetBufferOpaqueCaptureAddressKHR(
4344 VkDevice device,
4345 const VkBufferDeviceAddressInfo* pInfo)
4347 //Not a CREATE or DESTROY function
4348 return VK_SUCCESS;
4351 static VKAPI_ATTR uint64_t VKAPI_CALL GetDeviceMemoryOpaqueCaptureAddressKHR(
4352 VkDevice device,
4353 const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo)
4355 //Not a CREATE or DESTROY function
4356 return VK_SUCCESS;
4360 static VKAPI_ATTR VkResult VKAPI_CALL CreateDeferredOperationKHR(
4361 VkDevice device,
4362 const VkAllocationCallbacks* pAllocator,
4363 VkDeferredOperationKHR* pDeferredOperation)
4365 unique_lock_t lock(global_lock);
4366 *pDeferredOperation = (VkDeferredOperationKHR)global_unique_handle++;
4367 return VK_SUCCESS;
4370 static VKAPI_ATTR void VKAPI_CALL DestroyDeferredOperationKHR(
4371 VkDevice device,
4372 VkDeferredOperationKHR operation,
4373 const VkAllocationCallbacks* pAllocator)
4375 //Destroy object
4378 static VKAPI_ATTR uint32_t VKAPI_CALL GetDeferredOperationMaxConcurrencyKHR(
4379 VkDevice device,
4380 VkDeferredOperationKHR operation)
4382 //Not a CREATE or DESTROY function
4383 return VK_SUCCESS;
4386 static VKAPI_ATTR VkResult VKAPI_CALL GetDeferredOperationResultKHR(
4387 VkDevice device,
4388 VkDeferredOperationKHR operation)
4390 //Not a CREATE or DESTROY function
4391 return VK_SUCCESS;
4394 static VKAPI_ATTR VkResult VKAPI_CALL DeferredOperationJoinKHR(
4395 VkDevice device,
4396 VkDeferredOperationKHR operation)
4398 //Not a CREATE or DESTROY function
4399 return VK_SUCCESS;
4403 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineExecutablePropertiesKHR(
4404 VkDevice device,
4405 const VkPipelineInfoKHR* pPipelineInfo,
4406 uint32_t* pExecutableCount,
4407 VkPipelineExecutablePropertiesKHR* pProperties)
4409 //Not a CREATE or DESTROY function
4410 return VK_SUCCESS;
4413 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineExecutableStatisticsKHR(
4414 VkDevice device,
4415 const VkPipelineExecutableInfoKHR* pExecutableInfo,
4416 uint32_t* pStatisticCount,
4417 VkPipelineExecutableStatisticKHR* pStatistics)
4419 //Not a CREATE or DESTROY function
4420 return VK_SUCCESS;
4423 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineExecutableInternalRepresentationsKHR(
4424 VkDevice device,
4425 const VkPipelineExecutableInfoKHR* pExecutableInfo,
4426 uint32_t* pInternalRepresentationCount,
4427 VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations)
4429 //Not a CREATE or DESTROY function
4430 return VK_SUCCESS;
4434 static VKAPI_ATTR VkResult VKAPI_CALL MapMemory2KHR(
4435 VkDevice device,
4436 const VkMemoryMapInfoKHR* pMemoryMapInfo,
4437 void** ppData)
4439 return MapMemory(device, pMemoryMapInfo->memory, pMemoryMapInfo->offset, pMemoryMapInfo->size, pMemoryMapInfo->flags, ppData);
4442 static VKAPI_ATTR VkResult VKAPI_CALL UnmapMemory2KHR(
4443 VkDevice device,
4444 const VkMemoryUnmapInfoKHR* pMemoryUnmapInfo)
4446 UnmapMemory(device, pMemoryUnmapInfo->memory);
4447 return VK_SUCCESS;
4455 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR(
4456 VkPhysicalDevice physicalDevice,
4457 const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* pQualityLevelInfo,
4458 VkVideoEncodeQualityLevelPropertiesKHR* pQualityLevelProperties)
4460 //Not a CREATE or DESTROY function
4461 return VK_SUCCESS;
4464 static VKAPI_ATTR VkResult VKAPI_CALL GetEncodedVideoSessionParametersKHR(
4465 VkDevice device,
4466 const VkVideoEncodeSessionParametersGetInfoKHR* pVideoSessionParametersInfo,
4467 VkVideoEncodeSessionParametersFeedbackInfoKHR* pFeedbackInfo,
4468 size_t* pDataSize,
4469 void* pData)
4471 //Not a CREATE or DESTROY function
4472 return VK_SUCCESS;
4475 static VKAPI_ATTR void VKAPI_CALL CmdEncodeVideoKHR(
4476 VkCommandBuffer commandBuffer,
4477 const VkVideoEncodeInfoKHR* pEncodeInfo)
4479 //Not a CREATE or DESTROY function
4483 static VKAPI_ATTR void VKAPI_CALL CmdSetEvent2KHR(
4484 VkCommandBuffer commandBuffer,
4485 VkEvent event,
4486 const VkDependencyInfo* pDependencyInfo)
4488 //Not a CREATE or DESTROY function
4491 static VKAPI_ATTR void VKAPI_CALL CmdResetEvent2KHR(
4492 VkCommandBuffer commandBuffer,
4493 VkEvent event,
4494 VkPipelineStageFlags2 stageMask)
4496 //Not a CREATE or DESTROY function
4499 static VKAPI_ATTR void VKAPI_CALL CmdWaitEvents2KHR(
4500 VkCommandBuffer commandBuffer,
4501 uint32_t eventCount,
4502 const VkEvent* pEvents,
4503 const VkDependencyInfo* pDependencyInfos)
4505 //Not a CREATE or DESTROY function
4508 static VKAPI_ATTR void VKAPI_CALL CmdPipelineBarrier2KHR(
4509 VkCommandBuffer commandBuffer,
4510 const VkDependencyInfo* pDependencyInfo)
4512 //Not a CREATE or DESTROY function
4515 static VKAPI_ATTR void VKAPI_CALL CmdWriteTimestamp2KHR(
4516 VkCommandBuffer commandBuffer,
4517 VkPipelineStageFlags2 stage,
4518 VkQueryPool queryPool,
4519 uint32_t query)
4521 //Not a CREATE or DESTROY function
4524 static VKAPI_ATTR VkResult VKAPI_CALL QueueSubmit2KHR(
4525 VkQueue queue,
4526 uint32_t submitCount,
4527 const VkSubmitInfo2* pSubmits,
4528 VkFence fence)
4530 //Not a CREATE or DESTROY function
4531 return VK_SUCCESS;
4534 static VKAPI_ATTR void VKAPI_CALL CmdWriteBufferMarker2AMD(
4535 VkCommandBuffer commandBuffer,
4536 VkPipelineStageFlags2 stage,
4537 VkBuffer dstBuffer,
4538 VkDeviceSize dstOffset,
4539 uint32_t marker)
4541 //Not a CREATE or DESTROY function
4544 static VKAPI_ATTR void VKAPI_CALL GetQueueCheckpointData2NV(
4545 VkQueue queue,
4546 uint32_t* pCheckpointDataCount,
4547 VkCheckpointData2NV* pCheckpointData)
4549 //Not a CREATE or DESTROY function
4557 static VKAPI_ATTR void VKAPI_CALL CmdCopyBuffer2KHR(
4558 VkCommandBuffer commandBuffer,
4559 const VkCopyBufferInfo2* pCopyBufferInfo)
4561 //Not a CREATE or DESTROY function
4564 static VKAPI_ATTR void VKAPI_CALL CmdCopyImage2KHR(
4565 VkCommandBuffer commandBuffer,
4566 const VkCopyImageInfo2* pCopyImageInfo)
4568 //Not a CREATE or DESTROY function
4571 static VKAPI_ATTR void VKAPI_CALL CmdCopyBufferToImage2KHR(
4572 VkCommandBuffer commandBuffer,
4573 const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo)
4575 //Not a CREATE or DESTROY function
4578 static VKAPI_ATTR void VKAPI_CALL CmdCopyImageToBuffer2KHR(
4579 VkCommandBuffer commandBuffer,
4580 const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo)
4582 //Not a CREATE or DESTROY function
4585 static VKAPI_ATTR void VKAPI_CALL CmdBlitImage2KHR(
4586 VkCommandBuffer commandBuffer,
4587 const VkBlitImageInfo2* pBlitImageInfo)
4589 //Not a CREATE or DESTROY function
4592 static VKAPI_ATTR void VKAPI_CALL CmdResolveImage2KHR(
4593 VkCommandBuffer commandBuffer,
4594 const VkResolveImageInfo2* pResolveImageInfo)
4596 //Not a CREATE or DESTROY function
4601 static VKAPI_ATTR void VKAPI_CALL CmdTraceRaysIndirect2KHR(
4602 VkCommandBuffer commandBuffer,
4603 VkDeviceAddress indirectDeviceAddress)
4605 //Not a CREATE or DESTROY function
4610 static VKAPI_ATTR void VKAPI_CALL GetDeviceBufferMemoryRequirementsKHR(
4611 VkDevice device,
4612 const VkDeviceBufferMemoryRequirements* pInfo,
4613 VkMemoryRequirements2* pMemoryRequirements)
4615 GetDeviceBufferMemoryRequirements(device, pInfo, pMemoryRequirements);
4618 static VKAPI_ATTR void VKAPI_CALL GetDeviceImageMemoryRequirementsKHR(
4619 VkDevice device,
4620 const VkDeviceImageMemoryRequirements* pInfo,
4621 VkMemoryRequirements2* pMemoryRequirements)
4623 GetDeviceImageMemoryRequirements(device, pInfo, pMemoryRequirements);
4626 static VKAPI_ATTR void VKAPI_CALL GetDeviceImageSparseMemoryRequirementsKHR(
4627 VkDevice device,
4628 const VkDeviceImageMemoryRequirements* pInfo,
4629 uint32_t* pSparseMemoryRequirementCount,
4630 VkSparseImageMemoryRequirements2* pSparseMemoryRequirements)
4632 //Not a CREATE or DESTROY function
4638 static VKAPI_ATTR void VKAPI_CALL CmdBindIndexBuffer2KHR(
4639 VkCommandBuffer commandBuffer,
4640 VkBuffer buffer,
4641 VkDeviceSize offset,
4642 VkDeviceSize size,
4643 VkIndexType indexType)
4645 //Not a CREATE or DESTROY function
4648 static VKAPI_ATTR void VKAPI_CALL GetRenderingAreaGranularityKHR(
4649 VkDevice device,
4650 const VkRenderingAreaInfoKHR* pRenderingAreaInfo,
4651 VkExtent2D* pGranularity)
4653 //Not a CREATE or DESTROY function
4656 static VKAPI_ATTR void VKAPI_CALL GetDeviceImageSubresourceLayoutKHR(
4657 VkDevice device,
4658 const VkDeviceImageSubresourceInfoKHR* pInfo,
4659 VkSubresourceLayout2KHR* pLayout)
4661 //Not a CREATE or DESTROY function
4664 static VKAPI_ATTR void VKAPI_CALL GetImageSubresourceLayout2KHR(
4665 VkDevice device,
4666 VkImage image,
4667 const VkImageSubresource2KHR* pSubresource,
4668 VkSubresourceLayout2KHR* pLayout)
4670 //Not a CREATE or DESTROY function
4675 static VKAPI_ATTR VkResult VKAPI_CALL CreatePipelineBinariesKHR(
4676 VkDevice device,
4677 const VkPipelineBinaryCreateInfoKHR* pCreateInfo,
4678 const VkAllocationCallbacks* pAllocator,
4679 VkPipelineBinaryHandlesInfoKHR* pBinaries)
4681 unique_lock_t lock(global_lock);
4682 for (uint32_t i = 0; i < pBinaries->pipelineBinaryCount; ++i) {
4683 pBinaries->pPipelineBinaries[i] = (VkPipelineBinaryKHR)global_unique_handle++;
4685 return VK_SUCCESS;
4688 static VKAPI_ATTR void VKAPI_CALL DestroyPipelineBinaryKHR(
4689 VkDevice device,
4690 VkPipelineBinaryKHR pipelineBinary,
4691 const VkAllocationCallbacks* pAllocator)
4693 //Destroy object
4696 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineKeyKHR(
4697 VkDevice device,
4698 const VkPipelineCreateInfoKHR* pPipelineCreateInfo,
4699 VkPipelineBinaryKeyKHR* pPipelineKey)
4701 //Not a CREATE or DESTROY function
4702 return VK_SUCCESS;
4705 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineBinaryDataKHR(
4706 VkDevice device,
4707 const VkPipelineBinaryDataInfoKHR* pInfo,
4708 VkPipelineBinaryKeyKHR* pPipelineBinaryKey,
4709 size_t* pPipelineBinaryDataSize,
4710 void* pPipelineBinaryData)
4712 //Not a CREATE or DESTROY function
4713 return VK_SUCCESS;
4716 static VKAPI_ATTR VkResult VKAPI_CALL ReleaseCapturedPipelineDataKHR(
4717 VkDevice device,
4718 const VkReleaseCapturedPipelineDataInfoKHR* pInfo,
4719 const VkAllocationCallbacks* pAllocator)
4721 //Not a CREATE or DESTROY function
4722 return VK_SUCCESS;
4726 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCooperativeMatrixPropertiesKHR(
4727 VkPhysicalDevice physicalDevice,
4728 uint32_t* pPropertyCount,
4729 VkCooperativeMatrixPropertiesKHR* pProperties)
4731 if (!pProperties) {
4732 *pPropertyCount = 2;
4733 } else {
4734 // arbitrary
4735 pProperties[0].MSize = 16;
4736 pProperties[0].NSize = 16;
4737 pProperties[0].KSize = 16;
4738 pProperties[0].AType = VK_COMPONENT_TYPE_UINT32_KHR;
4739 pProperties[0].BType = VK_COMPONENT_TYPE_UINT32_KHR;
4740 pProperties[0].CType = VK_COMPONENT_TYPE_UINT32_KHR;
4741 pProperties[0].ResultType = VK_COMPONENT_TYPE_UINT32_KHR;
4742 pProperties[0].saturatingAccumulation = VK_FALSE;
4743 pProperties[0].scope = VK_SCOPE_SUBGROUP_KHR;
4745 pProperties[1] = pProperties[0];
4746 pProperties[1].scope = VK_SCOPE_DEVICE_KHR;
4748 return VK_SUCCESS;
4759 static VKAPI_ATTR void VKAPI_CALL CmdSetLineStippleKHR(
4760 VkCommandBuffer commandBuffer,
4761 uint32_t lineStippleFactor,
4762 uint16_t lineStipplePattern)
4764 //Not a CREATE or DESTROY function
4768 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCalibrateableTimeDomainsKHR(
4769 VkPhysicalDevice physicalDevice,
4770 uint32_t* pTimeDomainCount,
4771 VkTimeDomainKHR* pTimeDomains)
4773 if (!pTimeDomains) {
4774 *pTimeDomainCount = 1;
4775 } else {
4776 // arbitrary
4777 *pTimeDomains = VK_TIME_DOMAIN_DEVICE_KHR;
4779 return VK_SUCCESS;
4782 static VKAPI_ATTR VkResult VKAPI_CALL GetCalibratedTimestampsKHR(
4783 VkDevice device,
4784 uint32_t timestampCount,
4785 const VkCalibratedTimestampInfoKHR* pTimestampInfos,
4786 uint64_t* pTimestamps,
4787 uint64_t* pMaxDeviation)
4789 //Not a CREATE or DESTROY function
4790 return VK_SUCCESS;
4795 static VKAPI_ATTR void VKAPI_CALL CmdBindDescriptorSets2KHR(
4796 VkCommandBuffer commandBuffer,
4797 const VkBindDescriptorSetsInfoKHR* pBindDescriptorSetsInfo)
4799 //Not a CREATE or DESTROY function
4802 static VKAPI_ATTR void VKAPI_CALL CmdPushConstants2KHR(
4803 VkCommandBuffer commandBuffer,
4804 const VkPushConstantsInfoKHR* pPushConstantsInfo)
4806 //Not a CREATE or DESTROY function
4809 static VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSet2KHR(
4810 VkCommandBuffer commandBuffer,
4811 const VkPushDescriptorSetInfoKHR* pPushDescriptorSetInfo)
4813 //Not a CREATE or DESTROY function
4816 static VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetWithTemplate2KHR(
4817 VkCommandBuffer commandBuffer,
4818 const VkPushDescriptorSetWithTemplateInfoKHR* pPushDescriptorSetWithTemplateInfo)
4820 //Not a CREATE or DESTROY function
4823 static VKAPI_ATTR void VKAPI_CALL CmdSetDescriptorBufferOffsets2EXT(
4824 VkCommandBuffer commandBuffer,
4825 const VkSetDescriptorBufferOffsetsInfoEXT* pSetDescriptorBufferOffsetsInfo)
4827 //Not a CREATE or DESTROY function
4830 static VKAPI_ATTR void VKAPI_CALL CmdBindDescriptorBufferEmbeddedSamplers2EXT(
4831 VkCommandBuffer commandBuffer,
4832 const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo)
4834 //Not a CREATE or DESTROY function
4840 static VKAPI_ATTR VkResult VKAPI_CALL CreateDebugReportCallbackEXT(
4841 VkInstance instance,
4842 const VkDebugReportCallbackCreateInfoEXT* pCreateInfo,
4843 const VkAllocationCallbacks* pAllocator,
4844 VkDebugReportCallbackEXT* pCallback)
4846 unique_lock_t lock(global_lock);
4847 *pCallback = (VkDebugReportCallbackEXT)global_unique_handle++;
4848 return VK_SUCCESS;
4851 static VKAPI_ATTR void VKAPI_CALL DestroyDebugReportCallbackEXT(
4852 VkInstance instance,
4853 VkDebugReportCallbackEXT callback,
4854 const VkAllocationCallbacks* pAllocator)
4856 //Destroy object
4859 static VKAPI_ATTR void VKAPI_CALL DebugReportMessageEXT(
4860 VkInstance instance,
4861 VkDebugReportFlagsEXT flags,
4862 VkDebugReportObjectTypeEXT objectType,
4863 uint64_t object,
4864 size_t location,
4865 int32_t messageCode,
4866 const char* pLayerPrefix,
4867 const char* pMessage)
4869 //Not a CREATE or DESTROY function
4879 static VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectTagEXT(
4880 VkDevice device,
4881 const VkDebugMarkerObjectTagInfoEXT* pTagInfo)
4883 //Not a CREATE or DESTROY function
4884 return VK_SUCCESS;
4887 static VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectNameEXT(
4888 VkDevice device,
4889 const VkDebugMarkerObjectNameInfoEXT* pNameInfo)
4891 //Not a CREATE or DESTROY function
4892 return VK_SUCCESS;
4895 static VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerBeginEXT(
4896 VkCommandBuffer commandBuffer,
4897 const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
4899 //Not a CREATE or DESTROY function
4902 static VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerEndEXT(
4903 VkCommandBuffer commandBuffer)
4905 //Not a CREATE or DESTROY function
4908 static VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerInsertEXT(
4909 VkCommandBuffer commandBuffer,
4910 const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
4912 //Not a CREATE or DESTROY function
4918 static VKAPI_ATTR void VKAPI_CALL CmdBindTransformFeedbackBuffersEXT(
4919 VkCommandBuffer commandBuffer,
4920 uint32_t firstBinding,
4921 uint32_t bindingCount,
4922 const VkBuffer* pBuffers,
4923 const VkDeviceSize* pOffsets,
4924 const VkDeviceSize* pSizes)
4926 //Not a CREATE or DESTROY function
4929 static VKAPI_ATTR void VKAPI_CALL CmdBeginTransformFeedbackEXT(
4930 VkCommandBuffer commandBuffer,
4931 uint32_t firstCounterBuffer,
4932 uint32_t counterBufferCount,
4933 const VkBuffer* pCounterBuffers,
4934 const VkDeviceSize* pCounterBufferOffsets)
4936 //Not a CREATE or DESTROY function
4939 static VKAPI_ATTR void VKAPI_CALL CmdEndTransformFeedbackEXT(
4940 VkCommandBuffer commandBuffer,
4941 uint32_t firstCounterBuffer,
4942 uint32_t counterBufferCount,
4943 const VkBuffer* pCounterBuffers,
4944 const VkDeviceSize* pCounterBufferOffsets)
4946 //Not a CREATE or DESTROY function
4949 static VKAPI_ATTR void VKAPI_CALL CmdBeginQueryIndexedEXT(
4950 VkCommandBuffer commandBuffer,
4951 VkQueryPool queryPool,
4952 uint32_t query,
4953 VkQueryControlFlags flags,
4954 uint32_t index)
4956 //Not a CREATE or DESTROY function
4959 static VKAPI_ATTR void VKAPI_CALL CmdEndQueryIndexedEXT(
4960 VkCommandBuffer commandBuffer,
4961 VkQueryPool queryPool,
4962 uint32_t query,
4963 uint32_t index)
4965 //Not a CREATE or DESTROY function
4968 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectByteCountEXT(
4969 VkCommandBuffer commandBuffer,
4970 uint32_t instanceCount,
4971 uint32_t firstInstance,
4972 VkBuffer counterBuffer,
4973 VkDeviceSize counterBufferOffset,
4974 uint32_t counterOffset,
4975 uint32_t vertexStride)
4977 //Not a CREATE or DESTROY function
4981 static VKAPI_ATTR VkResult VKAPI_CALL CreateCuModuleNVX(
4982 VkDevice device,
4983 const VkCuModuleCreateInfoNVX* pCreateInfo,
4984 const VkAllocationCallbacks* pAllocator,
4985 VkCuModuleNVX* pModule)
4987 unique_lock_t lock(global_lock);
4988 *pModule = (VkCuModuleNVX)global_unique_handle++;
4989 return VK_SUCCESS;
4992 static VKAPI_ATTR VkResult VKAPI_CALL CreateCuFunctionNVX(
4993 VkDevice device,
4994 const VkCuFunctionCreateInfoNVX* pCreateInfo,
4995 const VkAllocationCallbacks* pAllocator,
4996 VkCuFunctionNVX* pFunction)
4998 unique_lock_t lock(global_lock);
4999 *pFunction = (VkCuFunctionNVX)global_unique_handle++;
5000 return VK_SUCCESS;
5003 static VKAPI_ATTR void VKAPI_CALL DestroyCuModuleNVX(
5004 VkDevice device,
5005 VkCuModuleNVX module,
5006 const VkAllocationCallbacks* pAllocator)
5008 //Destroy object
5011 static VKAPI_ATTR void VKAPI_CALL DestroyCuFunctionNVX(
5012 VkDevice device,
5013 VkCuFunctionNVX function,
5014 const VkAllocationCallbacks* pAllocator)
5016 //Destroy object
5019 static VKAPI_ATTR void VKAPI_CALL CmdCuLaunchKernelNVX(
5020 VkCommandBuffer commandBuffer,
5021 const VkCuLaunchInfoNVX* pLaunchInfo)
5023 //Not a CREATE or DESTROY function
5027 static VKAPI_ATTR uint32_t VKAPI_CALL GetImageViewHandleNVX(
5028 VkDevice device,
5029 const VkImageViewHandleInfoNVX* pInfo)
5031 //Not a CREATE or DESTROY function
5032 return VK_SUCCESS;
5035 static VKAPI_ATTR VkResult VKAPI_CALL GetImageViewAddressNVX(
5036 VkDevice device,
5037 VkImageView imageView,
5038 VkImageViewAddressPropertiesNVX* pProperties)
5040 //Not a CREATE or DESTROY function
5041 return VK_SUCCESS;
5045 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCountAMD(
5046 VkCommandBuffer commandBuffer,
5047 VkBuffer buffer,
5048 VkDeviceSize offset,
5049 VkBuffer countBuffer,
5050 VkDeviceSize countBufferOffset,
5051 uint32_t maxDrawCount,
5052 uint32_t stride)
5054 //Not a CREATE or DESTROY function
5057 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirectCountAMD(
5058 VkCommandBuffer commandBuffer,
5059 VkBuffer buffer,
5060 VkDeviceSize offset,
5061 VkBuffer countBuffer,
5062 VkDeviceSize countBufferOffset,
5063 uint32_t maxDrawCount,
5064 uint32_t stride)
5066 //Not a CREATE or DESTROY function
5074 static VKAPI_ATTR VkResult VKAPI_CALL GetShaderInfoAMD(
5075 VkDevice device,
5076 VkPipeline pipeline,
5077 VkShaderStageFlagBits shaderStage,
5078 VkShaderInfoTypeAMD infoType,
5079 size_t* pInfoSize,
5080 void* pInfo)
5082 //Not a CREATE or DESTROY function
5083 return VK_SUCCESS;
5087 #ifdef VK_USE_PLATFORM_GGP
5089 static VKAPI_ATTR VkResult VKAPI_CALL CreateStreamDescriptorSurfaceGGP(
5090 VkInstance instance,
5091 const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo,
5092 const VkAllocationCallbacks* pAllocator,
5093 VkSurfaceKHR* pSurface)
5095 unique_lock_t lock(global_lock);
5096 *pSurface = (VkSurfaceKHR)global_unique_handle++;
5097 return VK_SUCCESS;
5099 #endif /* VK_USE_PLATFORM_GGP */
5104 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceExternalImageFormatPropertiesNV(
5105 VkPhysicalDevice physicalDevice,
5106 VkFormat format,
5107 VkImageType type,
5108 VkImageTiling tiling,
5109 VkImageUsageFlags usage,
5110 VkImageCreateFlags flags,
5111 VkExternalMemoryHandleTypeFlagsNV externalHandleType,
5112 VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties)
5114 //Not a CREATE or DESTROY function
5115 return VK_SUCCESS;
5119 #ifdef VK_USE_PLATFORM_WIN32_KHR
5121 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandleNV(
5122 VkDevice device,
5123 VkDeviceMemory memory,
5124 VkExternalMemoryHandleTypeFlagsNV handleType,
5125 HANDLE* pHandle)
5127 //Not a CREATE or DESTROY function
5128 return VK_SUCCESS;
5130 #endif /* VK_USE_PLATFORM_WIN32_KHR */
5132 #ifdef VK_USE_PLATFORM_WIN32_KHR
5133 #endif /* VK_USE_PLATFORM_WIN32_KHR */
5136 #ifdef VK_USE_PLATFORM_VI_NN
5138 static VKAPI_ATTR VkResult VKAPI_CALL CreateViSurfaceNN(
5139 VkInstance instance,
5140 const VkViSurfaceCreateInfoNN* pCreateInfo,
5141 const VkAllocationCallbacks* pAllocator,
5142 VkSurfaceKHR* pSurface)
5144 unique_lock_t lock(global_lock);
5145 *pSurface = (VkSurfaceKHR)global_unique_handle++;
5146 return VK_SUCCESS;
5148 #endif /* VK_USE_PLATFORM_VI_NN */
5156 static VKAPI_ATTR void VKAPI_CALL CmdBeginConditionalRenderingEXT(
5157 VkCommandBuffer commandBuffer,
5158 const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin)
5160 //Not a CREATE or DESTROY function
5163 static VKAPI_ATTR void VKAPI_CALL CmdEndConditionalRenderingEXT(
5164 VkCommandBuffer commandBuffer)
5166 //Not a CREATE or DESTROY function
5170 static VKAPI_ATTR void VKAPI_CALL CmdSetViewportWScalingNV(
5171 VkCommandBuffer commandBuffer,
5172 uint32_t firstViewport,
5173 uint32_t viewportCount,
5174 const VkViewportWScalingNV* pViewportWScalings)
5176 //Not a CREATE or DESTROY function
5180 static VKAPI_ATTR VkResult VKAPI_CALL ReleaseDisplayEXT(
5181 VkPhysicalDevice physicalDevice,
5182 VkDisplayKHR display)
5184 //Not a CREATE or DESTROY function
5185 return VK_SUCCESS;
5188 #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
5190 static VKAPI_ATTR VkResult VKAPI_CALL AcquireXlibDisplayEXT(
5191 VkPhysicalDevice physicalDevice,
5192 Display* dpy,
5193 VkDisplayKHR display)
5195 //Not a CREATE or DESTROY function
5196 return VK_SUCCESS;
5199 static VKAPI_ATTR VkResult VKAPI_CALL GetRandROutputDisplayEXT(
5200 VkPhysicalDevice physicalDevice,
5201 Display* dpy,
5202 RROutput rrOutput,
5203 VkDisplayKHR* pDisplay)
5205 //Not a CREATE or DESTROY function
5206 return VK_SUCCESS;
5208 #endif /* VK_USE_PLATFORM_XLIB_XRANDR_EXT */
5211 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilities2EXT(
5212 VkPhysicalDevice physicalDevice,
5213 VkSurfaceKHR surface,
5214 VkSurfaceCapabilities2EXT* pSurfaceCapabilities)
5216 //Not a CREATE or DESTROY function
5217 return VK_SUCCESS;
5221 static VKAPI_ATTR VkResult VKAPI_CALL DisplayPowerControlEXT(
5222 VkDevice device,
5223 VkDisplayKHR display,
5224 const VkDisplayPowerInfoEXT* pDisplayPowerInfo)
5226 //Not a CREATE or DESTROY function
5227 return VK_SUCCESS;
5230 static VKAPI_ATTR VkResult VKAPI_CALL RegisterDeviceEventEXT(
5231 VkDevice device,
5232 const VkDeviceEventInfoEXT* pDeviceEventInfo,
5233 const VkAllocationCallbacks* pAllocator,
5234 VkFence* pFence)
5236 //Not a CREATE or DESTROY function
5237 return VK_SUCCESS;
5240 static VKAPI_ATTR VkResult VKAPI_CALL RegisterDisplayEventEXT(
5241 VkDevice device,
5242 VkDisplayKHR display,
5243 const VkDisplayEventInfoEXT* pDisplayEventInfo,
5244 const VkAllocationCallbacks* pAllocator,
5245 VkFence* pFence)
5247 unique_lock_t lock(global_lock);
5248 *pFence = (VkFence)global_unique_handle++;
5249 return VK_SUCCESS;
5252 static VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainCounterEXT(
5253 VkDevice device,
5254 VkSwapchainKHR swapchain,
5255 VkSurfaceCounterFlagBitsEXT counter,
5256 uint64_t* pCounterValue)
5258 //Not a CREATE or DESTROY function
5259 return VK_SUCCESS;
5263 static VKAPI_ATTR VkResult VKAPI_CALL GetRefreshCycleDurationGOOGLE(
5264 VkDevice device,
5265 VkSwapchainKHR swapchain,
5266 VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties)
5268 //Not a CREATE or DESTROY function
5269 return VK_SUCCESS;
5272 static VKAPI_ATTR VkResult VKAPI_CALL GetPastPresentationTimingGOOGLE(
5273 VkDevice device,
5274 VkSwapchainKHR swapchain,
5275 uint32_t* pPresentationTimingCount,
5276 VkPastPresentationTimingGOOGLE* pPresentationTimings)
5278 //Not a CREATE or DESTROY function
5279 return VK_SUCCESS;
5288 static VKAPI_ATTR void VKAPI_CALL CmdSetDiscardRectangleEXT(
5289 VkCommandBuffer commandBuffer,
5290 uint32_t firstDiscardRectangle,
5291 uint32_t discardRectangleCount,
5292 const VkRect2D* pDiscardRectangles)
5294 //Not a CREATE or DESTROY function
5297 static VKAPI_ATTR void VKAPI_CALL CmdSetDiscardRectangleEnableEXT(
5298 VkCommandBuffer commandBuffer,
5299 VkBool32 discardRectangleEnable)
5301 //Not a CREATE or DESTROY function
5304 static VKAPI_ATTR void VKAPI_CALL CmdSetDiscardRectangleModeEXT(
5305 VkCommandBuffer commandBuffer,
5306 VkDiscardRectangleModeEXT discardRectangleMode)
5308 //Not a CREATE or DESTROY function
5315 static VKAPI_ATTR void VKAPI_CALL SetHdrMetadataEXT(
5316 VkDevice device,
5317 uint32_t swapchainCount,
5318 const VkSwapchainKHR* pSwapchains,
5319 const VkHdrMetadataEXT* pMetadata)
5321 //Not a CREATE or DESTROY function
5325 #ifdef VK_USE_PLATFORM_IOS_MVK
5327 static VKAPI_ATTR VkResult VKAPI_CALL CreateIOSSurfaceMVK(
5328 VkInstance instance,
5329 const VkIOSSurfaceCreateInfoMVK* pCreateInfo,
5330 const VkAllocationCallbacks* pAllocator,
5331 VkSurfaceKHR* pSurface)
5333 unique_lock_t lock(global_lock);
5334 *pSurface = (VkSurfaceKHR)global_unique_handle++;
5335 return VK_SUCCESS;
5337 #endif /* VK_USE_PLATFORM_IOS_MVK */
5339 #ifdef VK_USE_PLATFORM_MACOS_MVK
5341 static VKAPI_ATTR VkResult VKAPI_CALL CreateMacOSSurfaceMVK(
5342 VkInstance instance,
5343 const VkMacOSSurfaceCreateInfoMVK* pCreateInfo,
5344 const VkAllocationCallbacks* pAllocator,
5345 VkSurfaceKHR* pSurface)
5347 unique_lock_t lock(global_lock);
5348 *pSurface = (VkSurfaceKHR)global_unique_handle++;
5349 return VK_SUCCESS;
5351 #endif /* VK_USE_PLATFORM_MACOS_MVK */
5356 static VKAPI_ATTR VkResult VKAPI_CALL SetDebugUtilsObjectNameEXT(
5357 VkDevice device,
5358 const VkDebugUtilsObjectNameInfoEXT* pNameInfo)
5360 //Not a CREATE or DESTROY function
5361 return VK_SUCCESS;
5364 static VKAPI_ATTR VkResult VKAPI_CALL SetDebugUtilsObjectTagEXT(
5365 VkDevice device,
5366 const VkDebugUtilsObjectTagInfoEXT* pTagInfo)
5368 //Not a CREATE or DESTROY function
5369 return VK_SUCCESS;
5372 static VKAPI_ATTR void VKAPI_CALL QueueBeginDebugUtilsLabelEXT(
5373 VkQueue queue,
5374 const VkDebugUtilsLabelEXT* pLabelInfo)
5376 //Not a CREATE or DESTROY function
5379 static VKAPI_ATTR void VKAPI_CALL QueueEndDebugUtilsLabelEXT(
5380 VkQueue queue)
5382 //Not a CREATE or DESTROY function
5385 static VKAPI_ATTR void VKAPI_CALL QueueInsertDebugUtilsLabelEXT(
5386 VkQueue queue,
5387 const VkDebugUtilsLabelEXT* pLabelInfo)
5389 //Not a CREATE or DESTROY function
5392 static VKAPI_ATTR void VKAPI_CALL CmdBeginDebugUtilsLabelEXT(
5393 VkCommandBuffer commandBuffer,
5394 const VkDebugUtilsLabelEXT* pLabelInfo)
5396 //Not a CREATE or DESTROY function
5399 static VKAPI_ATTR void VKAPI_CALL CmdEndDebugUtilsLabelEXT(
5400 VkCommandBuffer commandBuffer)
5402 //Not a CREATE or DESTROY function
5405 static VKAPI_ATTR void VKAPI_CALL CmdInsertDebugUtilsLabelEXT(
5406 VkCommandBuffer commandBuffer,
5407 const VkDebugUtilsLabelEXT* pLabelInfo)
5409 //Not a CREATE or DESTROY function
5412 static VKAPI_ATTR VkResult VKAPI_CALL CreateDebugUtilsMessengerEXT(
5413 VkInstance instance,
5414 const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
5415 const VkAllocationCallbacks* pAllocator,
5416 VkDebugUtilsMessengerEXT* pMessenger)
5418 unique_lock_t lock(global_lock);
5419 *pMessenger = (VkDebugUtilsMessengerEXT)global_unique_handle++;
5420 return VK_SUCCESS;
5423 static VKAPI_ATTR void VKAPI_CALL DestroyDebugUtilsMessengerEXT(
5424 VkInstance instance,
5425 VkDebugUtilsMessengerEXT messenger,
5426 const VkAllocationCallbacks* pAllocator)
5428 //Destroy object
5431 static VKAPI_ATTR void VKAPI_CALL SubmitDebugUtilsMessageEXT(
5432 VkInstance instance,
5433 VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
5434 VkDebugUtilsMessageTypeFlagsEXT messageTypes,
5435 const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData)
5437 //Not a CREATE or DESTROY function
5440 #ifdef VK_USE_PLATFORM_ANDROID_KHR
5442 static VKAPI_ATTR VkResult VKAPI_CALL GetAndroidHardwareBufferPropertiesANDROID(
5443 VkDevice device,
5444 const struct AHardwareBuffer* buffer,
5445 VkAndroidHardwareBufferPropertiesANDROID* pProperties)
5447 pProperties->allocationSize = 65536;
5448 pProperties->memoryTypeBits = 1 << 5; // DEVICE_LOCAL only type
5450 auto *format_prop = lvl_find_mod_in_chain<VkAndroidHardwareBufferFormatPropertiesANDROID>(pProperties->pNext);
5451 if (format_prop) {
5452 // Likley using this format
5453 format_prop->format = VK_FORMAT_R8G8B8A8_UNORM;
5454 format_prop->externalFormat = 37;
5457 auto *format_resolve_prop = lvl_find_mod_in_chain<VkAndroidHardwareBufferFormatResolvePropertiesANDROID>(pProperties->pNext);
5458 if (format_resolve_prop) {
5459 format_resolve_prop->colorAttachmentFormat = VK_FORMAT_R8G8B8A8_UNORM;
5461 return VK_SUCCESS;
5464 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryAndroidHardwareBufferANDROID(
5465 VkDevice device,
5466 const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo,
5467 struct AHardwareBuffer** pBuffer)
5469 //Not a CREATE or DESTROY function
5470 return VK_SUCCESS;
5472 #endif /* VK_USE_PLATFORM_ANDROID_KHR */
5476 #ifdef VK_ENABLE_BETA_EXTENSIONS
5478 static VKAPI_ATTR VkResult VKAPI_CALL CreateExecutionGraphPipelinesAMDX(
5479 VkDevice device,
5480 VkPipelineCache pipelineCache,
5481 uint32_t createInfoCount,
5482 const VkExecutionGraphPipelineCreateInfoAMDX* pCreateInfos,
5483 const VkAllocationCallbacks* pAllocator,
5484 VkPipeline* pPipelines)
5486 unique_lock_t lock(global_lock);
5487 for (uint32_t i = 0; i < createInfoCount; ++i) {
5488 pPipelines[i] = (VkPipeline)global_unique_handle++;
5490 return VK_SUCCESS;
5493 static VKAPI_ATTR VkResult VKAPI_CALL GetExecutionGraphPipelineScratchSizeAMDX(
5494 VkDevice device,
5495 VkPipeline executionGraph,
5496 VkExecutionGraphPipelineScratchSizeAMDX* pSizeInfo)
5498 //Not a CREATE or DESTROY function
5499 return VK_SUCCESS;
5502 static VKAPI_ATTR VkResult VKAPI_CALL GetExecutionGraphPipelineNodeIndexAMDX(
5503 VkDevice device,
5504 VkPipeline executionGraph,
5505 const VkPipelineShaderStageNodeCreateInfoAMDX* pNodeInfo,
5506 uint32_t* pNodeIndex)
5508 //Not a CREATE or DESTROY function
5509 return VK_SUCCESS;
5512 static VKAPI_ATTR void VKAPI_CALL CmdInitializeGraphScratchMemoryAMDX(
5513 VkCommandBuffer commandBuffer,
5514 VkDeviceAddress scratch)
5516 //Not a CREATE or DESTROY function
5519 static VKAPI_ATTR void VKAPI_CALL CmdDispatchGraphAMDX(
5520 VkCommandBuffer commandBuffer,
5521 VkDeviceAddress scratch,
5522 const VkDispatchGraphCountInfoAMDX* pCountInfo)
5524 //Not a CREATE or DESTROY function
5527 static VKAPI_ATTR void VKAPI_CALL CmdDispatchGraphIndirectAMDX(
5528 VkCommandBuffer commandBuffer,
5529 VkDeviceAddress scratch,
5530 const VkDispatchGraphCountInfoAMDX* pCountInfo)
5532 //Not a CREATE or DESTROY function
5535 static VKAPI_ATTR void VKAPI_CALL CmdDispatchGraphIndirectCountAMDX(
5536 VkCommandBuffer commandBuffer,
5537 VkDeviceAddress scratch,
5538 VkDeviceAddress countInfo)
5540 //Not a CREATE or DESTROY function
5542 #endif /* VK_ENABLE_BETA_EXTENSIONS */
5549 static VKAPI_ATTR void VKAPI_CALL CmdSetSampleLocationsEXT(
5550 VkCommandBuffer commandBuffer,
5551 const VkSampleLocationsInfoEXT* pSampleLocationsInfo)
5553 //Not a CREATE or DESTROY function
5556 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMultisamplePropertiesEXT(
5557 VkPhysicalDevice physicalDevice,
5558 VkSampleCountFlagBits samples,
5559 VkMultisamplePropertiesEXT* pMultisampleProperties)
5561 if (pMultisampleProperties) {
5562 // arbitrary
5563 pMultisampleProperties->maxSampleLocationGridSize = {32, 32};
5574 static VKAPI_ATTR VkResult VKAPI_CALL GetImageDrmFormatModifierPropertiesEXT(
5575 VkDevice device,
5576 VkImage image,
5577 VkImageDrmFormatModifierPropertiesEXT* pProperties)
5579 //Not a CREATE or DESTROY function
5580 return VK_SUCCESS;
5584 static VKAPI_ATTR VkResult VKAPI_CALL CreateValidationCacheEXT(
5585 VkDevice device,
5586 const VkValidationCacheCreateInfoEXT* pCreateInfo,
5587 const VkAllocationCallbacks* pAllocator,
5588 VkValidationCacheEXT* pValidationCache)
5590 unique_lock_t lock(global_lock);
5591 *pValidationCache = (VkValidationCacheEXT)global_unique_handle++;
5592 return VK_SUCCESS;
5595 static VKAPI_ATTR void VKAPI_CALL DestroyValidationCacheEXT(
5596 VkDevice device,
5597 VkValidationCacheEXT validationCache,
5598 const VkAllocationCallbacks* pAllocator)
5600 //Destroy object
5603 static VKAPI_ATTR VkResult VKAPI_CALL MergeValidationCachesEXT(
5604 VkDevice device,
5605 VkValidationCacheEXT dstCache,
5606 uint32_t srcCacheCount,
5607 const VkValidationCacheEXT* pSrcCaches)
5609 //Not a CREATE or DESTROY function
5610 return VK_SUCCESS;
5613 static VKAPI_ATTR VkResult VKAPI_CALL GetValidationCacheDataEXT(
5614 VkDevice device,
5615 VkValidationCacheEXT validationCache,
5616 size_t* pDataSize,
5617 void* pData)
5619 //Not a CREATE or DESTROY function
5620 return VK_SUCCESS;
5626 static VKAPI_ATTR void VKAPI_CALL CmdBindShadingRateImageNV(
5627 VkCommandBuffer commandBuffer,
5628 VkImageView imageView,
5629 VkImageLayout imageLayout)
5631 //Not a CREATE or DESTROY function
5634 static VKAPI_ATTR void VKAPI_CALL CmdSetViewportShadingRatePaletteNV(
5635 VkCommandBuffer commandBuffer,
5636 uint32_t firstViewport,
5637 uint32_t viewportCount,
5638 const VkShadingRatePaletteNV* pShadingRatePalettes)
5640 //Not a CREATE or DESTROY function
5643 static VKAPI_ATTR void VKAPI_CALL CmdSetCoarseSampleOrderNV(
5644 VkCommandBuffer commandBuffer,
5645 VkCoarseSampleOrderTypeNV sampleOrderType,
5646 uint32_t customSampleOrderCount,
5647 const VkCoarseSampleOrderCustomNV* pCustomSampleOrders)
5649 //Not a CREATE or DESTROY function
5653 static VKAPI_ATTR VkResult VKAPI_CALL CreateAccelerationStructureNV(
5654 VkDevice device,
5655 const VkAccelerationStructureCreateInfoNV* pCreateInfo,
5656 const VkAllocationCallbacks* pAllocator,
5657 VkAccelerationStructureNV* pAccelerationStructure)
5659 unique_lock_t lock(global_lock);
5660 *pAccelerationStructure = (VkAccelerationStructureNV)global_unique_handle++;
5661 return VK_SUCCESS;
5664 static VKAPI_ATTR void VKAPI_CALL DestroyAccelerationStructureNV(
5665 VkDevice device,
5666 VkAccelerationStructureNV accelerationStructure,
5667 const VkAllocationCallbacks* pAllocator)
5669 //Destroy object
5672 static VKAPI_ATTR void VKAPI_CALL GetAccelerationStructureMemoryRequirementsNV(
5673 VkDevice device,
5674 const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo,
5675 VkMemoryRequirements2KHR* pMemoryRequirements)
5677 // arbitrary
5678 pMemoryRequirements->memoryRequirements.size = 4096;
5679 pMemoryRequirements->memoryRequirements.alignment = 1;
5680 pMemoryRequirements->memoryRequirements.memoryTypeBits = 0xFFFF;
5683 static VKAPI_ATTR VkResult VKAPI_CALL BindAccelerationStructureMemoryNV(
5684 VkDevice device,
5685 uint32_t bindInfoCount,
5686 const VkBindAccelerationStructureMemoryInfoNV* pBindInfos)
5688 //Not a CREATE or DESTROY function
5689 return VK_SUCCESS;
5692 static VKAPI_ATTR void VKAPI_CALL CmdBuildAccelerationStructureNV(
5693 VkCommandBuffer commandBuffer,
5694 const VkAccelerationStructureInfoNV* pInfo,
5695 VkBuffer instanceData,
5696 VkDeviceSize instanceOffset,
5697 VkBool32 update,
5698 VkAccelerationStructureNV dst,
5699 VkAccelerationStructureNV src,
5700 VkBuffer scratch,
5701 VkDeviceSize scratchOffset)
5703 //Not a CREATE or DESTROY function
5706 static VKAPI_ATTR void VKAPI_CALL CmdCopyAccelerationStructureNV(
5707 VkCommandBuffer commandBuffer,
5708 VkAccelerationStructureNV dst,
5709 VkAccelerationStructureNV src,
5710 VkCopyAccelerationStructureModeKHR mode)
5712 //Not a CREATE or DESTROY function
5715 static VKAPI_ATTR void VKAPI_CALL CmdTraceRaysNV(
5716 VkCommandBuffer commandBuffer,
5717 VkBuffer raygenShaderBindingTableBuffer,
5718 VkDeviceSize raygenShaderBindingOffset,
5719 VkBuffer missShaderBindingTableBuffer,
5720 VkDeviceSize missShaderBindingOffset,
5721 VkDeviceSize missShaderBindingStride,
5722 VkBuffer hitShaderBindingTableBuffer,
5723 VkDeviceSize hitShaderBindingOffset,
5724 VkDeviceSize hitShaderBindingStride,
5725 VkBuffer callableShaderBindingTableBuffer,
5726 VkDeviceSize callableShaderBindingOffset,
5727 VkDeviceSize callableShaderBindingStride,
5728 uint32_t width,
5729 uint32_t height,
5730 uint32_t depth)
5732 //Not a CREATE or DESTROY function
5735 static VKAPI_ATTR VkResult VKAPI_CALL CreateRayTracingPipelinesNV(
5736 VkDevice device,
5737 VkPipelineCache pipelineCache,
5738 uint32_t createInfoCount,
5739 const VkRayTracingPipelineCreateInfoNV* pCreateInfos,
5740 const VkAllocationCallbacks* pAllocator,
5741 VkPipeline* pPipelines)
5743 unique_lock_t lock(global_lock);
5744 for (uint32_t i = 0; i < createInfoCount; ++i) {
5745 pPipelines[i] = (VkPipeline)global_unique_handle++;
5747 return VK_SUCCESS;
5750 static VKAPI_ATTR VkResult VKAPI_CALL GetRayTracingShaderGroupHandlesKHR(
5751 VkDevice device,
5752 VkPipeline pipeline,
5753 uint32_t firstGroup,
5754 uint32_t groupCount,
5755 size_t dataSize,
5756 void* pData)
5758 //Not a CREATE or DESTROY function
5759 return VK_SUCCESS;
5762 static VKAPI_ATTR VkResult VKAPI_CALL GetRayTracingShaderGroupHandlesNV(
5763 VkDevice device,
5764 VkPipeline pipeline,
5765 uint32_t firstGroup,
5766 uint32_t groupCount,
5767 size_t dataSize,
5768 void* pData)
5770 //Not a CREATE or DESTROY function
5771 return VK_SUCCESS;
5774 static VKAPI_ATTR VkResult VKAPI_CALL GetAccelerationStructureHandleNV(
5775 VkDevice device,
5776 VkAccelerationStructureNV accelerationStructure,
5777 size_t dataSize,
5778 void* pData)
5780 //Not a CREATE or DESTROY function
5781 return VK_SUCCESS;
5784 static VKAPI_ATTR void VKAPI_CALL CmdWriteAccelerationStructuresPropertiesNV(
5785 VkCommandBuffer commandBuffer,
5786 uint32_t accelerationStructureCount,
5787 const VkAccelerationStructureNV* pAccelerationStructures,
5788 VkQueryType queryType,
5789 VkQueryPool queryPool,
5790 uint32_t firstQuery)
5792 //Not a CREATE or DESTROY function
5795 static VKAPI_ATTR VkResult VKAPI_CALL CompileDeferredNV(
5796 VkDevice device,
5797 VkPipeline pipeline,
5798 uint32_t shader)
5800 //Not a CREATE or DESTROY function
5801 return VK_SUCCESS;
5809 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryHostPointerPropertiesEXT(
5810 VkDevice device,
5811 VkExternalMemoryHandleTypeFlagBits handleType,
5812 const void* pHostPointer,
5813 VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties)
5815 pMemoryHostPointerProperties->memoryTypeBits = 1 << 5; // DEVICE_LOCAL only type
5816 return VK_SUCCESS;
5820 static VKAPI_ATTR void VKAPI_CALL CmdWriteBufferMarkerAMD(
5821 VkCommandBuffer commandBuffer,
5822 VkPipelineStageFlagBits pipelineStage,
5823 VkBuffer dstBuffer,
5824 VkDeviceSize dstOffset,
5825 uint32_t marker)
5827 //Not a CREATE or DESTROY function
5832 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCalibrateableTimeDomainsEXT(
5833 VkPhysicalDevice physicalDevice,
5834 uint32_t* pTimeDomainCount,
5835 VkTimeDomainKHR* pTimeDomains)
5837 if (!pTimeDomains) {
5838 *pTimeDomainCount = 1;
5839 } else {
5840 // arbitrary
5841 *pTimeDomains = VK_TIME_DOMAIN_DEVICE_EXT;
5843 return VK_SUCCESS;
5846 static VKAPI_ATTR VkResult VKAPI_CALL GetCalibratedTimestampsEXT(
5847 VkDevice device,
5848 uint32_t timestampCount,
5849 const VkCalibratedTimestampInfoKHR* pTimestampInfos,
5850 uint64_t* pTimestamps,
5851 uint64_t* pMaxDeviation)
5853 //Not a CREATE or DESTROY function
5854 return VK_SUCCESS;
5860 #ifdef VK_USE_PLATFORM_GGP
5861 #endif /* VK_USE_PLATFORM_GGP */
5867 static VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksNV(
5868 VkCommandBuffer commandBuffer,
5869 uint32_t taskCount,
5870 uint32_t firstTask)
5872 //Not a CREATE or DESTROY function
5875 static VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksIndirectNV(
5876 VkCommandBuffer commandBuffer,
5877 VkBuffer buffer,
5878 VkDeviceSize offset,
5879 uint32_t drawCount,
5880 uint32_t stride)
5882 //Not a CREATE or DESTROY function
5885 static VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksIndirectCountNV(
5886 VkCommandBuffer commandBuffer,
5887 VkBuffer buffer,
5888 VkDeviceSize offset,
5889 VkBuffer countBuffer,
5890 VkDeviceSize countBufferOffset,
5891 uint32_t maxDrawCount,
5892 uint32_t stride)
5894 //Not a CREATE or DESTROY function
5900 static VKAPI_ATTR void VKAPI_CALL CmdSetExclusiveScissorEnableNV(
5901 VkCommandBuffer commandBuffer,
5902 uint32_t firstExclusiveScissor,
5903 uint32_t exclusiveScissorCount,
5904 const VkBool32* pExclusiveScissorEnables)
5906 //Not a CREATE or DESTROY function
5909 static VKAPI_ATTR void VKAPI_CALL CmdSetExclusiveScissorNV(
5910 VkCommandBuffer commandBuffer,
5911 uint32_t firstExclusiveScissor,
5912 uint32_t exclusiveScissorCount,
5913 const VkRect2D* pExclusiveScissors)
5915 //Not a CREATE or DESTROY function
5919 static VKAPI_ATTR void VKAPI_CALL CmdSetCheckpointNV(
5920 VkCommandBuffer commandBuffer,
5921 const void* pCheckpointMarker)
5923 //Not a CREATE or DESTROY function
5926 static VKAPI_ATTR void VKAPI_CALL GetQueueCheckpointDataNV(
5927 VkQueue queue,
5928 uint32_t* pCheckpointDataCount,
5929 VkCheckpointDataNV* pCheckpointData)
5931 //Not a CREATE or DESTROY function
5936 static VKAPI_ATTR VkResult VKAPI_CALL InitializePerformanceApiINTEL(
5937 VkDevice device,
5938 const VkInitializePerformanceApiInfoINTEL* pInitializeInfo)
5940 //Not a CREATE or DESTROY function
5941 return VK_SUCCESS;
5944 static VKAPI_ATTR void VKAPI_CALL UninitializePerformanceApiINTEL(
5945 VkDevice device)
5947 //Not a CREATE or DESTROY function
5950 static VKAPI_ATTR VkResult VKAPI_CALL CmdSetPerformanceMarkerINTEL(
5951 VkCommandBuffer commandBuffer,
5952 const VkPerformanceMarkerInfoINTEL* pMarkerInfo)
5954 //Not a CREATE or DESTROY function
5955 return VK_SUCCESS;
5958 static VKAPI_ATTR VkResult VKAPI_CALL CmdSetPerformanceStreamMarkerINTEL(
5959 VkCommandBuffer commandBuffer,
5960 const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo)
5962 //Not a CREATE or DESTROY function
5963 return VK_SUCCESS;
5966 static VKAPI_ATTR VkResult VKAPI_CALL CmdSetPerformanceOverrideINTEL(
5967 VkCommandBuffer commandBuffer,
5968 const VkPerformanceOverrideInfoINTEL* pOverrideInfo)
5970 //Not a CREATE or DESTROY function
5971 return VK_SUCCESS;
5974 static VKAPI_ATTR VkResult VKAPI_CALL AcquirePerformanceConfigurationINTEL(
5975 VkDevice device,
5976 const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo,
5977 VkPerformanceConfigurationINTEL* pConfiguration)
5979 //Not a CREATE or DESTROY function
5980 return VK_SUCCESS;
5983 static VKAPI_ATTR VkResult VKAPI_CALL ReleasePerformanceConfigurationINTEL(
5984 VkDevice device,
5985 VkPerformanceConfigurationINTEL configuration)
5987 //Not a CREATE or DESTROY function
5988 return VK_SUCCESS;
5991 static VKAPI_ATTR VkResult VKAPI_CALL QueueSetPerformanceConfigurationINTEL(
5992 VkQueue queue,
5993 VkPerformanceConfigurationINTEL configuration)
5995 //Not a CREATE or DESTROY function
5996 return VK_SUCCESS;
5999 static VKAPI_ATTR VkResult VKAPI_CALL GetPerformanceParameterINTEL(
6000 VkDevice device,
6001 VkPerformanceParameterTypeINTEL parameter,
6002 VkPerformanceValueINTEL* pValue)
6004 //Not a CREATE or DESTROY function
6005 return VK_SUCCESS;
6010 static VKAPI_ATTR void VKAPI_CALL SetLocalDimmingAMD(
6011 VkDevice device,
6012 VkSwapchainKHR swapChain,
6013 VkBool32 localDimmingEnable)
6015 //Not a CREATE or DESTROY function
6018 #ifdef VK_USE_PLATFORM_FUCHSIA
6020 static VKAPI_ATTR VkResult VKAPI_CALL CreateImagePipeSurfaceFUCHSIA(
6021 VkInstance instance,
6022 const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo,
6023 const VkAllocationCallbacks* pAllocator,
6024 VkSurfaceKHR* pSurface)
6026 unique_lock_t lock(global_lock);
6027 *pSurface = (VkSurfaceKHR)global_unique_handle++;
6028 return VK_SUCCESS;
6030 #endif /* VK_USE_PLATFORM_FUCHSIA */
6032 #ifdef VK_USE_PLATFORM_METAL_EXT
6034 static VKAPI_ATTR VkResult VKAPI_CALL CreateMetalSurfaceEXT(
6035 VkInstance instance,
6036 const VkMetalSurfaceCreateInfoEXT* pCreateInfo,
6037 const VkAllocationCallbacks* pAllocator,
6038 VkSurfaceKHR* pSurface)
6040 unique_lock_t lock(global_lock);
6041 *pSurface = (VkSurfaceKHR)global_unique_handle++;
6042 return VK_SUCCESS;
6044 #endif /* VK_USE_PLATFORM_METAL_EXT */
6058 static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetBufferDeviceAddressEXT(
6059 VkDevice device,
6060 const VkBufferDeviceAddressInfo* pInfo)
6062 return GetBufferDeviceAddress(device, pInfo);
6066 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceToolPropertiesEXT(
6067 VkPhysicalDevice physicalDevice,
6068 uint32_t* pToolCount,
6069 VkPhysicalDeviceToolProperties* pToolProperties)
6071 //Not a CREATE or DESTROY function
6072 return VK_SUCCESS;
6078 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCooperativeMatrixPropertiesNV(
6079 VkPhysicalDevice physicalDevice,
6080 uint32_t* pPropertyCount,
6081 VkCooperativeMatrixPropertiesNV* pProperties)
6083 //Not a CREATE or DESTROY function
6084 return VK_SUCCESS;
6088 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(
6089 VkPhysicalDevice physicalDevice,
6090 uint32_t* pCombinationCount,
6091 VkFramebufferMixedSamplesCombinationNV* pCombinations)
6093 //Not a CREATE or DESTROY function
6094 return VK_SUCCESS;
6100 #ifdef VK_USE_PLATFORM_WIN32_KHR
6102 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModes2EXT(
6103 VkPhysicalDevice physicalDevice,
6104 const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
6105 uint32_t* pPresentModeCount,
6106 VkPresentModeKHR* pPresentModes)
6108 //Not a CREATE or DESTROY function
6109 return VK_SUCCESS;
6112 static VKAPI_ATTR VkResult VKAPI_CALL AcquireFullScreenExclusiveModeEXT(
6113 VkDevice device,
6114 VkSwapchainKHR swapchain)
6116 //Not a CREATE or DESTROY function
6117 return VK_SUCCESS;
6120 static VKAPI_ATTR VkResult VKAPI_CALL ReleaseFullScreenExclusiveModeEXT(
6121 VkDevice device,
6122 VkSwapchainKHR swapchain)
6124 //Not a CREATE or DESTROY function
6125 return VK_SUCCESS;
6128 static VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupSurfacePresentModes2EXT(
6129 VkDevice device,
6130 const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
6131 VkDeviceGroupPresentModeFlagsKHR* pModes)
6133 //Not a CREATE or DESTROY function
6134 return VK_SUCCESS;
6136 #endif /* VK_USE_PLATFORM_WIN32_KHR */
6139 static VKAPI_ATTR VkResult VKAPI_CALL CreateHeadlessSurfaceEXT(
6140 VkInstance instance,
6141 const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo,
6142 const VkAllocationCallbacks* pAllocator,
6143 VkSurfaceKHR* pSurface)
6145 unique_lock_t lock(global_lock);
6146 *pSurface = (VkSurfaceKHR)global_unique_handle++;
6147 return VK_SUCCESS;
6151 static VKAPI_ATTR void VKAPI_CALL CmdSetLineStippleEXT(
6152 VkCommandBuffer commandBuffer,
6153 uint32_t lineStippleFactor,
6154 uint16_t lineStipplePattern)
6156 //Not a CREATE or DESTROY function
6161 static VKAPI_ATTR void VKAPI_CALL ResetQueryPoolEXT(
6162 VkDevice device,
6163 VkQueryPool queryPool,
6164 uint32_t firstQuery,
6165 uint32_t queryCount)
6167 //Not a CREATE or DESTROY function
6172 static VKAPI_ATTR void VKAPI_CALL CmdSetCullModeEXT(
6173 VkCommandBuffer commandBuffer,
6174 VkCullModeFlags cullMode)
6176 //Not a CREATE or DESTROY function
6179 static VKAPI_ATTR void VKAPI_CALL CmdSetFrontFaceEXT(
6180 VkCommandBuffer commandBuffer,
6181 VkFrontFace frontFace)
6183 //Not a CREATE or DESTROY function
6186 static VKAPI_ATTR void VKAPI_CALL CmdSetPrimitiveTopologyEXT(
6187 VkCommandBuffer commandBuffer,
6188 VkPrimitiveTopology primitiveTopology)
6190 //Not a CREATE or DESTROY function
6193 static VKAPI_ATTR void VKAPI_CALL CmdSetViewportWithCountEXT(
6194 VkCommandBuffer commandBuffer,
6195 uint32_t viewportCount,
6196 const VkViewport* pViewports)
6198 //Not a CREATE or DESTROY function
6201 static VKAPI_ATTR void VKAPI_CALL CmdSetScissorWithCountEXT(
6202 VkCommandBuffer commandBuffer,
6203 uint32_t scissorCount,
6204 const VkRect2D* pScissors)
6206 //Not a CREATE or DESTROY function
6209 static VKAPI_ATTR void VKAPI_CALL CmdBindVertexBuffers2EXT(
6210 VkCommandBuffer commandBuffer,
6211 uint32_t firstBinding,
6212 uint32_t bindingCount,
6213 const VkBuffer* pBuffers,
6214 const VkDeviceSize* pOffsets,
6215 const VkDeviceSize* pSizes,
6216 const VkDeviceSize* pStrides)
6218 //Not a CREATE or DESTROY function
6221 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthTestEnableEXT(
6222 VkCommandBuffer commandBuffer,
6223 VkBool32 depthTestEnable)
6225 //Not a CREATE or DESTROY function
6228 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthWriteEnableEXT(
6229 VkCommandBuffer commandBuffer,
6230 VkBool32 depthWriteEnable)
6232 //Not a CREATE or DESTROY function
6235 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthCompareOpEXT(
6236 VkCommandBuffer commandBuffer,
6237 VkCompareOp depthCompareOp)
6239 //Not a CREATE or DESTROY function
6242 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthBoundsTestEnableEXT(
6243 VkCommandBuffer commandBuffer,
6244 VkBool32 depthBoundsTestEnable)
6246 //Not a CREATE or DESTROY function
6249 static VKAPI_ATTR void VKAPI_CALL CmdSetStencilTestEnableEXT(
6250 VkCommandBuffer commandBuffer,
6251 VkBool32 stencilTestEnable)
6253 //Not a CREATE or DESTROY function
6256 static VKAPI_ATTR void VKAPI_CALL CmdSetStencilOpEXT(
6257 VkCommandBuffer commandBuffer,
6258 VkStencilFaceFlags faceMask,
6259 VkStencilOp failOp,
6260 VkStencilOp passOp,
6261 VkStencilOp depthFailOp,
6262 VkCompareOp compareOp)
6264 //Not a CREATE or DESTROY function
6268 static VKAPI_ATTR VkResult VKAPI_CALL CopyMemoryToImageEXT(
6269 VkDevice device,
6270 const VkCopyMemoryToImageInfoEXT* pCopyMemoryToImageInfo)
6272 //Not a CREATE or DESTROY function
6273 return VK_SUCCESS;
6276 static VKAPI_ATTR VkResult VKAPI_CALL CopyImageToMemoryEXT(
6277 VkDevice device,
6278 const VkCopyImageToMemoryInfoEXT* pCopyImageToMemoryInfo)
6280 //Not a CREATE or DESTROY function
6281 return VK_SUCCESS;
6284 static VKAPI_ATTR VkResult VKAPI_CALL CopyImageToImageEXT(
6285 VkDevice device,
6286 const VkCopyImageToImageInfoEXT* pCopyImageToImageInfo)
6288 //Not a CREATE or DESTROY function
6289 return VK_SUCCESS;
6292 static VKAPI_ATTR VkResult VKAPI_CALL TransitionImageLayoutEXT(
6293 VkDevice device,
6294 uint32_t transitionCount,
6295 const VkHostImageLayoutTransitionInfoEXT* pTransitions)
6297 //Not a CREATE or DESTROY function
6298 return VK_SUCCESS;
6301 static VKAPI_ATTR void VKAPI_CALL GetImageSubresourceLayout2EXT(
6302 VkDevice device,
6303 VkImage image,
6304 const VkImageSubresource2KHR* pSubresource,
6305 VkSubresourceLayout2KHR* pLayout)
6307 //Not a CREATE or DESTROY function
6314 static VKAPI_ATTR VkResult VKAPI_CALL ReleaseSwapchainImagesEXT(
6315 VkDevice device,
6316 const VkReleaseSwapchainImagesInfoEXT* pReleaseInfo)
6318 //Not a CREATE or DESTROY function
6319 return VK_SUCCESS;
6324 static VKAPI_ATTR void VKAPI_CALL GetGeneratedCommandsMemoryRequirementsNV(
6325 VkDevice device,
6326 const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo,
6327 VkMemoryRequirements2* pMemoryRequirements)
6329 //Not a CREATE or DESTROY function
6332 static VKAPI_ATTR void VKAPI_CALL CmdPreprocessGeneratedCommandsNV(
6333 VkCommandBuffer commandBuffer,
6334 const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo)
6336 //Not a CREATE or DESTROY function
6339 static VKAPI_ATTR void VKAPI_CALL CmdExecuteGeneratedCommandsNV(
6340 VkCommandBuffer commandBuffer,
6341 VkBool32 isPreprocessed,
6342 const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo)
6344 //Not a CREATE or DESTROY function
6347 static VKAPI_ATTR void VKAPI_CALL CmdBindPipelineShaderGroupNV(
6348 VkCommandBuffer commandBuffer,
6349 VkPipelineBindPoint pipelineBindPoint,
6350 VkPipeline pipeline,
6351 uint32_t groupIndex)
6353 //Not a CREATE or DESTROY function
6356 static VKAPI_ATTR VkResult VKAPI_CALL CreateIndirectCommandsLayoutNV(
6357 VkDevice device,
6358 const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo,
6359 const VkAllocationCallbacks* pAllocator,
6360 VkIndirectCommandsLayoutNV* pIndirectCommandsLayout)
6362 unique_lock_t lock(global_lock);
6363 *pIndirectCommandsLayout = (VkIndirectCommandsLayoutNV)global_unique_handle++;
6364 return VK_SUCCESS;
6367 static VKAPI_ATTR void VKAPI_CALL DestroyIndirectCommandsLayoutNV(
6368 VkDevice device,
6369 VkIndirectCommandsLayoutNV indirectCommandsLayout,
6370 const VkAllocationCallbacks* pAllocator)
6372 //Destroy object
6379 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthBias2EXT(
6380 VkCommandBuffer commandBuffer,
6381 const VkDepthBiasInfoEXT* pDepthBiasInfo)
6383 //Not a CREATE or DESTROY function
6388 static VKAPI_ATTR VkResult VKAPI_CALL AcquireDrmDisplayEXT(
6389 VkPhysicalDevice physicalDevice,
6390 int32_t drmFd,
6391 VkDisplayKHR display)
6393 //Not a CREATE or DESTROY function
6394 return VK_SUCCESS;
6397 static VKAPI_ATTR VkResult VKAPI_CALL GetDrmDisplayEXT(
6398 VkPhysicalDevice physicalDevice,
6399 int32_t drmFd,
6400 uint32_t connectorId,
6401 VkDisplayKHR* display)
6403 //Not a CREATE or DESTROY function
6404 return VK_SUCCESS;
6412 static VKAPI_ATTR VkResult VKAPI_CALL CreatePrivateDataSlotEXT(
6413 VkDevice device,
6414 const VkPrivateDataSlotCreateInfo* pCreateInfo,
6415 const VkAllocationCallbacks* pAllocator,
6416 VkPrivateDataSlot* pPrivateDataSlot)
6418 unique_lock_t lock(global_lock);
6419 *pPrivateDataSlot = (VkPrivateDataSlot)global_unique_handle++;
6420 return VK_SUCCESS;
6423 static VKAPI_ATTR void VKAPI_CALL DestroyPrivateDataSlotEXT(
6424 VkDevice device,
6425 VkPrivateDataSlot privateDataSlot,
6426 const VkAllocationCallbacks* pAllocator)
6428 //Destroy object
6431 static VKAPI_ATTR VkResult VKAPI_CALL SetPrivateDataEXT(
6432 VkDevice device,
6433 VkObjectType objectType,
6434 uint64_t objectHandle,
6435 VkPrivateDataSlot privateDataSlot,
6436 uint64_t data)
6438 //Not a CREATE or DESTROY function
6439 return VK_SUCCESS;
6442 static VKAPI_ATTR void VKAPI_CALL GetPrivateDataEXT(
6443 VkDevice device,
6444 VkObjectType objectType,
6445 uint64_t objectHandle,
6446 VkPrivateDataSlot privateDataSlot,
6447 uint64_t* pData)
6449 //Not a CREATE or DESTROY function
6456 static VKAPI_ATTR VkResult VKAPI_CALL CreateCudaModuleNV(
6457 VkDevice device,
6458 const VkCudaModuleCreateInfoNV* pCreateInfo,
6459 const VkAllocationCallbacks* pAllocator,
6460 VkCudaModuleNV* pModule)
6462 unique_lock_t lock(global_lock);
6463 *pModule = (VkCudaModuleNV)global_unique_handle++;
6464 return VK_SUCCESS;
6467 static VKAPI_ATTR VkResult VKAPI_CALL GetCudaModuleCacheNV(
6468 VkDevice device,
6469 VkCudaModuleNV module,
6470 size_t* pCacheSize,
6471 void* pCacheData)
6473 //Not a CREATE or DESTROY function
6474 return VK_SUCCESS;
6477 static VKAPI_ATTR VkResult VKAPI_CALL CreateCudaFunctionNV(
6478 VkDevice device,
6479 const VkCudaFunctionCreateInfoNV* pCreateInfo,
6480 const VkAllocationCallbacks* pAllocator,
6481 VkCudaFunctionNV* pFunction)
6483 unique_lock_t lock(global_lock);
6484 *pFunction = (VkCudaFunctionNV)global_unique_handle++;
6485 return VK_SUCCESS;
6488 static VKAPI_ATTR void VKAPI_CALL DestroyCudaModuleNV(
6489 VkDevice device,
6490 VkCudaModuleNV module,
6491 const VkAllocationCallbacks* pAllocator)
6493 //Destroy object
6496 static VKAPI_ATTR void VKAPI_CALL DestroyCudaFunctionNV(
6497 VkDevice device,
6498 VkCudaFunctionNV function,
6499 const VkAllocationCallbacks* pAllocator)
6501 //Destroy object
6504 static VKAPI_ATTR void VKAPI_CALL CmdCudaLaunchKernelNV(
6505 VkCommandBuffer commandBuffer,
6506 const VkCudaLaunchInfoNV* pLaunchInfo)
6508 //Not a CREATE or DESTROY function
6512 #ifdef VK_USE_PLATFORM_METAL_EXT
6514 static VKAPI_ATTR void VKAPI_CALL ExportMetalObjectsEXT(
6515 VkDevice device,
6516 VkExportMetalObjectsInfoEXT* pMetalObjectsInfo)
6518 //Not a CREATE or DESTROY function
6520 #endif /* VK_USE_PLATFORM_METAL_EXT */
6523 static VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutSizeEXT(
6524 VkDevice device,
6525 VkDescriptorSetLayout layout,
6526 VkDeviceSize* pLayoutSizeInBytes)
6528 // Need to give something non-zero
6529 *pLayoutSizeInBytes = 4;
6532 static VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutBindingOffsetEXT(
6533 VkDevice device,
6534 VkDescriptorSetLayout layout,
6535 uint32_t binding,
6536 VkDeviceSize* pOffset)
6538 //Not a CREATE or DESTROY function
6541 static VKAPI_ATTR void VKAPI_CALL GetDescriptorEXT(
6542 VkDevice device,
6543 const VkDescriptorGetInfoEXT* pDescriptorInfo,
6544 size_t dataSize,
6545 void* pDescriptor)
6547 //Not a CREATE or DESTROY function
6550 static VKAPI_ATTR void VKAPI_CALL CmdBindDescriptorBuffersEXT(
6551 VkCommandBuffer commandBuffer,
6552 uint32_t bufferCount,
6553 const VkDescriptorBufferBindingInfoEXT* pBindingInfos)
6555 //Not a CREATE or DESTROY function
6558 static VKAPI_ATTR void VKAPI_CALL CmdSetDescriptorBufferOffsetsEXT(
6559 VkCommandBuffer commandBuffer,
6560 VkPipelineBindPoint pipelineBindPoint,
6561 VkPipelineLayout layout,
6562 uint32_t firstSet,
6563 uint32_t setCount,
6564 const uint32_t* pBufferIndices,
6565 const VkDeviceSize* pOffsets)
6567 //Not a CREATE or DESTROY function
6570 static VKAPI_ATTR void VKAPI_CALL CmdBindDescriptorBufferEmbeddedSamplersEXT(
6571 VkCommandBuffer commandBuffer,
6572 VkPipelineBindPoint pipelineBindPoint,
6573 VkPipelineLayout layout,
6574 uint32_t set)
6576 //Not a CREATE or DESTROY function
6579 static VKAPI_ATTR VkResult VKAPI_CALL GetBufferOpaqueCaptureDescriptorDataEXT(
6580 VkDevice device,
6581 const VkBufferCaptureDescriptorDataInfoEXT* pInfo,
6582 void* pData)
6584 //Not a CREATE or DESTROY function
6585 return VK_SUCCESS;
6588 static VKAPI_ATTR VkResult VKAPI_CALL GetImageOpaqueCaptureDescriptorDataEXT(
6589 VkDevice device,
6590 const VkImageCaptureDescriptorDataInfoEXT* pInfo,
6591 void* pData)
6593 //Not a CREATE or DESTROY function
6594 return VK_SUCCESS;
6597 static VKAPI_ATTR VkResult VKAPI_CALL GetImageViewOpaqueCaptureDescriptorDataEXT(
6598 VkDevice device,
6599 const VkImageViewCaptureDescriptorDataInfoEXT* pInfo,
6600 void* pData)
6602 //Not a CREATE or DESTROY function
6603 return VK_SUCCESS;
6606 static VKAPI_ATTR VkResult VKAPI_CALL GetSamplerOpaqueCaptureDescriptorDataEXT(
6607 VkDevice device,
6608 const VkSamplerCaptureDescriptorDataInfoEXT* pInfo,
6609 void* pData)
6611 //Not a CREATE or DESTROY function
6612 return VK_SUCCESS;
6615 static VKAPI_ATTR VkResult VKAPI_CALL GetAccelerationStructureOpaqueCaptureDescriptorDataEXT(
6616 VkDevice device,
6617 const VkAccelerationStructureCaptureDescriptorDataInfoEXT* pInfo,
6618 void* pData)
6620 //Not a CREATE or DESTROY function
6621 return VK_SUCCESS;
6627 static VKAPI_ATTR void VKAPI_CALL CmdSetFragmentShadingRateEnumNV(
6628 VkCommandBuffer commandBuffer,
6629 VkFragmentShadingRateNV shadingRate,
6630 const VkFragmentShadingRateCombinerOpKHR combinerOps[2])
6632 //Not a CREATE or DESTROY function
6644 static VKAPI_ATTR VkResult VKAPI_CALL GetDeviceFaultInfoEXT(
6645 VkDevice device,
6646 VkDeviceFaultCountsEXT* pFaultCounts,
6647 VkDeviceFaultInfoEXT* pFaultInfo)
6649 //Not a CREATE or DESTROY function
6650 return VK_SUCCESS;
6655 #ifdef VK_USE_PLATFORM_WIN32_KHR
6657 static VKAPI_ATTR VkResult VKAPI_CALL AcquireWinrtDisplayNV(
6658 VkPhysicalDevice physicalDevice,
6659 VkDisplayKHR display)
6661 //Not a CREATE or DESTROY function
6662 return VK_SUCCESS;
6665 static VKAPI_ATTR VkResult VKAPI_CALL GetWinrtDisplayNV(
6666 VkPhysicalDevice physicalDevice,
6667 uint32_t deviceRelativeId,
6668 VkDisplayKHR* pDisplay)
6670 //Not a CREATE or DESTROY function
6671 return VK_SUCCESS;
6673 #endif /* VK_USE_PLATFORM_WIN32_KHR */
6675 #ifdef VK_USE_PLATFORM_DIRECTFB_EXT
6677 static VKAPI_ATTR VkResult VKAPI_CALL CreateDirectFBSurfaceEXT(
6678 VkInstance instance,
6679 const VkDirectFBSurfaceCreateInfoEXT* pCreateInfo,
6680 const VkAllocationCallbacks* pAllocator,
6681 VkSurfaceKHR* pSurface)
6683 unique_lock_t lock(global_lock);
6684 *pSurface = (VkSurfaceKHR)global_unique_handle++;
6685 return VK_SUCCESS;
6688 static VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceDirectFBPresentationSupportEXT(
6689 VkPhysicalDevice physicalDevice,
6690 uint32_t queueFamilyIndex,
6691 IDirectFB* dfb)
6693 //Not a CREATE or DESTROY function
6694 return VK_SUCCESS;
6696 #endif /* VK_USE_PLATFORM_DIRECTFB_EXT */
6700 static VKAPI_ATTR void VKAPI_CALL CmdSetVertexInputEXT(
6701 VkCommandBuffer commandBuffer,
6702 uint32_t vertexBindingDescriptionCount,
6703 const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions,
6704 uint32_t vertexAttributeDescriptionCount,
6705 const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions)
6707 //Not a CREATE or DESTROY function
6715 #ifdef VK_USE_PLATFORM_FUCHSIA
6717 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryZirconHandleFUCHSIA(
6718 VkDevice device,
6719 const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo,
6720 zx_handle_t* pZirconHandle)
6722 //Not a CREATE or DESTROY function
6723 return VK_SUCCESS;
6726 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryZirconHandlePropertiesFUCHSIA(
6727 VkDevice device,
6728 VkExternalMemoryHandleTypeFlagBits handleType,
6729 zx_handle_t zirconHandle,
6730 VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties)
6732 //Not a CREATE or DESTROY function
6733 return VK_SUCCESS;
6735 #endif /* VK_USE_PLATFORM_FUCHSIA */
6737 #ifdef VK_USE_PLATFORM_FUCHSIA
6739 static VKAPI_ATTR VkResult VKAPI_CALL ImportSemaphoreZirconHandleFUCHSIA(
6740 VkDevice device,
6741 const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo)
6743 //Not a CREATE or DESTROY function
6744 return VK_SUCCESS;
6747 static VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreZirconHandleFUCHSIA(
6748 VkDevice device,
6749 const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo,
6750 zx_handle_t* pZirconHandle)
6752 //Not a CREATE or DESTROY function
6753 return VK_SUCCESS;
6755 #endif /* VK_USE_PLATFORM_FUCHSIA */
6757 #ifdef VK_USE_PLATFORM_FUCHSIA
6759 static VKAPI_ATTR VkResult VKAPI_CALL CreateBufferCollectionFUCHSIA(
6760 VkDevice device,
6761 const VkBufferCollectionCreateInfoFUCHSIA* pCreateInfo,
6762 const VkAllocationCallbacks* pAllocator,
6763 VkBufferCollectionFUCHSIA* pCollection)
6765 unique_lock_t lock(global_lock);
6766 *pCollection = (VkBufferCollectionFUCHSIA)global_unique_handle++;
6767 return VK_SUCCESS;
6770 static VKAPI_ATTR VkResult VKAPI_CALL SetBufferCollectionImageConstraintsFUCHSIA(
6771 VkDevice device,
6772 VkBufferCollectionFUCHSIA collection,
6773 const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo)
6775 //Not a CREATE or DESTROY function
6776 return VK_SUCCESS;
6779 static VKAPI_ATTR VkResult VKAPI_CALL SetBufferCollectionBufferConstraintsFUCHSIA(
6780 VkDevice device,
6781 VkBufferCollectionFUCHSIA collection,
6782 const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo)
6784 //Not a CREATE or DESTROY function
6785 return VK_SUCCESS;
6788 static VKAPI_ATTR void VKAPI_CALL DestroyBufferCollectionFUCHSIA(
6789 VkDevice device,
6790 VkBufferCollectionFUCHSIA collection,
6791 const VkAllocationCallbacks* pAllocator)
6793 //Destroy object
6796 static VKAPI_ATTR VkResult VKAPI_CALL GetBufferCollectionPropertiesFUCHSIA(
6797 VkDevice device,
6798 VkBufferCollectionFUCHSIA collection,
6799 VkBufferCollectionPropertiesFUCHSIA* pProperties)
6801 //Not a CREATE or DESTROY function
6802 return VK_SUCCESS;
6804 #endif /* VK_USE_PLATFORM_FUCHSIA */
6807 static VKAPI_ATTR VkResult VKAPI_CALL GetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI(
6808 VkDevice device,
6809 VkRenderPass renderpass,
6810 VkExtent2D* pMaxWorkgroupSize)
6812 //Not a CREATE or DESTROY function
6813 return VK_SUCCESS;
6816 static VKAPI_ATTR void VKAPI_CALL CmdSubpassShadingHUAWEI(
6817 VkCommandBuffer commandBuffer)
6819 //Not a CREATE or DESTROY function
6823 static VKAPI_ATTR void VKAPI_CALL CmdBindInvocationMaskHUAWEI(
6824 VkCommandBuffer commandBuffer,
6825 VkImageView imageView,
6826 VkImageLayout imageLayout)
6828 //Not a CREATE or DESTROY function
6832 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryRemoteAddressNV(
6833 VkDevice device,
6834 const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo,
6835 VkRemoteAddressNV* pAddress)
6837 //Not a CREATE or DESTROY function
6838 return VK_SUCCESS;
6842 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelinePropertiesEXT(
6843 VkDevice device,
6844 const VkPipelineInfoEXT* pPipelineInfo,
6845 VkBaseOutStructure* pPipelineProperties)
6847 //Not a CREATE or DESTROY function
6848 return VK_SUCCESS;
6854 static VKAPI_ATTR void VKAPI_CALL CmdSetPatchControlPointsEXT(
6855 VkCommandBuffer commandBuffer,
6856 uint32_t patchControlPoints)
6858 //Not a CREATE or DESTROY function
6861 static VKAPI_ATTR void VKAPI_CALL CmdSetRasterizerDiscardEnableEXT(
6862 VkCommandBuffer commandBuffer,
6863 VkBool32 rasterizerDiscardEnable)
6865 //Not a CREATE or DESTROY function
6868 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthBiasEnableEXT(
6869 VkCommandBuffer commandBuffer,
6870 VkBool32 depthBiasEnable)
6872 //Not a CREATE or DESTROY function
6875 static VKAPI_ATTR void VKAPI_CALL CmdSetLogicOpEXT(
6876 VkCommandBuffer commandBuffer,
6877 VkLogicOp logicOp)
6879 //Not a CREATE or DESTROY function
6882 static VKAPI_ATTR void VKAPI_CALL CmdSetPrimitiveRestartEnableEXT(
6883 VkCommandBuffer commandBuffer,
6884 VkBool32 primitiveRestartEnable)
6886 //Not a CREATE or DESTROY function
6889 #ifdef VK_USE_PLATFORM_SCREEN_QNX
6891 static VKAPI_ATTR VkResult VKAPI_CALL CreateScreenSurfaceQNX(
6892 VkInstance instance,
6893 const VkScreenSurfaceCreateInfoQNX* pCreateInfo,
6894 const VkAllocationCallbacks* pAllocator,
6895 VkSurfaceKHR* pSurface)
6897 unique_lock_t lock(global_lock);
6898 *pSurface = (VkSurfaceKHR)global_unique_handle++;
6899 return VK_SUCCESS;
6902 static VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceScreenPresentationSupportQNX(
6903 VkPhysicalDevice physicalDevice,
6904 uint32_t queueFamilyIndex,
6905 struct _screen_window* window)
6907 //Not a CREATE or DESTROY function
6908 return VK_SUCCESS;
6910 #endif /* VK_USE_PLATFORM_SCREEN_QNX */
6913 static VKAPI_ATTR void VKAPI_CALL CmdSetColorWriteEnableEXT(
6914 VkCommandBuffer commandBuffer,
6915 uint32_t attachmentCount,
6916 const VkBool32* pColorWriteEnables)
6918 //Not a CREATE or DESTROY function
6925 static VKAPI_ATTR void VKAPI_CALL CmdDrawMultiEXT(
6926 VkCommandBuffer commandBuffer,
6927 uint32_t drawCount,
6928 const VkMultiDrawInfoEXT* pVertexInfo,
6929 uint32_t instanceCount,
6930 uint32_t firstInstance,
6931 uint32_t stride)
6933 //Not a CREATE or DESTROY function
6936 static VKAPI_ATTR void VKAPI_CALL CmdDrawMultiIndexedEXT(
6937 VkCommandBuffer commandBuffer,
6938 uint32_t drawCount,
6939 const VkMultiDrawIndexedInfoEXT* pIndexInfo,
6940 uint32_t instanceCount,
6941 uint32_t firstInstance,
6942 uint32_t stride,
6943 const int32_t* pVertexOffset)
6945 //Not a CREATE or DESTROY function
6951 static VKAPI_ATTR VkResult VKAPI_CALL CreateMicromapEXT(
6952 VkDevice device,
6953 const VkMicromapCreateInfoEXT* pCreateInfo,
6954 const VkAllocationCallbacks* pAllocator,
6955 VkMicromapEXT* pMicromap)
6957 unique_lock_t lock(global_lock);
6958 *pMicromap = (VkMicromapEXT)global_unique_handle++;
6959 return VK_SUCCESS;
6962 static VKAPI_ATTR void VKAPI_CALL DestroyMicromapEXT(
6963 VkDevice device,
6964 VkMicromapEXT micromap,
6965 const VkAllocationCallbacks* pAllocator)
6967 //Destroy object
6970 static VKAPI_ATTR void VKAPI_CALL CmdBuildMicromapsEXT(
6971 VkCommandBuffer commandBuffer,
6972 uint32_t infoCount,
6973 const VkMicromapBuildInfoEXT* pInfos)
6975 //Not a CREATE or DESTROY function
6978 static VKAPI_ATTR VkResult VKAPI_CALL BuildMicromapsEXT(
6979 VkDevice device,
6980 VkDeferredOperationKHR deferredOperation,
6981 uint32_t infoCount,
6982 const VkMicromapBuildInfoEXT* pInfos)
6984 //Not a CREATE or DESTROY function
6985 return VK_SUCCESS;
6988 static VKAPI_ATTR VkResult VKAPI_CALL CopyMicromapEXT(
6989 VkDevice device,
6990 VkDeferredOperationKHR deferredOperation,
6991 const VkCopyMicromapInfoEXT* pInfo)
6993 //Not a CREATE or DESTROY function
6994 return VK_SUCCESS;
6997 static VKAPI_ATTR VkResult VKAPI_CALL CopyMicromapToMemoryEXT(
6998 VkDevice device,
6999 VkDeferredOperationKHR deferredOperation,
7000 const VkCopyMicromapToMemoryInfoEXT* pInfo)
7002 //Not a CREATE or DESTROY function
7003 return VK_SUCCESS;
7006 static VKAPI_ATTR VkResult VKAPI_CALL CopyMemoryToMicromapEXT(
7007 VkDevice device,
7008 VkDeferredOperationKHR deferredOperation,
7009 const VkCopyMemoryToMicromapInfoEXT* pInfo)
7011 //Not a CREATE or DESTROY function
7012 return VK_SUCCESS;
7015 static VKAPI_ATTR VkResult VKAPI_CALL WriteMicromapsPropertiesEXT(
7016 VkDevice device,
7017 uint32_t micromapCount,
7018 const VkMicromapEXT* pMicromaps,
7019 VkQueryType queryType,
7020 size_t dataSize,
7021 void* pData,
7022 size_t stride)
7024 //Not a CREATE or DESTROY function
7025 return VK_SUCCESS;
7028 static VKAPI_ATTR void VKAPI_CALL CmdCopyMicromapEXT(
7029 VkCommandBuffer commandBuffer,
7030 const VkCopyMicromapInfoEXT* pInfo)
7032 //Not a CREATE or DESTROY function
7035 static VKAPI_ATTR void VKAPI_CALL CmdCopyMicromapToMemoryEXT(
7036 VkCommandBuffer commandBuffer,
7037 const VkCopyMicromapToMemoryInfoEXT* pInfo)
7039 //Not a CREATE or DESTROY function
7042 static VKAPI_ATTR void VKAPI_CALL CmdCopyMemoryToMicromapEXT(
7043 VkCommandBuffer commandBuffer,
7044 const VkCopyMemoryToMicromapInfoEXT* pInfo)
7046 //Not a CREATE or DESTROY function
7049 static VKAPI_ATTR void VKAPI_CALL CmdWriteMicromapsPropertiesEXT(
7050 VkCommandBuffer commandBuffer,
7051 uint32_t micromapCount,
7052 const VkMicromapEXT* pMicromaps,
7053 VkQueryType queryType,
7054 VkQueryPool queryPool,
7055 uint32_t firstQuery)
7057 //Not a CREATE or DESTROY function
7060 static VKAPI_ATTR void VKAPI_CALL GetDeviceMicromapCompatibilityEXT(
7061 VkDevice device,
7062 const VkMicromapVersionInfoEXT* pVersionInfo,
7063 VkAccelerationStructureCompatibilityKHR* pCompatibility)
7065 //Not a CREATE or DESTROY function
7068 static VKAPI_ATTR void VKAPI_CALL GetMicromapBuildSizesEXT(
7069 VkDevice device,
7070 VkAccelerationStructureBuildTypeKHR buildType,
7071 const VkMicromapBuildInfoEXT* pBuildInfo,
7072 VkMicromapBuildSizesInfoEXT* pSizeInfo)
7074 //Not a CREATE or DESTROY function
7077 #ifdef VK_ENABLE_BETA_EXTENSIONS
7078 #endif /* VK_ENABLE_BETA_EXTENSIONS */
7082 static VKAPI_ATTR void VKAPI_CALL CmdDrawClusterHUAWEI(
7083 VkCommandBuffer commandBuffer,
7084 uint32_t groupCountX,
7085 uint32_t groupCountY,
7086 uint32_t groupCountZ)
7088 //Not a CREATE or DESTROY function
7091 static VKAPI_ATTR void VKAPI_CALL CmdDrawClusterIndirectHUAWEI(
7092 VkCommandBuffer commandBuffer,
7093 VkBuffer buffer,
7094 VkDeviceSize offset)
7096 //Not a CREATE or DESTROY function
7101 static VKAPI_ATTR void VKAPI_CALL SetDeviceMemoryPriorityEXT(
7102 VkDevice device,
7103 VkDeviceMemory memory,
7104 float priority)
7106 //Not a CREATE or DESTROY function
7113 static VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutHostMappingInfoVALVE(
7114 VkDevice device,
7115 const VkDescriptorSetBindingReferenceVALVE* pBindingReference,
7116 VkDescriptorSetLayoutHostMappingInfoVALVE* pHostMapping)
7118 //Not a CREATE or DESTROY function
7121 static VKAPI_ATTR void VKAPI_CALL GetDescriptorSetHostMappingVALVE(
7122 VkDevice device,
7123 VkDescriptorSet descriptorSet,
7124 void** ppData)
7126 //Not a CREATE or DESTROY function
7134 static VKAPI_ATTR void VKAPI_CALL CmdCopyMemoryIndirectNV(
7135 VkCommandBuffer commandBuffer,
7136 VkDeviceAddress copyBufferAddress,
7137 uint32_t copyCount,
7138 uint32_t stride)
7140 //Not a CREATE or DESTROY function
7143 static VKAPI_ATTR void VKAPI_CALL CmdCopyMemoryToImageIndirectNV(
7144 VkCommandBuffer commandBuffer,
7145 VkDeviceAddress copyBufferAddress,
7146 uint32_t copyCount,
7147 uint32_t stride,
7148 VkImage dstImage,
7149 VkImageLayout dstImageLayout,
7150 const VkImageSubresourceLayers* pImageSubresources)
7152 //Not a CREATE or DESTROY function
7156 static VKAPI_ATTR void VKAPI_CALL CmdDecompressMemoryNV(
7157 VkCommandBuffer commandBuffer,
7158 uint32_t decompressRegionCount,
7159 const VkDecompressMemoryRegionNV* pDecompressMemoryRegions)
7161 //Not a CREATE or DESTROY function
7164 static VKAPI_ATTR void VKAPI_CALL CmdDecompressMemoryIndirectCountNV(
7165 VkCommandBuffer commandBuffer,
7166 VkDeviceAddress indirectCommandsAddress,
7167 VkDeviceAddress indirectCommandsCountAddress,
7168 uint32_t stride)
7170 //Not a CREATE or DESTROY function
7174 static VKAPI_ATTR void VKAPI_CALL GetPipelineIndirectMemoryRequirementsNV(
7175 VkDevice device,
7176 const VkComputePipelineCreateInfo* pCreateInfo,
7177 VkMemoryRequirements2* pMemoryRequirements)
7179 //Not a CREATE or DESTROY function
7182 static VKAPI_ATTR void VKAPI_CALL CmdUpdatePipelineIndirectBufferNV(
7183 VkCommandBuffer commandBuffer,
7184 VkPipelineBindPoint pipelineBindPoint,
7185 VkPipeline pipeline)
7187 //Not a CREATE or DESTROY function
7190 static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetPipelineIndirectDeviceAddressNV(
7191 VkDevice device,
7192 const VkPipelineIndirectDeviceAddressInfoNV* pInfo)
7194 //Not a CREATE or DESTROY function
7195 return VK_SUCCESS;
7205 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthClampEnableEXT(
7206 VkCommandBuffer commandBuffer,
7207 VkBool32 depthClampEnable)
7209 //Not a CREATE or DESTROY function
7212 static VKAPI_ATTR void VKAPI_CALL CmdSetPolygonModeEXT(
7213 VkCommandBuffer commandBuffer,
7214 VkPolygonMode polygonMode)
7216 //Not a CREATE or DESTROY function
7219 static VKAPI_ATTR void VKAPI_CALL CmdSetRasterizationSamplesEXT(
7220 VkCommandBuffer commandBuffer,
7221 VkSampleCountFlagBits rasterizationSamples)
7223 //Not a CREATE or DESTROY function
7226 static VKAPI_ATTR void VKAPI_CALL CmdSetSampleMaskEXT(
7227 VkCommandBuffer commandBuffer,
7228 VkSampleCountFlagBits samples,
7229 const VkSampleMask* pSampleMask)
7231 //Not a CREATE or DESTROY function
7234 static VKAPI_ATTR void VKAPI_CALL CmdSetAlphaToCoverageEnableEXT(
7235 VkCommandBuffer commandBuffer,
7236 VkBool32 alphaToCoverageEnable)
7238 //Not a CREATE or DESTROY function
7241 static VKAPI_ATTR void VKAPI_CALL CmdSetAlphaToOneEnableEXT(
7242 VkCommandBuffer commandBuffer,
7243 VkBool32 alphaToOneEnable)
7245 //Not a CREATE or DESTROY function
7248 static VKAPI_ATTR void VKAPI_CALL CmdSetLogicOpEnableEXT(
7249 VkCommandBuffer commandBuffer,
7250 VkBool32 logicOpEnable)
7252 //Not a CREATE or DESTROY function
7255 static VKAPI_ATTR void VKAPI_CALL CmdSetColorBlendEnableEXT(
7256 VkCommandBuffer commandBuffer,
7257 uint32_t firstAttachment,
7258 uint32_t attachmentCount,
7259 const VkBool32* pColorBlendEnables)
7261 //Not a CREATE or DESTROY function
7264 static VKAPI_ATTR void VKAPI_CALL CmdSetColorBlendEquationEXT(
7265 VkCommandBuffer commandBuffer,
7266 uint32_t firstAttachment,
7267 uint32_t attachmentCount,
7268 const VkColorBlendEquationEXT* pColorBlendEquations)
7270 //Not a CREATE or DESTROY function
7273 static VKAPI_ATTR void VKAPI_CALL CmdSetColorWriteMaskEXT(
7274 VkCommandBuffer commandBuffer,
7275 uint32_t firstAttachment,
7276 uint32_t attachmentCount,
7277 const VkColorComponentFlags* pColorWriteMasks)
7279 //Not a CREATE or DESTROY function
7282 static VKAPI_ATTR void VKAPI_CALL CmdSetTessellationDomainOriginEXT(
7283 VkCommandBuffer commandBuffer,
7284 VkTessellationDomainOrigin domainOrigin)
7286 //Not a CREATE or DESTROY function
7289 static VKAPI_ATTR void VKAPI_CALL CmdSetRasterizationStreamEXT(
7290 VkCommandBuffer commandBuffer,
7291 uint32_t rasterizationStream)
7293 //Not a CREATE or DESTROY function
7296 static VKAPI_ATTR void VKAPI_CALL CmdSetConservativeRasterizationModeEXT(
7297 VkCommandBuffer commandBuffer,
7298 VkConservativeRasterizationModeEXT conservativeRasterizationMode)
7300 //Not a CREATE or DESTROY function
7303 static VKAPI_ATTR void VKAPI_CALL CmdSetExtraPrimitiveOverestimationSizeEXT(
7304 VkCommandBuffer commandBuffer,
7305 float extraPrimitiveOverestimationSize)
7307 //Not a CREATE or DESTROY function
7310 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthClipEnableEXT(
7311 VkCommandBuffer commandBuffer,
7312 VkBool32 depthClipEnable)
7314 //Not a CREATE or DESTROY function
7317 static VKAPI_ATTR void VKAPI_CALL CmdSetSampleLocationsEnableEXT(
7318 VkCommandBuffer commandBuffer,
7319 VkBool32 sampleLocationsEnable)
7321 //Not a CREATE or DESTROY function
7324 static VKAPI_ATTR void VKAPI_CALL CmdSetColorBlendAdvancedEXT(
7325 VkCommandBuffer commandBuffer,
7326 uint32_t firstAttachment,
7327 uint32_t attachmentCount,
7328 const VkColorBlendAdvancedEXT* pColorBlendAdvanced)
7330 //Not a CREATE or DESTROY function
7333 static VKAPI_ATTR void VKAPI_CALL CmdSetProvokingVertexModeEXT(
7334 VkCommandBuffer commandBuffer,
7335 VkProvokingVertexModeEXT provokingVertexMode)
7337 //Not a CREATE or DESTROY function
7340 static VKAPI_ATTR void VKAPI_CALL CmdSetLineRasterizationModeEXT(
7341 VkCommandBuffer commandBuffer,
7342 VkLineRasterizationModeEXT lineRasterizationMode)
7344 //Not a CREATE or DESTROY function
7347 static VKAPI_ATTR void VKAPI_CALL CmdSetLineStippleEnableEXT(
7348 VkCommandBuffer commandBuffer,
7349 VkBool32 stippledLineEnable)
7351 //Not a CREATE or DESTROY function
7354 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthClipNegativeOneToOneEXT(
7355 VkCommandBuffer commandBuffer,
7356 VkBool32 negativeOneToOne)
7358 //Not a CREATE or DESTROY function
7361 static VKAPI_ATTR void VKAPI_CALL CmdSetViewportWScalingEnableNV(
7362 VkCommandBuffer commandBuffer,
7363 VkBool32 viewportWScalingEnable)
7365 //Not a CREATE or DESTROY function
7368 static VKAPI_ATTR void VKAPI_CALL CmdSetViewportSwizzleNV(
7369 VkCommandBuffer commandBuffer,
7370 uint32_t firstViewport,
7371 uint32_t viewportCount,
7372 const VkViewportSwizzleNV* pViewportSwizzles)
7374 //Not a CREATE or DESTROY function
7377 static VKAPI_ATTR void VKAPI_CALL CmdSetCoverageToColorEnableNV(
7378 VkCommandBuffer commandBuffer,
7379 VkBool32 coverageToColorEnable)
7381 //Not a CREATE or DESTROY function
7384 static VKAPI_ATTR void VKAPI_CALL CmdSetCoverageToColorLocationNV(
7385 VkCommandBuffer commandBuffer,
7386 uint32_t coverageToColorLocation)
7388 //Not a CREATE or DESTROY function
7391 static VKAPI_ATTR void VKAPI_CALL CmdSetCoverageModulationModeNV(
7392 VkCommandBuffer commandBuffer,
7393 VkCoverageModulationModeNV coverageModulationMode)
7395 //Not a CREATE or DESTROY function
7398 static VKAPI_ATTR void VKAPI_CALL CmdSetCoverageModulationTableEnableNV(
7399 VkCommandBuffer commandBuffer,
7400 VkBool32 coverageModulationTableEnable)
7402 //Not a CREATE or DESTROY function
7405 static VKAPI_ATTR void VKAPI_CALL CmdSetCoverageModulationTableNV(
7406 VkCommandBuffer commandBuffer,
7407 uint32_t coverageModulationTableCount,
7408 const float* pCoverageModulationTable)
7410 //Not a CREATE or DESTROY function
7413 static VKAPI_ATTR void VKAPI_CALL CmdSetShadingRateImageEnableNV(
7414 VkCommandBuffer commandBuffer,
7415 VkBool32 shadingRateImageEnable)
7417 //Not a CREATE or DESTROY function
7420 static VKAPI_ATTR void VKAPI_CALL CmdSetRepresentativeFragmentTestEnableNV(
7421 VkCommandBuffer commandBuffer,
7422 VkBool32 representativeFragmentTestEnable)
7424 //Not a CREATE or DESTROY function
7427 static VKAPI_ATTR void VKAPI_CALL CmdSetCoverageReductionModeNV(
7428 VkCommandBuffer commandBuffer,
7429 VkCoverageReductionModeNV coverageReductionMode)
7431 //Not a CREATE or DESTROY function
7437 static VKAPI_ATTR void VKAPI_CALL GetShaderModuleIdentifierEXT(
7438 VkDevice device,
7439 VkShaderModule shaderModule,
7440 VkShaderModuleIdentifierEXT* pIdentifier)
7442 if (pIdentifier) {
7443 // arbitrary
7444 pIdentifier->identifierSize = 1;
7445 pIdentifier->identifier[0] = 0x01;
7449 static VKAPI_ATTR void VKAPI_CALL GetShaderModuleCreateInfoIdentifierEXT(
7450 VkDevice device,
7451 const VkShaderModuleCreateInfo* pCreateInfo,
7452 VkShaderModuleIdentifierEXT* pIdentifier)
7454 //Not a CREATE or DESTROY function
7459 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceOpticalFlowImageFormatsNV(
7460 VkPhysicalDevice physicalDevice,
7461 const VkOpticalFlowImageFormatInfoNV* pOpticalFlowImageFormatInfo,
7462 uint32_t* pFormatCount,
7463 VkOpticalFlowImageFormatPropertiesNV* pImageFormatProperties)
7465 //Not a CREATE or DESTROY function
7466 return VK_SUCCESS;
7469 static VKAPI_ATTR VkResult VKAPI_CALL CreateOpticalFlowSessionNV(
7470 VkDevice device,
7471 const VkOpticalFlowSessionCreateInfoNV* pCreateInfo,
7472 const VkAllocationCallbacks* pAllocator,
7473 VkOpticalFlowSessionNV* pSession)
7475 unique_lock_t lock(global_lock);
7476 *pSession = (VkOpticalFlowSessionNV)global_unique_handle++;
7477 return VK_SUCCESS;
7480 static VKAPI_ATTR void VKAPI_CALL DestroyOpticalFlowSessionNV(
7481 VkDevice device,
7482 VkOpticalFlowSessionNV session,
7483 const VkAllocationCallbacks* pAllocator)
7485 //Destroy object
7488 static VKAPI_ATTR VkResult VKAPI_CALL BindOpticalFlowSessionImageNV(
7489 VkDevice device,
7490 VkOpticalFlowSessionNV session,
7491 VkOpticalFlowSessionBindingPointNV bindingPoint,
7492 VkImageView view,
7493 VkImageLayout layout)
7495 //Not a CREATE or DESTROY function
7496 return VK_SUCCESS;
7499 static VKAPI_ATTR void VKAPI_CALL CmdOpticalFlowExecuteNV(
7500 VkCommandBuffer commandBuffer,
7501 VkOpticalFlowSessionNV session,
7502 const VkOpticalFlowExecuteInfoNV* pExecuteInfo)
7504 //Not a CREATE or DESTROY function
7509 #ifdef VK_USE_PLATFORM_ANDROID_KHR
7510 #endif /* VK_USE_PLATFORM_ANDROID_KHR */
7513 static VKAPI_ATTR void VKAPI_CALL AntiLagUpdateAMD(
7514 VkDevice device,
7515 const VkAntiLagDataAMD* pData)
7517 //Not a CREATE or DESTROY function
7521 static VKAPI_ATTR VkResult VKAPI_CALL CreateShadersEXT(
7522 VkDevice device,
7523 uint32_t createInfoCount,
7524 const VkShaderCreateInfoEXT* pCreateInfos,
7525 const VkAllocationCallbacks* pAllocator,
7526 VkShaderEXT* pShaders)
7528 unique_lock_t lock(global_lock);
7529 for (uint32_t i = 0; i < createInfoCount; ++i) {
7530 pShaders[i] = (VkShaderEXT)global_unique_handle++;
7532 return VK_SUCCESS;
7535 static VKAPI_ATTR void VKAPI_CALL DestroyShaderEXT(
7536 VkDevice device,
7537 VkShaderEXT shader,
7538 const VkAllocationCallbacks* pAllocator)
7540 //Destroy object
7543 static VKAPI_ATTR VkResult VKAPI_CALL GetShaderBinaryDataEXT(
7544 VkDevice device,
7545 VkShaderEXT shader,
7546 size_t* pDataSize,
7547 void* pData)
7549 //Not a CREATE or DESTROY function
7550 return VK_SUCCESS;
7553 static VKAPI_ATTR void VKAPI_CALL CmdBindShadersEXT(
7554 VkCommandBuffer commandBuffer,
7555 uint32_t stageCount,
7556 const VkShaderStageFlagBits* pStages,
7557 const VkShaderEXT* pShaders)
7559 //Not a CREATE or DESTROY function
7562 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthClampRangeEXT(
7563 VkCommandBuffer commandBuffer,
7564 VkDepthClampModeEXT depthClampMode,
7565 const VkDepthClampRangeEXT* pDepthClampRange)
7567 //Not a CREATE or DESTROY function
7571 static VKAPI_ATTR VkResult VKAPI_CALL GetFramebufferTilePropertiesQCOM(
7572 VkDevice device,
7573 VkFramebuffer framebuffer,
7574 uint32_t* pPropertiesCount,
7575 VkTilePropertiesQCOM* pProperties)
7577 //Not a CREATE or DESTROY function
7578 return VK_SUCCESS;
7581 static VKAPI_ATTR VkResult VKAPI_CALL GetDynamicRenderingTilePropertiesQCOM(
7582 VkDevice device,
7583 const VkRenderingInfo* pRenderingInfo,
7584 VkTilePropertiesQCOM* pProperties)
7586 //Not a CREATE or DESTROY function
7587 return VK_SUCCESS;
7601 static VKAPI_ATTR VkResult VKAPI_CALL SetLatencySleepModeNV(
7602 VkDevice device,
7603 VkSwapchainKHR swapchain,
7604 const VkLatencySleepModeInfoNV* pSleepModeInfo)
7606 //Not a CREATE or DESTROY function
7607 return VK_SUCCESS;
7610 static VKAPI_ATTR VkResult VKAPI_CALL LatencySleepNV(
7611 VkDevice device,
7612 VkSwapchainKHR swapchain,
7613 const VkLatencySleepInfoNV* pSleepInfo)
7615 //Not a CREATE or DESTROY function
7616 return VK_SUCCESS;
7619 static VKAPI_ATTR void VKAPI_CALL SetLatencyMarkerNV(
7620 VkDevice device,
7621 VkSwapchainKHR swapchain,
7622 const VkSetLatencyMarkerInfoNV* pLatencyMarkerInfo)
7624 //Not a CREATE or DESTROY function
7627 static VKAPI_ATTR void VKAPI_CALL GetLatencyTimingsNV(
7628 VkDevice device,
7629 VkSwapchainKHR swapchain,
7630 VkGetLatencyMarkerInfoNV* pLatencyMarkerInfo)
7632 //Not a CREATE or DESTROY function
7635 static VKAPI_ATTR void VKAPI_CALL QueueNotifyOutOfBandNV(
7636 VkQueue queue,
7637 const VkOutOfBandQueueTypeInfoNV* pQueueTypeInfo)
7639 //Not a CREATE or DESTROY function
7649 static VKAPI_ATTR void VKAPI_CALL CmdSetAttachmentFeedbackLoopEnableEXT(
7650 VkCommandBuffer commandBuffer,
7651 VkImageAspectFlags aspectMask)
7653 //Not a CREATE or DESTROY function
7656 #ifdef VK_USE_PLATFORM_SCREEN_QNX
7658 static VKAPI_ATTR VkResult VKAPI_CALL GetScreenBufferPropertiesQNX(
7659 VkDevice device,
7660 const struct _screen_buffer* buffer,
7661 VkScreenBufferPropertiesQNX* pProperties)
7663 //Not a CREATE or DESTROY function
7664 return VK_SUCCESS;
7666 #endif /* VK_USE_PLATFORM_SCREEN_QNX */
7676 static VKAPI_ATTR void VKAPI_CALL GetGeneratedCommandsMemoryRequirementsEXT(
7677 VkDevice device,
7678 const VkGeneratedCommandsMemoryRequirementsInfoEXT* pInfo,
7679 VkMemoryRequirements2* pMemoryRequirements)
7681 //Not a CREATE or DESTROY function
7684 static VKAPI_ATTR void VKAPI_CALL CmdPreprocessGeneratedCommandsEXT(
7685 VkCommandBuffer commandBuffer,
7686 const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo,
7687 VkCommandBuffer stateCommandBuffer)
7689 //Not a CREATE or DESTROY function
7692 static VKAPI_ATTR void VKAPI_CALL CmdExecuteGeneratedCommandsEXT(
7693 VkCommandBuffer commandBuffer,
7694 VkBool32 isPreprocessed,
7695 const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo)
7697 //Not a CREATE or DESTROY function
7700 static VKAPI_ATTR VkResult VKAPI_CALL CreateIndirectCommandsLayoutEXT(
7701 VkDevice device,
7702 const VkIndirectCommandsLayoutCreateInfoEXT* pCreateInfo,
7703 const VkAllocationCallbacks* pAllocator,
7704 VkIndirectCommandsLayoutEXT* pIndirectCommandsLayout)
7706 unique_lock_t lock(global_lock);
7707 *pIndirectCommandsLayout = (VkIndirectCommandsLayoutEXT)global_unique_handle++;
7708 return VK_SUCCESS;
7711 static VKAPI_ATTR void VKAPI_CALL DestroyIndirectCommandsLayoutEXT(
7712 VkDevice device,
7713 VkIndirectCommandsLayoutEXT indirectCommandsLayout,
7714 const VkAllocationCallbacks* pAllocator)
7716 //Destroy object
7719 static VKAPI_ATTR VkResult VKAPI_CALL CreateIndirectExecutionSetEXT(
7720 VkDevice device,
7721 const VkIndirectExecutionSetCreateInfoEXT* pCreateInfo,
7722 const VkAllocationCallbacks* pAllocator,
7723 VkIndirectExecutionSetEXT* pIndirectExecutionSet)
7725 unique_lock_t lock(global_lock);
7726 *pIndirectExecutionSet = (VkIndirectExecutionSetEXT)global_unique_handle++;
7727 return VK_SUCCESS;
7730 static VKAPI_ATTR void VKAPI_CALL DestroyIndirectExecutionSetEXT(
7731 VkDevice device,
7732 VkIndirectExecutionSetEXT indirectExecutionSet,
7733 const VkAllocationCallbacks* pAllocator)
7735 //Destroy object
7738 static VKAPI_ATTR void VKAPI_CALL UpdateIndirectExecutionSetPipelineEXT(
7739 VkDevice device,
7740 VkIndirectExecutionSetEXT indirectExecutionSet,
7741 uint32_t executionSetWriteCount,
7742 const VkWriteIndirectExecutionSetPipelineEXT* pExecutionSetWrites)
7744 //Not a CREATE or DESTROY function
7747 static VKAPI_ATTR void VKAPI_CALL UpdateIndirectExecutionSetShaderEXT(
7748 VkDevice device,
7749 VkIndirectExecutionSetEXT indirectExecutionSet,
7750 uint32_t executionSetWriteCount,
7751 const VkWriteIndirectExecutionSetShaderEXT* pExecutionSetWrites)
7753 //Not a CREATE or DESTROY function
7759 static VKAPI_ATTR VkResult VKAPI_CALL CreateAccelerationStructureKHR(
7760 VkDevice device,
7761 const VkAccelerationStructureCreateInfoKHR* pCreateInfo,
7762 const VkAllocationCallbacks* pAllocator,
7763 VkAccelerationStructureKHR* pAccelerationStructure)
7765 unique_lock_t lock(global_lock);
7766 *pAccelerationStructure = (VkAccelerationStructureKHR)global_unique_handle++;
7767 return VK_SUCCESS;
7770 static VKAPI_ATTR void VKAPI_CALL DestroyAccelerationStructureKHR(
7771 VkDevice device,
7772 VkAccelerationStructureKHR accelerationStructure,
7773 const VkAllocationCallbacks* pAllocator)
7775 //Destroy object
7778 static VKAPI_ATTR void VKAPI_CALL CmdBuildAccelerationStructuresKHR(
7779 VkCommandBuffer commandBuffer,
7780 uint32_t infoCount,
7781 const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,
7782 const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos)
7784 //Not a CREATE or DESTROY function
7787 static VKAPI_ATTR void VKAPI_CALL CmdBuildAccelerationStructuresIndirectKHR(
7788 VkCommandBuffer commandBuffer,
7789 uint32_t infoCount,
7790 const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,
7791 const VkDeviceAddress* pIndirectDeviceAddresses,
7792 const uint32_t* pIndirectStrides,
7793 const uint32_t* const* ppMaxPrimitiveCounts)
7795 //Not a CREATE or DESTROY function
7798 static VKAPI_ATTR VkResult VKAPI_CALL BuildAccelerationStructuresKHR(
7799 VkDevice device,
7800 VkDeferredOperationKHR deferredOperation,
7801 uint32_t infoCount,
7802 const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,
7803 const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos)
7805 //Not a CREATE or DESTROY function
7806 return VK_SUCCESS;
7809 static VKAPI_ATTR VkResult VKAPI_CALL CopyAccelerationStructureKHR(
7810 VkDevice device,
7811 VkDeferredOperationKHR deferredOperation,
7812 const VkCopyAccelerationStructureInfoKHR* pInfo)
7814 //Not a CREATE or DESTROY function
7815 return VK_SUCCESS;
7818 static VKAPI_ATTR VkResult VKAPI_CALL CopyAccelerationStructureToMemoryKHR(
7819 VkDevice device,
7820 VkDeferredOperationKHR deferredOperation,
7821 const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo)
7823 //Not a CREATE or DESTROY function
7824 return VK_SUCCESS;
7827 static VKAPI_ATTR VkResult VKAPI_CALL CopyMemoryToAccelerationStructureKHR(
7828 VkDevice device,
7829 VkDeferredOperationKHR deferredOperation,
7830 const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo)
7832 //Not a CREATE or DESTROY function
7833 return VK_SUCCESS;
7836 static VKAPI_ATTR VkResult VKAPI_CALL WriteAccelerationStructuresPropertiesKHR(
7837 VkDevice device,
7838 uint32_t accelerationStructureCount,
7839 const VkAccelerationStructureKHR* pAccelerationStructures,
7840 VkQueryType queryType,
7841 size_t dataSize,
7842 void* pData,
7843 size_t stride)
7845 //Not a CREATE or DESTROY function
7846 return VK_SUCCESS;
7849 static VKAPI_ATTR void VKAPI_CALL CmdCopyAccelerationStructureKHR(
7850 VkCommandBuffer commandBuffer,
7851 const VkCopyAccelerationStructureInfoKHR* pInfo)
7853 //Not a CREATE or DESTROY function
7856 static VKAPI_ATTR void VKAPI_CALL CmdCopyAccelerationStructureToMemoryKHR(
7857 VkCommandBuffer commandBuffer,
7858 const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo)
7860 //Not a CREATE or DESTROY function
7863 static VKAPI_ATTR void VKAPI_CALL CmdCopyMemoryToAccelerationStructureKHR(
7864 VkCommandBuffer commandBuffer,
7865 const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo)
7867 //Not a CREATE or DESTROY function
7870 static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetAccelerationStructureDeviceAddressKHR(
7871 VkDevice device,
7872 const VkAccelerationStructureDeviceAddressInfoKHR* pInfo)
7874 // arbitrary - need to be aligned to 256 bytes
7875 return 0x262144;
7878 static VKAPI_ATTR void VKAPI_CALL CmdWriteAccelerationStructuresPropertiesKHR(
7879 VkCommandBuffer commandBuffer,
7880 uint32_t accelerationStructureCount,
7881 const VkAccelerationStructureKHR* pAccelerationStructures,
7882 VkQueryType queryType,
7883 VkQueryPool queryPool,
7884 uint32_t firstQuery)
7886 //Not a CREATE or DESTROY function
7889 static VKAPI_ATTR void VKAPI_CALL GetDeviceAccelerationStructureCompatibilityKHR(
7890 VkDevice device,
7891 const VkAccelerationStructureVersionInfoKHR* pVersionInfo,
7892 VkAccelerationStructureCompatibilityKHR* pCompatibility)
7894 //Not a CREATE or DESTROY function
7897 static VKAPI_ATTR void VKAPI_CALL GetAccelerationStructureBuildSizesKHR(
7898 VkDevice device,
7899 VkAccelerationStructureBuildTypeKHR buildType,
7900 const VkAccelerationStructureBuildGeometryInfoKHR* pBuildInfo,
7901 const uint32_t* pMaxPrimitiveCounts,
7902 VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo)
7904 // arbitrary
7905 pSizeInfo->accelerationStructureSize = 4;
7906 pSizeInfo->updateScratchSize = 4;
7907 pSizeInfo->buildScratchSize = 4;
7911 static VKAPI_ATTR void VKAPI_CALL CmdTraceRaysKHR(
7912 VkCommandBuffer commandBuffer,
7913 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
7914 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
7915 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
7916 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable,
7917 uint32_t width,
7918 uint32_t height,
7919 uint32_t depth)
7921 //Not a CREATE or DESTROY function
7924 static VKAPI_ATTR VkResult VKAPI_CALL CreateRayTracingPipelinesKHR(
7925 VkDevice device,
7926 VkDeferredOperationKHR deferredOperation,
7927 VkPipelineCache pipelineCache,
7928 uint32_t createInfoCount,
7929 const VkRayTracingPipelineCreateInfoKHR* pCreateInfos,
7930 const VkAllocationCallbacks* pAllocator,
7931 VkPipeline* pPipelines)
7933 unique_lock_t lock(global_lock);
7934 for (uint32_t i = 0; i < createInfoCount; ++i) {
7935 pPipelines[i] = (VkPipeline)global_unique_handle++;
7937 return VK_SUCCESS;
7940 static VKAPI_ATTR VkResult VKAPI_CALL GetRayTracingCaptureReplayShaderGroupHandlesKHR(
7941 VkDevice device,
7942 VkPipeline pipeline,
7943 uint32_t firstGroup,
7944 uint32_t groupCount,
7945 size_t dataSize,
7946 void* pData)
7948 //Not a CREATE or DESTROY function
7949 return VK_SUCCESS;
7952 static VKAPI_ATTR void VKAPI_CALL CmdTraceRaysIndirectKHR(
7953 VkCommandBuffer commandBuffer,
7954 const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable,
7955 const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable,
7956 const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable,
7957 const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable,
7958 VkDeviceAddress indirectDeviceAddress)
7960 //Not a CREATE or DESTROY function
7963 static VKAPI_ATTR VkDeviceSize VKAPI_CALL GetRayTracingShaderGroupStackSizeKHR(
7964 VkDevice device,
7965 VkPipeline pipeline,
7966 uint32_t group,
7967 VkShaderGroupShaderKHR groupShader)
7969 //Not a CREATE or DESTROY function
7970 return VK_SUCCESS;
7973 static VKAPI_ATTR void VKAPI_CALL CmdSetRayTracingPipelineStackSizeKHR(
7974 VkCommandBuffer commandBuffer,
7975 uint32_t pipelineStackSize)
7977 //Not a CREATE or DESTROY function
7982 static VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksEXT(
7983 VkCommandBuffer commandBuffer,
7984 uint32_t groupCountX,
7985 uint32_t groupCountY,
7986 uint32_t groupCountZ)
7988 //Not a CREATE or DESTROY function
7991 static VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksIndirectEXT(
7992 VkCommandBuffer commandBuffer,
7993 VkBuffer buffer,
7994 VkDeviceSize offset,
7995 uint32_t drawCount,
7996 uint32_t stride)
7998 //Not a CREATE or DESTROY function
8001 static VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksIndirectCountEXT(
8002 VkCommandBuffer commandBuffer,
8003 VkBuffer buffer,
8004 VkDeviceSize offset,
8005 VkBuffer countBuffer,
8006 VkDeviceSize countBufferOffset,
8007 uint32_t maxDrawCount,
8008 uint32_t stride)
8010 //Not a CREATE or DESTROY function
8013 } // namespace vkmock