2 ** Copyright (c) 2015-2018 The Khronos Group Inc.
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
8 ** http://www.apache.org/licenses/LICENSE-2.0
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.
25 #include "vk_typemap_helper.h"
29 using std::unordered_map;
31 // Map device memory handle to any mapped allocations that we'll need to free on unmap
32 static unordered_map<VkDeviceMemory, std::vector<void*>> mapped_memory_map;
34 static VkPhysicalDevice physical_device = nullptr;
35 static unordered_map<VkDevice, unordered_map<uint32_t, unordered_map<uint32_t, VkQueue>>> queue_map;
36 static unordered_map<VkDevice, unordered_map<VkBuffer, VkBufferCreateInfo>> buffer_map;
38 // TODO: Would like to codegen this but limits aren't in XML
39 static VkPhysicalDeviceLimits SetLimits(VkPhysicalDeviceLimits *limits) {
40 limits->maxImageDimension1D = 4096;
41 limits->maxImageDimension2D = 4096;
42 limits->maxImageDimension3D = 256;
43 limits->maxImageDimensionCube = 4096;
44 limits->maxImageArrayLayers = 256;
45 limits->maxTexelBufferElements = 65536;
46 limits->maxUniformBufferRange = 16384;
47 limits->maxStorageBufferRange = 134217728;
48 limits->maxPushConstantsSize = 128;
49 limits->maxMemoryAllocationCount = 4096;
50 limits->maxSamplerAllocationCount = 4000;
51 limits->bufferImageGranularity = 1;
52 limits->sparseAddressSpaceSize = 2147483648;
53 limits->maxBoundDescriptorSets = 4;
54 limits->maxPerStageDescriptorSamplers = 16;
55 limits->maxPerStageDescriptorUniformBuffers = 12;
56 limits->maxPerStageDescriptorStorageBuffers = 4;
57 limits->maxPerStageDescriptorSampledImages = 16;
58 limits->maxPerStageDescriptorStorageImages = 4;
59 limits->maxPerStageDescriptorInputAttachments = 4;
60 limits->maxPerStageResources = 128;
61 limits->maxDescriptorSetSamplers = 96;
62 limits->maxDescriptorSetUniformBuffers = 72;
63 limits->maxDescriptorSetUniformBuffersDynamic = 8;
64 limits->maxDescriptorSetStorageBuffers = 24;
65 limits->maxDescriptorSetStorageBuffersDynamic = 4;
66 limits->maxDescriptorSetSampledImages = 96;
67 limits->maxDescriptorSetStorageImages = 24;
68 limits->maxDescriptorSetInputAttachments = 4;
69 limits->maxVertexInputAttributes = 16;
70 limits->maxVertexInputBindings = 16;
71 limits->maxVertexInputAttributeOffset = 2047;
72 limits->maxVertexInputBindingStride = 2048;
73 limits->maxVertexOutputComponents = 64;
74 limits->maxTessellationGenerationLevel = 64;
75 limits->maxTessellationPatchSize = 32;
76 limits->maxTessellationControlPerVertexInputComponents = 64;
77 limits->maxTessellationControlPerVertexOutputComponents = 64;
78 limits->maxTessellationControlPerPatchOutputComponents = 120;
79 limits->maxTessellationControlTotalOutputComponents = 2048;
80 limits->maxTessellationEvaluationInputComponents = 64;
81 limits->maxTessellationEvaluationOutputComponents = 64;
82 limits->maxGeometryShaderInvocations = 32;
83 limits->maxGeometryInputComponents = 64;
84 limits->maxGeometryOutputComponents = 64;
85 limits->maxGeometryOutputVertices = 256;
86 limits->maxGeometryTotalOutputComponents = 1024;
87 limits->maxFragmentInputComponents = 64;
88 limits->maxFragmentOutputAttachments = 4;
89 limits->maxFragmentDualSrcAttachments = 1;
90 limits->maxFragmentCombinedOutputResources = 4;
91 limits->maxComputeSharedMemorySize = 16384;
92 limits->maxComputeWorkGroupCount[0] = 65535;
93 limits->maxComputeWorkGroupCount[1] = 65535;
94 limits->maxComputeWorkGroupCount[2] = 65535;
95 limits->maxComputeWorkGroupInvocations = 128;
96 limits->maxComputeWorkGroupSize[0] = 128;
97 limits->maxComputeWorkGroupSize[1] = 128;
98 limits->maxComputeWorkGroupSize[2] = 64;
99 limits->subPixelPrecisionBits = 4;
100 limits->subTexelPrecisionBits = 4;
101 limits->mipmapPrecisionBits = 4;
102 limits->maxDrawIndexedIndexValue = UINT32_MAX;
103 limits->maxDrawIndirectCount = UINT16_MAX;
104 limits->maxSamplerLodBias = 2.0f;
105 limits->maxSamplerAnisotropy = 16;
106 limits->maxViewports = 16;
107 limits->maxViewportDimensions[0] = 4096;
108 limits->maxViewportDimensions[1] = 4096;
109 limits->viewportBoundsRange[0] = -8192;
110 limits->viewportBoundsRange[1] = 8191;
111 limits->viewportSubPixelBits = 0;
112 limits->minMemoryMapAlignment = 64;
113 limits->minTexelBufferOffsetAlignment = 16;
114 limits->minUniformBufferOffsetAlignment = 16;
115 limits->minStorageBufferOffsetAlignment = 16;
116 limits->minTexelOffset = -8;
117 limits->maxTexelOffset = 7;
118 limits->minTexelGatherOffset = -8;
119 limits->maxTexelGatherOffset = 7;
120 limits->minInterpolationOffset = 0.0f;
121 limits->maxInterpolationOffset = 0.5f;
122 limits->subPixelInterpolationOffsetBits = 4;
123 limits->maxFramebufferWidth = 4096;
124 limits->maxFramebufferHeight = 4096;
125 limits->maxFramebufferLayers = 256;
126 limits->framebufferColorSampleCounts = 0x7F;
127 limits->framebufferDepthSampleCounts = 0x7F;
128 limits->framebufferStencilSampleCounts = 0x7F;
129 limits->framebufferNoAttachmentsSampleCounts = 0x7F;
130 limits->maxColorAttachments = 4;
131 limits->sampledImageColorSampleCounts = 0x7F;
132 limits->sampledImageIntegerSampleCounts = 0x7F;
133 limits->sampledImageDepthSampleCounts = 0x7F;
134 limits->sampledImageStencilSampleCounts = 0x7F;
135 limits->storageImageSampleCounts = 0x7F;
136 limits->maxSampleMaskWords = 1;
137 limits->timestampComputeAndGraphics = VK_TRUE;
138 limits->timestampPeriod = 1;
139 limits->maxClipDistances = 8;
140 limits->maxCullDistances = 8;
141 limits->maxCombinedClipAndCullDistances = 8;
142 limits->discreteQueuePriorities = 2;
143 limits->pointSizeRange[0] = 1.0f;
144 limits->pointSizeRange[1] = 64.0f;
145 limits->lineWidthRange[0] = 1.0f;
146 limits->lineWidthRange[1] = 8.0f;
147 limits->pointSizeGranularity = 1.0f;
148 limits->lineWidthGranularity = 1.0f;
149 limits->strictLines = VK_TRUE;
150 limits->standardSampleLocations = VK_TRUE;
151 limits->optimalBufferCopyOffsetAlignment = 1;
152 limits->optimalBufferCopyRowPitchAlignment = 1;
153 limits->nonCoherentAtomSize = 256;
158 void SetBoolArrayTrue(VkBool32* bool_array, uint32_t num_bools)
160 for (uint32_t i = 0; i < num_bools; ++i) {
161 bool_array[i] = VK_TRUE;
167 static VKAPI_ATTR VkResult VKAPI_CALL CreateInstance(
168 const VkInstanceCreateInfo* pCreateInfo,
169 const VkAllocationCallbacks* pAllocator,
170 VkInstance* pInstance)
173 // TODO: If loader ver <=4 ICD must fail with VK_ERROR_INCOMPATIBLE_DRIVER for all vkCreateInstance calls with
174 // apiVersion set to > Vulkan 1.0 because the loader is still at interface version <= 4. Otherwise, the
175 // ICD should behave as normal.
176 if (loader_interface_version <= 4) {
177 return VK_ERROR_INCOMPATIBLE_DRIVER;
179 *pInstance = (VkInstance)CreateDispObjHandle();
180 // TODO: If emulating specific device caps, will need to add intelligence here
184 static VKAPI_ATTR void VKAPI_CALL DestroyInstance(
186 const VkAllocationCallbacks* pAllocator)
189 // Destroy physical device
190 DestroyDispObjHandle((void*)physical_device);
192 DestroyDispObjHandle((void*)instance);
195 static VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDevices(
197 uint32_t* pPhysicalDeviceCount,
198 VkPhysicalDevice* pPhysicalDevices)
200 if (pPhysicalDevices) {
201 if (!physical_device) {
202 physical_device = (VkPhysicalDevice)CreateDispObjHandle();
204 *pPhysicalDevices = physical_device;
206 *pPhysicalDeviceCount = 1;
211 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures(
212 VkPhysicalDevice physicalDevice,
213 VkPhysicalDeviceFeatures* pFeatures)
215 uint32_t num_bools = sizeof(VkPhysicalDeviceFeatures) / sizeof(VkBool32);
216 VkBool32 *bool_array = &pFeatures->robustBufferAccess;
217 SetBoolArrayTrue(bool_array, num_bools);
220 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties(
221 VkPhysicalDevice physicalDevice,
223 VkFormatProperties* pFormatProperties)
225 if (VK_FORMAT_UNDEFINED == format) {
226 *pFormatProperties = { 0x0, 0x0, 0x0 };
228 // TODO: Just returning full support for everything initially
229 *pFormatProperties = { 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF };
233 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties(
234 VkPhysicalDevice physicalDevice,
237 VkImageTiling tiling,
238 VkImageUsageFlags usage,
239 VkImageCreateFlags flags,
240 VkImageFormatProperties* pImageFormatProperties)
242 // A hardcoded unsupported format
243 if (format == VK_FORMAT_E5B9G9R9_UFLOAT_PACK32) {
244 return VK_ERROR_FORMAT_NOT_SUPPORTED;
247 // TODO: Just hard-coding some values for now
248 // TODO: If tiling is linear, limit the mips, levels, & sample count
249 if (VK_IMAGE_TILING_LINEAR == tiling) {
250 *pImageFormatProperties = { { 4096, 4096, 256 }, 1, 1, VK_SAMPLE_COUNT_1_BIT, 4294967296 };
252 // We hard-code support for all sample counts except 64 bits.
253 *pImageFormatProperties = { { 4096, 4096, 256 }, 12, 256, 0x7F & ~VK_SAMPLE_COUNT_64_BIT, 4294967296 };
258 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties(
259 VkPhysicalDevice physicalDevice,
260 VkPhysicalDeviceProperties* pProperties)
262 // TODO: Just hard-coding some values for now
263 pProperties->apiVersion = VK_API_VERSION_1_0;
264 pProperties->driverVersion = 1;
265 pProperties->vendorID = 0xba5eba11;
266 pProperties->deviceID = 0xf005ba11;
267 pProperties->deviceType = VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU;
268 //std::string devName = "Vulkan Mock Device";
269 strcpy(pProperties->deviceName, "Vulkan Mock Device");
270 pProperties->pipelineCacheUUID[0] = 18;
271 pProperties->limits = SetLimits(&pProperties->limits);
272 pProperties->sparseProperties = { VK_TRUE, VK_TRUE, VK_TRUE, VK_TRUE, VK_TRUE };
275 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties(
276 VkPhysicalDevice physicalDevice,
277 uint32_t* pQueueFamilyPropertyCount,
278 VkQueueFamilyProperties* pQueueFamilyProperties)
280 if (!pQueueFamilyProperties) {
281 *pQueueFamilyPropertyCount = 1;
283 if (*pQueueFamilyPropertyCount) {
284 pQueueFamilyProperties[0].queueFlags = VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | VK_QUEUE_TRANSFER_BIT | VK_QUEUE_SPARSE_BINDING_BIT;
285 pQueueFamilyProperties[0].queueCount = 1;
286 pQueueFamilyProperties[0].timestampValidBits = 0;
287 pQueueFamilyProperties[0].minImageTransferGranularity = {1,1,1};
292 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties(
293 VkPhysicalDevice physicalDevice,
294 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
296 pMemoryProperties->memoryTypeCount = 2;
297 pMemoryProperties->memoryTypes[0].propertyFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
298 pMemoryProperties->memoryTypes[0].heapIndex = 0;
299 pMemoryProperties->memoryTypes[1].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;
300 pMemoryProperties->memoryTypes[1].heapIndex = 1;
301 pMemoryProperties->memoryHeapCount = 2;
302 pMemoryProperties->memoryHeaps[0].flags = 0;
303 pMemoryProperties->memoryHeaps[0].size = 8000000000;
304 pMemoryProperties->memoryHeaps[1].flags = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT;
305 pMemoryProperties->memoryHeaps[1].size = 8000000000;
308 static VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetInstanceProcAddr(
313 if (!negotiate_loader_icd_interface_called) {
314 loader_interface_version = 0;
316 const auto &item = name_to_funcptr_map.find(pName);
317 if (item != name_to_funcptr_map.end()) {
318 return reinterpret_cast<PFN_vkVoidFunction>(item->second);
320 // Mock should intercept all functions so if we get here just return null
324 static VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(
329 return GetInstanceProcAddr(nullptr, pName);
332 static VKAPI_ATTR VkResult VKAPI_CALL CreateDevice(
333 VkPhysicalDevice physicalDevice,
334 const VkDeviceCreateInfo* pCreateInfo,
335 const VkAllocationCallbacks* pAllocator,
339 *pDevice = (VkDevice)CreateDispObjHandle();
340 // TODO: If emulating specific device caps, will need to add intelligence here
344 static VKAPI_ATTR void VKAPI_CALL DestroyDevice(
346 const VkAllocationCallbacks* pAllocator)
349 unique_lock_t lock(global_lock);
350 // First destroy sub-device objects
352 for (auto dev_queue_map_pair : queue_map) {
353 for (auto queue_family_map_pair : queue_map[dev_queue_map_pair.first]) {
354 for (auto index_queue_pair : queue_map[dev_queue_map_pair.first][queue_family_map_pair.first]) {
355 DestroyDispObjHandle((void*)index_queue_pair.second);
360 // Now destroy device
361 DestroyDispObjHandle((void*)device);
362 // TODO: If emulating specific device caps, will need to add intelligence here
365 static VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceExtensionProperties(
366 const char* pLayerName,
367 uint32_t* pPropertyCount,
368 VkExtensionProperties* pProperties)
371 // If requesting number of extensions, return that
374 *pPropertyCount = (uint32_t)instance_extension_map.size();
377 for (const auto &name_ver_pair : instance_extension_map) {
378 if (i == *pPropertyCount) {
381 std::strncpy(pProperties[i].extensionName, name_ver_pair.first.c_str(), sizeof(pProperties[i].extensionName));
382 pProperties[i].extensionName[sizeof(pProperties[i].extensionName) - 1] = 0;
383 pProperties[i].specVersion = name_ver_pair.second;
386 if (i != instance_extension_map.size()) {
387 return VK_INCOMPLETE;
391 // If requesting extension properties, fill in data struct for number of extensions
395 static VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceExtensionProperties(
396 VkPhysicalDevice physicalDevice,
397 const char* pLayerName,
398 uint32_t* pPropertyCount,
399 VkExtensionProperties* pProperties)
402 // If requesting number of extensions, return that
405 *pPropertyCount = (uint32_t)device_extension_map.size();
408 for (const auto &name_ver_pair : device_extension_map) {
409 if (i == *pPropertyCount) {
412 std::strncpy(pProperties[i].extensionName, name_ver_pair.first.c_str(), sizeof(pProperties[i].extensionName));
413 pProperties[i].extensionName[sizeof(pProperties[i].extensionName) - 1] = 0;
414 pProperties[i].specVersion = name_ver_pair.second;
417 if (i != device_extension_map.size()) {
418 return VK_INCOMPLETE;
422 // If requesting extension properties, fill in data struct for number of extensions
426 static VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceLayerProperties(
427 uint32_t* pPropertyCount,
428 VkLayerProperties* pProperties)
434 static VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceLayerProperties(
435 VkPhysicalDevice physicalDevice,
436 uint32_t* pPropertyCount,
437 VkLayerProperties* pProperties)
443 static VKAPI_ATTR void VKAPI_CALL GetDeviceQueue(
445 uint32_t queueFamilyIndex,
449 unique_lock_t lock(global_lock);
450 auto queue = queue_map[device][queueFamilyIndex][queueIndex];
454 *pQueue = queue_map[device][queueFamilyIndex][queueIndex] = (VkQueue)CreateDispObjHandle();
456 // TODO: If emulating specific device caps, will need to add intelligence here
460 static VKAPI_ATTR VkResult VKAPI_CALL QueueSubmit(
462 uint32_t submitCount,
463 const VkSubmitInfo* pSubmits,
466 //Not a CREATE or DESTROY function
470 static VKAPI_ATTR VkResult VKAPI_CALL QueueWaitIdle(
473 //Not a CREATE or DESTROY function
477 static VKAPI_ATTR VkResult VKAPI_CALL DeviceWaitIdle(
480 //Not a CREATE or DESTROY function
484 static VKAPI_ATTR VkResult VKAPI_CALL AllocateMemory(
486 const VkMemoryAllocateInfo* pAllocateInfo,
487 const VkAllocationCallbacks* pAllocator,
488 VkDeviceMemory* pMemory)
490 unique_lock_t lock(global_lock);
491 *pMemory = (VkDeviceMemory)global_unique_handle++;
495 static VKAPI_ATTR void VKAPI_CALL FreeMemory(
497 VkDeviceMemory memory,
498 const VkAllocationCallbacks* pAllocator)
503 static VKAPI_ATTR VkResult VKAPI_CALL MapMemory(
505 VkDeviceMemory memory,
508 VkMemoryMapFlags flags,
511 unique_lock_t lock(global_lock);
512 // TODO: Just hard-coding 64k whole size for now
513 if (VK_WHOLE_SIZE == size)
515 void* map_addr = malloc((size_t)size);
516 mapped_memory_map[memory].push_back(map_addr);
521 static VKAPI_ATTR void VKAPI_CALL UnmapMemory(
523 VkDeviceMemory memory)
525 unique_lock_t lock(global_lock);
526 for (auto map_addr : mapped_memory_map[memory]) {
529 mapped_memory_map.erase(memory);
532 static VKAPI_ATTR VkResult VKAPI_CALL FlushMappedMemoryRanges(
534 uint32_t memoryRangeCount,
535 const VkMappedMemoryRange* pMemoryRanges)
537 //Not a CREATE or DESTROY function
541 static VKAPI_ATTR VkResult VKAPI_CALL InvalidateMappedMemoryRanges(
543 uint32_t memoryRangeCount,
544 const VkMappedMemoryRange* pMemoryRanges)
546 //Not a CREATE or DESTROY function
550 static VKAPI_ATTR void VKAPI_CALL GetDeviceMemoryCommitment(
552 VkDeviceMemory memory,
553 VkDeviceSize* pCommittedMemoryInBytes)
555 //Not a CREATE or DESTROY function
558 static VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory(
561 VkDeviceMemory memory,
562 VkDeviceSize memoryOffset)
564 //Not a CREATE or DESTROY function
568 static VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory(
571 VkDeviceMemory memory,
572 VkDeviceSize memoryOffset)
574 //Not a CREATE or DESTROY function
578 static VKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements(
581 VkMemoryRequirements* pMemoryRequirements)
583 // TODO: Just hard-coding reqs for now
584 pMemoryRequirements->size = 4096;
585 pMemoryRequirements->alignment = 1;
586 pMemoryRequirements->memoryTypeBits = 0xFFFF;
587 // Return a better size based on the buffer size from the create info.
588 auto d_iter = buffer_map.find(device);
589 if (d_iter != buffer_map.end()) {
590 auto iter = d_iter->second.find(buffer);
591 if (iter != d_iter->second.end()) {
592 pMemoryRequirements->size = ((iter->second.size + 4095) / 4096) * 4096;
597 static VKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements(
600 VkMemoryRequirements* pMemoryRequirements)
602 // TODO: Just hard-coding reqs for now
603 pMemoryRequirements->size = 4096;
604 pMemoryRequirements->alignment = 1;
606 // Here we hard-code that the memory type at index 3 doesn't support this image.
607 pMemoryRequirements->memoryTypeBits = 0xFFFF & ~(0x1 << 3);
610 static VKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements(
613 uint32_t* pSparseMemoryRequirementCount,
614 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
616 //Not a CREATE or DESTROY function
619 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties(
620 VkPhysicalDevice physicalDevice,
623 VkSampleCountFlagBits samples,
624 VkImageUsageFlags usage,
625 VkImageTiling tiling,
626 uint32_t* pPropertyCount,
627 VkSparseImageFormatProperties* pProperties)
629 //Not a CREATE or DESTROY function
632 static VKAPI_ATTR VkResult VKAPI_CALL QueueBindSparse(
634 uint32_t bindInfoCount,
635 const VkBindSparseInfo* pBindInfo,
638 //Not a CREATE or DESTROY function
642 static VKAPI_ATTR VkResult VKAPI_CALL CreateFence(
644 const VkFenceCreateInfo* pCreateInfo,
645 const VkAllocationCallbacks* pAllocator,
648 unique_lock_t lock(global_lock);
649 *pFence = (VkFence)global_unique_handle++;
653 static VKAPI_ATTR void VKAPI_CALL DestroyFence(
656 const VkAllocationCallbacks* pAllocator)
661 static VKAPI_ATTR VkResult VKAPI_CALL ResetFences(
664 const VkFence* pFences)
666 //Not a CREATE or DESTROY function
670 static VKAPI_ATTR VkResult VKAPI_CALL GetFenceStatus(
674 //Not a CREATE or DESTROY function
678 static VKAPI_ATTR VkResult VKAPI_CALL WaitForFences(
681 const VkFence* pFences,
685 //Not a CREATE or DESTROY function
689 static VKAPI_ATTR VkResult VKAPI_CALL CreateSemaphore(
691 const VkSemaphoreCreateInfo* pCreateInfo,
692 const VkAllocationCallbacks* pAllocator,
693 VkSemaphore* pSemaphore)
695 unique_lock_t lock(global_lock);
696 *pSemaphore = (VkSemaphore)global_unique_handle++;
700 static VKAPI_ATTR void VKAPI_CALL DestroySemaphore(
702 VkSemaphore semaphore,
703 const VkAllocationCallbacks* pAllocator)
708 static VKAPI_ATTR VkResult VKAPI_CALL CreateEvent(
710 const VkEventCreateInfo* pCreateInfo,
711 const VkAllocationCallbacks* pAllocator,
714 unique_lock_t lock(global_lock);
715 *pEvent = (VkEvent)global_unique_handle++;
719 static VKAPI_ATTR void VKAPI_CALL DestroyEvent(
722 const VkAllocationCallbacks* pAllocator)
727 static VKAPI_ATTR VkResult VKAPI_CALL GetEventStatus(
731 //Not a CREATE or DESTROY function
735 static VKAPI_ATTR VkResult VKAPI_CALL SetEvent(
739 //Not a CREATE or DESTROY function
743 static VKAPI_ATTR VkResult VKAPI_CALL ResetEvent(
747 //Not a CREATE or DESTROY function
751 static VKAPI_ATTR VkResult VKAPI_CALL CreateQueryPool(
753 const VkQueryPoolCreateInfo* pCreateInfo,
754 const VkAllocationCallbacks* pAllocator,
755 VkQueryPool* pQueryPool)
757 unique_lock_t lock(global_lock);
758 *pQueryPool = (VkQueryPool)global_unique_handle++;
762 static VKAPI_ATTR void VKAPI_CALL DestroyQueryPool(
764 VkQueryPool queryPool,
765 const VkAllocationCallbacks* pAllocator)
770 static VKAPI_ATTR VkResult VKAPI_CALL GetQueryPoolResults(
772 VkQueryPool queryPool,
778 VkQueryResultFlags flags)
780 //Not a CREATE or DESTROY function
784 static VKAPI_ATTR VkResult VKAPI_CALL CreateBuffer(
786 const VkBufferCreateInfo* pCreateInfo,
787 const VkAllocationCallbacks* pAllocator,
790 unique_lock_t lock(global_lock);
791 *pBuffer = (VkBuffer)global_unique_handle++;
792 buffer_map[device][*pBuffer] = *pCreateInfo;
796 static VKAPI_ATTR void VKAPI_CALL DestroyBuffer(
799 const VkAllocationCallbacks* pAllocator)
801 unique_lock_t lock(global_lock);
802 buffer_map[device].erase(buffer);
805 static VKAPI_ATTR VkResult VKAPI_CALL CreateBufferView(
807 const VkBufferViewCreateInfo* pCreateInfo,
808 const VkAllocationCallbacks* pAllocator,
811 unique_lock_t lock(global_lock);
812 *pView = (VkBufferView)global_unique_handle++;
816 static VKAPI_ATTR void VKAPI_CALL DestroyBufferView(
818 VkBufferView bufferView,
819 const VkAllocationCallbacks* pAllocator)
824 static VKAPI_ATTR VkResult VKAPI_CALL CreateImage(
826 const VkImageCreateInfo* pCreateInfo,
827 const VkAllocationCallbacks* pAllocator,
830 unique_lock_t lock(global_lock);
831 *pImage = (VkImage)global_unique_handle++;
835 static VKAPI_ATTR void VKAPI_CALL DestroyImage(
838 const VkAllocationCallbacks* pAllocator)
843 static VKAPI_ATTR void VKAPI_CALL GetImageSubresourceLayout(
846 const VkImageSubresource* pSubresource,
847 VkSubresourceLayout* pLayout)
849 // Need safe values. Callers are computing memory offsets from pLayout, with no return code to flag failure.
850 *pLayout = VkSubresourceLayout(); // Default constructor zero values.
853 static VKAPI_ATTR VkResult VKAPI_CALL CreateImageView(
855 const VkImageViewCreateInfo* pCreateInfo,
856 const VkAllocationCallbacks* pAllocator,
859 unique_lock_t lock(global_lock);
860 *pView = (VkImageView)global_unique_handle++;
864 static VKAPI_ATTR void VKAPI_CALL DestroyImageView(
866 VkImageView imageView,
867 const VkAllocationCallbacks* pAllocator)
872 static VKAPI_ATTR VkResult VKAPI_CALL CreateShaderModule(
874 const VkShaderModuleCreateInfo* pCreateInfo,
875 const VkAllocationCallbacks* pAllocator,
876 VkShaderModule* pShaderModule)
878 unique_lock_t lock(global_lock);
879 *pShaderModule = (VkShaderModule)global_unique_handle++;
883 static VKAPI_ATTR void VKAPI_CALL DestroyShaderModule(
885 VkShaderModule shaderModule,
886 const VkAllocationCallbacks* pAllocator)
891 static VKAPI_ATTR VkResult VKAPI_CALL CreatePipelineCache(
893 const VkPipelineCacheCreateInfo* pCreateInfo,
894 const VkAllocationCallbacks* pAllocator,
895 VkPipelineCache* pPipelineCache)
897 unique_lock_t lock(global_lock);
898 *pPipelineCache = (VkPipelineCache)global_unique_handle++;
902 static VKAPI_ATTR void VKAPI_CALL DestroyPipelineCache(
904 VkPipelineCache pipelineCache,
905 const VkAllocationCallbacks* pAllocator)
910 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineCacheData(
912 VkPipelineCache pipelineCache,
916 //Not a CREATE or DESTROY function
920 static VKAPI_ATTR VkResult VKAPI_CALL MergePipelineCaches(
922 VkPipelineCache dstCache,
923 uint32_t srcCacheCount,
924 const VkPipelineCache* pSrcCaches)
926 //Not a CREATE or DESTROY function
930 static VKAPI_ATTR VkResult VKAPI_CALL CreateGraphicsPipelines(
932 VkPipelineCache pipelineCache,
933 uint32_t createInfoCount,
934 const VkGraphicsPipelineCreateInfo* pCreateInfos,
935 const VkAllocationCallbacks* pAllocator,
936 VkPipeline* pPipelines)
938 unique_lock_t lock(global_lock);
939 for (uint32_t i = 0; i < createInfoCount; ++i) {
940 pPipelines[i] = (VkPipeline)global_unique_handle++;
945 static VKAPI_ATTR VkResult VKAPI_CALL CreateComputePipelines(
947 VkPipelineCache pipelineCache,
948 uint32_t createInfoCount,
949 const VkComputePipelineCreateInfo* pCreateInfos,
950 const VkAllocationCallbacks* pAllocator,
951 VkPipeline* pPipelines)
953 unique_lock_t lock(global_lock);
954 for (uint32_t i = 0; i < createInfoCount; ++i) {
955 pPipelines[i] = (VkPipeline)global_unique_handle++;
960 static VKAPI_ATTR void VKAPI_CALL DestroyPipeline(
963 const VkAllocationCallbacks* pAllocator)
968 static VKAPI_ATTR VkResult VKAPI_CALL CreatePipelineLayout(
970 const VkPipelineLayoutCreateInfo* pCreateInfo,
971 const VkAllocationCallbacks* pAllocator,
972 VkPipelineLayout* pPipelineLayout)
974 unique_lock_t lock(global_lock);
975 *pPipelineLayout = (VkPipelineLayout)global_unique_handle++;
979 static VKAPI_ATTR void VKAPI_CALL DestroyPipelineLayout(
981 VkPipelineLayout pipelineLayout,
982 const VkAllocationCallbacks* pAllocator)
987 static VKAPI_ATTR VkResult VKAPI_CALL CreateSampler(
989 const VkSamplerCreateInfo* pCreateInfo,
990 const VkAllocationCallbacks* pAllocator,
993 unique_lock_t lock(global_lock);
994 *pSampler = (VkSampler)global_unique_handle++;
998 static VKAPI_ATTR void VKAPI_CALL DestroySampler(
1001 const VkAllocationCallbacks* pAllocator)
1006 static VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorSetLayout(
1008 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
1009 const VkAllocationCallbacks* pAllocator,
1010 VkDescriptorSetLayout* pSetLayout)
1012 unique_lock_t lock(global_lock);
1013 *pSetLayout = (VkDescriptorSetLayout)global_unique_handle++;
1017 static VKAPI_ATTR void VKAPI_CALL DestroyDescriptorSetLayout(
1019 VkDescriptorSetLayout descriptorSetLayout,
1020 const VkAllocationCallbacks* pAllocator)
1025 static VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorPool(
1027 const VkDescriptorPoolCreateInfo* pCreateInfo,
1028 const VkAllocationCallbacks* pAllocator,
1029 VkDescriptorPool* pDescriptorPool)
1031 unique_lock_t lock(global_lock);
1032 *pDescriptorPool = (VkDescriptorPool)global_unique_handle++;
1036 static VKAPI_ATTR void VKAPI_CALL DestroyDescriptorPool(
1038 VkDescriptorPool descriptorPool,
1039 const VkAllocationCallbacks* pAllocator)
1044 static VKAPI_ATTR VkResult VKAPI_CALL ResetDescriptorPool(
1046 VkDescriptorPool descriptorPool,
1047 VkDescriptorPoolResetFlags flags)
1049 //Not a CREATE or DESTROY function
1053 static VKAPI_ATTR VkResult VKAPI_CALL AllocateDescriptorSets(
1055 const VkDescriptorSetAllocateInfo* pAllocateInfo,
1056 VkDescriptorSet* pDescriptorSets)
1058 unique_lock_t lock(global_lock);
1059 for (uint32_t i = 0; i < pAllocateInfo->descriptorSetCount; ++i) {
1060 pDescriptorSets[i] = (VkDescriptorSet)global_unique_handle++;
1065 static VKAPI_ATTR VkResult VKAPI_CALL FreeDescriptorSets(
1067 VkDescriptorPool descriptorPool,
1068 uint32_t descriptorSetCount,
1069 const VkDescriptorSet* pDescriptorSets)
1075 static VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSets(
1077 uint32_t descriptorWriteCount,
1078 const VkWriteDescriptorSet* pDescriptorWrites,
1079 uint32_t descriptorCopyCount,
1080 const VkCopyDescriptorSet* pDescriptorCopies)
1082 //Not a CREATE or DESTROY function
1085 static VKAPI_ATTR VkResult VKAPI_CALL CreateFramebuffer(
1087 const VkFramebufferCreateInfo* pCreateInfo,
1088 const VkAllocationCallbacks* pAllocator,
1089 VkFramebuffer* pFramebuffer)
1091 unique_lock_t lock(global_lock);
1092 *pFramebuffer = (VkFramebuffer)global_unique_handle++;
1096 static VKAPI_ATTR void VKAPI_CALL DestroyFramebuffer(
1098 VkFramebuffer framebuffer,
1099 const VkAllocationCallbacks* pAllocator)
1104 static VKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass(
1106 const VkRenderPassCreateInfo* pCreateInfo,
1107 const VkAllocationCallbacks* pAllocator,
1108 VkRenderPass* pRenderPass)
1110 unique_lock_t lock(global_lock);
1111 *pRenderPass = (VkRenderPass)global_unique_handle++;
1115 static VKAPI_ATTR void VKAPI_CALL DestroyRenderPass(
1117 VkRenderPass renderPass,
1118 const VkAllocationCallbacks* pAllocator)
1123 static VKAPI_ATTR void VKAPI_CALL GetRenderAreaGranularity(
1125 VkRenderPass renderPass,
1126 VkExtent2D* pGranularity)
1128 //Not a CREATE or DESTROY function
1131 static VKAPI_ATTR VkResult VKAPI_CALL CreateCommandPool(
1133 const VkCommandPoolCreateInfo* pCreateInfo,
1134 const VkAllocationCallbacks* pAllocator,
1135 VkCommandPool* pCommandPool)
1137 unique_lock_t lock(global_lock);
1138 *pCommandPool = (VkCommandPool)global_unique_handle++;
1142 static VKAPI_ATTR void VKAPI_CALL DestroyCommandPool(
1144 VkCommandPool commandPool,
1145 const VkAllocationCallbacks* pAllocator)
1150 static VKAPI_ATTR VkResult VKAPI_CALL ResetCommandPool(
1152 VkCommandPool commandPool,
1153 VkCommandPoolResetFlags flags)
1155 //Not a CREATE or DESTROY function
1159 static VKAPI_ATTR VkResult VKAPI_CALL AllocateCommandBuffers(
1161 const VkCommandBufferAllocateInfo* pAllocateInfo,
1162 VkCommandBuffer* pCommandBuffers)
1164 unique_lock_t lock(global_lock);
1165 for (uint32_t i = 0; i < pAllocateInfo->commandBufferCount; ++i) {
1166 pCommandBuffers[i] = (VkCommandBuffer)CreateDispObjHandle();
1171 static VKAPI_ATTR void VKAPI_CALL FreeCommandBuffers(
1173 VkCommandPool commandPool,
1174 uint32_t commandBufferCount,
1175 const VkCommandBuffer* pCommandBuffers)
1180 static VKAPI_ATTR VkResult VKAPI_CALL BeginCommandBuffer(
1181 VkCommandBuffer commandBuffer,
1182 const VkCommandBufferBeginInfo* pBeginInfo)
1184 //Not a CREATE or DESTROY function
1188 static VKAPI_ATTR VkResult VKAPI_CALL EndCommandBuffer(
1189 VkCommandBuffer commandBuffer)
1191 //Not a CREATE or DESTROY function
1195 static VKAPI_ATTR VkResult VKAPI_CALL ResetCommandBuffer(
1196 VkCommandBuffer commandBuffer,
1197 VkCommandBufferResetFlags flags)
1199 //Not a CREATE or DESTROY function
1203 static VKAPI_ATTR void VKAPI_CALL CmdBindPipeline(
1204 VkCommandBuffer commandBuffer,
1205 VkPipelineBindPoint pipelineBindPoint,
1206 VkPipeline pipeline)
1208 //Not a CREATE or DESTROY function
1211 static VKAPI_ATTR void VKAPI_CALL CmdSetViewport(
1212 VkCommandBuffer commandBuffer,
1213 uint32_t firstViewport,
1214 uint32_t viewportCount,
1215 const VkViewport* pViewports)
1217 //Not a CREATE or DESTROY function
1220 static VKAPI_ATTR void VKAPI_CALL CmdSetScissor(
1221 VkCommandBuffer commandBuffer,
1222 uint32_t firstScissor,
1223 uint32_t scissorCount,
1224 const VkRect2D* pScissors)
1226 //Not a CREATE or DESTROY function
1229 static VKAPI_ATTR void VKAPI_CALL CmdSetLineWidth(
1230 VkCommandBuffer commandBuffer,
1233 //Not a CREATE or DESTROY function
1236 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthBias(
1237 VkCommandBuffer commandBuffer,
1238 float depthBiasConstantFactor,
1239 float depthBiasClamp,
1240 float depthBiasSlopeFactor)
1242 //Not a CREATE or DESTROY function
1245 static VKAPI_ATTR void VKAPI_CALL CmdSetBlendConstants(
1246 VkCommandBuffer commandBuffer,
1247 const float blendConstants[4])
1249 //Not a CREATE or DESTROY function
1252 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthBounds(
1253 VkCommandBuffer commandBuffer,
1254 float minDepthBounds,
1255 float maxDepthBounds)
1257 //Not a CREATE or DESTROY function
1260 static VKAPI_ATTR void VKAPI_CALL CmdSetStencilCompareMask(
1261 VkCommandBuffer commandBuffer,
1262 VkStencilFaceFlags faceMask,
1263 uint32_t compareMask)
1265 //Not a CREATE or DESTROY function
1268 static VKAPI_ATTR void VKAPI_CALL CmdSetStencilWriteMask(
1269 VkCommandBuffer commandBuffer,
1270 VkStencilFaceFlags faceMask,
1273 //Not a CREATE or DESTROY function
1276 static VKAPI_ATTR void VKAPI_CALL CmdSetStencilReference(
1277 VkCommandBuffer commandBuffer,
1278 VkStencilFaceFlags faceMask,
1281 //Not a CREATE or DESTROY function
1284 static VKAPI_ATTR void VKAPI_CALL CmdBindDescriptorSets(
1285 VkCommandBuffer commandBuffer,
1286 VkPipelineBindPoint pipelineBindPoint,
1287 VkPipelineLayout layout,
1289 uint32_t descriptorSetCount,
1290 const VkDescriptorSet* pDescriptorSets,
1291 uint32_t dynamicOffsetCount,
1292 const uint32_t* pDynamicOffsets)
1294 //Not a CREATE or DESTROY function
1297 static VKAPI_ATTR void VKAPI_CALL CmdBindIndexBuffer(
1298 VkCommandBuffer commandBuffer,
1300 VkDeviceSize offset,
1301 VkIndexType indexType)
1303 //Not a CREATE or DESTROY function
1306 static VKAPI_ATTR void VKAPI_CALL CmdBindVertexBuffers(
1307 VkCommandBuffer commandBuffer,
1308 uint32_t firstBinding,
1309 uint32_t bindingCount,
1310 const VkBuffer* pBuffers,
1311 const VkDeviceSize* pOffsets)
1313 //Not a CREATE or DESTROY function
1316 static VKAPI_ATTR void VKAPI_CALL CmdDraw(
1317 VkCommandBuffer commandBuffer,
1318 uint32_t vertexCount,
1319 uint32_t instanceCount,
1320 uint32_t firstVertex,
1321 uint32_t firstInstance)
1323 //Not a CREATE or DESTROY function
1326 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndexed(
1327 VkCommandBuffer commandBuffer,
1328 uint32_t indexCount,
1329 uint32_t instanceCount,
1330 uint32_t firstIndex,
1331 int32_t vertexOffset,
1332 uint32_t firstInstance)
1334 //Not a CREATE or DESTROY function
1337 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirect(
1338 VkCommandBuffer commandBuffer,
1340 VkDeviceSize offset,
1344 //Not a CREATE or DESTROY function
1347 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirect(
1348 VkCommandBuffer commandBuffer,
1350 VkDeviceSize offset,
1354 //Not a CREATE or DESTROY function
1357 static VKAPI_ATTR void VKAPI_CALL CmdDispatch(
1358 VkCommandBuffer commandBuffer,
1359 uint32_t groupCountX,
1360 uint32_t groupCountY,
1361 uint32_t groupCountZ)
1363 //Not a CREATE or DESTROY function
1366 static VKAPI_ATTR void VKAPI_CALL CmdDispatchIndirect(
1367 VkCommandBuffer commandBuffer,
1369 VkDeviceSize offset)
1371 //Not a CREATE or DESTROY function
1374 static VKAPI_ATTR void VKAPI_CALL CmdCopyBuffer(
1375 VkCommandBuffer commandBuffer,
1378 uint32_t regionCount,
1379 const VkBufferCopy* pRegions)
1381 //Not a CREATE or DESTROY function
1384 static VKAPI_ATTR void VKAPI_CALL CmdCopyImage(
1385 VkCommandBuffer commandBuffer,
1387 VkImageLayout srcImageLayout,
1389 VkImageLayout dstImageLayout,
1390 uint32_t regionCount,
1391 const VkImageCopy* pRegions)
1393 //Not a CREATE or DESTROY function
1396 static VKAPI_ATTR void VKAPI_CALL CmdBlitImage(
1397 VkCommandBuffer commandBuffer,
1399 VkImageLayout srcImageLayout,
1401 VkImageLayout dstImageLayout,
1402 uint32_t regionCount,
1403 const VkImageBlit* pRegions,
1406 //Not a CREATE or DESTROY function
1409 static VKAPI_ATTR void VKAPI_CALL CmdCopyBufferToImage(
1410 VkCommandBuffer commandBuffer,
1413 VkImageLayout dstImageLayout,
1414 uint32_t regionCount,
1415 const VkBufferImageCopy* pRegions)
1417 //Not a CREATE or DESTROY function
1420 static VKAPI_ATTR void VKAPI_CALL CmdCopyImageToBuffer(
1421 VkCommandBuffer commandBuffer,
1423 VkImageLayout srcImageLayout,
1425 uint32_t regionCount,
1426 const VkBufferImageCopy* pRegions)
1428 //Not a CREATE or DESTROY function
1431 static VKAPI_ATTR void VKAPI_CALL CmdUpdateBuffer(
1432 VkCommandBuffer commandBuffer,
1434 VkDeviceSize dstOffset,
1435 VkDeviceSize dataSize,
1438 //Not a CREATE or DESTROY function
1441 static VKAPI_ATTR void VKAPI_CALL CmdFillBuffer(
1442 VkCommandBuffer commandBuffer,
1444 VkDeviceSize dstOffset,
1448 //Not a CREATE or DESTROY function
1451 static VKAPI_ATTR void VKAPI_CALL CmdClearColorImage(
1452 VkCommandBuffer commandBuffer,
1454 VkImageLayout imageLayout,
1455 const VkClearColorValue* pColor,
1456 uint32_t rangeCount,
1457 const VkImageSubresourceRange* pRanges)
1459 //Not a CREATE or DESTROY function
1462 static VKAPI_ATTR void VKAPI_CALL CmdClearDepthStencilImage(
1463 VkCommandBuffer commandBuffer,
1465 VkImageLayout imageLayout,
1466 const VkClearDepthStencilValue* pDepthStencil,
1467 uint32_t rangeCount,
1468 const VkImageSubresourceRange* pRanges)
1470 //Not a CREATE or DESTROY function
1473 static VKAPI_ATTR void VKAPI_CALL CmdClearAttachments(
1474 VkCommandBuffer commandBuffer,
1475 uint32_t attachmentCount,
1476 const VkClearAttachment* pAttachments,
1478 const VkClearRect* pRects)
1480 //Not a CREATE or DESTROY function
1483 static VKAPI_ATTR void VKAPI_CALL CmdResolveImage(
1484 VkCommandBuffer commandBuffer,
1486 VkImageLayout srcImageLayout,
1488 VkImageLayout dstImageLayout,
1489 uint32_t regionCount,
1490 const VkImageResolve* pRegions)
1492 //Not a CREATE or DESTROY function
1495 static VKAPI_ATTR void VKAPI_CALL CmdSetEvent(
1496 VkCommandBuffer commandBuffer,
1498 VkPipelineStageFlags stageMask)
1500 //Not a CREATE or DESTROY function
1503 static VKAPI_ATTR void VKAPI_CALL CmdResetEvent(
1504 VkCommandBuffer commandBuffer,
1506 VkPipelineStageFlags stageMask)
1508 //Not a CREATE or DESTROY function
1511 static VKAPI_ATTR void VKAPI_CALL CmdWaitEvents(
1512 VkCommandBuffer commandBuffer,
1513 uint32_t eventCount,
1514 const VkEvent* pEvents,
1515 VkPipelineStageFlags srcStageMask,
1516 VkPipelineStageFlags dstStageMask,
1517 uint32_t memoryBarrierCount,
1518 const VkMemoryBarrier* pMemoryBarriers,
1519 uint32_t bufferMemoryBarrierCount,
1520 const VkBufferMemoryBarrier* pBufferMemoryBarriers,
1521 uint32_t imageMemoryBarrierCount,
1522 const VkImageMemoryBarrier* pImageMemoryBarriers)
1524 //Not a CREATE or DESTROY function
1527 static VKAPI_ATTR void VKAPI_CALL CmdPipelineBarrier(
1528 VkCommandBuffer commandBuffer,
1529 VkPipelineStageFlags srcStageMask,
1530 VkPipelineStageFlags dstStageMask,
1531 VkDependencyFlags dependencyFlags,
1532 uint32_t memoryBarrierCount,
1533 const VkMemoryBarrier* pMemoryBarriers,
1534 uint32_t bufferMemoryBarrierCount,
1535 const VkBufferMemoryBarrier* pBufferMemoryBarriers,
1536 uint32_t imageMemoryBarrierCount,
1537 const VkImageMemoryBarrier* pImageMemoryBarriers)
1539 //Not a CREATE or DESTROY function
1542 static VKAPI_ATTR void VKAPI_CALL CmdBeginQuery(
1543 VkCommandBuffer commandBuffer,
1544 VkQueryPool queryPool,
1546 VkQueryControlFlags flags)
1548 //Not a CREATE or DESTROY function
1551 static VKAPI_ATTR void VKAPI_CALL CmdEndQuery(
1552 VkCommandBuffer commandBuffer,
1553 VkQueryPool queryPool,
1556 //Not a CREATE or DESTROY function
1559 static VKAPI_ATTR void VKAPI_CALL CmdResetQueryPool(
1560 VkCommandBuffer commandBuffer,
1561 VkQueryPool queryPool,
1562 uint32_t firstQuery,
1563 uint32_t queryCount)
1565 //Not a CREATE or DESTROY function
1568 static VKAPI_ATTR void VKAPI_CALL CmdWriteTimestamp(
1569 VkCommandBuffer commandBuffer,
1570 VkPipelineStageFlagBits pipelineStage,
1571 VkQueryPool queryPool,
1574 //Not a CREATE or DESTROY function
1577 static VKAPI_ATTR void VKAPI_CALL CmdCopyQueryPoolResults(
1578 VkCommandBuffer commandBuffer,
1579 VkQueryPool queryPool,
1580 uint32_t firstQuery,
1581 uint32_t queryCount,
1583 VkDeviceSize dstOffset,
1584 VkDeviceSize stride,
1585 VkQueryResultFlags flags)
1587 //Not a CREATE or DESTROY function
1590 static VKAPI_ATTR void VKAPI_CALL CmdPushConstants(
1591 VkCommandBuffer commandBuffer,
1592 VkPipelineLayout layout,
1593 VkShaderStageFlags stageFlags,
1596 const void* pValues)
1598 //Not a CREATE or DESTROY function
1601 static VKAPI_ATTR void VKAPI_CALL CmdBeginRenderPass(
1602 VkCommandBuffer commandBuffer,
1603 const VkRenderPassBeginInfo* pRenderPassBegin,
1604 VkSubpassContents contents)
1606 //Not a CREATE or DESTROY function
1609 static VKAPI_ATTR void VKAPI_CALL CmdNextSubpass(
1610 VkCommandBuffer commandBuffer,
1611 VkSubpassContents contents)
1613 //Not a CREATE or DESTROY function
1616 static VKAPI_ATTR void VKAPI_CALL CmdEndRenderPass(
1617 VkCommandBuffer commandBuffer)
1619 //Not a CREATE or DESTROY function
1622 static VKAPI_ATTR void VKAPI_CALL CmdExecuteCommands(
1623 VkCommandBuffer commandBuffer,
1624 uint32_t commandBufferCount,
1625 const VkCommandBuffer* pCommandBuffers)
1627 //Not a CREATE or DESTROY function
1631 static VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceVersion(
1632 uint32_t* pApiVersion)
1634 //Not a CREATE or DESTROY function
1638 static VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory2(
1640 uint32_t bindInfoCount,
1641 const VkBindBufferMemoryInfo* pBindInfos)
1643 //Not a CREATE or DESTROY function
1647 static VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory2(
1649 uint32_t bindInfoCount,
1650 const VkBindImageMemoryInfo* pBindInfos)
1652 //Not a CREATE or DESTROY function
1656 static VKAPI_ATTR void VKAPI_CALL GetDeviceGroupPeerMemoryFeatures(
1659 uint32_t localDeviceIndex,
1660 uint32_t remoteDeviceIndex,
1661 VkPeerMemoryFeatureFlags* pPeerMemoryFeatures)
1663 //Not a CREATE or DESTROY function
1666 static VKAPI_ATTR void VKAPI_CALL CmdSetDeviceMask(
1667 VkCommandBuffer commandBuffer,
1668 uint32_t deviceMask)
1670 //Not a CREATE or DESTROY function
1673 static VKAPI_ATTR void VKAPI_CALL CmdDispatchBase(
1674 VkCommandBuffer commandBuffer,
1675 uint32_t baseGroupX,
1676 uint32_t baseGroupY,
1677 uint32_t baseGroupZ,
1678 uint32_t groupCountX,
1679 uint32_t groupCountY,
1680 uint32_t groupCountZ)
1682 //Not a CREATE or DESTROY function
1685 static VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDeviceGroups(
1686 VkInstance instance,
1687 uint32_t* pPhysicalDeviceGroupCount,
1688 VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties)
1690 //Not a CREATE or DESTROY function
1694 static VKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements2(
1696 const VkImageMemoryRequirementsInfo2* pInfo,
1697 VkMemoryRequirements2* pMemoryRequirements)
1699 GetImageMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
1702 static VKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements2(
1704 const VkBufferMemoryRequirementsInfo2* pInfo,
1705 VkMemoryRequirements2* pMemoryRequirements)
1707 GetBufferMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
1710 static VKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements2(
1712 const VkImageSparseMemoryRequirementsInfo2* pInfo,
1713 uint32_t* pSparseMemoryRequirementCount,
1714 VkSparseImageMemoryRequirements2* pSparseMemoryRequirements)
1716 //Not a CREATE or DESTROY function
1719 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures2(
1720 VkPhysicalDevice physicalDevice,
1721 VkPhysicalDeviceFeatures2* pFeatures)
1723 GetPhysicalDeviceFeatures2KHR(physicalDevice, pFeatures);
1726 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties2(
1727 VkPhysicalDevice physicalDevice,
1728 VkPhysicalDeviceProperties2* pProperties)
1730 GetPhysicalDeviceProperties2KHR(physicalDevice, pProperties);
1733 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties2(
1734 VkPhysicalDevice physicalDevice,
1736 VkFormatProperties2* pFormatProperties)
1738 GetPhysicalDeviceFormatProperties2KHR(physicalDevice, format, pFormatProperties);
1741 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties2(
1742 VkPhysicalDevice physicalDevice,
1743 const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
1744 VkImageFormatProperties2* pImageFormatProperties)
1746 return GetPhysicalDeviceImageFormatProperties2KHR(physicalDevice, pImageFormatInfo, pImageFormatProperties);
1749 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties2(
1750 VkPhysicalDevice physicalDevice,
1751 uint32_t* pQueueFamilyPropertyCount,
1752 VkQueueFamilyProperties2* pQueueFamilyProperties)
1754 GetPhysicalDeviceQueueFamilyProperties2KHR(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
1757 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties2(
1758 VkPhysicalDevice physicalDevice,
1759 VkPhysicalDeviceMemoryProperties2* pMemoryProperties)
1761 GetPhysicalDeviceMemoryProperties2KHR(physicalDevice, pMemoryProperties);
1764 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties2(
1765 VkPhysicalDevice physicalDevice,
1766 const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
1767 uint32_t* pPropertyCount,
1768 VkSparseImageFormatProperties2* pProperties)
1770 //Not a CREATE or DESTROY function
1773 static VKAPI_ATTR void VKAPI_CALL TrimCommandPool(
1775 VkCommandPool commandPool,
1776 VkCommandPoolTrimFlags flags)
1778 //Not a CREATE or DESTROY function
1781 static VKAPI_ATTR void VKAPI_CALL GetDeviceQueue2(
1783 const VkDeviceQueueInfo2* pQueueInfo,
1786 GetDeviceQueue(device, pQueueInfo->queueFamilyIndex, pQueueInfo->queueIndex, pQueue);
1787 // TODO: Add further support for GetDeviceQueue2 features
1790 static VKAPI_ATTR VkResult VKAPI_CALL CreateSamplerYcbcrConversion(
1792 const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
1793 const VkAllocationCallbacks* pAllocator,
1794 VkSamplerYcbcrConversion* pYcbcrConversion)
1796 unique_lock_t lock(global_lock);
1797 *pYcbcrConversion = (VkSamplerYcbcrConversion)global_unique_handle++;
1801 static VKAPI_ATTR void VKAPI_CALL DestroySamplerYcbcrConversion(
1803 VkSamplerYcbcrConversion ycbcrConversion,
1804 const VkAllocationCallbacks* pAllocator)
1809 static VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorUpdateTemplate(
1811 const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
1812 const VkAllocationCallbacks* pAllocator,
1813 VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate)
1815 unique_lock_t lock(global_lock);
1816 *pDescriptorUpdateTemplate = (VkDescriptorUpdateTemplate)global_unique_handle++;
1820 static VKAPI_ATTR void VKAPI_CALL DestroyDescriptorUpdateTemplate(
1822 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
1823 const VkAllocationCallbacks* pAllocator)
1828 static VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSetWithTemplate(
1830 VkDescriptorSet descriptorSet,
1831 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
1834 //Not a CREATE or DESTROY function
1837 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalBufferProperties(
1838 VkPhysicalDevice physicalDevice,
1839 const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
1840 VkExternalBufferProperties* pExternalBufferProperties)
1842 // Hard-code support for all handle types and features
1843 pExternalBufferProperties->externalMemoryProperties.externalMemoryFeatures = 0x7;
1844 pExternalBufferProperties->externalMemoryProperties.exportFromImportedHandleTypes = 0x1FF;
1845 pExternalBufferProperties->externalMemoryProperties.compatibleHandleTypes = 0x1FF;
1848 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalFenceProperties(
1849 VkPhysicalDevice physicalDevice,
1850 const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
1851 VkExternalFenceProperties* pExternalFenceProperties)
1853 // Hard-code support for all handle types and features
1854 pExternalFenceProperties->exportFromImportedHandleTypes = 0xF;
1855 pExternalFenceProperties->compatibleHandleTypes = 0xF;
1856 pExternalFenceProperties->externalFenceFeatures = 0x3;
1859 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalSemaphoreProperties(
1860 VkPhysicalDevice physicalDevice,
1861 const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
1862 VkExternalSemaphoreProperties* pExternalSemaphoreProperties)
1864 // Hard code support for all handle types and features
1865 pExternalSemaphoreProperties->exportFromImportedHandleTypes = 0x1F;
1866 pExternalSemaphoreProperties->compatibleHandleTypes = 0x1F;
1867 pExternalSemaphoreProperties->externalSemaphoreFeatures = 0x3;
1870 static VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutSupport(
1872 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
1873 VkDescriptorSetLayoutSupport* pSupport)
1875 //Not a CREATE or DESTROY function
1879 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCount(
1880 VkCommandBuffer commandBuffer,
1882 VkDeviceSize offset,
1883 VkBuffer countBuffer,
1884 VkDeviceSize countBufferOffset,
1885 uint32_t maxDrawCount,
1888 //Not a CREATE or DESTROY function
1891 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirectCount(
1892 VkCommandBuffer commandBuffer,
1894 VkDeviceSize offset,
1895 VkBuffer countBuffer,
1896 VkDeviceSize countBufferOffset,
1897 uint32_t maxDrawCount,
1900 //Not a CREATE or DESTROY function
1903 static VKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass2(
1905 const VkRenderPassCreateInfo2* pCreateInfo,
1906 const VkAllocationCallbacks* pAllocator,
1907 VkRenderPass* pRenderPass)
1909 unique_lock_t lock(global_lock);
1910 *pRenderPass = (VkRenderPass)global_unique_handle++;
1914 static VKAPI_ATTR void VKAPI_CALL CmdBeginRenderPass2(
1915 VkCommandBuffer commandBuffer,
1916 const VkRenderPassBeginInfo* pRenderPassBegin,
1917 const VkSubpassBeginInfo* pSubpassBeginInfo)
1919 //Not a CREATE or DESTROY function
1922 static VKAPI_ATTR void VKAPI_CALL CmdNextSubpass2(
1923 VkCommandBuffer commandBuffer,
1924 const VkSubpassBeginInfo* pSubpassBeginInfo,
1925 const VkSubpassEndInfo* pSubpassEndInfo)
1927 //Not a CREATE or DESTROY function
1930 static VKAPI_ATTR void VKAPI_CALL CmdEndRenderPass2(
1931 VkCommandBuffer commandBuffer,
1932 const VkSubpassEndInfo* pSubpassEndInfo)
1934 //Not a CREATE or DESTROY function
1937 static VKAPI_ATTR void VKAPI_CALL ResetQueryPool(
1939 VkQueryPool queryPool,
1940 uint32_t firstQuery,
1941 uint32_t queryCount)
1943 //Not a CREATE or DESTROY function
1946 static VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreCounterValue(
1948 VkSemaphore semaphore,
1951 //Not a CREATE or DESTROY function
1955 static VKAPI_ATTR VkResult VKAPI_CALL WaitSemaphores(
1957 const VkSemaphoreWaitInfo* pWaitInfo,
1960 //Not a CREATE or DESTROY function
1964 static VKAPI_ATTR VkResult VKAPI_CALL SignalSemaphore(
1966 const VkSemaphoreSignalInfo* pSignalInfo)
1968 //Not a CREATE or DESTROY function
1972 static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetBufferDeviceAddress(
1974 const VkBufferDeviceAddressInfo* pInfo)
1976 //Not a CREATE or DESTROY function
1980 static VKAPI_ATTR uint64_t VKAPI_CALL GetBufferOpaqueCaptureAddress(
1982 const VkBufferDeviceAddressInfo* pInfo)
1984 //Not a CREATE or DESTROY function
1988 static VKAPI_ATTR uint64_t VKAPI_CALL GetDeviceMemoryOpaqueCaptureAddress(
1990 const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo)
1992 //Not a CREATE or DESTROY function
1997 static VKAPI_ATTR void VKAPI_CALL DestroySurfaceKHR(
1998 VkInstance instance,
1999 VkSurfaceKHR surface,
2000 const VkAllocationCallbacks* pAllocator)
2005 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceSupportKHR(
2006 VkPhysicalDevice physicalDevice,
2007 uint32_t queueFamilyIndex,
2008 VkSurfaceKHR surface,
2009 VkBool32* pSupported)
2011 // Currently say that all surface/queue combos are supported
2012 *pSupported = VK_TRUE;
2016 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilitiesKHR(
2017 VkPhysicalDevice physicalDevice,
2018 VkSurfaceKHR surface,
2019 VkSurfaceCapabilitiesKHR* pSurfaceCapabilities)
2021 // In general just say max supported is available for requested surface
2022 pSurfaceCapabilities->minImageCount = 1;
2023 pSurfaceCapabilities->maxImageCount = 0;
2024 pSurfaceCapabilities->currentExtent.width = 0xFFFFFFFF;
2025 pSurfaceCapabilities->currentExtent.height = 0xFFFFFFFF;
2026 pSurfaceCapabilities->minImageExtent.width = 1;
2027 pSurfaceCapabilities->minImageExtent.height = 1;
2028 pSurfaceCapabilities->maxImageExtent.width = 3840;
2029 pSurfaceCapabilities->maxImageExtent.height = 2160;
2030 pSurfaceCapabilities->maxImageArrayLayers = 128;
2031 pSurfaceCapabilities->supportedTransforms = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR |
2032 VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR |
2033 VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR |
2034 VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR |
2035 VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR |
2036 VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR |
2037 VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR |
2038 VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR |
2039 VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR;
2040 pSurfaceCapabilities->currentTransform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
2041 pSurfaceCapabilities->supportedCompositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR |
2042 VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR |
2043 VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR |
2044 VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR;
2045 pSurfaceCapabilities->supportedUsageFlags = VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
2046 VK_IMAGE_USAGE_TRANSFER_DST_BIT |
2047 VK_IMAGE_USAGE_SAMPLED_BIT |
2048 VK_IMAGE_USAGE_STORAGE_BIT |
2049 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
2050 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
2051 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
2052 VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT;
2056 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceFormatsKHR(
2057 VkPhysicalDevice physicalDevice,
2058 VkSurfaceKHR surface,
2059 uint32_t* pSurfaceFormatCount,
2060 VkSurfaceFormatKHR* pSurfaceFormats)
2062 // Currently always say that RGBA8 & BGRA8 are supported
2063 if (!pSurfaceFormats) {
2064 *pSurfaceFormatCount = 2;
2066 // Intentionally falling through and just filling however many types are requested
2067 switch(*pSurfaceFormatCount) {
2069 pSurfaceFormats[1].format = VK_FORMAT_R8G8B8A8_UNORM;
2070 pSurfaceFormats[1].colorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;
2073 pSurfaceFormats[0].format = VK_FORMAT_B8G8R8A8_UNORM;
2074 pSurfaceFormats[0].colorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;
2081 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModesKHR(
2082 VkPhysicalDevice physicalDevice,
2083 VkSurfaceKHR surface,
2084 uint32_t* pPresentModeCount,
2085 VkPresentModeKHR* pPresentModes)
2087 // Currently always say that all present modes are supported
2088 if (!pPresentModes) {
2089 *pPresentModeCount = 6;
2091 // Intentionally falling through and just filling however many modes are requested
2092 switch(*pPresentModeCount) {
2094 pPresentModes[5] = VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR;
2097 pPresentModes[4] = VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR;
2100 pPresentModes[3] = VK_PRESENT_MODE_FIFO_RELAXED_KHR;
2103 pPresentModes[2] = VK_PRESENT_MODE_FIFO_KHR;
2106 pPresentModes[1] = VK_PRESENT_MODE_MAILBOX_KHR;
2109 pPresentModes[0] = VK_PRESENT_MODE_IMMEDIATE_KHR;
2117 static VKAPI_ATTR VkResult VKAPI_CALL CreateSwapchainKHR(
2119 const VkSwapchainCreateInfoKHR* pCreateInfo,
2120 const VkAllocationCallbacks* pAllocator,
2121 VkSwapchainKHR* pSwapchain)
2123 unique_lock_t lock(global_lock);
2124 *pSwapchain = (VkSwapchainKHR)global_unique_handle++;
2128 static VKAPI_ATTR void VKAPI_CALL DestroySwapchainKHR(
2130 VkSwapchainKHR swapchain,
2131 const VkAllocationCallbacks* pAllocator)
2136 static VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainImagesKHR(
2138 VkSwapchainKHR swapchain,
2139 uint32_t* pSwapchainImageCount,
2140 VkImage* pSwapchainImages)
2142 if (!pSwapchainImages) {
2143 *pSwapchainImageCount = 1;
2144 } else if (*pSwapchainImageCount > 0) {
2145 pSwapchainImages[0] = (VkImage)global_unique_handle++;
2146 if (*pSwapchainImageCount != 1) {
2147 return VK_INCOMPLETE;
2153 static VKAPI_ATTR VkResult VKAPI_CALL AcquireNextImageKHR(
2155 VkSwapchainKHR swapchain,
2157 VkSemaphore semaphore,
2159 uint32_t* pImageIndex)
2161 //Not a CREATE or DESTROY function
2165 static VKAPI_ATTR VkResult VKAPI_CALL QueuePresentKHR(
2167 const VkPresentInfoKHR* pPresentInfo)
2169 //Not a CREATE or DESTROY function
2173 static VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupPresentCapabilitiesKHR(
2175 VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities)
2177 //Not a CREATE or DESTROY function
2181 static VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupSurfacePresentModesKHR(
2183 VkSurfaceKHR surface,
2184 VkDeviceGroupPresentModeFlagsKHR* pModes)
2186 //Not a CREATE or DESTROY function
2190 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDevicePresentRectanglesKHR(
2191 VkPhysicalDevice physicalDevice,
2192 VkSurfaceKHR surface,
2193 uint32_t* pRectCount,
2196 //Not a CREATE or DESTROY function
2200 static VKAPI_ATTR VkResult VKAPI_CALL AcquireNextImage2KHR(
2202 const VkAcquireNextImageInfoKHR* pAcquireInfo,
2203 uint32_t* pImageIndex)
2205 //Not a CREATE or DESTROY function
2210 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPropertiesKHR(
2211 VkPhysicalDevice physicalDevice,
2212 uint32_t* pPropertyCount,
2213 VkDisplayPropertiesKHR* pProperties)
2215 //Not a CREATE or DESTROY function
2219 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPlanePropertiesKHR(
2220 VkPhysicalDevice physicalDevice,
2221 uint32_t* pPropertyCount,
2222 VkDisplayPlanePropertiesKHR* pProperties)
2224 //Not a CREATE or DESTROY function
2228 static VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneSupportedDisplaysKHR(
2229 VkPhysicalDevice physicalDevice,
2230 uint32_t planeIndex,
2231 uint32_t* pDisplayCount,
2232 VkDisplayKHR* pDisplays)
2234 //Not a CREATE or DESTROY function
2238 static VKAPI_ATTR VkResult VKAPI_CALL GetDisplayModePropertiesKHR(
2239 VkPhysicalDevice physicalDevice,
2240 VkDisplayKHR display,
2241 uint32_t* pPropertyCount,
2242 VkDisplayModePropertiesKHR* pProperties)
2244 //Not a CREATE or DESTROY function
2248 static VKAPI_ATTR VkResult VKAPI_CALL CreateDisplayModeKHR(
2249 VkPhysicalDevice physicalDevice,
2250 VkDisplayKHR display,
2251 const VkDisplayModeCreateInfoKHR* pCreateInfo,
2252 const VkAllocationCallbacks* pAllocator,
2253 VkDisplayModeKHR* pMode)
2255 unique_lock_t lock(global_lock);
2256 *pMode = (VkDisplayModeKHR)global_unique_handle++;
2260 static VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneCapabilitiesKHR(
2261 VkPhysicalDevice physicalDevice,
2262 VkDisplayModeKHR mode,
2263 uint32_t planeIndex,
2264 VkDisplayPlaneCapabilitiesKHR* pCapabilities)
2266 //Not a CREATE or DESTROY function
2270 static VKAPI_ATTR VkResult VKAPI_CALL CreateDisplayPlaneSurfaceKHR(
2271 VkInstance instance,
2272 const VkDisplaySurfaceCreateInfoKHR* pCreateInfo,
2273 const VkAllocationCallbacks* pAllocator,
2274 VkSurfaceKHR* pSurface)
2276 unique_lock_t lock(global_lock);
2277 *pSurface = (VkSurfaceKHR)global_unique_handle++;
2282 static VKAPI_ATTR VkResult VKAPI_CALL CreateSharedSwapchainsKHR(
2284 uint32_t swapchainCount,
2285 const VkSwapchainCreateInfoKHR* pCreateInfos,
2286 const VkAllocationCallbacks* pAllocator,
2287 VkSwapchainKHR* pSwapchains)
2289 unique_lock_t lock(global_lock);
2290 for (uint32_t i = 0; i < swapchainCount; ++i) {
2291 pSwapchains[i] = (VkSwapchainKHR)global_unique_handle++;
2296 #ifdef VK_USE_PLATFORM_XLIB_KHR
2298 static VKAPI_ATTR VkResult VKAPI_CALL CreateXlibSurfaceKHR(
2299 VkInstance instance,
2300 const VkXlibSurfaceCreateInfoKHR* pCreateInfo,
2301 const VkAllocationCallbacks* pAllocator,
2302 VkSurfaceKHR* pSurface)
2304 unique_lock_t lock(global_lock);
2305 *pSurface = (VkSurfaceKHR)global_unique_handle++;
2309 static VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceXlibPresentationSupportKHR(
2310 VkPhysicalDevice physicalDevice,
2311 uint32_t queueFamilyIndex,
2315 //Not a CREATE or DESTROY function
2318 #endif /* VK_USE_PLATFORM_XLIB_KHR */
2320 #ifdef VK_USE_PLATFORM_XCB_KHR
2322 static VKAPI_ATTR VkResult VKAPI_CALL CreateXcbSurfaceKHR(
2323 VkInstance instance,
2324 const VkXcbSurfaceCreateInfoKHR* pCreateInfo,
2325 const VkAllocationCallbacks* pAllocator,
2326 VkSurfaceKHR* pSurface)
2328 unique_lock_t lock(global_lock);
2329 *pSurface = (VkSurfaceKHR)global_unique_handle++;
2333 static VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceXcbPresentationSupportKHR(
2334 VkPhysicalDevice physicalDevice,
2335 uint32_t queueFamilyIndex,
2336 xcb_connection_t* connection,
2337 xcb_visualid_t visual_id)
2339 //Not a CREATE or DESTROY function
2342 #endif /* VK_USE_PLATFORM_XCB_KHR */
2344 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
2346 static VKAPI_ATTR VkResult VKAPI_CALL CreateWaylandSurfaceKHR(
2347 VkInstance instance,
2348 const VkWaylandSurfaceCreateInfoKHR* pCreateInfo,
2349 const VkAllocationCallbacks* pAllocator,
2350 VkSurfaceKHR* pSurface)
2352 unique_lock_t lock(global_lock);
2353 *pSurface = (VkSurfaceKHR)global_unique_handle++;
2357 static VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceWaylandPresentationSupportKHR(
2358 VkPhysicalDevice physicalDevice,
2359 uint32_t queueFamilyIndex,
2360 struct wl_display* display)
2362 //Not a CREATE or DESTROY function
2365 #endif /* VK_USE_PLATFORM_WAYLAND_KHR */
2367 #ifdef VK_USE_PLATFORM_ANDROID_KHR
2369 static VKAPI_ATTR VkResult VKAPI_CALL CreateAndroidSurfaceKHR(
2370 VkInstance instance,
2371 const VkAndroidSurfaceCreateInfoKHR* pCreateInfo,
2372 const VkAllocationCallbacks* pAllocator,
2373 VkSurfaceKHR* pSurface)
2375 unique_lock_t lock(global_lock);
2376 *pSurface = (VkSurfaceKHR)global_unique_handle++;
2379 #endif /* VK_USE_PLATFORM_ANDROID_KHR */
2381 #ifdef VK_USE_PLATFORM_WIN32_KHR
2383 static VKAPI_ATTR VkResult VKAPI_CALL CreateWin32SurfaceKHR(
2384 VkInstance instance,
2385 const VkWin32SurfaceCreateInfoKHR* pCreateInfo,
2386 const VkAllocationCallbacks* pAllocator,
2387 VkSurfaceKHR* pSurface)
2389 unique_lock_t lock(global_lock);
2390 *pSurface = (VkSurfaceKHR)global_unique_handle++;
2394 static VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceWin32PresentationSupportKHR(
2395 VkPhysicalDevice physicalDevice,
2396 uint32_t queueFamilyIndex)
2398 //Not a CREATE or DESTROY function
2401 #endif /* VK_USE_PLATFORM_WIN32_KHR */
2406 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures2KHR(
2407 VkPhysicalDevice physicalDevice,
2408 VkPhysicalDeviceFeatures2* pFeatures)
2410 GetPhysicalDeviceFeatures(physicalDevice, &pFeatures->features);
2411 uint32_t num_bools = 0; // Count number of VkBool32s in extension structs
2412 VkBool32* feat_bools = nullptr;
2413 const auto *desc_idx_features = lvl_find_in_chain<VkPhysicalDeviceDescriptorIndexingFeaturesEXT>(pFeatures->pNext);
2414 if (desc_idx_features) {
2415 const auto bool_size = sizeof(VkPhysicalDeviceDescriptorIndexingFeaturesEXT) - offsetof(VkPhysicalDeviceDescriptorIndexingFeaturesEXT, shaderInputAttachmentArrayDynamicIndexing);
2416 num_bools = bool_size/sizeof(VkBool32);
2417 feat_bools = (VkBool32*)&desc_idx_features->shaderInputAttachmentArrayDynamicIndexing;
2418 SetBoolArrayTrue(feat_bools, num_bools);
2420 const auto *blendop_features = lvl_find_in_chain<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>(pFeatures->pNext);
2421 if (blendop_features) {
2422 const auto bool_size = sizeof(VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT) - offsetof(VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT, advancedBlendCoherentOperations);
2423 num_bools = bool_size/sizeof(VkBool32);
2424 feat_bools = (VkBool32*)&blendop_features->advancedBlendCoherentOperations;
2425 SetBoolArrayTrue(feat_bools, num_bools);
2429 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties2KHR(
2430 VkPhysicalDevice physicalDevice,
2431 VkPhysicalDeviceProperties2* pProperties)
2433 GetPhysicalDeviceProperties(physicalDevice, &pProperties->properties);
2434 const auto *desc_idx_props = lvl_find_in_chain<VkPhysicalDeviceDescriptorIndexingPropertiesEXT>(pProperties->pNext);
2435 if (desc_idx_props) {
2436 VkPhysicalDeviceDescriptorIndexingPropertiesEXT* write_props = (VkPhysicalDeviceDescriptorIndexingPropertiesEXT*)desc_idx_props;
2437 write_props->maxUpdateAfterBindDescriptorsInAllPools = 500000;
2438 write_props->shaderUniformBufferArrayNonUniformIndexingNative = false;
2439 write_props->shaderSampledImageArrayNonUniformIndexingNative = false;
2440 write_props->shaderStorageBufferArrayNonUniformIndexingNative = false;
2441 write_props->shaderStorageImageArrayNonUniformIndexingNative = false;
2442 write_props->shaderInputAttachmentArrayNonUniformIndexingNative = false;
2443 write_props->robustBufferAccessUpdateAfterBind = true;
2444 write_props->quadDivergentImplicitLod = true;
2445 write_props->maxPerStageDescriptorUpdateAfterBindSamplers = 500000;
2446 write_props->maxPerStageDescriptorUpdateAfterBindUniformBuffers = 500000;
2447 write_props->maxPerStageDescriptorUpdateAfterBindStorageBuffers = 500000;
2448 write_props->maxPerStageDescriptorUpdateAfterBindSampledImages = 500000;
2449 write_props->maxPerStageDescriptorUpdateAfterBindStorageImages = 500000;
2450 write_props->maxPerStageDescriptorUpdateAfterBindInputAttachments = 500000;
2451 write_props->maxPerStageUpdateAfterBindResources = 500000;
2452 write_props->maxDescriptorSetUpdateAfterBindSamplers = 500000;
2453 write_props->maxDescriptorSetUpdateAfterBindUniformBuffers = 96;
2454 write_props->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 8;
2455 write_props->maxDescriptorSetUpdateAfterBindStorageBuffers = 500000;
2456 write_props->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 4;
2457 write_props->maxDescriptorSetUpdateAfterBindSampledImages = 500000;
2458 write_props->maxDescriptorSetUpdateAfterBindStorageImages = 500000;
2459 write_props->maxDescriptorSetUpdateAfterBindInputAttachments = 500000;
2462 const auto *push_descriptor_props = lvl_find_in_chain<VkPhysicalDevicePushDescriptorPropertiesKHR>(pProperties->pNext);
2463 if (push_descriptor_props) {
2464 VkPhysicalDevicePushDescriptorPropertiesKHR* write_props = (VkPhysicalDevicePushDescriptorPropertiesKHR*)push_descriptor_props;
2465 write_props->maxPushDescriptors = 256;
2468 const auto *depth_stencil_resolve_props = lvl_find_in_chain<VkPhysicalDeviceDepthStencilResolvePropertiesKHR>(pProperties->pNext);
2469 if (depth_stencil_resolve_props) {
2470 VkPhysicalDeviceDepthStencilResolvePropertiesKHR* write_props = (VkPhysicalDeviceDepthStencilResolvePropertiesKHR*)depth_stencil_resolve_props;
2471 write_props->supportedDepthResolveModes = VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR;
2472 write_props->supportedStencilResolveModes = VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR;
2476 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties2KHR(
2477 VkPhysicalDevice physicalDevice,
2479 VkFormatProperties2* pFormatProperties)
2481 GetPhysicalDeviceFormatProperties(physicalDevice, format, &pFormatProperties->formatProperties);
2484 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties2KHR(
2485 VkPhysicalDevice physicalDevice,
2486 const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
2487 VkImageFormatProperties2* pImageFormatProperties)
2489 GetPhysicalDeviceImageFormatProperties(physicalDevice, pImageFormatInfo->format, pImageFormatInfo->type, pImageFormatInfo->tiling, pImageFormatInfo->usage, pImageFormatInfo->flags, &pImageFormatProperties->imageFormatProperties);
2493 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties2KHR(
2494 VkPhysicalDevice physicalDevice,
2495 uint32_t* pQueueFamilyPropertyCount,
2496 VkQueueFamilyProperties2* pQueueFamilyProperties)
2498 if (pQueueFamilyPropertyCount && pQueueFamilyProperties) {
2499 GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, &pQueueFamilyProperties->queueFamilyProperties);
2501 GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, nullptr);
2505 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties2KHR(
2506 VkPhysicalDevice physicalDevice,
2507 VkPhysicalDeviceMemoryProperties2* pMemoryProperties)
2509 GetPhysicalDeviceMemoryProperties(physicalDevice, &pMemoryProperties->memoryProperties);
2512 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties2KHR(
2513 VkPhysicalDevice physicalDevice,
2514 const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
2515 uint32_t* pPropertyCount,
2516 VkSparseImageFormatProperties2* pProperties)
2518 //Not a CREATE or DESTROY function
2522 static VKAPI_ATTR void VKAPI_CALL GetDeviceGroupPeerMemoryFeaturesKHR(
2525 uint32_t localDeviceIndex,
2526 uint32_t remoteDeviceIndex,
2527 VkPeerMemoryFeatureFlags* pPeerMemoryFeatures)
2529 //Not a CREATE or DESTROY function
2532 static VKAPI_ATTR void VKAPI_CALL CmdSetDeviceMaskKHR(
2533 VkCommandBuffer commandBuffer,
2534 uint32_t deviceMask)
2536 //Not a CREATE or DESTROY function
2539 static VKAPI_ATTR void VKAPI_CALL CmdDispatchBaseKHR(
2540 VkCommandBuffer commandBuffer,
2541 uint32_t baseGroupX,
2542 uint32_t baseGroupY,
2543 uint32_t baseGroupZ,
2544 uint32_t groupCountX,
2545 uint32_t groupCountY,
2546 uint32_t groupCountZ)
2548 //Not a CREATE or DESTROY function
2553 static VKAPI_ATTR void VKAPI_CALL TrimCommandPoolKHR(
2555 VkCommandPool commandPool,
2556 VkCommandPoolTrimFlags flags)
2558 //Not a CREATE or DESTROY function
2562 static VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDeviceGroupsKHR(
2563 VkInstance instance,
2564 uint32_t* pPhysicalDeviceGroupCount,
2565 VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties)
2567 //Not a CREATE or DESTROY function
2572 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalBufferPropertiesKHR(
2573 VkPhysicalDevice physicalDevice,
2574 const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
2575 VkExternalBufferProperties* pExternalBufferProperties)
2577 GetPhysicalDeviceExternalBufferProperties(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
2581 #ifdef VK_USE_PLATFORM_WIN32_KHR
2583 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandleKHR(
2585 const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo,
2588 //Not a CREATE or DESTROY function
2592 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandlePropertiesKHR(
2594 VkExternalMemoryHandleTypeFlagBits handleType,
2596 VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties)
2598 //Not a CREATE or DESTROY function
2601 #endif /* VK_USE_PLATFORM_WIN32_KHR */
2604 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryFdKHR(
2606 const VkMemoryGetFdInfoKHR* pGetFdInfo,
2609 //Not a CREATE or DESTROY function
2613 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryFdPropertiesKHR(
2615 VkExternalMemoryHandleTypeFlagBits handleType,
2617 VkMemoryFdPropertiesKHR* pMemoryFdProperties)
2619 //Not a CREATE or DESTROY function
2623 #ifdef VK_USE_PLATFORM_WIN32_KHR
2624 #endif /* VK_USE_PLATFORM_WIN32_KHR */
2627 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalSemaphorePropertiesKHR(
2628 VkPhysicalDevice physicalDevice,
2629 const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
2630 VkExternalSemaphoreProperties* pExternalSemaphoreProperties)
2632 GetPhysicalDeviceExternalSemaphoreProperties(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
2636 #ifdef VK_USE_PLATFORM_WIN32_KHR
2638 static VKAPI_ATTR VkResult VKAPI_CALL ImportSemaphoreWin32HandleKHR(
2640 const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo)
2642 //Not a CREATE or DESTROY function
2646 static VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreWin32HandleKHR(
2648 const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo,
2651 //Not a CREATE or DESTROY function
2654 #endif /* VK_USE_PLATFORM_WIN32_KHR */
2657 static VKAPI_ATTR VkResult VKAPI_CALL ImportSemaphoreFdKHR(
2659 const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo)
2661 //Not a CREATE or DESTROY function
2665 static VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreFdKHR(
2667 const VkSemaphoreGetFdInfoKHR* pGetFdInfo,
2670 //Not a CREATE or DESTROY function
2675 static VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetKHR(
2676 VkCommandBuffer commandBuffer,
2677 VkPipelineBindPoint pipelineBindPoint,
2678 VkPipelineLayout layout,
2680 uint32_t descriptorWriteCount,
2681 const VkWriteDescriptorSet* pDescriptorWrites)
2683 //Not a CREATE or DESTROY function
2686 static VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetWithTemplateKHR(
2687 VkCommandBuffer commandBuffer,
2688 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
2689 VkPipelineLayout layout,
2693 //Not a CREATE or DESTROY function
2700 static VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorUpdateTemplateKHR(
2702 const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
2703 const VkAllocationCallbacks* pAllocator,
2704 VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate)
2706 unique_lock_t lock(global_lock);
2707 *pDescriptorUpdateTemplate = (VkDescriptorUpdateTemplate)global_unique_handle++;
2711 static VKAPI_ATTR void VKAPI_CALL DestroyDescriptorUpdateTemplateKHR(
2713 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
2714 const VkAllocationCallbacks* pAllocator)
2719 static VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSetWithTemplateKHR(
2721 VkDescriptorSet descriptorSet,
2722 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
2725 //Not a CREATE or DESTROY function
2730 static VKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass2KHR(
2732 const VkRenderPassCreateInfo2* pCreateInfo,
2733 const VkAllocationCallbacks* pAllocator,
2734 VkRenderPass* pRenderPass)
2736 unique_lock_t lock(global_lock);
2737 *pRenderPass = (VkRenderPass)global_unique_handle++;
2741 static VKAPI_ATTR void VKAPI_CALL CmdBeginRenderPass2KHR(
2742 VkCommandBuffer commandBuffer,
2743 const VkRenderPassBeginInfo* pRenderPassBegin,
2744 const VkSubpassBeginInfo* pSubpassBeginInfo)
2746 //Not a CREATE or DESTROY function
2749 static VKAPI_ATTR void VKAPI_CALL CmdNextSubpass2KHR(
2750 VkCommandBuffer commandBuffer,
2751 const VkSubpassBeginInfo* pSubpassBeginInfo,
2752 const VkSubpassEndInfo* pSubpassEndInfo)
2754 //Not a CREATE or DESTROY function
2757 static VKAPI_ATTR void VKAPI_CALL CmdEndRenderPass2KHR(
2758 VkCommandBuffer commandBuffer,
2759 const VkSubpassEndInfo* pSubpassEndInfo)
2761 //Not a CREATE or DESTROY function
2765 static VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainStatusKHR(
2767 VkSwapchainKHR swapchain)
2769 //Not a CREATE or DESTROY function
2774 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalFencePropertiesKHR(
2775 VkPhysicalDevice physicalDevice,
2776 const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
2777 VkExternalFenceProperties* pExternalFenceProperties)
2779 GetPhysicalDeviceExternalFenceProperties(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
2783 #ifdef VK_USE_PLATFORM_WIN32_KHR
2785 static VKAPI_ATTR VkResult VKAPI_CALL ImportFenceWin32HandleKHR(
2787 const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo)
2789 //Not a CREATE or DESTROY function
2793 static VKAPI_ATTR VkResult VKAPI_CALL GetFenceWin32HandleKHR(
2795 const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo,
2798 //Not a CREATE or DESTROY function
2801 #endif /* VK_USE_PLATFORM_WIN32_KHR */
2804 static VKAPI_ATTR VkResult VKAPI_CALL ImportFenceFdKHR(
2806 const VkImportFenceFdInfoKHR* pImportFenceFdInfo)
2808 //Not a CREATE or DESTROY function
2812 static VKAPI_ATTR VkResult VKAPI_CALL GetFenceFdKHR(
2814 const VkFenceGetFdInfoKHR* pGetFdInfo,
2817 //Not a CREATE or DESTROY function
2822 static VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(
2823 VkPhysicalDevice physicalDevice,
2824 uint32_t queueFamilyIndex,
2825 uint32_t* pCounterCount,
2826 VkPerformanceCounterKHR* pCounters,
2827 VkPerformanceCounterDescriptionKHR* pCounterDescriptions)
2829 //Not a CREATE or DESTROY function
2833 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR(
2834 VkPhysicalDevice physicalDevice,
2835 const VkQueryPoolPerformanceCreateInfoKHR* pPerformanceQueryCreateInfo,
2836 uint32_t* pNumPasses)
2838 //Not a CREATE or DESTROY function
2841 static VKAPI_ATTR VkResult VKAPI_CALL AcquireProfilingLockKHR(
2843 const VkAcquireProfilingLockInfoKHR* pInfo)
2845 //Not a CREATE or DESTROY function
2849 static VKAPI_ATTR void VKAPI_CALL ReleaseProfilingLockKHR(
2852 //Not a CREATE or DESTROY function
2857 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilities2KHR(
2858 VkPhysicalDevice physicalDevice,
2859 const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
2860 VkSurfaceCapabilities2KHR* pSurfaceCapabilities)
2862 GetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, pSurfaceInfo->surface, &pSurfaceCapabilities->surfaceCapabilities);
2866 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceFormats2KHR(
2867 VkPhysicalDevice physicalDevice,
2868 const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
2869 uint32_t* pSurfaceFormatCount,
2870 VkSurfaceFormat2KHR* pSurfaceFormats)
2872 // Currently always say that RGBA8 & BGRA8 are supported
2873 if (!pSurfaceFormats) {
2874 *pSurfaceFormatCount = 2;
2876 // Intentionally falling through and just filling however many types are requested
2877 switch(*pSurfaceFormatCount) {
2879 pSurfaceFormats[1].pNext = nullptr;
2880 pSurfaceFormats[1].surfaceFormat.format = VK_FORMAT_R8G8B8A8_UNORM;
2881 pSurfaceFormats[1].surfaceFormat.colorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;
2884 pSurfaceFormats[1].pNext = nullptr;
2885 pSurfaceFormats[0].surfaceFormat.format = VK_FORMAT_B8G8R8A8_UNORM;
2886 pSurfaceFormats[0].surfaceFormat.colorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;
2895 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayProperties2KHR(
2896 VkPhysicalDevice physicalDevice,
2897 uint32_t* pPropertyCount,
2898 VkDisplayProperties2KHR* pProperties)
2900 //Not a CREATE or DESTROY function
2904 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPlaneProperties2KHR(
2905 VkPhysicalDevice physicalDevice,
2906 uint32_t* pPropertyCount,
2907 VkDisplayPlaneProperties2KHR* pProperties)
2909 //Not a CREATE or DESTROY function
2913 static VKAPI_ATTR VkResult VKAPI_CALL GetDisplayModeProperties2KHR(
2914 VkPhysicalDevice physicalDevice,
2915 VkDisplayKHR display,
2916 uint32_t* pPropertyCount,
2917 VkDisplayModeProperties2KHR* pProperties)
2919 //Not a CREATE or DESTROY function
2923 static VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneCapabilities2KHR(
2924 VkPhysicalDevice physicalDevice,
2925 const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo,
2926 VkDisplayPlaneCapabilities2KHR* pCapabilities)
2928 //Not a CREATE or DESTROY function
2936 static VKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements2KHR(
2938 const VkImageMemoryRequirementsInfo2* pInfo,
2939 VkMemoryRequirements2* pMemoryRequirements)
2941 GetImageMemoryRequirements(device, pInfo->image, &pMemoryRequirements->memoryRequirements);
2944 static VKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements2KHR(
2946 const VkBufferMemoryRequirementsInfo2* pInfo,
2947 VkMemoryRequirements2* pMemoryRequirements)
2949 GetBufferMemoryRequirements(device, pInfo->buffer, &pMemoryRequirements->memoryRequirements);
2952 static VKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements2KHR(
2954 const VkImageSparseMemoryRequirementsInfo2* pInfo,
2955 uint32_t* pSparseMemoryRequirementCount,
2956 VkSparseImageMemoryRequirements2* pSparseMemoryRequirements)
2958 //Not a CREATE or DESTROY function
2963 static VKAPI_ATTR VkResult VKAPI_CALL CreateSamplerYcbcrConversionKHR(
2965 const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
2966 const VkAllocationCallbacks* pAllocator,
2967 VkSamplerYcbcrConversion* pYcbcrConversion)
2969 unique_lock_t lock(global_lock);
2970 *pYcbcrConversion = (VkSamplerYcbcrConversion)global_unique_handle++;
2974 static VKAPI_ATTR void VKAPI_CALL DestroySamplerYcbcrConversionKHR(
2976 VkSamplerYcbcrConversion ycbcrConversion,
2977 const VkAllocationCallbacks* pAllocator)
2983 static VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory2KHR(
2985 uint32_t bindInfoCount,
2986 const VkBindBufferMemoryInfo* pBindInfos)
2988 //Not a CREATE or DESTROY function
2992 static VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory2KHR(
2994 uint32_t bindInfoCount,
2995 const VkBindImageMemoryInfo* pBindInfos)
2997 //Not a CREATE or DESTROY function
3002 static VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutSupportKHR(
3004 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
3005 VkDescriptorSetLayoutSupport* pSupport)
3007 //Not a CREATE or DESTROY function
3011 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCountKHR(
3012 VkCommandBuffer commandBuffer,
3014 VkDeviceSize offset,
3015 VkBuffer countBuffer,
3016 VkDeviceSize countBufferOffset,
3017 uint32_t maxDrawCount,
3020 //Not a CREATE or DESTROY function
3023 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirectCountKHR(
3024 VkCommandBuffer commandBuffer,
3026 VkDeviceSize offset,
3027 VkBuffer countBuffer,
3028 VkDeviceSize countBufferOffset,
3029 uint32_t maxDrawCount,
3032 //Not a CREATE or DESTROY function
3044 static VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreCounterValueKHR(
3046 VkSemaphore semaphore,
3049 //Not a CREATE or DESTROY function
3053 static VKAPI_ATTR VkResult VKAPI_CALL WaitSemaphoresKHR(
3055 const VkSemaphoreWaitInfo* pWaitInfo,
3058 //Not a CREATE or DESTROY function
3062 static VKAPI_ATTR VkResult VKAPI_CALL SignalSemaphoreKHR(
3064 const VkSemaphoreSignalInfo* pSignalInfo)
3066 //Not a CREATE or DESTROY function
3076 static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetBufferDeviceAddressKHR(
3078 const VkBufferDeviceAddressInfo* pInfo)
3080 //Not a CREATE or DESTROY function
3084 static VKAPI_ATTR uint64_t VKAPI_CALL GetBufferOpaqueCaptureAddressKHR(
3086 const VkBufferDeviceAddressInfo* pInfo)
3088 //Not a CREATE or DESTROY function
3092 static VKAPI_ATTR uint64_t VKAPI_CALL GetDeviceMemoryOpaqueCaptureAddressKHR(
3094 const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo)
3096 //Not a CREATE or DESTROY function
3100 #ifdef VK_ENABLE_BETA_EXTENSIONS
3102 static VKAPI_ATTR VkResult VKAPI_CALL CreateDeferredOperationKHR(
3104 const VkAllocationCallbacks* pAllocator,
3105 VkDeferredOperationKHR* pDeferredOperation)
3107 unique_lock_t lock(global_lock);
3108 *pDeferredOperation = (VkDeferredOperationKHR)global_unique_handle++;
3112 static VKAPI_ATTR void VKAPI_CALL DestroyDeferredOperationKHR(
3114 VkDeferredOperationKHR operation,
3115 const VkAllocationCallbacks* pAllocator)
3120 static VKAPI_ATTR uint32_t VKAPI_CALL GetDeferredOperationMaxConcurrencyKHR(
3122 VkDeferredOperationKHR operation)
3124 //Not a CREATE or DESTROY function
3128 static VKAPI_ATTR VkResult VKAPI_CALL GetDeferredOperationResultKHR(
3130 VkDeferredOperationKHR operation)
3132 //Not a CREATE or DESTROY function
3136 static VKAPI_ATTR VkResult VKAPI_CALL DeferredOperationJoinKHR(
3138 VkDeferredOperationKHR operation)
3140 //Not a CREATE or DESTROY function
3143 #endif /* VK_ENABLE_BETA_EXTENSIONS */
3146 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineExecutablePropertiesKHR(
3148 const VkPipelineInfoKHR* pPipelineInfo,
3149 uint32_t* pExecutableCount,
3150 VkPipelineExecutablePropertiesKHR* pProperties)
3152 //Not a CREATE or DESTROY function
3156 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineExecutableStatisticsKHR(
3158 const VkPipelineExecutableInfoKHR* pExecutableInfo,
3159 uint32_t* pStatisticCount,
3160 VkPipelineExecutableStatisticKHR* pStatistics)
3162 //Not a CREATE or DESTROY function
3166 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineExecutableInternalRepresentationsKHR(
3168 const VkPipelineExecutableInfoKHR* pExecutableInfo,
3169 uint32_t* pInternalRepresentationCount,
3170 VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations)
3172 //Not a CREATE or DESTROY function
3176 #ifdef VK_ENABLE_BETA_EXTENSIONS
3177 #endif /* VK_ENABLE_BETA_EXTENSIONS */
3181 static VKAPI_ATTR VkResult VKAPI_CALL CreateDebugReportCallbackEXT(
3182 VkInstance instance,
3183 const VkDebugReportCallbackCreateInfoEXT* pCreateInfo,
3184 const VkAllocationCallbacks* pAllocator,
3185 VkDebugReportCallbackEXT* pCallback)
3187 unique_lock_t lock(global_lock);
3188 *pCallback = (VkDebugReportCallbackEXT)global_unique_handle++;
3192 static VKAPI_ATTR void VKAPI_CALL DestroyDebugReportCallbackEXT(
3193 VkInstance instance,
3194 VkDebugReportCallbackEXT callback,
3195 const VkAllocationCallbacks* pAllocator)
3200 static VKAPI_ATTR void VKAPI_CALL DebugReportMessageEXT(
3201 VkInstance instance,
3202 VkDebugReportFlagsEXT flags,
3203 VkDebugReportObjectTypeEXT objectType,
3206 int32_t messageCode,
3207 const char* pLayerPrefix,
3208 const char* pMessage)
3210 //Not a CREATE or DESTROY function
3220 static VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectTagEXT(
3222 const VkDebugMarkerObjectTagInfoEXT* pTagInfo)
3224 //Not a CREATE or DESTROY function
3228 static VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectNameEXT(
3230 const VkDebugMarkerObjectNameInfoEXT* pNameInfo)
3232 //Not a CREATE or DESTROY function
3236 static VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerBeginEXT(
3237 VkCommandBuffer commandBuffer,
3238 const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
3240 //Not a CREATE or DESTROY function
3243 static VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerEndEXT(
3244 VkCommandBuffer commandBuffer)
3246 //Not a CREATE or DESTROY function
3249 static VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerInsertEXT(
3250 VkCommandBuffer commandBuffer,
3251 const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
3253 //Not a CREATE or DESTROY function
3259 static VKAPI_ATTR void VKAPI_CALL CmdBindTransformFeedbackBuffersEXT(
3260 VkCommandBuffer commandBuffer,
3261 uint32_t firstBinding,
3262 uint32_t bindingCount,
3263 const VkBuffer* pBuffers,
3264 const VkDeviceSize* pOffsets,
3265 const VkDeviceSize* pSizes)
3267 //Not a CREATE or DESTROY function
3270 static VKAPI_ATTR void VKAPI_CALL CmdBeginTransformFeedbackEXT(
3271 VkCommandBuffer commandBuffer,
3272 uint32_t firstCounterBuffer,
3273 uint32_t counterBufferCount,
3274 const VkBuffer* pCounterBuffers,
3275 const VkDeviceSize* pCounterBufferOffsets)
3277 //Not a CREATE or DESTROY function
3280 static VKAPI_ATTR void VKAPI_CALL CmdEndTransformFeedbackEXT(
3281 VkCommandBuffer commandBuffer,
3282 uint32_t firstCounterBuffer,
3283 uint32_t counterBufferCount,
3284 const VkBuffer* pCounterBuffers,
3285 const VkDeviceSize* pCounterBufferOffsets)
3287 //Not a CREATE or DESTROY function
3290 static VKAPI_ATTR void VKAPI_CALL CmdBeginQueryIndexedEXT(
3291 VkCommandBuffer commandBuffer,
3292 VkQueryPool queryPool,
3294 VkQueryControlFlags flags,
3297 //Not a CREATE or DESTROY function
3300 static VKAPI_ATTR void VKAPI_CALL CmdEndQueryIndexedEXT(
3301 VkCommandBuffer commandBuffer,
3302 VkQueryPool queryPool,
3306 //Not a CREATE or DESTROY function
3309 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectByteCountEXT(
3310 VkCommandBuffer commandBuffer,
3311 uint32_t instanceCount,
3312 uint32_t firstInstance,
3313 VkBuffer counterBuffer,
3314 VkDeviceSize counterBufferOffset,
3315 uint32_t counterOffset,
3316 uint32_t vertexStride)
3318 //Not a CREATE or DESTROY function
3322 static VKAPI_ATTR uint32_t VKAPI_CALL GetImageViewHandleNVX(
3324 const VkImageViewHandleInfoNVX* pInfo)
3326 //Not a CREATE or DESTROY function
3331 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCountAMD(
3332 VkCommandBuffer commandBuffer,
3334 VkDeviceSize offset,
3335 VkBuffer countBuffer,
3336 VkDeviceSize countBufferOffset,
3337 uint32_t maxDrawCount,
3340 //Not a CREATE or DESTROY function
3343 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirectCountAMD(
3344 VkCommandBuffer commandBuffer,
3346 VkDeviceSize offset,
3347 VkBuffer countBuffer,
3348 VkDeviceSize countBufferOffset,
3349 uint32_t maxDrawCount,
3352 //Not a CREATE or DESTROY function
3360 static VKAPI_ATTR VkResult VKAPI_CALL GetShaderInfoAMD(
3362 VkPipeline pipeline,
3363 VkShaderStageFlagBits shaderStage,
3364 VkShaderInfoTypeAMD infoType,
3368 //Not a CREATE or DESTROY function
3373 #ifdef VK_USE_PLATFORM_GGP
3375 static VKAPI_ATTR VkResult VKAPI_CALL CreateStreamDescriptorSurfaceGGP(
3376 VkInstance instance,
3377 const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo,
3378 const VkAllocationCallbacks* pAllocator,
3379 VkSurfaceKHR* pSurface)
3381 unique_lock_t lock(global_lock);
3382 *pSurface = (VkSurfaceKHR)global_unique_handle++;
3385 #endif /* VK_USE_PLATFORM_GGP */
3390 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceExternalImageFormatPropertiesNV(
3391 VkPhysicalDevice physicalDevice,
3394 VkImageTiling tiling,
3395 VkImageUsageFlags usage,
3396 VkImageCreateFlags flags,
3397 VkExternalMemoryHandleTypeFlagsNV externalHandleType,
3398 VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties)
3400 //Not a CREATE or DESTROY function
3405 #ifdef VK_USE_PLATFORM_WIN32_KHR
3407 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandleNV(
3409 VkDeviceMemory memory,
3410 VkExternalMemoryHandleTypeFlagsNV handleType,
3413 //Not a CREATE or DESTROY function
3416 #endif /* VK_USE_PLATFORM_WIN32_KHR */
3418 #ifdef VK_USE_PLATFORM_WIN32_KHR
3419 #endif /* VK_USE_PLATFORM_WIN32_KHR */
3422 #ifdef VK_USE_PLATFORM_VI_NN
3424 static VKAPI_ATTR VkResult VKAPI_CALL CreateViSurfaceNN(
3425 VkInstance instance,
3426 const VkViSurfaceCreateInfoNN* pCreateInfo,
3427 const VkAllocationCallbacks* pAllocator,
3428 VkSurfaceKHR* pSurface)
3430 unique_lock_t lock(global_lock);
3431 *pSurface = (VkSurfaceKHR)global_unique_handle++;
3434 #endif /* VK_USE_PLATFORM_VI_NN */
3441 static VKAPI_ATTR void VKAPI_CALL CmdBeginConditionalRenderingEXT(
3442 VkCommandBuffer commandBuffer,
3443 const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin)
3445 //Not a CREATE or DESTROY function
3448 static VKAPI_ATTR void VKAPI_CALL CmdEndConditionalRenderingEXT(
3449 VkCommandBuffer commandBuffer)
3451 //Not a CREATE or DESTROY function
3455 static VKAPI_ATTR void VKAPI_CALL CmdSetViewportWScalingNV(
3456 VkCommandBuffer commandBuffer,
3457 uint32_t firstViewport,
3458 uint32_t viewportCount,
3459 const VkViewportWScalingNV* pViewportWScalings)
3461 //Not a CREATE or DESTROY function
3465 static VKAPI_ATTR VkResult VKAPI_CALL ReleaseDisplayEXT(
3466 VkPhysicalDevice physicalDevice,
3467 VkDisplayKHR display)
3469 //Not a CREATE or DESTROY function
3473 #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
3475 static VKAPI_ATTR VkResult VKAPI_CALL AcquireXlibDisplayEXT(
3476 VkPhysicalDevice physicalDevice,
3478 VkDisplayKHR display)
3480 //Not a CREATE or DESTROY function
3484 static VKAPI_ATTR VkResult VKAPI_CALL GetRandROutputDisplayEXT(
3485 VkPhysicalDevice physicalDevice,
3488 VkDisplayKHR* pDisplay)
3490 //Not a CREATE or DESTROY function
3493 #endif /* VK_USE_PLATFORM_XLIB_XRANDR_EXT */
3496 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilities2EXT(
3497 VkPhysicalDevice physicalDevice,
3498 VkSurfaceKHR surface,
3499 VkSurfaceCapabilities2EXT* pSurfaceCapabilities)
3501 //Not a CREATE or DESTROY function
3506 static VKAPI_ATTR VkResult VKAPI_CALL DisplayPowerControlEXT(
3508 VkDisplayKHR display,
3509 const VkDisplayPowerInfoEXT* pDisplayPowerInfo)
3511 //Not a CREATE or DESTROY function
3515 static VKAPI_ATTR VkResult VKAPI_CALL RegisterDeviceEventEXT(
3517 const VkDeviceEventInfoEXT* pDeviceEventInfo,
3518 const VkAllocationCallbacks* pAllocator,
3521 //Not a CREATE or DESTROY function
3525 static VKAPI_ATTR VkResult VKAPI_CALL RegisterDisplayEventEXT(
3527 VkDisplayKHR display,
3528 const VkDisplayEventInfoEXT* pDisplayEventInfo,
3529 const VkAllocationCallbacks* pAllocator,
3532 //Not a CREATE or DESTROY function
3536 static VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainCounterEXT(
3538 VkSwapchainKHR swapchain,
3539 VkSurfaceCounterFlagBitsEXT counter,
3540 uint64_t* pCounterValue)
3542 //Not a CREATE or DESTROY function
3547 static VKAPI_ATTR VkResult VKAPI_CALL GetRefreshCycleDurationGOOGLE(
3549 VkSwapchainKHR swapchain,
3550 VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties)
3552 //Not a CREATE or DESTROY function
3556 static VKAPI_ATTR VkResult VKAPI_CALL GetPastPresentationTimingGOOGLE(
3558 VkSwapchainKHR swapchain,
3559 uint32_t* pPresentationTimingCount,
3560 VkPastPresentationTimingGOOGLE* pPresentationTimings)
3562 //Not a CREATE or DESTROY function
3572 static VKAPI_ATTR void VKAPI_CALL CmdSetDiscardRectangleEXT(
3573 VkCommandBuffer commandBuffer,
3574 uint32_t firstDiscardRectangle,
3575 uint32_t discardRectangleCount,
3576 const VkRect2D* pDiscardRectangles)
3578 //Not a CREATE or DESTROY function
3585 static VKAPI_ATTR void VKAPI_CALL SetHdrMetadataEXT(
3587 uint32_t swapchainCount,
3588 const VkSwapchainKHR* pSwapchains,
3589 const VkHdrMetadataEXT* pMetadata)
3591 //Not a CREATE or DESTROY function
3594 #ifdef VK_USE_PLATFORM_IOS_MVK
3596 static VKAPI_ATTR VkResult VKAPI_CALL CreateIOSSurfaceMVK(
3597 VkInstance instance,
3598 const VkIOSSurfaceCreateInfoMVK* pCreateInfo,
3599 const VkAllocationCallbacks* pAllocator,
3600 VkSurfaceKHR* pSurface)
3602 unique_lock_t lock(global_lock);
3603 *pSurface = (VkSurfaceKHR)global_unique_handle++;
3606 #endif /* VK_USE_PLATFORM_IOS_MVK */
3608 #ifdef VK_USE_PLATFORM_MACOS_MVK
3610 static VKAPI_ATTR VkResult VKAPI_CALL CreateMacOSSurfaceMVK(
3611 VkInstance instance,
3612 const VkMacOSSurfaceCreateInfoMVK* pCreateInfo,
3613 const VkAllocationCallbacks* pAllocator,
3614 VkSurfaceKHR* pSurface)
3616 unique_lock_t lock(global_lock);
3617 *pSurface = (VkSurfaceKHR)global_unique_handle++;
3620 #endif /* VK_USE_PLATFORM_MACOS_MVK */
3625 static VKAPI_ATTR VkResult VKAPI_CALL SetDebugUtilsObjectNameEXT(
3627 const VkDebugUtilsObjectNameInfoEXT* pNameInfo)
3629 //Not a CREATE or DESTROY function
3633 static VKAPI_ATTR VkResult VKAPI_CALL SetDebugUtilsObjectTagEXT(
3635 const VkDebugUtilsObjectTagInfoEXT* pTagInfo)
3637 //Not a CREATE or DESTROY function
3641 static VKAPI_ATTR void VKAPI_CALL QueueBeginDebugUtilsLabelEXT(
3643 const VkDebugUtilsLabelEXT* pLabelInfo)
3645 //Not a CREATE or DESTROY function
3648 static VKAPI_ATTR void VKAPI_CALL QueueEndDebugUtilsLabelEXT(
3651 //Not a CREATE or DESTROY function
3654 static VKAPI_ATTR void VKAPI_CALL QueueInsertDebugUtilsLabelEXT(
3656 const VkDebugUtilsLabelEXT* pLabelInfo)
3658 //Not a CREATE or DESTROY function
3661 static VKAPI_ATTR void VKAPI_CALL CmdBeginDebugUtilsLabelEXT(
3662 VkCommandBuffer commandBuffer,
3663 const VkDebugUtilsLabelEXT* pLabelInfo)
3665 //Not a CREATE or DESTROY function
3668 static VKAPI_ATTR void VKAPI_CALL CmdEndDebugUtilsLabelEXT(
3669 VkCommandBuffer commandBuffer)
3671 //Not a CREATE or DESTROY function
3674 static VKAPI_ATTR void VKAPI_CALL CmdInsertDebugUtilsLabelEXT(
3675 VkCommandBuffer commandBuffer,
3676 const VkDebugUtilsLabelEXT* pLabelInfo)
3678 //Not a CREATE or DESTROY function
3681 static VKAPI_ATTR VkResult VKAPI_CALL CreateDebugUtilsMessengerEXT(
3682 VkInstance instance,
3683 const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
3684 const VkAllocationCallbacks* pAllocator,
3685 VkDebugUtilsMessengerEXT* pMessenger)
3687 unique_lock_t lock(global_lock);
3688 *pMessenger = (VkDebugUtilsMessengerEXT)global_unique_handle++;
3692 static VKAPI_ATTR void VKAPI_CALL DestroyDebugUtilsMessengerEXT(
3693 VkInstance instance,
3694 VkDebugUtilsMessengerEXT messenger,
3695 const VkAllocationCallbacks* pAllocator)
3700 static VKAPI_ATTR void VKAPI_CALL SubmitDebugUtilsMessageEXT(
3701 VkInstance instance,
3702 VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
3703 VkDebugUtilsMessageTypeFlagsEXT messageTypes,
3704 const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData)
3706 //Not a CREATE or DESTROY function
3709 #ifdef VK_USE_PLATFORM_ANDROID_KHR
3711 static VKAPI_ATTR VkResult VKAPI_CALL GetAndroidHardwareBufferPropertiesANDROID(
3713 const struct AHardwareBuffer* buffer,
3714 VkAndroidHardwareBufferPropertiesANDROID* pProperties)
3716 //Not a CREATE or DESTROY function
3720 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryAndroidHardwareBufferANDROID(
3722 const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo,
3723 struct AHardwareBuffer** pBuffer)
3725 //Not a CREATE or DESTROY function
3728 #endif /* VK_USE_PLATFORM_ANDROID_KHR */
3737 static VKAPI_ATTR void VKAPI_CALL CmdSetSampleLocationsEXT(
3738 VkCommandBuffer commandBuffer,
3739 const VkSampleLocationsInfoEXT* pSampleLocationsInfo)
3741 //Not a CREATE or DESTROY function
3744 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMultisamplePropertiesEXT(
3745 VkPhysicalDevice physicalDevice,
3746 VkSampleCountFlagBits samples,
3747 VkMultisamplePropertiesEXT* pMultisampleProperties)
3749 //Not a CREATE or DESTROY function
3759 static VKAPI_ATTR VkResult VKAPI_CALL GetImageDrmFormatModifierPropertiesEXT(
3762 VkImageDrmFormatModifierPropertiesEXT* pProperties)
3764 //Not a CREATE or DESTROY function
3769 static VKAPI_ATTR VkResult VKAPI_CALL CreateValidationCacheEXT(
3771 const VkValidationCacheCreateInfoEXT* pCreateInfo,
3772 const VkAllocationCallbacks* pAllocator,
3773 VkValidationCacheEXT* pValidationCache)
3775 unique_lock_t lock(global_lock);
3776 *pValidationCache = (VkValidationCacheEXT)global_unique_handle++;
3780 static VKAPI_ATTR void VKAPI_CALL DestroyValidationCacheEXT(
3782 VkValidationCacheEXT validationCache,
3783 const VkAllocationCallbacks* pAllocator)
3788 static VKAPI_ATTR VkResult VKAPI_CALL MergeValidationCachesEXT(
3790 VkValidationCacheEXT dstCache,
3791 uint32_t srcCacheCount,
3792 const VkValidationCacheEXT* pSrcCaches)
3794 //Not a CREATE or DESTROY function
3798 static VKAPI_ATTR VkResult VKAPI_CALL GetValidationCacheDataEXT(
3800 VkValidationCacheEXT validationCache,
3804 //Not a CREATE or DESTROY function
3811 static VKAPI_ATTR void VKAPI_CALL CmdBindShadingRateImageNV(
3812 VkCommandBuffer commandBuffer,
3813 VkImageView imageView,
3814 VkImageLayout imageLayout)
3816 //Not a CREATE or DESTROY function
3819 static VKAPI_ATTR void VKAPI_CALL CmdSetViewportShadingRatePaletteNV(
3820 VkCommandBuffer commandBuffer,
3821 uint32_t firstViewport,
3822 uint32_t viewportCount,
3823 const VkShadingRatePaletteNV* pShadingRatePalettes)
3825 //Not a CREATE or DESTROY function
3828 static VKAPI_ATTR void VKAPI_CALL CmdSetCoarseSampleOrderNV(
3829 VkCommandBuffer commandBuffer,
3830 VkCoarseSampleOrderTypeNV sampleOrderType,
3831 uint32_t customSampleOrderCount,
3832 const VkCoarseSampleOrderCustomNV* pCustomSampleOrders)
3834 //Not a CREATE or DESTROY function
3838 static VKAPI_ATTR VkResult VKAPI_CALL CreateAccelerationStructureNV(
3840 const VkAccelerationStructureCreateInfoNV* pCreateInfo,
3841 const VkAllocationCallbacks* pAllocator,
3842 VkAccelerationStructureNV* pAccelerationStructure)
3844 unique_lock_t lock(global_lock);
3845 *pAccelerationStructure = (VkAccelerationStructureNV)CreateDispObjHandle();
3849 static VKAPI_ATTR void VKAPI_CALL DestroyAccelerationStructureKHR(
3851 VkAccelerationStructureKHR accelerationStructure,
3852 const VkAllocationCallbacks* pAllocator)
3857 static VKAPI_ATTR void VKAPI_CALL DestroyAccelerationStructureNV(
3859 VkAccelerationStructureKHR accelerationStructure,
3860 const VkAllocationCallbacks* pAllocator)
3865 static VKAPI_ATTR void VKAPI_CALL GetAccelerationStructureMemoryRequirementsNV(
3867 const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo,
3868 VkMemoryRequirements2KHR* pMemoryRequirements)
3870 //Not a CREATE or DESTROY function
3873 static VKAPI_ATTR VkResult VKAPI_CALL BindAccelerationStructureMemoryKHR(
3875 uint32_t bindInfoCount,
3876 const VkBindAccelerationStructureMemoryInfoKHR* pBindInfos)
3878 //Not a CREATE or DESTROY function
3882 static VKAPI_ATTR VkResult VKAPI_CALL BindAccelerationStructureMemoryNV(
3884 uint32_t bindInfoCount,
3885 const VkBindAccelerationStructureMemoryInfoKHR* pBindInfos)
3887 //Not a CREATE or DESTROY function
3891 static VKAPI_ATTR void VKAPI_CALL CmdBuildAccelerationStructureNV(
3892 VkCommandBuffer commandBuffer,
3893 const VkAccelerationStructureInfoNV* pInfo,
3894 VkBuffer instanceData,
3895 VkDeviceSize instanceOffset,
3897 VkAccelerationStructureKHR dst,
3898 VkAccelerationStructureKHR src,
3900 VkDeviceSize scratchOffset)
3902 //Not a CREATE or DESTROY function
3905 static VKAPI_ATTR void VKAPI_CALL CmdCopyAccelerationStructureNV(
3906 VkCommandBuffer commandBuffer,
3907 VkAccelerationStructureKHR dst,
3908 VkAccelerationStructureKHR src,
3909 VkCopyAccelerationStructureModeKHR mode)
3911 //Not a CREATE or DESTROY function
3914 static VKAPI_ATTR void VKAPI_CALL CmdTraceRaysNV(
3915 VkCommandBuffer commandBuffer,
3916 VkBuffer raygenShaderBindingTableBuffer,
3917 VkDeviceSize raygenShaderBindingOffset,
3918 VkBuffer missShaderBindingTableBuffer,
3919 VkDeviceSize missShaderBindingOffset,
3920 VkDeviceSize missShaderBindingStride,
3921 VkBuffer hitShaderBindingTableBuffer,
3922 VkDeviceSize hitShaderBindingOffset,
3923 VkDeviceSize hitShaderBindingStride,
3924 VkBuffer callableShaderBindingTableBuffer,
3925 VkDeviceSize callableShaderBindingOffset,
3926 VkDeviceSize callableShaderBindingStride,
3931 //Not a CREATE or DESTROY function
3934 static VKAPI_ATTR VkResult VKAPI_CALL CreateRayTracingPipelinesNV(
3936 VkPipelineCache pipelineCache,
3937 uint32_t createInfoCount,
3938 const VkRayTracingPipelineCreateInfoNV* pCreateInfos,
3939 const VkAllocationCallbacks* pAllocator,
3940 VkPipeline* pPipelines)
3942 unique_lock_t lock(global_lock);
3943 for (uint32_t i = 0; i < createInfoCount; ++i) {
3944 pPipelines[i] = (VkPipeline)global_unique_handle++;
3949 static VKAPI_ATTR VkResult VKAPI_CALL GetRayTracingShaderGroupHandlesKHR(
3951 VkPipeline pipeline,
3952 uint32_t firstGroup,
3953 uint32_t groupCount,
3957 //Not a CREATE or DESTROY function
3961 static VKAPI_ATTR VkResult VKAPI_CALL GetRayTracingShaderGroupHandlesNV(
3963 VkPipeline pipeline,
3964 uint32_t firstGroup,
3965 uint32_t groupCount,
3969 //Not a CREATE or DESTROY function
3973 static VKAPI_ATTR VkResult VKAPI_CALL GetAccelerationStructureHandleNV(
3975 VkAccelerationStructureKHR accelerationStructure,
3979 //Not a CREATE or DESTROY function
3983 static VKAPI_ATTR void VKAPI_CALL CmdWriteAccelerationStructuresPropertiesKHR(
3984 VkCommandBuffer commandBuffer,
3985 uint32_t accelerationStructureCount,
3986 const VkAccelerationStructureKHR* pAccelerationStructures,
3987 VkQueryType queryType,
3988 VkQueryPool queryPool,
3989 uint32_t firstQuery)
3991 //Not a CREATE or DESTROY function
3994 static VKAPI_ATTR void VKAPI_CALL CmdWriteAccelerationStructuresPropertiesNV(
3995 VkCommandBuffer commandBuffer,
3996 uint32_t accelerationStructureCount,
3997 const VkAccelerationStructureKHR* pAccelerationStructures,
3998 VkQueryType queryType,
3999 VkQueryPool queryPool,
4000 uint32_t firstQuery)
4002 //Not a CREATE or DESTROY function
4005 static VKAPI_ATTR VkResult VKAPI_CALL CompileDeferredNV(
4007 VkPipeline pipeline,
4010 //Not a CREATE or DESTROY function
4018 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryHostPointerPropertiesEXT(
4020 VkExternalMemoryHandleTypeFlagBits handleType,
4021 const void* pHostPointer,
4022 VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties)
4024 //Not a CREATE or DESTROY function
4029 static VKAPI_ATTR void VKAPI_CALL CmdWriteBufferMarkerAMD(
4030 VkCommandBuffer commandBuffer,
4031 VkPipelineStageFlagBits pipelineStage,
4033 VkDeviceSize dstOffset,
4036 //Not a CREATE or DESTROY function
4041 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCalibrateableTimeDomainsEXT(
4042 VkPhysicalDevice physicalDevice,
4043 uint32_t* pTimeDomainCount,
4044 VkTimeDomainEXT* pTimeDomains)
4046 //Not a CREATE or DESTROY function
4050 static VKAPI_ATTR VkResult VKAPI_CALL GetCalibratedTimestampsEXT(
4052 uint32_t timestampCount,
4053 const VkCalibratedTimestampInfoEXT* pTimestampInfos,
4054 uint64_t* pTimestamps,
4055 uint64_t* pMaxDeviation)
4057 //Not a CREATE or DESTROY function
4064 #ifdef VK_USE_PLATFORM_GGP
4065 #endif /* VK_USE_PLATFORM_GGP */
4071 static VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksNV(
4072 VkCommandBuffer commandBuffer,
4076 //Not a CREATE or DESTROY function
4079 static VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksIndirectNV(
4080 VkCommandBuffer commandBuffer,
4082 VkDeviceSize offset,
4086 //Not a CREATE or DESTROY function
4089 static VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksIndirectCountNV(
4090 VkCommandBuffer commandBuffer,
4092 VkDeviceSize offset,
4093 VkBuffer countBuffer,
4094 VkDeviceSize countBufferOffset,
4095 uint32_t maxDrawCount,
4098 //Not a CREATE or DESTROY function
4104 static VKAPI_ATTR void VKAPI_CALL CmdSetExclusiveScissorNV(
4105 VkCommandBuffer commandBuffer,
4106 uint32_t firstExclusiveScissor,
4107 uint32_t exclusiveScissorCount,
4108 const VkRect2D* pExclusiveScissors)
4110 //Not a CREATE or DESTROY function
4114 static VKAPI_ATTR void VKAPI_CALL CmdSetCheckpointNV(
4115 VkCommandBuffer commandBuffer,
4116 const void* pCheckpointMarker)
4118 //Not a CREATE or DESTROY function
4121 static VKAPI_ATTR void VKAPI_CALL GetQueueCheckpointDataNV(
4123 uint32_t* pCheckpointDataCount,
4124 VkCheckpointDataNV* pCheckpointData)
4126 //Not a CREATE or DESTROY function
4131 static VKAPI_ATTR VkResult VKAPI_CALL InitializePerformanceApiINTEL(
4133 const VkInitializePerformanceApiInfoINTEL* pInitializeInfo)
4135 //Not a CREATE or DESTROY function
4139 static VKAPI_ATTR void VKAPI_CALL UninitializePerformanceApiINTEL(
4142 //Not a CREATE or DESTROY function
4145 static VKAPI_ATTR VkResult VKAPI_CALL CmdSetPerformanceMarkerINTEL(
4146 VkCommandBuffer commandBuffer,
4147 const VkPerformanceMarkerInfoINTEL* pMarkerInfo)
4149 //Not a CREATE or DESTROY function
4153 static VKAPI_ATTR VkResult VKAPI_CALL CmdSetPerformanceStreamMarkerINTEL(
4154 VkCommandBuffer commandBuffer,
4155 const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo)
4157 //Not a CREATE or DESTROY function
4161 static VKAPI_ATTR VkResult VKAPI_CALL CmdSetPerformanceOverrideINTEL(
4162 VkCommandBuffer commandBuffer,
4163 const VkPerformanceOverrideInfoINTEL* pOverrideInfo)
4165 //Not a CREATE or DESTROY function
4169 static VKAPI_ATTR VkResult VKAPI_CALL AcquirePerformanceConfigurationINTEL(
4171 const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo,
4172 VkPerformanceConfigurationINTEL* pConfiguration)
4174 //Not a CREATE or DESTROY function
4178 static VKAPI_ATTR VkResult VKAPI_CALL ReleasePerformanceConfigurationINTEL(
4180 VkPerformanceConfigurationINTEL configuration)
4182 //Not a CREATE or DESTROY function
4186 static VKAPI_ATTR VkResult VKAPI_CALL QueueSetPerformanceConfigurationINTEL(
4188 VkPerformanceConfigurationINTEL configuration)
4190 //Not a CREATE or DESTROY function
4194 static VKAPI_ATTR VkResult VKAPI_CALL GetPerformanceParameterINTEL(
4196 VkPerformanceParameterTypeINTEL parameter,
4197 VkPerformanceValueINTEL* pValue)
4199 //Not a CREATE or DESTROY function
4205 static VKAPI_ATTR void VKAPI_CALL SetLocalDimmingAMD(
4207 VkSwapchainKHR swapChain,
4208 VkBool32 localDimmingEnable)
4210 //Not a CREATE or DESTROY function
4213 #ifdef VK_USE_PLATFORM_FUCHSIA
4215 static VKAPI_ATTR VkResult VKAPI_CALL CreateImagePipeSurfaceFUCHSIA(
4216 VkInstance instance,
4217 const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo,
4218 const VkAllocationCallbacks* pAllocator,
4219 VkSurfaceKHR* pSurface)
4221 unique_lock_t lock(global_lock);
4222 *pSurface = (VkSurfaceKHR)global_unique_handle++;
4225 #endif /* VK_USE_PLATFORM_FUCHSIA */
4227 #ifdef VK_USE_PLATFORM_METAL_EXT
4229 static VKAPI_ATTR VkResult VKAPI_CALL CreateMetalSurfaceEXT(
4230 VkInstance instance,
4231 const VkMetalSurfaceCreateInfoEXT* pCreateInfo,
4232 const VkAllocationCallbacks* pAllocator,
4233 VkSurfaceKHR* pSurface)
4235 unique_lock_t lock(global_lock);
4236 *pSurface = (VkSurfaceKHR)global_unique_handle++;
4239 #endif /* VK_USE_PLATFORM_METAL_EXT */
4252 static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetBufferDeviceAddressEXT(
4254 const VkBufferDeviceAddressInfo* pInfo)
4256 //Not a CREATE or DESTROY function
4261 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceToolPropertiesEXT(
4262 VkPhysicalDevice physicalDevice,
4263 uint32_t* pToolCount,
4264 VkPhysicalDeviceToolPropertiesEXT* pToolProperties)
4266 //Not a CREATE or DESTROY function
4273 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCooperativeMatrixPropertiesNV(
4274 VkPhysicalDevice physicalDevice,
4275 uint32_t* pPropertyCount,
4276 VkCooperativeMatrixPropertiesNV* pProperties)
4278 //Not a CREATE or DESTROY function
4283 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(
4284 VkPhysicalDevice physicalDevice,
4285 uint32_t* pCombinationCount,
4286 VkFramebufferMixedSamplesCombinationNV* pCombinations)
4288 //Not a CREATE or DESTROY function
4294 #ifdef VK_USE_PLATFORM_WIN32_KHR
4296 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModes2EXT(
4297 VkPhysicalDevice physicalDevice,
4298 const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
4299 uint32_t* pPresentModeCount,
4300 VkPresentModeKHR* pPresentModes)
4302 //Not a CREATE or DESTROY function
4306 static VKAPI_ATTR VkResult VKAPI_CALL AcquireFullScreenExclusiveModeEXT(
4308 VkSwapchainKHR swapchain)
4310 //Not a CREATE or DESTROY function
4314 static VKAPI_ATTR VkResult VKAPI_CALL ReleaseFullScreenExclusiveModeEXT(
4316 VkSwapchainKHR swapchain)
4318 //Not a CREATE or DESTROY function
4322 static VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupSurfacePresentModes2EXT(
4324 const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
4325 VkDeviceGroupPresentModeFlagsKHR* pModes)
4327 //Not a CREATE or DESTROY function
4330 #endif /* VK_USE_PLATFORM_WIN32_KHR */
4333 static VKAPI_ATTR VkResult VKAPI_CALL CreateHeadlessSurfaceEXT(
4334 VkInstance instance,
4335 const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo,
4336 const VkAllocationCallbacks* pAllocator,
4337 VkSurfaceKHR* pSurface)
4339 unique_lock_t lock(global_lock);
4340 *pSurface = (VkSurfaceKHR)global_unique_handle++;
4345 static VKAPI_ATTR void VKAPI_CALL CmdSetLineStippleEXT(
4346 VkCommandBuffer commandBuffer,
4347 uint32_t lineStippleFactor,
4348 uint16_t lineStipplePattern)
4350 //Not a CREATE or DESTROY function
4354 static VKAPI_ATTR void VKAPI_CALL ResetQueryPoolEXT(
4356 VkQueryPool queryPool,
4357 uint32_t firstQuery,
4358 uint32_t queryCount)
4360 //Not a CREATE or DESTROY function
4366 static VKAPI_ATTR void VKAPI_CALL GetGeneratedCommandsMemoryRequirementsNV(
4368 const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo,
4369 VkMemoryRequirements2* pMemoryRequirements)
4371 //Not a CREATE or DESTROY function
4374 static VKAPI_ATTR void VKAPI_CALL CmdPreprocessGeneratedCommandsNV(
4375 VkCommandBuffer commandBuffer,
4376 const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo)
4378 //Not a CREATE or DESTROY function
4381 static VKAPI_ATTR void VKAPI_CALL CmdExecuteGeneratedCommandsNV(
4382 VkCommandBuffer commandBuffer,
4383 VkBool32 isPreprocessed,
4384 const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo)
4386 //Not a CREATE or DESTROY function
4389 static VKAPI_ATTR void VKAPI_CALL CmdBindPipelineShaderGroupNV(
4390 VkCommandBuffer commandBuffer,
4391 VkPipelineBindPoint pipelineBindPoint,
4392 VkPipeline pipeline,
4393 uint32_t groupIndex)
4395 //Not a CREATE or DESTROY function
4398 static VKAPI_ATTR VkResult VKAPI_CALL CreateIndirectCommandsLayoutNV(
4400 const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo,
4401 const VkAllocationCallbacks* pAllocator,
4402 VkIndirectCommandsLayoutNV* pIndirectCommandsLayout)
4404 unique_lock_t lock(global_lock);
4405 *pIndirectCommandsLayout = (VkIndirectCommandsLayoutNV)global_unique_handle++;
4409 static VKAPI_ATTR void VKAPI_CALL DestroyIndirectCommandsLayoutNV(
4411 VkIndirectCommandsLayoutNV indirectCommandsLayout,
4412 const VkAllocationCallbacks* pAllocator)
4422 #ifdef VK_ENABLE_BETA_EXTENSIONS
4424 static VKAPI_ATTR VkResult VKAPI_CALL CreateAccelerationStructureKHR(
4426 const VkAccelerationStructureCreateInfoKHR* pCreateInfo,
4427 const VkAllocationCallbacks* pAllocator,
4428 VkAccelerationStructureKHR* pAccelerationStructure)
4430 unique_lock_t lock(global_lock);
4431 *pAccelerationStructure = (VkAccelerationStructureKHR)global_unique_handle++;
4435 static VKAPI_ATTR void VKAPI_CALL GetAccelerationStructureMemoryRequirementsKHR(
4437 const VkAccelerationStructureMemoryRequirementsInfoKHR* pInfo,
4438 VkMemoryRequirements2* pMemoryRequirements)
4440 //Not a CREATE or DESTROY function
4443 static VKAPI_ATTR void VKAPI_CALL CmdBuildAccelerationStructureKHR(
4444 VkCommandBuffer commandBuffer,
4446 const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,
4447 const VkAccelerationStructureBuildOffsetInfoKHR* const* ppOffsetInfos)
4449 //Not a CREATE or DESTROY function
4452 static VKAPI_ATTR void VKAPI_CALL CmdBuildAccelerationStructureIndirectKHR(
4453 VkCommandBuffer commandBuffer,
4454 const VkAccelerationStructureBuildGeometryInfoKHR* pInfo,
4455 VkBuffer indirectBuffer,
4456 VkDeviceSize indirectOffset,
4457 uint32_t indirectStride)
4459 //Not a CREATE or DESTROY function
4462 static VKAPI_ATTR VkResult VKAPI_CALL BuildAccelerationStructureKHR(
4465 const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,
4466 const VkAccelerationStructureBuildOffsetInfoKHR* const* ppOffsetInfos)
4468 //Not a CREATE or DESTROY function
4472 static VKAPI_ATTR VkResult VKAPI_CALL CopyAccelerationStructureKHR(
4474 const VkCopyAccelerationStructureInfoKHR* pInfo)
4476 //Not a CREATE or DESTROY function
4480 static VKAPI_ATTR VkResult VKAPI_CALL CopyAccelerationStructureToMemoryKHR(
4482 const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo)
4484 //Not a CREATE or DESTROY function
4488 static VKAPI_ATTR VkResult VKAPI_CALL CopyMemoryToAccelerationStructureKHR(
4490 const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo)
4492 //Not a CREATE or DESTROY function
4496 static VKAPI_ATTR VkResult VKAPI_CALL WriteAccelerationStructuresPropertiesKHR(
4498 uint32_t accelerationStructureCount,
4499 const VkAccelerationStructureKHR* pAccelerationStructures,
4500 VkQueryType queryType,
4505 //Not a CREATE or DESTROY function
4509 static VKAPI_ATTR void VKAPI_CALL CmdCopyAccelerationStructureKHR(
4510 VkCommandBuffer commandBuffer,
4511 const VkCopyAccelerationStructureInfoKHR* pInfo)
4513 //Not a CREATE or DESTROY function
4516 static VKAPI_ATTR void VKAPI_CALL CmdCopyAccelerationStructureToMemoryKHR(
4517 VkCommandBuffer commandBuffer,
4518 const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo)
4520 //Not a CREATE or DESTROY function
4523 static VKAPI_ATTR void VKAPI_CALL CmdCopyMemoryToAccelerationStructureKHR(
4524 VkCommandBuffer commandBuffer,
4525 const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo)
4527 //Not a CREATE or DESTROY function
4530 static VKAPI_ATTR void VKAPI_CALL CmdTraceRaysKHR(
4531 VkCommandBuffer commandBuffer,
4532 const VkStridedBufferRegionKHR* pRaygenShaderBindingTable,
4533 const VkStridedBufferRegionKHR* pMissShaderBindingTable,
4534 const VkStridedBufferRegionKHR* pHitShaderBindingTable,
4535 const VkStridedBufferRegionKHR* pCallableShaderBindingTable,
4540 //Not a CREATE or DESTROY function
4543 static VKAPI_ATTR VkResult VKAPI_CALL CreateRayTracingPipelinesKHR(
4545 VkPipelineCache pipelineCache,
4546 uint32_t createInfoCount,
4547 const VkRayTracingPipelineCreateInfoKHR* pCreateInfos,
4548 const VkAllocationCallbacks* pAllocator,
4549 VkPipeline* pPipelines)
4551 unique_lock_t lock(global_lock);
4552 for (uint32_t i = 0; i < createInfoCount; ++i) {
4553 pPipelines[i] = (VkPipeline)global_unique_handle++;
4558 static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetAccelerationStructureDeviceAddressKHR(
4560 const VkAccelerationStructureDeviceAddressInfoKHR* pInfo)
4562 //Not a CREATE or DESTROY function
4566 static VKAPI_ATTR VkResult VKAPI_CALL GetRayTracingCaptureReplayShaderGroupHandlesKHR(
4568 VkPipeline pipeline,
4569 uint32_t firstGroup,
4570 uint32_t groupCount,
4574 //Not a CREATE or DESTROY function
4578 static VKAPI_ATTR void VKAPI_CALL CmdTraceRaysIndirectKHR(
4579 VkCommandBuffer commandBuffer,
4580 const VkStridedBufferRegionKHR* pRaygenShaderBindingTable,
4581 const VkStridedBufferRegionKHR* pMissShaderBindingTable,
4582 const VkStridedBufferRegionKHR* pHitShaderBindingTable,
4583 const VkStridedBufferRegionKHR* pCallableShaderBindingTable,
4585 VkDeviceSize offset)
4587 //Not a CREATE or DESTROY function
4590 static VKAPI_ATTR VkResult VKAPI_CALL GetDeviceAccelerationStructureCompatibilityKHR(
4592 const VkAccelerationStructureVersionKHR* version)
4594 //Not a CREATE or DESTROY function
4597 #endif /* VK_ENABLE_BETA_EXTENSIONS */
4601 static VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetPhysicalDeviceProcAddr(VkInstance instance, const char *funcName) {
4602 // TODO: This function should only care about physical device functions and return nullptr for other functions
4603 const auto &item = name_to_funcptr_map.find(funcName);
4604 if (item != name_to_funcptr_map.end()) {
4605 return reinterpret_cast<PFN_vkVoidFunction>(item->second);
4607 // Mock should intercept all functions so if we get here just return null
4611 } // namespace vkmock
4613 #if defined(__GNUC__) && __GNUC__ >= 4
4614 #define EXPORT __attribute__((visibility("default")))
4615 #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
4616 #define EXPORT __attribute__((visibility("default")))
4623 EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetInstanceProcAddr(VkInstance instance, const char* pName) {
4624 if (!vkmock::negotiate_loader_icd_interface_called) {
4625 vkmock::loader_interface_version = 1;
4627 return vkmock::GetInstanceProcAddr(instance, pName);
4630 EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetPhysicalDeviceProcAddr(VkInstance instance, const char* pName) {
4631 return vkmock::GetPhysicalDeviceProcAddr(instance, pName);
4634 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vk_icdNegotiateLoaderICDInterfaceVersion(uint32_t* pSupportedVersion) {
4635 vkmock::negotiate_loader_icd_interface_called = true;
4636 vkmock::loader_interface_version = *pSupportedVersion;
4637 if (*pSupportedVersion > vkmock::SUPPORTED_LOADER_ICD_INTERFACE_VERSION) {
4638 *pSupportedVersion = vkmock::SUPPORTED_LOADER_ICD_INTERFACE_VERSION;
4644 EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR(
4645 VkInstance instance,
4646 VkSurfaceKHR surface,
4647 const VkAllocationCallbacks* pAllocator)
4649 vkmock::DestroySurfaceKHR(instance, surface, pAllocator);
4652 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceSupportKHR(
4653 VkPhysicalDevice physicalDevice,
4654 uint32_t queueFamilyIndex,
4655 VkSurfaceKHR surface,
4656 VkBool32* pSupported)
4658 return vkmock::GetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, pSupported);
4661 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
4662 VkPhysicalDevice physicalDevice,
4663 VkSurfaceKHR surface,
4664 VkSurfaceCapabilitiesKHR* pSurfaceCapabilities)
4666 return vkmock::GetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities);
4669 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormatsKHR(
4670 VkPhysicalDevice physicalDevice,
4671 VkSurfaceKHR surface,
4672 uint32_t* pSurfaceFormatCount,
4673 VkSurfaceFormatKHR* pSurfaceFormats)
4675 return vkmock::GetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats);
4678 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR(
4679 VkPhysicalDevice physicalDevice,
4680 VkSurfaceKHR surface,
4681 uint32_t* pPresentModeCount,
4682 VkPresentModeKHR* pPresentModes)
4684 return vkmock::GetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, pPresentModeCount, pPresentModes);
4687 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR(
4688 VkInstance instance,
4689 const VkDisplaySurfaceCreateInfoKHR* pCreateInfo,
4690 const VkAllocationCallbacks* pAllocator,
4691 VkSurfaceKHR* pSurface)
4693 return vkmock::CreateDisplayPlaneSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
4696 #ifdef VK_USE_PLATFORM_XLIB_KHR
4698 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR(
4699 VkInstance instance,
4700 const VkXlibSurfaceCreateInfoKHR* pCreateInfo,
4701 const VkAllocationCallbacks* pAllocator,
4702 VkSurfaceKHR* pSurface)
4704 return vkmock::CreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
4706 #endif /* VK_USE_PLATFORM_XLIB_KHR */
4708 #ifdef VK_USE_PLATFORM_XCB_KHR
4710 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR(
4711 VkInstance instance,
4712 const VkXcbSurfaceCreateInfoKHR* pCreateInfo,
4713 const VkAllocationCallbacks* pAllocator,
4714 VkSurfaceKHR* pSurface)
4716 return vkmock::CreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
4718 #endif /* VK_USE_PLATFORM_XCB_KHR */
4720 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
4722 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR(
4723 VkInstance instance,
4724 const VkWaylandSurfaceCreateInfoKHR* pCreateInfo,
4725 const VkAllocationCallbacks* pAllocator,
4726 VkSurfaceKHR* pSurface)
4728 return vkmock::CreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
4730 #endif /* VK_USE_PLATFORM_WAYLAND_KHR */
4732 #ifdef VK_USE_PLATFORM_ANDROID_KHR
4734 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR(
4735 VkInstance instance,
4736 const VkAndroidSurfaceCreateInfoKHR* pCreateInfo,
4737 const VkAllocationCallbacks* pAllocator,
4738 VkSurfaceKHR* pSurface)
4740 return vkmock::CreateAndroidSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
4742 #endif /* VK_USE_PLATFORM_ANDROID_KHR */
4744 #ifdef VK_USE_PLATFORM_WIN32_KHR
4746 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR(
4747 VkInstance instance,
4748 const VkWin32SurfaceCreateInfoKHR* pCreateInfo,
4749 const VkAllocationCallbacks* pAllocator,
4750 VkSurfaceKHR* pSurface)
4752 return vkmock::CreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
4754 #endif /* VK_USE_PLATFORM_WIN32_KHR */
4756 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModesKHR(
4758 VkSurfaceKHR surface,
4759 VkDeviceGroupPresentModeFlagsKHR* pModes)
4761 return vkmock::GetDeviceGroupSurfacePresentModesKHR(device, surface, pModes);
4764 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHR(
4765 VkPhysicalDevice physicalDevice,
4766 VkSurfaceKHR surface,
4767 uint32_t* pRectCount,
4770 return vkmock::GetPhysicalDevicePresentRectanglesKHR(physicalDevice, surface, pRectCount, pRects);
4773 #ifdef VK_USE_PLATFORM_VI_NN
4775 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateViSurfaceNN(
4776 VkInstance instance,
4777 const VkViSurfaceCreateInfoNN* pCreateInfo,
4778 const VkAllocationCallbacks* pAllocator,
4779 VkSurfaceKHR* pSurface)
4781 return vkmock::CreateViSurfaceNN(instance, pCreateInfo, pAllocator, pSurface);
4783 #endif /* VK_USE_PLATFORM_VI_NN */
4785 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2EXT(
4786 VkPhysicalDevice physicalDevice,
4787 VkSurfaceKHR surface,
4788 VkSurfaceCapabilities2EXT* pSurfaceCapabilities)
4790 return vkmock::GetPhysicalDeviceSurfaceCapabilities2EXT(physicalDevice, surface, pSurfaceCapabilities);
4793 #ifdef VK_USE_PLATFORM_IOS_MVK
4795 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateIOSSurfaceMVK(
4796 VkInstance instance,
4797 const VkIOSSurfaceCreateInfoMVK* pCreateInfo,
4798 const VkAllocationCallbacks* pAllocator,
4799 VkSurfaceKHR* pSurface)
4801 return vkmock::CreateIOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
4803 #endif /* VK_USE_PLATFORM_IOS_MVK */
4805 #ifdef VK_USE_PLATFORM_MACOS_MVK
4807 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK(
4808 VkInstance instance,
4809 const VkMacOSSurfaceCreateInfoMVK* pCreateInfo,
4810 const VkAllocationCallbacks* pAllocator,
4811 VkSurfaceKHR* pSurface)
4813 return vkmock::CreateMacOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
4815 #endif /* VK_USE_PLATFORM_MACOS_MVK */