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.
27 #include "vk_typemap_helper.h"
31 using std::unordered_map;
33 static constexpr uint32_t icd_physical_device_count = 1;
34 static unordered_map<VkInstance, std::array<VkPhysicalDevice, icd_physical_device_count>> physical_device_map;
36 // Map device memory handle to any mapped allocations that we'll need to free on unmap
37 static unordered_map<VkDeviceMemory, std::vector<void*>> mapped_memory_map;
39 // Map device memory allocation handle to the size
40 static unordered_map<VkDeviceMemory, VkDeviceSize> allocated_memory_size_map;
42 static unordered_map<VkDevice, unordered_map<uint32_t, unordered_map<uint32_t, VkQueue>>> queue_map;
43 static unordered_map<VkDevice, unordered_map<VkBuffer, VkBufferCreateInfo>> buffer_map;
44 static unordered_map<VkDevice, unordered_map<VkImage, VkDeviceSize>> image_memory_size_map;
46 static constexpr uint32_t icd_swapchain_image_count = 1;
47 static unordered_map<VkSwapchainKHR, VkImage[icd_swapchain_image_count]> swapchain_image_map;
49 // TODO: Would like to codegen this but limits aren't in XML
50 static VkPhysicalDeviceLimits SetLimits(VkPhysicalDeviceLimits *limits) {
51 limits->maxImageDimension1D = 4096;
52 limits->maxImageDimension2D = 4096;
53 limits->maxImageDimension3D = 256;
54 limits->maxImageDimensionCube = 4096;
55 limits->maxImageArrayLayers = 256;
56 limits->maxTexelBufferElements = 65536;
57 limits->maxUniformBufferRange = 16384;
58 limits->maxStorageBufferRange = 134217728;
59 limits->maxPushConstantsSize = 128;
60 limits->maxMemoryAllocationCount = 4096;
61 limits->maxSamplerAllocationCount = 4000;
62 limits->bufferImageGranularity = 1;
63 limits->sparseAddressSpaceSize = 2147483648;
64 limits->maxBoundDescriptorSets = 4;
65 limits->maxPerStageDescriptorSamplers = 16;
66 limits->maxPerStageDescriptorUniformBuffers = 12;
67 limits->maxPerStageDescriptorStorageBuffers = 4;
68 limits->maxPerStageDescriptorSampledImages = 16;
69 limits->maxPerStageDescriptorStorageImages = 4;
70 limits->maxPerStageDescriptorInputAttachments = 4;
71 limits->maxPerStageResources = 128;
72 limits->maxDescriptorSetSamplers = 96;
73 limits->maxDescriptorSetUniformBuffers = 72;
74 limits->maxDescriptorSetUniformBuffersDynamic = 8;
75 limits->maxDescriptorSetStorageBuffers = 24;
76 limits->maxDescriptorSetStorageBuffersDynamic = 4;
77 limits->maxDescriptorSetSampledImages = 96;
78 limits->maxDescriptorSetStorageImages = 24;
79 limits->maxDescriptorSetInputAttachments = 4;
80 limits->maxVertexInputAttributes = 16;
81 limits->maxVertexInputBindings = 16;
82 limits->maxVertexInputAttributeOffset = 2047;
83 limits->maxVertexInputBindingStride = 2048;
84 limits->maxVertexOutputComponents = 64;
85 limits->maxTessellationGenerationLevel = 64;
86 limits->maxTessellationPatchSize = 32;
87 limits->maxTessellationControlPerVertexInputComponents = 64;
88 limits->maxTessellationControlPerVertexOutputComponents = 64;
89 limits->maxTessellationControlPerPatchOutputComponents = 120;
90 limits->maxTessellationControlTotalOutputComponents = 2048;
91 limits->maxTessellationEvaluationInputComponents = 64;
92 limits->maxTessellationEvaluationOutputComponents = 64;
93 limits->maxGeometryShaderInvocations = 32;
94 limits->maxGeometryInputComponents = 64;
95 limits->maxGeometryOutputComponents = 64;
96 limits->maxGeometryOutputVertices = 256;
97 limits->maxGeometryTotalOutputComponents = 1024;
98 limits->maxFragmentInputComponents = 64;
99 limits->maxFragmentOutputAttachments = 4;
100 limits->maxFragmentDualSrcAttachments = 1;
101 limits->maxFragmentCombinedOutputResources = 4;
102 limits->maxComputeSharedMemorySize = 16384;
103 limits->maxComputeWorkGroupCount[0] = 65535;
104 limits->maxComputeWorkGroupCount[1] = 65535;
105 limits->maxComputeWorkGroupCount[2] = 65535;
106 limits->maxComputeWorkGroupInvocations = 128;
107 limits->maxComputeWorkGroupSize[0] = 128;
108 limits->maxComputeWorkGroupSize[1] = 128;
109 limits->maxComputeWorkGroupSize[2] = 64;
110 limits->subPixelPrecisionBits = 4;
111 limits->subTexelPrecisionBits = 4;
112 limits->mipmapPrecisionBits = 4;
113 limits->maxDrawIndexedIndexValue = UINT32_MAX;
114 limits->maxDrawIndirectCount = UINT16_MAX;
115 limits->maxSamplerLodBias = 2.0f;
116 limits->maxSamplerAnisotropy = 16;
117 limits->maxViewports = 16;
118 limits->maxViewportDimensions[0] = 4096;
119 limits->maxViewportDimensions[1] = 4096;
120 limits->viewportBoundsRange[0] = -8192;
121 limits->viewportBoundsRange[1] = 8191;
122 limits->viewportSubPixelBits = 0;
123 limits->minMemoryMapAlignment = 64;
124 limits->minTexelBufferOffsetAlignment = 16;
125 limits->minUniformBufferOffsetAlignment = 16;
126 limits->minStorageBufferOffsetAlignment = 16;
127 limits->minTexelOffset = -8;
128 limits->maxTexelOffset = 7;
129 limits->minTexelGatherOffset = -8;
130 limits->maxTexelGatherOffset = 7;
131 limits->minInterpolationOffset = 0.0f;
132 limits->maxInterpolationOffset = 0.5f;
133 limits->subPixelInterpolationOffsetBits = 4;
134 limits->maxFramebufferWidth = 4096;
135 limits->maxFramebufferHeight = 4096;
136 limits->maxFramebufferLayers = 256;
137 limits->framebufferColorSampleCounts = 0x7F;
138 limits->framebufferDepthSampleCounts = 0x7F;
139 limits->framebufferStencilSampleCounts = 0x7F;
140 limits->framebufferNoAttachmentsSampleCounts = 0x7F;
141 limits->maxColorAttachments = 4;
142 limits->sampledImageColorSampleCounts = 0x7F;
143 limits->sampledImageIntegerSampleCounts = 0x7F;
144 limits->sampledImageDepthSampleCounts = 0x7F;
145 limits->sampledImageStencilSampleCounts = 0x7F;
146 limits->storageImageSampleCounts = 0x7F;
147 limits->maxSampleMaskWords = 1;
148 limits->timestampComputeAndGraphics = VK_TRUE;
149 limits->timestampPeriod = 1;
150 limits->maxClipDistances = 8;
151 limits->maxCullDistances = 8;
152 limits->maxCombinedClipAndCullDistances = 8;
153 limits->discreteQueuePriorities = 2;
154 limits->pointSizeRange[0] = 1.0f;
155 limits->pointSizeRange[1] = 64.0f;
156 limits->lineWidthRange[0] = 1.0f;
157 limits->lineWidthRange[1] = 8.0f;
158 limits->pointSizeGranularity = 1.0f;
159 limits->lineWidthGranularity = 1.0f;
160 limits->strictLines = VK_TRUE;
161 limits->standardSampleLocations = VK_TRUE;
162 limits->optimalBufferCopyOffsetAlignment = 1;
163 limits->optimalBufferCopyRowPitchAlignment = 1;
164 limits->nonCoherentAtomSize = 256;
169 void SetBoolArrayTrue(VkBool32* bool_array, uint32_t num_bools)
171 for (uint32_t i = 0; i < num_bools; ++i) {
172 bool_array[i] = VK_TRUE;
178 static VKAPI_ATTR VkResult VKAPI_CALL CreateInstance(
179 const VkInstanceCreateInfo* pCreateInfo,
180 const VkAllocationCallbacks* pAllocator,
181 VkInstance* pInstance)
184 // TODO: If loader ver <=4 ICD must fail with VK_ERROR_INCOMPATIBLE_DRIVER for all vkCreateInstance calls with
185 // apiVersion set to > Vulkan 1.0 because the loader is still at interface version <= 4. Otherwise, the
186 // ICD should behave as normal.
187 if (loader_interface_version <= 4) {
188 return VK_ERROR_INCOMPATIBLE_DRIVER;
190 *pInstance = (VkInstance)CreateDispObjHandle();
191 for (auto& physical_device : physical_device_map[*pInstance])
192 physical_device = (VkPhysicalDevice)CreateDispObjHandle();
193 // TODO: If emulating specific device caps, will need to add intelligence here
197 static VKAPI_ATTR void VKAPI_CALL DestroyInstance(
199 const VkAllocationCallbacks* pAllocator)
203 for (const auto physical_device : physical_device_map.at(instance))
204 DestroyDispObjHandle((void*)physical_device);
205 physical_device_map.erase(instance);
206 DestroyDispObjHandle((void*)instance);
210 static VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDevices(
212 uint32_t* pPhysicalDeviceCount,
213 VkPhysicalDevice* pPhysicalDevices)
215 VkResult result_code = VK_SUCCESS;
216 if (pPhysicalDevices) {
217 const auto return_count = (std::min)(*pPhysicalDeviceCount, icd_physical_device_count);
218 for (uint32_t i = 0; i < return_count; ++i) pPhysicalDevices[i] = physical_device_map.at(instance)[i];
219 if (return_count < icd_physical_device_count) result_code = VK_INCOMPLETE;
220 *pPhysicalDeviceCount = return_count;
222 *pPhysicalDeviceCount = icd_physical_device_count;
227 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures(
228 VkPhysicalDevice physicalDevice,
229 VkPhysicalDeviceFeatures* pFeatures)
231 uint32_t num_bools = sizeof(VkPhysicalDeviceFeatures) / sizeof(VkBool32);
232 VkBool32 *bool_array = &pFeatures->robustBufferAccess;
233 SetBoolArrayTrue(bool_array, num_bools);
236 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties(
237 VkPhysicalDevice physicalDevice,
239 VkFormatProperties* pFormatProperties)
241 if (VK_FORMAT_UNDEFINED == format) {
242 *pFormatProperties = { 0x0, 0x0, 0x0 };
244 // TODO: Just returning full support for everything initially
245 *pFormatProperties = { 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF };
249 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties(
250 VkPhysicalDevice physicalDevice,
253 VkImageTiling tiling,
254 VkImageUsageFlags usage,
255 VkImageCreateFlags flags,
256 VkImageFormatProperties* pImageFormatProperties)
258 // A hardcoded unsupported format
259 if (format == VK_FORMAT_E5B9G9R9_UFLOAT_PACK32) {
260 return VK_ERROR_FORMAT_NOT_SUPPORTED;
263 // TODO: Just hard-coding some values for now
264 // TODO: If tiling is linear, limit the mips, levels, & sample count
265 if (VK_IMAGE_TILING_LINEAR == tiling) {
266 *pImageFormatProperties = { { 4096, 4096, 256 }, 1, 1, VK_SAMPLE_COUNT_1_BIT, 4294967296 };
268 // We hard-code support for all sample counts except 64 bits.
269 *pImageFormatProperties = { { 4096, 4096, 256 }, 12, 256, 0x7F & ~VK_SAMPLE_COUNT_64_BIT, 4294967296 };
274 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties(
275 VkPhysicalDevice physicalDevice,
276 VkPhysicalDeviceProperties* pProperties)
278 // TODO: Just hard-coding some values for now
279 pProperties->apiVersion = VK_API_VERSION_1_0;
280 pProperties->driverVersion = 1;
281 pProperties->vendorID = 0xba5eba11;
282 pProperties->deviceID = 0xf005ba11;
283 pProperties->deviceType = VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU;
284 //std::string devName = "Vulkan Mock Device";
285 strcpy(pProperties->deviceName, "Vulkan Mock Device");
286 pProperties->pipelineCacheUUID[0] = 18;
287 pProperties->limits = SetLimits(&pProperties->limits);
288 pProperties->sparseProperties = { VK_TRUE, VK_TRUE, VK_TRUE, VK_TRUE, VK_TRUE };
291 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties(
292 VkPhysicalDevice physicalDevice,
293 uint32_t* pQueueFamilyPropertyCount,
294 VkQueueFamilyProperties* pQueueFamilyProperties)
296 if (!pQueueFamilyProperties) {
297 *pQueueFamilyPropertyCount = 1;
299 if (*pQueueFamilyPropertyCount) {
300 pQueueFamilyProperties[0].queueFlags = VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | VK_QUEUE_TRANSFER_BIT | VK_QUEUE_SPARSE_BINDING_BIT;
301 pQueueFamilyProperties[0].queueCount = 1;
302 pQueueFamilyProperties[0].timestampValidBits = 0;
303 pQueueFamilyProperties[0].minImageTransferGranularity = {1,1,1};
308 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties(
309 VkPhysicalDevice physicalDevice,
310 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
312 pMemoryProperties->memoryTypeCount = 2;
313 pMemoryProperties->memoryTypes[0].propertyFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
314 pMemoryProperties->memoryTypes[0].heapIndex = 0;
315 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;
316 pMemoryProperties->memoryTypes[1].heapIndex = 1;
317 pMemoryProperties->memoryHeapCount = 2;
318 pMemoryProperties->memoryHeaps[0].flags = 0;
319 pMemoryProperties->memoryHeaps[0].size = 8000000000;
320 pMemoryProperties->memoryHeaps[1].flags = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT;
321 pMemoryProperties->memoryHeaps[1].size = 8000000000;
324 static VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetInstanceProcAddr(
329 if (!negotiate_loader_icd_interface_called) {
330 loader_interface_version = 0;
332 const auto &item = name_to_funcptr_map.find(pName);
333 if (item != name_to_funcptr_map.end()) {
334 return reinterpret_cast<PFN_vkVoidFunction>(item->second);
336 // Mock should intercept all functions so if we get here just return null
340 static VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(
345 return GetInstanceProcAddr(nullptr, pName);
348 static VKAPI_ATTR VkResult VKAPI_CALL CreateDevice(
349 VkPhysicalDevice physicalDevice,
350 const VkDeviceCreateInfo* pCreateInfo,
351 const VkAllocationCallbacks* pAllocator,
355 *pDevice = (VkDevice)CreateDispObjHandle();
356 // TODO: If emulating specific device caps, will need to add intelligence here
360 static VKAPI_ATTR void VKAPI_CALL DestroyDevice(
362 const VkAllocationCallbacks* pAllocator)
365 unique_lock_t lock(global_lock);
366 // First destroy sub-device objects
368 for (auto dev_queue_map_pair : queue_map) {
369 for (auto queue_family_map_pair : queue_map[dev_queue_map_pair.first]) {
370 for (auto index_queue_pair : queue_map[dev_queue_map_pair.first][queue_family_map_pair.first]) {
371 DestroyDispObjHandle((void*)index_queue_pair.second);
376 buffer_map.erase(device);
377 image_memory_size_map.erase(device);
378 // Now destroy device
379 DestroyDispObjHandle((void*)device);
380 // TODO: If emulating specific device caps, will need to add intelligence here
383 static VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceExtensionProperties(
384 const char* pLayerName,
385 uint32_t* pPropertyCount,
386 VkExtensionProperties* pProperties)
389 // If requesting number of extensions, return that
392 *pPropertyCount = (uint32_t)instance_extension_map.size();
395 for (const auto &name_ver_pair : instance_extension_map) {
396 if (i == *pPropertyCount) {
399 std::strncpy(pProperties[i].extensionName, name_ver_pair.first.c_str(), sizeof(pProperties[i].extensionName));
400 pProperties[i].extensionName[sizeof(pProperties[i].extensionName) - 1] = 0;
401 pProperties[i].specVersion = name_ver_pair.second;
404 if (i != instance_extension_map.size()) {
405 return VK_INCOMPLETE;
409 // If requesting extension properties, fill in data struct for number of extensions
413 static VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceExtensionProperties(
414 VkPhysicalDevice physicalDevice,
415 const char* pLayerName,
416 uint32_t* pPropertyCount,
417 VkExtensionProperties* pProperties)
420 // If requesting number of extensions, return that
423 *pPropertyCount = (uint32_t)device_extension_map.size();
426 for (const auto &name_ver_pair : device_extension_map) {
427 if (i == *pPropertyCount) {
430 std::strncpy(pProperties[i].extensionName, name_ver_pair.first.c_str(), sizeof(pProperties[i].extensionName));
431 pProperties[i].extensionName[sizeof(pProperties[i].extensionName) - 1] = 0;
432 pProperties[i].specVersion = name_ver_pair.second;
435 if (i != device_extension_map.size()) {
436 return VK_INCOMPLETE;
440 // If requesting extension properties, fill in data struct for number of extensions
444 static VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceLayerProperties(
445 uint32_t* pPropertyCount,
446 VkLayerProperties* pProperties)
452 static VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceLayerProperties(
453 VkPhysicalDevice physicalDevice,
454 uint32_t* pPropertyCount,
455 VkLayerProperties* pProperties)
461 static VKAPI_ATTR void VKAPI_CALL GetDeviceQueue(
463 uint32_t queueFamilyIndex,
467 unique_lock_t lock(global_lock);
468 auto queue = queue_map[device][queueFamilyIndex][queueIndex];
472 *pQueue = queue_map[device][queueFamilyIndex][queueIndex] = (VkQueue)CreateDispObjHandle();
474 // TODO: If emulating specific device caps, will need to add intelligence here
478 static VKAPI_ATTR VkResult VKAPI_CALL QueueSubmit(
480 uint32_t submitCount,
481 const VkSubmitInfo* pSubmits,
484 //Not a CREATE or DESTROY function
488 static VKAPI_ATTR VkResult VKAPI_CALL QueueWaitIdle(
491 //Not a CREATE or DESTROY function
495 static VKAPI_ATTR VkResult VKAPI_CALL DeviceWaitIdle(
498 //Not a CREATE or DESTROY function
502 static VKAPI_ATTR VkResult VKAPI_CALL AllocateMemory(
504 const VkMemoryAllocateInfo* pAllocateInfo,
505 const VkAllocationCallbacks* pAllocator,
506 VkDeviceMemory* pMemory)
508 unique_lock_t lock(global_lock);
509 allocated_memory_size_map[(VkDeviceMemory)global_unique_handle] = pAllocateInfo->allocationSize;
510 *pMemory = (VkDeviceMemory)global_unique_handle++;
514 static VKAPI_ATTR void VKAPI_CALL FreeMemory(
516 VkDeviceMemory memory,
517 const VkAllocationCallbacks* pAllocator)
520 allocated_memory_size_map.erase(memory);
523 static VKAPI_ATTR VkResult VKAPI_CALL MapMemory(
525 VkDeviceMemory memory,
528 VkMemoryMapFlags flags,
531 unique_lock_t lock(global_lock);
532 if (VK_WHOLE_SIZE == size) {
533 if (allocated_memory_size_map.count(memory) != 0)
534 size = allocated_memory_size_map[memory] - offset;
538 void* map_addr = malloc((size_t)size);
539 mapped_memory_map[memory].push_back(map_addr);
544 static VKAPI_ATTR void VKAPI_CALL UnmapMemory(
546 VkDeviceMemory memory)
548 unique_lock_t lock(global_lock);
549 for (auto map_addr : mapped_memory_map[memory]) {
552 mapped_memory_map.erase(memory);
555 static VKAPI_ATTR VkResult VKAPI_CALL FlushMappedMemoryRanges(
557 uint32_t memoryRangeCount,
558 const VkMappedMemoryRange* pMemoryRanges)
560 //Not a CREATE or DESTROY function
564 static VKAPI_ATTR VkResult VKAPI_CALL InvalidateMappedMemoryRanges(
566 uint32_t memoryRangeCount,
567 const VkMappedMemoryRange* pMemoryRanges)
569 //Not a CREATE or DESTROY function
573 static VKAPI_ATTR void VKAPI_CALL GetDeviceMemoryCommitment(
575 VkDeviceMemory memory,
576 VkDeviceSize* pCommittedMemoryInBytes)
578 //Not a CREATE or DESTROY function
581 static VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory(
584 VkDeviceMemory memory,
585 VkDeviceSize memoryOffset)
587 //Not a CREATE or DESTROY function
591 static VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory(
594 VkDeviceMemory memory,
595 VkDeviceSize memoryOffset)
597 //Not a CREATE or DESTROY function
601 static VKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements(
604 VkMemoryRequirements* pMemoryRequirements)
606 // TODO: Just hard-coding reqs for now
607 pMemoryRequirements->size = 4096;
608 pMemoryRequirements->alignment = 1;
609 pMemoryRequirements->memoryTypeBits = 0xFFFF;
610 // Return a better size based on the buffer size from the create info.
611 auto d_iter = buffer_map.find(device);
612 if (d_iter != buffer_map.end()) {
613 auto iter = d_iter->second.find(buffer);
614 if (iter != d_iter->second.end()) {
615 pMemoryRequirements->size = ((iter->second.size + 4095) / 4096) * 4096;
620 static VKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements(
623 VkMemoryRequirements* pMemoryRequirements)
625 pMemoryRequirements->size = 0;
626 pMemoryRequirements->alignment = 1;
628 auto d_iter = image_memory_size_map.find(device);
629 if(d_iter != image_memory_size_map.end()){
630 auto iter = d_iter->second.find(image);
631 if (iter != d_iter->second.end()) {
632 pMemoryRequirements->size = iter->second;
635 // Here we hard-code that the memory type at index 3 doesn't support this image.
636 pMemoryRequirements->memoryTypeBits = 0xFFFF & ~(0x1 << 3);
639 static VKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements(
642 uint32_t* pSparseMemoryRequirementCount,
643 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
645 //Not a CREATE or DESTROY function
648 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties(
649 VkPhysicalDevice physicalDevice,
652 VkSampleCountFlagBits samples,
653 VkImageUsageFlags usage,
654 VkImageTiling tiling,
655 uint32_t* pPropertyCount,
656 VkSparseImageFormatProperties* pProperties)
658 //Not a CREATE or DESTROY function
661 static VKAPI_ATTR VkResult VKAPI_CALL QueueBindSparse(
663 uint32_t bindInfoCount,
664 const VkBindSparseInfo* pBindInfo,
667 //Not a CREATE or DESTROY function
671 static VKAPI_ATTR VkResult VKAPI_CALL CreateFence(
673 const VkFenceCreateInfo* pCreateInfo,
674 const VkAllocationCallbacks* pAllocator,
677 unique_lock_t lock(global_lock);
678 *pFence = (VkFence)global_unique_handle++;
682 static VKAPI_ATTR void VKAPI_CALL DestroyFence(
685 const VkAllocationCallbacks* pAllocator)
690 static VKAPI_ATTR VkResult VKAPI_CALL ResetFences(
693 const VkFence* pFences)
695 //Not a CREATE or DESTROY function
699 static VKAPI_ATTR VkResult VKAPI_CALL GetFenceStatus(
703 //Not a CREATE or DESTROY function
707 static VKAPI_ATTR VkResult VKAPI_CALL WaitForFences(
710 const VkFence* pFences,
714 //Not a CREATE or DESTROY function
718 static VKAPI_ATTR VkResult VKAPI_CALL CreateSemaphore(
720 const VkSemaphoreCreateInfo* pCreateInfo,
721 const VkAllocationCallbacks* pAllocator,
722 VkSemaphore* pSemaphore)
724 unique_lock_t lock(global_lock);
725 *pSemaphore = (VkSemaphore)global_unique_handle++;
729 static VKAPI_ATTR void VKAPI_CALL DestroySemaphore(
731 VkSemaphore semaphore,
732 const VkAllocationCallbacks* pAllocator)
737 static VKAPI_ATTR VkResult VKAPI_CALL CreateEvent(
739 const VkEventCreateInfo* pCreateInfo,
740 const VkAllocationCallbacks* pAllocator,
743 unique_lock_t lock(global_lock);
744 *pEvent = (VkEvent)global_unique_handle++;
748 static VKAPI_ATTR void VKAPI_CALL DestroyEvent(
751 const VkAllocationCallbacks* pAllocator)
756 static VKAPI_ATTR VkResult VKAPI_CALL GetEventStatus(
760 //Not a CREATE or DESTROY function
764 static VKAPI_ATTR VkResult VKAPI_CALL SetEvent(
768 //Not a CREATE or DESTROY function
772 static VKAPI_ATTR VkResult VKAPI_CALL ResetEvent(
776 //Not a CREATE or DESTROY function
780 static VKAPI_ATTR VkResult VKAPI_CALL CreateQueryPool(
782 const VkQueryPoolCreateInfo* pCreateInfo,
783 const VkAllocationCallbacks* pAllocator,
784 VkQueryPool* pQueryPool)
786 unique_lock_t lock(global_lock);
787 *pQueryPool = (VkQueryPool)global_unique_handle++;
791 static VKAPI_ATTR void VKAPI_CALL DestroyQueryPool(
793 VkQueryPool queryPool,
794 const VkAllocationCallbacks* pAllocator)
799 static VKAPI_ATTR VkResult VKAPI_CALL GetQueryPoolResults(
801 VkQueryPool queryPool,
807 VkQueryResultFlags flags)
809 //Not a CREATE or DESTROY function
813 static VKAPI_ATTR VkResult VKAPI_CALL CreateBuffer(
815 const VkBufferCreateInfo* pCreateInfo,
816 const VkAllocationCallbacks* pAllocator,
819 unique_lock_t lock(global_lock);
820 *pBuffer = (VkBuffer)global_unique_handle++;
821 buffer_map[device][*pBuffer] = *pCreateInfo;
825 static VKAPI_ATTR void VKAPI_CALL DestroyBuffer(
828 const VkAllocationCallbacks* pAllocator)
830 unique_lock_t lock(global_lock);
831 buffer_map[device].erase(buffer);
834 static VKAPI_ATTR VkResult VKAPI_CALL CreateBufferView(
836 const VkBufferViewCreateInfo* pCreateInfo,
837 const VkAllocationCallbacks* pAllocator,
840 unique_lock_t lock(global_lock);
841 *pView = (VkBufferView)global_unique_handle++;
845 static VKAPI_ATTR void VKAPI_CALL DestroyBufferView(
847 VkBufferView bufferView,
848 const VkAllocationCallbacks* pAllocator)
853 static VKAPI_ATTR VkResult VKAPI_CALL CreateImage(
855 const VkImageCreateInfo* pCreateInfo,
856 const VkAllocationCallbacks* pAllocator,
859 unique_lock_t lock(global_lock);
860 *pImage = (VkImage)global_unique_handle++;
861 // TODO: A pixel size is 32 bytes. This accounts for the largest possible pixel size of any format. It could be changed to more accurate size if need be.
862 image_memory_size_map[device][*pImage] = pCreateInfo->extent.width * pCreateInfo->extent.height * pCreateInfo->extent.depth *
863 32 * pCreateInfo->arrayLayers * (pCreateInfo->mipLevels > 1 ? 2 : 1);
865 switch (pCreateInfo->format) {
866 case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
867 case VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:
868 case VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM:
869 case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:
870 case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:
871 case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16:
872 case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:
873 case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:
874 case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16:
875 case VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM:
876 case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:
877 case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:
878 image_memory_size_map[device][*pImage] *= 3;
880 case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
881 case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:
882 case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:
883 case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:
884 case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:
885 case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:
886 case VK_FORMAT_G16_B16R16_2PLANE_420_UNORM:
887 case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:
888 image_memory_size_map[device][*pImage] *= 2;
896 static VKAPI_ATTR void VKAPI_CALL DestroyImage(
899 const VkAllocationCallbacks* pAllocator)
901 unique_lock_t lock(global_lock);
902 image_memory_size_map[device].erase(image);
905 static VKAPI_ATTR void VKAPI_CALL GetImageSubresourceLayout(
908 const VkImageSubresource* pSubresource,
909 VkSubresourceLayout* pLayout)
911 // Need safe values. Callers are computing memory offsets from pLayout, with no return code to flag failure.
912 *pLayout = VkSubresourceLayout(); // Default constructor zero values.
915 static VKAPI_ATTR VkResult VKAPI_CALL CreateImageView(
917 const VkImageViewCreateInfo* pCreateInfo,
918 const VkAllocationCallbacks* pAllocator,
921 unique_lock_t lock(global_lock);
922 *pView = (VkImageView)global_unique_handle++;
926 static VKAPI_ATTR void VKAPI_CALL DestroyImageView(
928 VkImageView imageView,
929 const VkAllocationCallbacks* pAllocator)
934 static VKAPI_ATTR VkResult VKAPI_CALL CreateShaderModule(
936 const VkShaderModuleCreateInfo* pCreateInfo,
937 const VkAllocationCallbacks* pAllocator,
938 VkShaderModule* pShaderModule)
940 unique_lock_t lock(global_lock);
941 *pShaderModule = (VkShaderModule)global_unique_handle++;
945 static VKAPI_ATTR void VKAPI_CALL DestroyShaderModule(
947 VkShaderModule shaderModule,
948 const VkAllocationCallbacks* pAllocator)
953 static VKAPI_ATTR VkResult VKAPI_CALL CreatePipelineCache(
955 const VkPipelineCacheCreateInfo* pCreateInfo,
956 const VkAllocationCallbacks* pAllocator,
957 VkPipelineCache* pPipelineCache)
959 unique_lock_t lock(global_lock);
960 *pPipelineCache = (VkPipelineCache)global_unique_handle++;
964 static VKAPI_ATTR void VKAPI_CALL DestroyPipelineCache(
966 VkPipelineCache pipelineCache,
967 const VkAllocationCallbacks* pAllocator)
972 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineCacheData(
974 VkPipelineCache pipelineCache,
978 //Not a CREATE or DESTROY function
982 static VKAPI_ATTR VkResult VKAPI_CALL MergePipelineCaches(
984 VkPipelineCache dstCache,
985 uint32_t srcCacheCount,
986 const VkPipelineCache* pSrcCaches)
988 //Not a CREATE or DESTROY function
992 static VKAPI_ATTR VkResult VKAPI_CALL CreateGraphicsPipelines(
994 VkPipelineCache pipelineCache,
995 uint32_t createInfoCount,
996 const VkGraphicsPipelineCreateInfo* pCreateInfos,
997 const VkAllocationCallbacks* pAllocator,
998 VkPipeline* pPipelines)
1000 unique_lock_t lock(global_lock);
1001 for (uint32_t i = 0; i < createInfoCount; ++i) {
1002 pPipelines[i] = (VkPipeline)global_unique_handle++;
1007 static VKAPI_ATTR VkResult VKAPI_CALL CreateComputePipelines(
1009 VkPipelineCache pipelineCache,
1010 uint32_t createInfoCount,
1011 const VkComputePipelineCreateInfo* pCreateInfos,
1012 const VkAllocationCallbacks* pAllocator,
1013 VkPipeline* pPipelines)
1015 unique_lock_t lock(global_lock);
1016 for (uint32_t i = 0; i < createInfoCount; ++i) {
1017 pPipelines[i] = (VkPipeline)global_unique_handle++;
1022 static VKAPI_ATTR void VKAPI_CALL DestroyPipeline(
1024 VkPipeline pipeline,
1025 const VkAllocationCallbacks* pAllocator)
1030 static VKAPI_ATTR VkResult VKAPI_CALL CreatePipelineLayout(
1032 const VkPipelineLayoutCreateInfo* pCreateInfo,
1033 const VkAllocationCallbacks* pAllocator,
1034 VkPipelineLayout* pPipelineLayout)
1036 unique_lock_t lock(global_lock);
1037 *pPipelineLayout = (VkPipelineLayout)global_unique_handle++;
1041 static VKAPI_ATTR void VKAPI_CALL DestroyPipelineLayout(
1043 VkPipelineLayout pipelineLayout,
1044 const VkAllocationCallbacks* pAllocator)
1049 static VKAPI_ATTR VkResult VKAPI_CALL CreateSampler(
1051 const VkSamplerCreateInfo* pCreateInfo,
1052 const VkAllocationCallbacks* pAllocator,
1053 VkSampler* pSampler)
1055 unique_lock_t lock(global_lock);
1056 *pSampler = (VkSampler)global_unique_handle++;
1060 static VKAPI_ATTR void VKAPI_CALL DestroySampler(
1063 const VkAllocationCallbacks* pAllocator)
1068 static VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorSetLayout(
1070 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
1071 const VkAllocationCallbacks* pAllocator,
1072 VkDescriptorSetLayout* pSetLayout)
1074 unique_lock_t lock(global_lock);
1075 *pSetLayout = (VkDescriptorSetLayout)global_unique_handle++;
1079 static VKAPI_ATTR void VKAPI_CALL DestroyDescriptorSetLayout(
1081 VkDescriptorSetLayout descriptorSetLayout,
1082 const VkAllocationCallbacks* pAllocator)
1087 static VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorPool(
1089 const VkDescriptorPoolCreateInfo* pCreateInfo,
1090 const VkAllocationCallbacks* pAllocator,
1091 VkDescriptorPool* pDescriptorPool)
1093 unique_lock_t lock(global_lock);
1094 *pDescriptorPool = (VkDescriptorPool)global_unique_handle++;
1098 static VKAPI_ATTR void VKAPI_CALL DestroyDescriptorPool(
1100 VkDescriptorPool descriptorPool,
1101 const VkAllocationCallbacks* pAllocator)
1106 static VKAPI_ATTR VkResult VKAPI_CALL ResetDescriptorPool(
1108 VkDescriptorPool descriptorPool,
1109 VkDescriptorPoolResetFlags flags)
1111 //Not a CREATE or DESTROY function
1115 static VKAPI_ATTR VkResult VKAPI_CALL AllocateDescriptorSets(
1117 const VkDescriptorSetAllocateInfo* pAllocateInfo,
1118 VkDescriptorSet* pDescriptorSets)
1120 unique_lock_t lock(global_lock);
1121 for (uint32_t i = 0; i < pAllocateInfo->descriptorSetCount; ++i) {
1122 pDescriptorSets[i] = (VkDescriptorSet)global_unique_handle++;
1127 static VKAPI_ATTR VkResult VKAPI_CALL FreeDescriptorSets(
1129 VkDescriptorPool descriptorPool,
1130 uint32_t descriptorSetCount,
1131 const VkDescriptorSet* pDescriptorSets)
1137 static VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSets(
1139 uint32_t descriptorWriteCount,
1140 const VkWriteDescriptorSet* pDescriptorWrites,
1141 uint32_t descriptorCopyCount,
1142 const VkCopyDescriptorSet* pDescriptorCopies)
1144 //Not a CREATE or DESTROY function
1147 static VKAPI_ATTR VkResult VKAPI_CALL CreateFramebuffer(
1149 const VkFramebufferCreateInfo* pCreateInfo,
1150 const VkAllocationCallbacks* pAllocator,
1151 VkFramebuffer* pFramebuffer)
1153 unique_lock_t lock(global_lock);
1154 *pFramebuffer = (VkFramebuffer)global_unique_handle++;
1158 static VKAPI_ATTR void VKAPI_CALL DestroyFramebuffer(
1160 VkFramebuffer framebuffer,
1161 const VkAllocationCallbacks* pAllocator)
1166 static VKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass(
1168 const VkRenderPassCreateInfo* pCreateInfo,
1169 const VkAllocationCallbacks* pAllocator,
1170 VkRenderPass* pRenderPass)
1172 unique_lock_t lock(global_lock);
1173 *pRenderPass = (VkRenderPass)global_unique_handle++;
1177 static VKAPI_ATTR void VKAPI_CALL DestroyRenderPass(
1179 VkRenderPass renderPass,
1180 const VkAllocationCallbacks* pAllocator)
1185 static VKAPI_ATTR void VKAPI_CALL GetRenderAreaGranularity(
1187 VkRenderPass renderPass,
1188 VkExtent2D* pGranularity)
1190 //Not a CREATE or DESTROY function
1193 static VKAPI_ATTR VkResult VKAPI_CALL CreateCommandPool(
1195 const VkCommandPoolCreateInfo* pCreateInfo,
1196 const VkAllocationCallbacks* pAllocator,
1197 VkCommandPool* pCommandPool)
1199 unique_lock_t lock(global_lock);
1200 *pCommandPool = (VkCommandPool)global_unique_handle++;
1204 static VKAPI_ATTR void VKAPI_CALL DestroyCommandPool(
1206 VkCommandPool commandPool,
1207 const VkAllocationCallbacks* pAllocator)
1212 static VKAPI_ATTR VkResult VKAPI_CALL ResetCommandPool(
1214 VkCommandPool commandPool,
1215 VkCommandPoolResetFlags flags)
1217 //Not a CREATE or DESTROY function
1221 static VKAPI_ATTR VkResult VKAPI_CALL AllocateCommandBuffers(
1223 const VkCommandBufferAllocateInfo* pAllocateInfo,
1224 VkCommandBuffer* pCommandBuffers)
1226 unique_lock_t lock(global_lock);
1227 for (uint32_t i = 0; i < pAllocateInfo->commandBufferCount; ++i) {
1228 pCommandBuffers[i] = (VkCommandBuffer)CreateDispObjHandle();
1233 static VKAPI_ATTR void VKAPI_CALL FreeCommandBuffers(
1235 VkCommandPool commandPool,
1236 uint32_t commandBufferCount,
1237 const VkCommandBuffer* pCommandBuffers)
1242 static VKAPI_ATTR VkResult VKAPI_CALL BeginCommandBuffer(
1243 VkCommandBuffer commandBuffer,
1244 const VkCommandBufferBeginInfo* pBeginInfo)
1246 //Not a CREATE or DESTROY function
1250 static VKAPI_ATTR VkResult VKAPI_CALL EndCommandBuffer(
1251 VkCommandBuffer commandBuffer)
1253 //Not a CREATE or DESTROY function
1257 static VKAPI_ATTR VkResult VKAPI_CALL ResetCommandBuffer(
1258 VkCommandBuffer commandBuffer,
1259 VkCommandBufferResetFlags flags)
1261 //Not a CREATE or DESTROY function
1265 static VKAPI_ATTR void VKAPI_CALL CmdBindPipeline(
1266 VkCommandBuffer commandBuffer,
1267 VkPipelineBindPoint pipelineBindPoint,
1268 VkPipeline pipeline)
1270 //Not a CREATE or DESTROY function
1273 static VKAPI_ATTR void VKAPI_CALL CmdSetViewport(
1274 VkCommandBuffer commandBuffer,
1275 uint32_t firstViewport,
1276 uint32_t viewportCount,
1277 const VkViewport* pViewports)
1279 //Not a CREATE or DESTROY function
1282 static VKAPI_ATTR void VKAPI_CALL CmdSetScissor(
1283 VkCommandBuffer commandBuffer,
1284 uint32_t firstScissor,
1285 uint32_t scissorCount,
1286 const VkRect2D* pScissors)
1288 //Not a CREATE or DESTROY function
1291 static VKAPI_ATTR void VKAPI_CALL CmdSetLineWidth(
1292 VkCommandBuffer commandBuffer,
1295 //Not a CREATE or DESTROY function
1298 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthBias(
1299 VkCommandBuffer commandBuffer,
1300 float depthBiasConstantFactor,
1301 float depthBiasClamp,
1302 float depthBiasSlopeFactor)
1304 //Not a CREATE or DESTROY function
1307 static VKAPI_ATTR void VKAPI_CALL CmdSetBlendConstants(
1308 VkCommandBuffer commandBuffer,
1309 const float blendConstants[4])
1311 //Not a CREATE or DESTROY function
1314 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthBounds(
1315 VkCommandBuffer commandBuffer,
1316 float minDepthBounds,
1317 float maxDepthBounds)
1319 //Not a CREATE or DESTROY function
1322 static VKAPI_ATTR void VKAPI_CALL CmdSetStencilCompareMask(
1323 VkCommandBuffer commandBuffer,
1324 VkStencilFaceFlags faceMask,
1325 uint32_t compareMask)
1327 //Not a CREATE or DESTROY function
1330 static VKAPI_ATTR void VKAPI_CALL CmdSetStencilWriteMask(
1331 VkCommandBuffer commandBuffer,
1332 VkStencilFaceFlags faceMask,
1335 //Not a CREATE or DESTROY function
1338 static VKAPI_ATTR void VKAPI_CALL CmdSetStencilReference(
1339 VkCommandBuffer commandBuffer,
1340 VkStencilFaceFlags faceMask,
1343 //Not a CREATE or DESTROY function
1346 static VKAPI_ATTR void VKAPI_CALL CmdBindDescriptorSets(
1347 VkCommandBuffer commandBuffer,
1348 VkPipelineBindPoint pipelineBindPoint,
1349 VkPipelineLayout layout,
1351 uint32_t descriptorSetCount,
1352 const VkDescriptorSet* pDescriptorSets,
1353 uint32_t dynamicOffsetCount,
1354 const uint32_t* pDynamicOffsets)
1356 //Not a CREATE or DESTROY function
1359 static VKAPI_ATTR void VKAPI_CALL CmdBindIndexBuffer(
1360 VkCommandBuffer commandBuffer,
1362 VkDeviceSize offset,
1363 VkIndexType indexType)
1365 //Not a CREATE or DESTROY function
1368 static VKAPI_ATTR void VKAPI_CALL CmdBindVertexBuffers(
1369 VkCommandBuffer commandBuffer,
1370 uint32_t firstBinding,
1371 uint32_t bindingCount,
1372 const VkBuffer* pBuffers,
1373 const VkDeviceSize* pOffsets)
1375 //Not a CREATE or DESTROY function
1378 static VKAPI_ATTR void VKAPI_CALL CmdDraw(
1379 VkCommandBuffer commandBuffer,
1380 uint32_t vertexCount,
1381 uint32_t instanceCount,
1382 uint32_t firstVertex,
1383 uint32_t firstInstance)
1385 //Not a CREATE or DESTROY function
1388 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndexed(
1389 VkCommandBuffer commandBuffer,
1390 uint32_t indexCount,
1391 uint32_t instanceCount,
1392 uint32_t firstIndex,
1393 int32_t vertexOffset,
1394 uint32_t firstInstance)
1396 //Not a CREATE or DESTROY function
1399 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirect(
1400 VkCommandBuffer commandBuffer,
1402 VkDeviceSize offset,
1406 //Not a CREATE or DESTROY function
1409 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirect(
1410 VkCommandBuffer commandBuffer,
1412 VkDeviceSize offset,
1416 //Not a CREATE or DESTROY function
1419 static VKAPI_ATTR void VKAPI_CALL CmdDispatch(
1420 VkCommandBuffer commandBuffer,
1421 uint32_t groupCountX,
1422 uint32_t groupCountY,
1423 uint32_t groupCountZ)
1425 //Not a CREATE or DESTROY function
1428 static VKAPI_ATTR void VKAPI_CALL CmdDispatchIndirect(
1429 VkCommandBuffer commandBuffer,
1431 VkDeviceSize offset)
1433 //Not a CREATE or DESTROY function
1436 static VKAPI_ATTR void VKAPI_CALL CmdCopyBuffer(
1437 VkCommandBuffer commandBuffer,
1440 uint32_t regionCount,
1441 const VkBufferCopy* pRegions)
1443 //Not a CREATE or DESTROY function
1446 static VKAPI_ATTR void VKAPI_CALL CmdCopyImage(
1447 VkCommandBuffer commandBuffer,
1449 VkImageLayout srcImageLayout,
1451 VkImageLayout dstImageLayout,
1452 uint32_t regionCount,
1453 const VkImageCopy* pRegions)
1455 //Not a CREATE or DESTROY function
1458 static VKAPI_ATTR void VKAPI_CALL CmdBlitImage(
1459 VkCommandBuffer commandBuffer,
1461 VkImageLayout srcImageLayout,
1463 VkImageLayout dstImageLayout,
1464 uint32_t regionCount,
1465 const VkImageBlit* pRegions,
1468 //Not a CREATE or DESTROY function
1471 static VKAPI_ATTR void VKAPI_CALL CmdCopyBufferToImage(
1472 VkCommandBuffer commandBuffer,
1475 VkImageLayout dstImageLayout,
1476 uint32_t regionCount,
1477 const VkBufferImageCopy* pRegions)
1479 //Not a CREATE or DESTROY function
1482 static VKAPI_ATTR void VKAPI_CALL CmdCopyImageToBuffer(
1483 VkCommandBuffer commandBuffer,
1485 VkImageLayout srcImageLayout,
1487 uint32_t regionCount,
1488 const VkBufferImageCopy* pRegions)
1490 //Not a CREATE or DESTROY function
1493 static VKAPI_ATTR void VKAPI_CALL CmdUpdateBuffer(
1494 VkCommandBuffer commandBuffer,
1496 VkDeviceSize dstOffset,
1497 VkDeviceSize dataSize,
1500 //Not a CREATE or DESTROY function
1503 static VKAPI_ATTR void VKAPI_CALL CmdFillBuffer(
1504 VkCommandBuffer commandBuffer,
1506 VkDeviceSize dstOffset,
1510 //Not a CREATE or DESTROY function
1513 static VKAPI_ATTR void VKAPI_CALL CmdClearColorImage(
1514 VkCommandBuffer commandBuffer,
1516 VkImageLayout imageLayout,
1517 const VkClearColorValue* pColor,
1518 uint32_t rangeCount,
1519 const VkImageSubresourceRange* pRanges)
1521 //Not a CREATE or DESTROY function
1524 static VKAPI_ATTR void VKAPI_CALL CmdClearDepthStencilImage(
1525 VkCommandBuffer commandBuffer,
1527 VkImageLayout imageLayout,
1528 const VkClearDepthStencilValue* pDepthStencil,
1529 uint32_t rangeCount,
1530 const VkImageSubresourceRange* pRanges)
1532 //Not a CREATE or DESTROY function
1535 static VKAPI_ATTR void VKAPI_CALL CmdClearAttachments(
1536 VkCommandBuffer commandBuffer,
1537 uint32_t attachmentCount,
1538 const VkClearAttachment* pAttachments,
1540 const VkClearRect* pRects)
1542 //Not a CREATE or DESTROY function
1545 static VKAPI_ATTR void VKAPI_CALL CmdResolveImage(
1546 VkCommandBuffer commandBuffer,
1548 VkImageLayout srcImageLayout,
1550 VkImageLayout dstImageLayout,
1551 uint32_t regionCount,
1552 const VkImageResolve* pRegions)
1554 //Not a CREATE or DESTROY function
1557 static VKAPI_ATTR void VKAPI_CALL CmdSetEvent(
1558 VkCommandBuffer commandBuffer,
1560 VkPipelineStageFlags stageMask)
1562 //Not a CREATE or DESTROY function
1565 static VKAPI_ATTR void VKAPI_CALL CmdResetEvent(
1566 VkCommandBuffer commandBuffer,
1568 VkPipelineStageFlags stageMask)
1570 //Not a CREATE or DESTROY function
1573 static VKAPI_ATTR void VKAPI_CALL CmdWaitEvents(
1574 VkCommandBuffer commandBuffer,
1575 uint32_t eventCount,
1576 const VkEvent* pEvents,
1577 VkPipelineStageFlags srcStageMask,
1578 VkPipelineStageFlags dstStageMask,
1579 uint32_t memoryBarrierCount,
1580 const VkMemoryBarrier* pMemoryBarriers,
1581 uint32_t bufferMemoryBarrierCount,
1582 const VkBufferMemoryBarrier* pBufferMemoryBarriers,
1583 uint32_t imageMemoryBarrierCount,
1584 const VkImageMemoryBarrier* pImageMemoryBarriers)
1586 //Not a CREATE or DESTROY function
1589 static VKAPI_ATTR void VKAPI_CALL CmdPipelineBarrier(
1590 VkCommandBuffer commandBuffer,
1591 VkPipelineStageFlags srcStageMask,
1592 VkPipelineStageFlags dstStageMask,
1593 VkDependencyFlags dependencyFlags,
1594 uint32_t memoryBarrierCount,
1595 const VkMemoryBarrier* pMemoryBarriers,
1596 uint32_t bufferMemoryBarrierCount,
1597 const VkBufferMemoryBarrier* pBufferMemoryBarriers,
1598 uint32_t imageMemoryBarrierCount,
1599 const VkImageMemoryBarrier* pImageMemoryBarriers)
1601 //Not a CREATE or DESTROY function
1604 static VKAPI_ATTR void VKAPI_CALL CmdBeginQuery(
1605 VkCommandBuffer commandBuffer,
1606 VkQueryPool queryPool,
1608 VkQueryControlFlags flags)
1610 //Not a CREATE or DESTROY function
1613 static VKAPI_ATTR void VKAPI_CALL CmdEndQuery(
1614 VkCommandBuffer commandBuffer,
1615 VkQueryPool queryPool,
1618 //Not a CREATE or DESTROY function
1621 static VKAPI_ATTR void VKAPI_CALL CmdResetQueryPool(
1622 VkCommandBuffer commandBuffer,
1623 VkQueryPool queryPool,
1624 uint32_t firstQuery,
1625 uint32_t queryCount)
1627 //Not a CREATE or DESTROY function
1630 static VKAPI_ATTR void VKAPI_CALL CmdWriteTimestamp(
1631 VkCommandBuffer commandBuffer,
1632 VkPipelineStageFlagBits pipelineStage,
1633 VkQueryPool queryPool,
1636 //Not a CREATE or DESTROY function
1639 static VKAPI_ATTR void VKAPI_CALL CmdCopyQueryPoolResults(
1640 VkCommandBuffer commandBuffer,
1641 VkQueryPool queryPool,
1642 uint32_t firstQuery,
1643 uint32_t queryCount,
1645 VkDeviceSize dstOffset,
1646 VkDeviceSize stride,
1647 VkQueryResultFlags flags)
1649 //Not a CREATE or DESTROY function
1652 static VKAPI_ATTR void VKAPI_CALL CmdPushConstants(
1653 VkCommandBuffer commandBuffer,
1654 VkPipelineLayout layout,
1655 VkShaderStageFlags stageFlags,
1658 const void* pValues)
1660 //Not a CREATE or DESTROY function
1663 static VKAPI_ATTR void VKAPI_CALL CmdBeginRenderPass(
1664 VkCommandBuffer commandBuffer,
1665 const VkRenderPassBeginInfo* pRenderPassBegin,
1666 VkSubpassContents contents)
1668 //Not a CREATE or DESTROY function
1671 static VKAPI_ATTR void VKAPI_CALL CmdNextSubpass(
1672 VkCommandBuffer commandBuffer,
1673 VkSubpassContents contents)
1675 //Not a CREATE or DESTROY function
1678 static VKAPI_ATTR void VKAPI_CALL CmdEndRenderPass(
1679 VkCommandBuffer commandBuffer)
1681 //Not a CREATE or DESTROY function
1684 static VKAPI_ATTR void VKAPI_CALL CmdExecuteCommands(
1685 VkCommandBuffer commandBuffer,
1686 uint32_t commandBufferCount,
1687 const VkCommandBuffer* pCommandBuffers)
1689 //Not a CREATE or DESTROY function
1693 static VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceVersion(
1694 uint32_t* pApiVersion)
1696 //Not a CREATE or DESTROY function
1700 static VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory2(
1702 uint32_t bindInfoCount,
1703 const VkBindBufferMemoryInfo* pBindInfos)
1705 //Not a CREATE or DESTROY function
1709 static VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory2(
1711 uint32_t bindInfoCount,
1712 const VkBindImageMemoryInfo* pBindInfos)
1714 //Not a CREATE or DESTROY function
1718 static VKAPI_ATTR void VKAPI_CALL GetDeviceGroupPeerMemoryFeatures(
1721 uint32_t localDeviceIndex,
1722 uint32_t remoteDeviceIndex,
1723 VkPeerMemoryFeatureFlags* pPeerMemoryFeatures)
1725 //Not a CREATE or DESTROY function
1728 static VKAPI_ATTR void VKAPI_CALL CmdSetDeviceMask(
1729 VkCommandBuffer commandBuffer,
1730 uint32_t deviceMask)
1732 //Not a CREATE or DESTROY function
1735 static VKAPI_ATTR void VKAPI_CALL CmdDispatchBase(
1736 VkCommandBuffer commandBuffer,
1737 uint32_t baseGroupX,
1738 uint32_t baseGroupY,
1739 uint32_t baseGroupZ,
1740 uint32_t groupCountX,
1741 uint32_t groupCountY,
1742 uint32_t groupCountZ)
1744 //Not a CREATE or DESTROY function
1747 static VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDeviceGroups(
1748 VkInstance instance,
1749 uint32_t* pPhysicalDeviceGroupCount,
1750 VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties)
1752 //Not a CREATE or DESTROY function
1756 static VKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements2(
1758 const VkImageMemoryRequirementsInfo2* pInfo,
1759 VkMemoryRequirements2* pMemoryRequirements)
1761 GetImageMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
1764 static VKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements2(
1766 const VkBufferMemoryRequirementsInfo2* pInfo,
1767 VkMemoryRequirements2* pMemoryRequirements)
1769 GetBufferMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
1772 static VKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements2(
1774 const VkImageSparseMemoryRequirementsInfo2* pInfo,
1775 uint32_t* pSparseMemoryRequirementCount,
1776 VkSparseImageMemoryRequirements2* pSparseMemoryRequirements)
1778 //Not a CREATE or DESTROY function
1781 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures2(
1782 VkPhysicalDevice physicalDevice,
1783 VkPhysicalDeviceFeatures2* pFeatures)
1785 GetPhysicalDeviceFeatures2KHR(physicalDevice, pFeatures);
1788 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties2(
1789 VkPhysicalDevice physicalDevice,
1790 VkPhysicalDeviceProperties2* pProperties)
1792 GetPhysicalDeviceProperties2KHR(physicalDevice, pProperties);
1795 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties2(
1796 VkPhysicalDevice physicalDevice,
1798 VkFormatProperties2* pFormatProperties)
1800 GetPhysicalDeviceFormatProperties2KHR(physicalDevice, format, pFormatProperties);
1803 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties2(
1804 VkPhysicalDevice physicalDevice,
1805 const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
1806 VkImageFormatProperties2* pImageFormatProperties)
1808 return GetPhysicalDeviceImageFormatProperties2KHR(physicalDevice, pImageFormatInfo, pImageFormatProperties);
1811 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties2(
1812 VkPhysicalDevice physicalDevice,
1813 uint32_t* pQueueFamilyPropertyCount,
1814 VkQueueFamilyProperties2* pQueueFamilyProperties)
1816 GetPhysicalDeviceQueueFamilyProperties2KHR(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
1819 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties2(
1820 VkPhysicalDevice physicalDevice,
1821 VkPhysicalDeviceMemoryProperties2* pMemoryProperties)
1823 GetPhysicalDeviceMemoryProperties2KHR(physicalDevice, pMemoryProperties);
1826 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties2(
1827 VkPhysicalDevice physicalDevice,
1828 const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
1829 uint32_t* pPropertyCount,
1830 VkSparseImageFormatProperties2* pProperties)
1832 //Not a CREATE or DESTROY function
1835 static VKAPI_ATTR void VKAPI_CALL TrimCommandPool(
1837 VkCommandPool commandPool,
1838 VkCommandPoolTrimFlags flags)
1840 //Not a CREATE or DESTROY function
1843 static VKAPI_ATTR void VKAPI_CALL GetDeviceQueue2(
1845 const VkDeviceQueueInfo2* pQueueInfo,
1848 GetDeviceQueue(device, pQueueInfo->queueFamilyIndex, pQueueInfo->queueIndex, pQueue);
1849 // TODO: Add further support for GetDeviceQueue2 features
1852 static VKAPI_ATTR VkResult VKAPI_CALL CreateSamplerYcbcrConversion(
1854 const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
1855 const VkAllocationCallbacks* pAllocator,
1856 VkSamplerYcbcrConversion* pYcbcrConversion)
1858 unique_lock_t lock(global_lock);
1859 *pYcbcrConversion = (VkSamplerYcbcrConversion)global_unique_handle++;
1863 static VKAPI_ATTR void VKAPI_CALL DestroySamplerYcbcrConversion(
1865 VkSamplerYcbcrConversion ycbcrConversion,
1866 const VkAllocationCallbacks* pAllocator)
1871 static VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorUpdateTemplate(
1873 const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
1874 const VkAllocationCallbacks* pAllocator,
1875 VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate)
1877 unique_lock_t lock(global_lock);
1878 *pDescriptorUpdateTemplate = (VkDescriptorUpdateTemplate)global_unique_handle++;
1882 static VKAPI_ATTR void VKAPI_CALL DestroyDescriptorUpdateTemplate(
1884 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
1885 const VkAllocationCallbacks* pAllocator)
1890 static VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSetWithTemplate(
1892 VkDescriptorSet descriptorSet,
1893 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
1896 //Not a CREATE or DESTROY function
1899 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalBufferProperties(
1900 VkPhysicalDevice physicalDevice,
1901 const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
1902 VkExternalBufferProperties* pExternalBufferProperties)
1904 // Hard-code support for all handle types and features
1905 pExternalBufferProperties->externalMemoryProperties.externalMemoryFeatures = 0x7;
1906 pExternalBufferProperties->externalMemoryProperties.exportFromImportedHandleTypes = 0x1FF;
1907 pExternalBufferProperties->externalMemoryProperties.compatibleHandleTypes = 0x1FF;
1910 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalFenceProperties(
1911 VkPhysicalDevice physicalDevice,
1912 const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
1913 VkExternalFenceProperties* pExternalFenceProperties)
1915 // Hard-code support for all handle types and features
1916 pExternalFenceProperties->exportFromImportedHandleTypes = 0xF;
1917 pExternalFenceProperties->compatibleHandleTypes = 0xF;
1918 pExternalFenceProperties->externalFenceFeatures = 0x3;
1921 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalSemaphoreProperties(
1922 VkPhysicalDevice physicalDevice,
1923 const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
1924 VkExternalSemaphoreProperties* pExternalSemaphoreProperties)
1926 // Hard code support for all handle types and features
1927 pExternalSemaphoreProperties->exportFromImportedHandleTypes = 0x1F;
1928 pExternalSemaphoreProperties->compatibleHandleTypes = 0x1F;
1929 pExternalSemaphoreProperties->externalSemaphoreFeatures = 0x3;
1932 static VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutSupport(
1934 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
1935 VkDescriptorSetLayoutSupport* pSupport)
1937 //Not a CREATE or DESTROY function
1941 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCount(
1942 VkCommandBuffer commandBuffer,
1944 VkDeviceSize offset,
1945 VkBuffer countBuffer,
1946 VkDeviceSize countBufferOffset,
1947 uint32_t maxDrawCount,
1950 //Not a CREATE or DESTROY function
1953 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirectCount(
1954 VkCommandBuffer commandBuffer,
1956 VkDeviceSize offset,
1957 VkBuffer countBuffer,
1958 VkDeviceSize countBufferOffset,
1959 uint32_t maxDrawCount,
1962 //Not a CREATE or DESTROY function
1965 static VKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass2(
1967 const VkRenderPassCreateInfo2* pCreateInfo,
1968 const VkAllocationCallbacks* pAllocator,
1969 VkRenderPass* pRenderPass)
1971 unique_lock_t lock(global_lock);
1972 *pRenderPass = (VkRenderPass)global_unique_handle++;
1976 static VKAPI_ATTR void VKAPI_CALL CmdBeginRenderPass2(
1977 VkCommandBuffer commandBuffer,
1978 const VkRenderPassBeginInfo* pRenderPassBegin,
1979 const VkSubpassBeginInfo* pSubpassBeginInfo)
1981 //Not a CREATE or DESTROY function
1984 static VKAPI_ATTR void VKAPI_CALL CmdNextSubpass2(
1985 VkCommandBuffer commandBuffer,
1986 const VkSubpassBeginInfo* pSubpassBeginInfo,
1987 const VkSubpassEndInfo* pSubpassEndInfo)
1989 //Not a CREATE or DESTROY function
1992 static VKAPI_ATTR void VKAPI_CALL CmdEndRenderPass2(
1993 VkCommandBuffer commandBuffer,
1994 const VkSubpassEndInfo* pSubpassEndInfo)
1996 //Not a CREATE or DESTROY function
1999 static VKAPI_ATTR void VKAPI_CALL ResetQueryPool(
2001 VkQueryPool queryPool,
2002 uint32_t firstQuery,
2003 uint32_t queryCount)
2005 //Not a CREATE or DESTROY function
2008 static VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreCounterValue(
2010 VkSemaphore semaphore,
2013 //Not a CREATE or DESTROY function
2017 static VKAPI_ATTR VkResult VKAPI_CALL WaitSemaphores(
2019 const VkSemaphoreWaitInfo* pWaitInfo,
2022 //Not a CREATE or DESTROY function
2026 static VKAPI_ATTR VkResult VKAPI_CALL SignalSemaphore(
2028 const VkSemaphoreSignalInfo* pSignalInfo)
2030 //Not a CREATE or DESTROY function
2034 static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetBufferDeviceAddress(
2036 const VkBufferDeviceAddressInfo* pInfo)
2038 //Not a CREATE or DESTROY function
2042 static VKAPI_ATTR uint64_t VKAPI_CALL GetBufferOpaqueCaptureAddress(
2044 const VkBufferDeviceAddressInfo* pInfo)
2046 //Not a CREATE or DESTROY function
2050 static VKAPI_ATTR uint64_t VKAPI_CALL GetDeviceMemoryOpaqueCaptureAddress(
2052 const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo)
2054 //Not a CREATE or DESTROY function
2059 static VKAPI_ATTR void VKAPI_CALL DestroySurfaceKHR(
2060 VkInstance instance,
2061 VkSurfaceKHR surface,
2062 const VkAllocationCallbacks* pAllocator)
2067 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceSupportKHR(
2068 VkPhysicalDevice physicalDevice,
2069 uint32_t queueFamilyIndex,
2070 VkSurfaceKHR surface,
2071 VkBool32* pSupported)
2073 // Currently say that all surface/queue combos are supported
2074 *pSupported = VK_TRUE;
2078 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilitiesKHR(
2079 VkPhysicalDevice physicalDevice,
2080 VkSurfaceKHR surface,
2081 VkSurfaceCapabilitiesKHR* pSurfaceCapabilities)
2083 // In general just say max supported is available for requested surface
2084 pSurfaceCapabilities->minImageCount = 1;
2085 pSurfaceCapabilities->maxImageCount = 0;
2086 pSurfaceCapabilities->currentExtent.width = 0xFFFFFFFF;
2087 pSurfaceCapabilities->currentExtent.height = 0xFFFFFFFF;
2088 pSurfaceCapabilities->minImageExtent.width = 1;
2089 pSurfaceCapabilities->minImageExtent.height = 1;
2090 pSurfaceCapabilities->maxImageExtent.width = 3840;
2091 pSurfaceCapabilities->maxImageExtent.height = 2160;
2092 pSurfaceCapabilities->maxImageArrayLayers = 128;
2093 pSurfaceCapabilities->supportedTransforms = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR |
2094 VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR |
2095 VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR |
2096 VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR |
2097 VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR |
2098 VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR |
2099 VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR |
2100 VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR |
2101 VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR;
2102 pSurfaceCapabilities->currentTransform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
2103 pSurfaceCapabilities->supportedCompositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR |
2104 VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR |
2105 VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR |
2106 VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR;
2107 pSurfaceCapabilities->supportedUsageFlags = VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
2108 VK_IMAGE_USAGE_TRANSFER_DST_BIT |
2109 VK_IMAGE_USAGE_SAMPLED_BIT |
2110 VK_IMAGE_USAGE_STORAGE_BIT |
2111 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
2112 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
2113 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
2114 VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT;
2118 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceFormatsKHR(
2119 VkPhysicalDevice physicalDevice,
2120 VkSurfaceKHR surface,
2121 uint32_t* pSurfaceFormatCount,
2122 VkSurfaceFormatKHR* pSurfaceFormats)
2124 // Currently always say that RGBA8 & BGRA8 are supported
2125 if (!pSurfaceFormats) {
2126 *pSurfaceFormatCount = 2;
2128 // Intentionally falling through and just filling however many types are requested
2129 switch(*pSurfaceFormatCount) {
2131 pSurfaceFormats[1].format = VK_FORMAT_R8G8B8A8_UNORM;
2132 pSurfaceFormats[1].colorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;
2135 pSurfaceFormats[0].format = VK_FORMAT_B8G8R8A8_UNORM;
2136 pSurfaceFormats[0].colorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;
2143 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModesKHR(
2144 VkPhysicalDevice physicalDevice,
2145 VkSurfaceKHR surface,
2146 uint32_t* pPresentModeCount,
2147 VkPresentModeKHR* pPresentModes)
2149 // Currently always say that all present modes are supported
2150 if (!pPresentModes) {
2151 *pPresentModeCount = 6;
2153 // Intentionally falling through and just filling however many modes are requested
2154 switch(*pPresentModeCount) {
2156 pPresentModes[5] = VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR;
2159 pPresentModes[4] = VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR;
2162 pPresentModes[3] = VK_PRESENT_MODE_FIFO_RELAXED_KHR;
2165 pPresentModes[2] = VK_PRESENT_MODE_FIFO_KHR;
2168 pPresentModes[1] = VK_PRESENT_MODE_MAILBOX_KHR;
2171 pPresentModes[0] = VK_PRESENT_MODE_IMMEDIATE_KHR;
2179 static VKAPI_ATTR VkResult VKAPI_CALL CreateSwapchainKHR(
2181 const VkSwapchainCreateInfoKHR* pCreateInfo,
2182 const VkAllocationCallbacks* pAllocator,
2183 VkSwapchainKHR* pSwapchain)
2185 unique_lock_t lock(global_lock);
2186 *pSwapchain = (VkSwapchainKHR)global_unique_handle++;
2187 for(uint32_t i = 0; i < icd_swapchain_image_count; ++i){
2188 swapchain_image_map[*pSwapchain][i] = (VkImage)global_unique_handle++;
2193 static VKAPI_ATTR void VKAPI_CALL DestroySwapchainKHR(
2195 VkSwapchainKHR swapchain,
2196 const VkAllocationCallbacks* pAllocator)
2198 unique_lock_t lock(global_lock);
2199 swapchain_image_map.clear();
2202 static VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainImagesKHR(
2204 VkSwapchainKHR swapchain,
2205 uint32_t* pSwapchainImageCount,
2206 VkImage* pSwapchainImages)
2208 if (!pSwapchainImages) {
2209 *pSwapchainImageCount = icd_swapchain_image_count;
2211 unique_lock_t lock(global_lock);
2212 for (uint32_t img_i = 0; img_i < (std::min)(*pSwapchainImageCount, icd_swapchain_image_count); ++img_i){
2213 pSwapchainImages[img_i] = swapchain_image_map.at(swapchain)[img_i];
2216 if (*pSwapchainImageCount < icd_swapchain_image_count) return VK_INCOMPLETE;
2217 else if (*pSwapchainImageCount > icd_swapchain_image_count) *pSwapchainImageCount = icd_swapchain_image_count;
2222 static VKAPI_ATTR VkResult VKAPI_CALL AcquireNextImageKHR(
2224 VkSwapchainKHR swapchain,
2226 VkSemaphore semaphore,
2228 uint32_t* pImageIndex)
2234 static VKAPI_ATTR VkResult VKAPI_CALL QueuePresentKHR(
2236 const VkPresentInfoKHR* pPresentInfo)
2238 //Not a CREATE or DESTROY function
2242 static VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupPresentCapabilitiesKHR(
2244 VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities)
2246 //Not a CREATE or DESTROY function
2250 static VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupSurfacePresentModesKHR(
2252 VkSurfaceKHR surface,
2253 VkDeviceGroupPresentModeFlagsKHR* pModes)
2255 //Not a CREATE or DESTROY function
2259 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDevicePresentRectanglesKHR(
2260 VkPhysicalDevice physicalDevice,
2261 VkSurfaceKHR surface,
2262 uint32_t* pRectCount,
2265 //Not a CREATE or DESTROY function
2269 static VKAPI_ATTR VkResult VKAPI_CALL AcquireNextImage2KHR(
2271 const VkAcquireNextImageInfoKHR* pAcquireInfo,
2272 uint32_t* pImageIndex)
2279 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPropertiesKHR(
2280 VkPhysicalDevice physicalDevice,
2281 uint32_t* pPropertyCount,
2282 VkDisplayPropertiesKHR* pProperties)
2284 //Not a CREATE or DESTROY function
2288 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPlanePropertiesKHR(
2289 VkPhysicalDevice physicalDevice,
2290 uint32_t* pPropertyCount,
2291 VkDisplayPlanePropertiesKHR* pProperties)
2293 //Not a CREATE or DESTROY function
2297 static VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneSupportedDisplaysKHR(
2298 VkPhysicalDevice physicalDevice,
2299 uint32_t planeIndex,
2300 uint32_t* pDisplayCount,
2301 VkDisplayKHR* pDisplays)
2303 //Not a CREATE or DESTROY function
2307 static VKAPI_ATTR VkResult VKAPI_CALL GetDisplayModePropertiesKHR(
2308 VkPhysicalDevice physicalDevice,
2309 VkDisplayKHR display,
2310 uint32_t* pPropertyCount,
2311 VkDisplayModePropertiesKHR* pProperties)
2313 //Not a CREATE or DESTROY function
2317 static VKAPI_ATTR VkResult VKAPI_CALL CreateDisplayModeKHR(
2318 VkPhysicalDevice physicalDevice,
2319 VkDisplayKHR display,
2320 const VkDisplayModeCreateInfoKHR* pCreateInfo,
2321 const VkAllocationCallbacks* pAllocator,
2322 VkDisplayModeKHR* pMode)
2324 unique_lock_t lock(global_lock);
2325 *pMode = (VkDisplayModeKHR)global_unique_handle++;
2329 static VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneCapabilitiesKHR(
2330 VkPhysicalDevice physicalDevice,
2331 VkDisplayModeKHR mode,
2332 uint32_t planeIndex,
2333 VkDisplayPlaneCapabilitiesKHR* pCapabilities)
2335 //Not a CREATE or DESTROY function
2339 static VKAPI_ATTR VkResult VKAPI_CALL CreateDisplayPlaneSurfaceKHR(
2340 VkInstance instance,
2341 const VkDisplaySurfaceCreateInfoKHR* pCreateInfo,
2342 const VkAllocationCallbacks* pAllocator,
2343 VkSurfaceKHR* pSurface)
2345 unique_lock_t lock(global_lock);
2346 *pSurface = (VkSurfaceKHR)global_unique_handle++;
2351 static VKAPI_ATTR VkResult VKAPI_CALL CreateSharedSwapchainsKHR(
2353 uint32_t swapchainCount,
2354 const VkSwapchainCreateInfoKHR* pCreateInfos,
2355 const VkAllocationCallbacks* pAllocator,
2356 VkSwapchainKHR* pSwapchains)
2358 unique_lock_t lock(global_lock);
2359 for (uint32_t i = 0; i < swapchainCount; ++i) {
2360 pSwapchains[i] = (VkSwapchainKHR)global_unique_handle++;
2365 #ifdef VK_USE_PLATFORM_XLIB_KHR
2367 static VKAPI_ATTR VkResult VKAPI_CALL CreateXlibSurfaceKHR(
2368 VkInstance instance,
2369 const VkXlibSurfaceCreateInfoKHR* pCreateInfo,
2370 const VkAllocationCallbacks* pAllocator,
2371 VkSurfaceKHR* pSurface)
2373 unique_lock_t lock(global_lock);
2374 *pSurface = (VkSurfaceKHR)global_unique_handle++;
2378 static VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceXlibPresentationSupportKHR(
2379 VkPhysicalDevice physicalDevice,
2380 uint32_t queueFamilyIndex,
2384 //Not a CREATE or DESTROY function
2387 #endif /* VK_USE_PLATFORM_XLIB_KHR */
2389 #ifdef VK_USE_PLATFORM_XCB_KHR
2391 static VKAPI_ATTR VkResult VKAPI_CALL CreateXcbSurfaceKHR(
2392 VkInstance instance,
2393 const VkXcbSurfaceCreateInfoKHR* pCreateInfo,
2394 const VkAllocationCallbacks* pAllocator,
2395 VkSurfaceKHR* pSurface)
2397 unique_lock_t lock(global_lock);
2398 *pSurface = (VkSurfaceKHR)global_unique_handle++;
2402 static VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceXcbPresentationSupportKHR(
2403 VkPhysicalDevice physicalDevice,
2404 uint32_t queueFamilyIndex,
2405 xcb_connection_t* connection,
2406 xcb_visualid_t visual_id)
2408 //Not a CREATE or DESTROY function
2411 #endif /* VK_USE_PLATFORM_XCB_KHR */
2413 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
2415 static VKAPI_ATTR VkResult VKAPI_CALL CreateWaylandSurfaceKHR(
2416 VkInstance instance,
2417 const VkWaylandSurfaceCreateInfoKHR* pCreateInfo,
2418 const VkAllocationCallbacks* pAllocator,
2419 VkSurfaceKHR* pSurface)
2421 unique_lock_t lock(global_lock);
2422 *pSurface = (VkSurfaceKHR)global_unique_handle++;
2426 static VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceWaylandPresentationSupportKHR(
2427 VkPhysicalDevice physicalDevice,
2428 uint32_t queueFamilyIndex,
2429 struct wl_display* display)
2431 //Not a CREATE or DESTROY function
2434 #endif /* VK_USE_PLATFORM_WAYLAND_KHR */
2436 #ifdef VK_USE_PLATFORM_ANDROID_KHR
2438 static VKAPI_ATTR VkResult VKAPI_CALL CreateAndroidSurfaceKHR(
2439 VkInstance instance,
2440 const VkAndroidSurfaceCreateInfoKHR* pCreateInfo,
2441 const VkAllocationCallbacks* pAllocator,
2442 VkSurfaceKHR* pSurface)
2444 unique_lock_t lock(global_lock);
2445 *pSurface = (VkSurfaceKHR)global_unique_handle++;
2448 #endif /* VK_USE_PLATFORM_ANDROID_KHR */
2450 #ifdef VK_USE_PLATFORM_WIN32_KHR
2452 static VKAPI_ATTR VkResult VKAPI_CALL CreateWin32SurfaceKHR(
2453 VkInstance instance,
2454 const VkWin32SurfaceCreateInfoKHR* pCreateInfo,
2455 const VkAllocationCallbacks* pAllocator,
2456 VkSurfaceKHR* pSurface)
2458 unique_lock_t lock(global_lock);
2459 *pSurface = (VkSurfaceKHR)global_unique_handle++;
2463 static VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceWin32PresentationSupportKHR(
2464 VkPhysicalDevice physicalDevice,
2465 uint32_t queueFamilyIndex)
2467 //Not a CREATE or DESTROY function
2470 #endif /* VK_USE_PLATFORM_WIN32_KHR */
2475 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures2KHR(
2476 VkPhysicalDevice physicalDevice,
2477 VkPhysicalDeviceFeatures2* pFeatures)
2479 GetPhysicalDeviceFeatures(physicalDevice, &pFeatures->features);
2480 uint32_t num_bools = 0; // Count number of VkBool32s in extension structs
2481 VkBool32* feat_bools = nullptr;
2482 const auto *desc_idx_features = lvl_find_in_chain<VkPhysicalDeviceDescriptorIndexingFeaturesEXT>(pFeatures->pNext);
2483 if (desc_idx_features) {
2484 const auto bool_size = sizeof(VkPhysicalDeviceDescriptorIndexingFeaturesEXT) - offsetof(VkPhysicalDeviceDescriptorIndexingFeaturesEXT, shaderInputAttachmentArrayDynamicIndexing);
2485 num_bools = bool_size/sizeof(VkBool32);
2486 feat_bools = (VkBool32*)&desc_idx_features->shaderInputAttachmentArrayDynamicIndexing;
2487 SetBoolArrayTrue(feat_bools, num_bools);
2489 const auto *blendop_features = lvl_find_in_chain<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>(pFeatures->pNext);
2490 if (blendop_features) {
2491 const auto bool_size = sizeof(VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT) - offsetof(VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT, advancedBlendCoherentOperations);
2492 num_bools = bool_size/sizeof(VkBool32);
2493 feat_bools = (VkBool32*)&blendop_features->advancedBlendCoherentOperations;
2494 SetBoolArrayTrue(feat_bools, num_bools);
2498 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties2KHR(
2499 VkPhysicalDevice physicalDevice,
2500 VkPhysicalDeviceProperties2* pProperties)
2502 GetPhysicalDeviceProperties(physicalDevice, &pProperties->properties);
2503 const auto *desc_idx_props = lvl_find_in_chain<VkPhysicalDeviceDescriptorIndexingPropertiesEXT>(pProperties->pNext);
2504 if (desc_idx_props) {
2505 VkPhysicalDeviceDescriptorIndexingPropertiesEXT* write_props = (VkPhysicalDeviceDescriptorIndexingPropertiesEXT*)desc_idx_props;
2506 write_props->maxUpdateAfterBindDescriptorsInAllPools = 500000;
2507 write_props->shaderUniformBufferArrayNonUniformIndexingNative = false;
2508 write_props->shaderSampledImageArrayNonUniformIndexingNative = false;
2509 write_props->shaderStorageBufferArrayNonUniformIndexingNative = false;
2510 write_props->shaderStorageImageArrayNonUniformIndexingNative = false;
2511 write_props->shaderInputAttachmentArrayNonUniformIndexingNative = false;
2512 write_props->robustBufferAccessUpdateAfterBind = true;
2513 write_props->quadDivergentImplicitLod = true;
2514 write_props->maxPerStageDescriptorUpdateAfterBindSamplers = 500000;
2515 write_props->maxPerStageDescriptorUpdateAfterBindUniformBuffers = 500000;
2516 write_props->maxPerStageDescriptorUpdateAfterBindStorageBuffers = 500000;
2517 write_props->maxPerStageDescriptorUpdateAfterBindSampledImages = 500000;
2518 write_props->maxPerStageDescriptorUpdateAfterBindStorageImages = 500000;
2519 write_props->maxPerStageDescriptorUpdateAfterBindInputAttachments = 500000;
2520 write_props->maxPerStageUpdateAfterBindResources = 500000;
2521 write_props->maxDescriptorSetUpdateAfterBindSamplers = 500000;
2522 write_props->maxDescriptorSetUpdateAfterBindUniformBuffers = 96;
2523 write_props->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 8;
2524 write_props->maxDescriptorSetUpdateAfterBindStorageBuffers = 500000;
2525 write_props->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 4;
2526 write_props->maxDescriptorSetUpdateAfterBindSampledImages = 500000;
2527 write_props->maxDescriptorSetUpdateAfterBindStorageImages = 500000;
2528 write_props->maxDescriptorSetUpdateAfterBindInputAttachments = 500000;
2531 const auto *push_descriptor_props = lvl_find_in_chain<VkPhysicalDevicePushDescriptorPropertiesKHR>(pProperties->pNext);
2532 if (push_descriptor_props) {
2533 VkPhysicalDevicePushDescriptorPropertiesKHR* write_props = (VkPhysicalDevicePushDescriptorPropertiesKHR*)push_descriptor_props;
2534 write_props->maxPushDescriptors = 256;
2537 const auto *depth_stencil_resolve_props = lvl_find_in_chain<VkPhysicalDeviceDepthStencilResolvePropertiesKHR>(pProperties->pNext);
2538 if (depth_stencil_resolve_props) {
2539 VkPhysicalDeviceDepthStencilResolvePropertiesKHR* write_props = (VkPhysicalDeviceDepthStencilResolvePropertiesKHR*)depth_stencil_resolve_props;
2540 write_props->supportedDepthResolveModes = VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR;
2541 write_props->supportedStencilResolveModes = VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR;
2545 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties2KHR(
2546 VkPhysicalDevice physicalDevice,
2548 VkFormatProperties2* pFormatProperties)
2550 GetPhysicalDeviceFormatProperties(physicalDevice, format, &pFormatProperties->formatProperties);
2553 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties2KHR(
2554 VkPhysicalDevice physicalDevice,
2555 const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
2556 VkImageFormatProperties2* pImageFormatProperties)
2558 GetPhysicalDeviceImageFormatProperties(physicalDevice, pImageFormatInfo->format, pImageFormatInfo->type, pImageFormatInfo->tiling, pImageFormatInfo->usage, pImageFormatInfo->flags, &pImageFormatProperties->imageFormatProperties);
2562 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties2KHR(
2563 VkPhysicalDevice physicalDevice,
2564 uint32_t* pQueueFamilyPropertyCount,
2565 VkQueueFamilyProperties2* pQueueFamilyProperties)
2567 if (pQueueFamilyPropertyCount && pQueueFamilyProperties) {
2568 GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, &pQueueFamilyProperties->queueFamilyProperties);
2570 GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, nullptr);
2574 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties2KHR(
2575 VkPhysicalDevice physicalDevice,
2576 VkPhysicalDeviceMemoryProperties2* pMemoryProperties)
2578 GetPhysicalDeviceMemoryProperties(physicalDevice, &pMemoryProperties->memoryProperties);
2581 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties2KHR(
2582 VkPhysicalDevice physicalDevice,
2583 const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
2584 uint32_t* pPropertyCount,
2585 VkSparseImageFormatProperties2* pProperties)
2587 //Not a CREATE or DESTROY function
2591 static VKAPI_ATTR void VKAPI_CALL GetDeviceGroupPeerMemoryFeaturesKHR(
2594 uint32_t localDeviceIndex,
2595 uint32_t remoteDeviceIndex,
2596 VkPeerMemoryFeatureFlags* pPeerMemoryFeatures)
2598 //Not a CREATE or DESTROY function
2601 static VKAPI_ATTR void VKAPI_CALL CmdSetDeviceMaskKHR(
2602 VkCommandBuffer commandBuffer,
2603 uint32_t deviceMask)
2605 //Not a CREATE or DESTROY function
2608 static VKAPI_ATTR void VKAPI_CALL CmdDispatchBaseKHR(
2609 VkCommandBuffer commandBuffer,
2610 uint32_t baseGroupX,
2611 uint32_t baseGroupY,
2612 uint32_t baseGroupZ,
2613 uint32_t groupCountX,
2614 uint32_t groupCountY,
2615 uint32_t groupCountZ)
2617 //Not a CREATE or DESTROY function
2622 static VKAPI_ATTR void VKAPI_CALL TrimCommandPoolKHR(
2624 VkCommandPool commandPool,
2625 VkCommandPoolTrimFlags flags)
2627 //Not a CREATE or DESTROY function
2631 static VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDeviceGroupsKHR(
2632 VkInstance instance,
2633 uint32_t* pPhysicalDeviceGroupCount,
2634 VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties)
2636 //Not a CREATE or DESTROY function
2641 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalBufferPropertiesKHR(
2642 VkPhysicalDevice physicalDevice,
2643 const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
2644 VkExternalBufferProperties* pExternalBufferProperties)
2646 GetPhysicalDeviceExternalBufferProperties(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
2650 #ifdef VK_USE_PLATFORM_WIN32_KHR
2652 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandleKHR(
2654 const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo,
2657 //Not a CREATE or DESTROY function
2661 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandlePropertiesKHR(
2663 VkExternalMemoryHandleTypeFlagBits handleType,
2665 VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties)
2667 //Not a CREATE or DESTROY function
2670 #endif /* VK_USE_PLATFORM_WIN32_KHR */
2673 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryFdKHR(
2675 const VkMemoryGetFdInfoKHR* pGetFdInfo,
2678 //Not a CREATE or DESTROY function
2682 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryFdPropertiesKHR(
2684 VkExternalMemoryHandleTypeFlagBits handleType,
2686 VkMemoryFdPropertiesKHR* pMemoryFdProperties)
2688 //Not a CREATE or DESTROY function
2692 #ifdef VK_USE_PLATFORM_WIN32_KHR
2693 #endif /* VK_USE_PLATFORM_WIN32_KHR */
2696 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalSemaphorePropertiesKHR(
2697 VkPhysicalDevice physicalDevice,
2698 const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
2699 VkExternalSemaphoreProperties* pExternalSemaphoreProperties)
2701 GetPhysicalDeviceExternalSemaphoreProperties(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
2705 #ifdef VK_USE_PLATFORM_WIN32_KHR
2707 static VKAPI_ATTR VkResult VKAPI_CALL ImportSemaphoreWin32HandleKHR(
2709 const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo)
2711 //Not a CREATE or DESTROY function
2715 static VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreWin32HandleKHR(
2717 const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo,
2720 //Not a CREATE or DESTROY function
2723 #endif /* VK_USE_PLATFORM_WIN32_KHR */
2726 static VKAPI_ATTR VkResult VKAPI_CALL ImportSemaphoreFdKHR(
2728 const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo)
2730 //Not a CREATE or DESTROY function
2734 static VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreFdKHR(
2736 const VkSemaphoreGetFdInfoKHR* pGetFdInfo,
2739 //Not a CREATE or DESTROY function
2744 static VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetKHR(
2745 VkCommandBuffer commandBuffer,
2746 VkPipelineBindPoint pipelineBindPoint,
2747 VkPipelineLayout layout,
2749 uint32_t descriptorWriteCount,
2750 const VkWriteDescriptorSet* pDescriptorWrites)
2752 //Not a CREATE or DESTROY function
2755 static VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetWithTemplateKHR(
2756 VkCommandBuffer commandBuffer,
2757 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
2758 VkPipelineLayout layout,
2762 //Not a CREATE or DESTROY function
2769 static VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorUpdateTemplateKHR(
2771 const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
2772 const VkAllocationCallbacks* pAllocator,
2773 VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate)
2775 unique_lock_t lock(global_lock);
2776 *pDescriptorUpdateTemplate = (VkDescriptorUpdateTemplate)global_unique_handle++;
2780 static VKAPI_ATTR void VKAPI_CALL DestroyDescriptorUpdateTemplateKHR(
2782 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
2783 const VkAllocationCallbacks* pAllocator)
2788 static VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSetWithTemplateKHR(
2790 VkDescriptorSet descriptorSet,
2791 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
2794 //Not a CREATE or DESTROY function
2799 static VKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass2KHR(
2801 const VkRenderPassCreateInfo2* pCreateInfo,
2802 const VkAllocationCallbacks* pAllocator,
2803 VkRenderPass* pRenderPass)
2805 unique_lock_t lock(global_lock);
2806 *pRenderPass = (VkRenderPass)global_unique_handle++;
2810 static VKAPI_ATTR void VKAPI_CALL CmdBeginRenderPass2KHR(
2811 VkCommandBuffer commandBuffer,
2812 const VkRenderPassBeginInfo* pRenderPassBegin,
2813 const VkSubpassBeginInfo* pSubpassBeginInfo)
2815 //Not a CREATE or DESTROY function
2818 static VKAPI_ATTR void VKAPI_CALL CmdNextSubpass2KHR(
2819 VkCommandBuffer commandBuffer,
2820 const VkSubpassBeginInfo* pSubpassBeginInfo,
2821 const VkSubpassEndInfo* pSubpassEndInfo)
2823 //Not a CREATE or DESTROY function
2826 static VKAPI_ATTR void VKAPI_CALL CmdEndRenderPass2KHR(
2827 VkCommandBuffer commandBuffer,
2828 const VkSubpassEndInfo* pSubpassEndInfo)
2830 //Not a CREATE or DESTROY function
2834 static VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainStatusKHR(
2836 VkSwapchainKHR swapchain)
2838 //Not a CREATE or DESTROY function
2843 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalFencePropertiesKHR(
2844 VkPhysicalDevice physicalDevice,
2845 const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
2846 VkExternalFenceProperties* pExternalFenceProperties)
2848 GetPhysicalDeviceExternalFenceProperties(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
2852 #ifdef VK_USE_PLATFORM_WIN32_KHR
2854 static VKAPI_ATTR VkResult VKAPI_CALL ImportFenceWin32HandleKHR(
2856 const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo)
2858 //Not a CREATE or DESTROY function
2862 static VKAPI_ATTR VkResult VKAPI_CALL GetFenceWin32HandleKHR(
2864 const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo,
2867 //Not a CREATE or DESTROY function
2870 #endif /* VK_USE_PLATFORM_WIN32_KHR */
2873 static VKAPI_ATTR VkResult VKAPI_CALL ImportFenceFdKHR(
2875 const VkImportFenceFdInfoKHR* pImportFenceFdInfo)
2877 //Not a CREATE or DESTROY function
2881 static VKAPI_ATTR VkResult VKAPI_CALL GetFenceFdKHR(
2883 const VkFenceGetFdInfoKHR* pGetFdInfo,
2886 //Not a CREATE or DESTROY function
2891 static VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(
2892 VkPhysicalDevice physicalDevice,
2893 uint32_t queueFamilyIndex,
2894 uint32_t* pCounterCount,
2895 VkPerformanceCounterKHR* pCounters,
2896 VkPerformanceCounterDescriptionKHR* pCounterDescriptions)
2898 //Not a CREATE or DESTROY function
2902 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR(
2903 VkPhysicalDevice physicalDevice,
2904 const VkQueryPoolPerformanceCreateInfoKHR* pPerformanceQueryCreateInfo,
2905 uint32_t* pNumPasses)
2907 //Not a CREATE or DESTROY function
2910 static VKAPI_ATTR VkResult VKAPI_CALL AcquireProfilingLockKHR(
2912 const VkAcquireProfilingLockInfoKHR* pInfo)
2914 //Not a CREATE or DESTROY function
2918 static VKAPI_ATTR void VKAPI_CALL ReleaseProfilingLockKHR(
2921 //Not a CREATE or DESTROY function
2926 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilities2KHR(
2927 VkPhysicalDevice physicalDevice,
2928 const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
2929 VkSurfaceCapabilities2KHR* pSurfaceCapabilities)
2931 GetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, pSurfaceInfo->surface, &pSurfaceCapabilities->surfaceCapabilities);
2935 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceFormats2KHR(
2936 VkPhysicalDevice physicalDevice,
2937 const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
2938 uint32_t* pSurfaceFormatCount,
2939 VkSurfaceFormat2KHR* pSurfaceFormats)
2941 // Currently always say that RGBA8 & BGRA8 are supported
2942 if (!pSurfaceFormats) {
2943 *pSurfaceFormatCount = 2;
2945 // Intentionally falling through and just filling however many types are requested
2946 switch(*pSurfaceFormatCount) {
2948 pSurfaceFormats[1].pNext = nullptr;
2949 pSurfaceFormats[1].surfaceFormat.format = VK_FORMAT_R8G8B8A8_UNORM;
2950 pSurfaceFormats[1].surfaceFormat.colorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;
2953 pSurfaceFormats[1].pNext = nullptr;
2954 pSurfaceFormats[0].surfaceFormat.format = VK_FORMAT_B8G8R8A8_UNORM;
2955 pSurfaceFormats[0].surfaceFormat.colorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;
2964 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayProperties2KHR(
2965 VkPhysicalDevice physicalDevice,
2966 uint32_t* pPropertyCount,
2967 VkDisplayProperties2KHR* pProperties)
2969 //Not a CREATE or DESTROY function
2973 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPlaneProperties2KHR(
2974 VkPhysicalDevice physicalDevice,
2975 uint32_t* pPropertyCount,
2976 VkDisplayPlaneProperties2KHR* pProperties)
2978 //Not a CREATE or DESTROY function
2982 static VKAPI_ATTR VkResult VKAPI_CALL GetDisplayModeProperties2KHR(
2983 VkPhysicalDevice physicalDevice,
2984 VkDisplayKHR display,
2985 uint32_t* pPropertyCount,
2986 VkDisplayModeProperties2KHR* pProperties)
2988 //Not a CREATE or DESTROY function
2992 static VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneCapabilities2KHR(
2993 VkPhysicalDevice physicalDevice,
2994 const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo,
2995 VkDisplayPlaneCapabilities2KHR* pCapabilities)
2997 //Not a CREATE or DESTROY function
3005 static VKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements2KHR(
3007 const VkImageMemoryRequirementsInfo2* pInfo,
3008 VkMemoryRequirements2* pMemoryRequirements)
3010 GetImageMemoryRequirements(device, pInfo->image, &pMemoryRequirements->memoryRequirements);
3013 static VKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements2KHR(
3015 const VkBufferMemoryRequirementsInfo2* pInfo,
3016 VkMemoryRequirements2* pMemoryRequirements)
3018 GetBufferMemoryRequirements(device, pInfo->buffer, &pMemoryRequirements->memoryRequirements);
3021 static VKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements2KHR(
3023 const VkImageSparseMemoryRequirementsInfo2* pInfo,
3024 uint32_t* pSparseMemoryRequirementCount,
3025 VkSparseImageMemoryRequirements2* pSparseMemoryRequirements)
3027 //Not a CREATE or DESTROY function
3032 static VKAPI_ATTR VkResult VKAPI_CALL CreateSamplerYcbcrConversionKHR(
3034 const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
3035 const VkAllocationCallbacks* pAllocator,
3036 VkSamplerYcbcrConversion* pYcbcrConversion)
3038 unique_lock_t lock(global_lock);
3039 *pYcbcrConversion = (VkSamplerYcbcrConversion)global_unique_handle++;
3043 static VKAPI_ATTR void VKAPI_CALL DestroySamplerYcbcrConversionKHR(
3045 VkSamplerYcbcrConversion ycbcrConversion,
3046 const VkAllocationCallbacks* pAllocator)
3052 static VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory2KHR(
3054 uint32_t bindInfoCount,
3055 const VkBindBufferMemoryInfo* pBindInfos)
3057 //Not a CREATE or DESTROY function
3061 static VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory2KHR(
3063 uint32_t bindInfoCount,
3064 const VkBindImageMemoryInfo* pBindInfos)
3066 //Not a CREATE or DESTROY function
3071 static VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutSupportKHR(
3073 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
3074 VkDescriptorSetLayoutSupport* pSupport)
3076 //Not a CREATE or DESTROY function
3080 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCountKHR(
3081 VkCommandBuffer commandBuffer,
3083 VkDeviceSize offset,
3084 VkBuffer countBuffer,
3085 VkDeviceSize countBufferOffset,
3086 uint32_t maxDrawCount,
3089 //Not a CREATE or DESTROY function
3092 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirectCountKHR(
3093 VkCommandBuffer commandBuffer,
3095 VkDeviceSize offset,
3096 VkBuffer countBuffer,
3097 VkDeviceSize countBufferOffset,
3098 uint32_t maxDrawCount,
3101 //Not a CREATE or DESTROY function
3113 static VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreCounterValueKHR(
3115 VkSemaphore semaphore,
3118 //Not a CREATE or DESTROY function
3122 static VKAPI_ATTR VkResult VKAPI_CALL WaitSemaphoresKHR(
3124 const VkSemaphoreWaitInfo* pWaitInfo,
3127 //Not a CREATE or DESTROY function
3131 static VKAPI_ATTR VkResult VKAPI_CALL SignalSemaphoreKHR(
3133 const VkSemaphoreSignalInfo* pSignalInfo)
3135 //Not a CREATE or DESTROY function
3145 static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetBufferDeviceAddressKHR(
3147 const VkBufferDeviceAddressInfo* pInfo)
3149 //Not a CREATE or DESTROY function
3153 static VKAPI_ATTR uint64_t VKAPI_CALL GetBufferOpaqueCaptureAddressKHR(
3155 const VkBufferDeviceAddressInfo* pInfo)
3157 //Not a CREATE or DESTROY function
3161 static VKAPI_ATTR uint64_t VKAPI_CALL GetDeviceMemoryOpaqueCaptureAddressKHR(
3163 const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo)
3165 //Not a CREATE or DESTROY function
3169 #ifdef VK_ENABLE_BETA_EXTENSIONS
3171 static VKAPI_ATTR VkResult VKAPI_CALL CreateDeferredOperationKHR(
3173 const VkAllocationCallbacks* pAllocator,
3174 VkDeferredOperationKHR* pDeferredOperation)
3176 unique_lock_t lock(global_lock);
3177 *pDeferredOperation = (VkDeferredOperationKHR)global_unique_handle++;
3181 static VKAPI_ATTR void VKAPI_CALL DestroyDeferredOperationKHR(
3183 VkDeferredOperationKHR operation,
3184 const VkAllocationCallbacks* pAllocator)
3189 static VKAPI_ATTR uint32_t VKAPI_CALL GetDeferredOperationMaxConcurrencyKHR(
3191 VkDeferredOperationKHR operation)
3193 //Not a CREATE or DESTROY function
3197 static VKAPI_ATTR VkResult VKAPI_CALL GetDeferredOperationResultKHR(
3199 VkDeferredOperationKHR operation)
3201 //Not a CREATE or DESTROY function
3205 static VKAPI_ATTR VkResult VKAPI_CALL DeferredOperationJoinKHR(
3207 VkDeferredOperationKHR operation)
3209 //Not a CREATE or DESTROY function
3212 #endif /* VK_ENABLE_BETA_EXTENSIONS */
3215 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineExecutablePropertiesKHR(
3217 const VkPipelineInfoKHR* pPipelineInfo,
3218 uint32_t* pExecutableCount,
3219 VkPipelineExecutablePropertiesKHR* pProperties)
3221 //Not a CREATE or DESTROY function
3225 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineExecutableStatisticsKHR(
3227 const VkPipelineExecutableInfoKHR* pExecutableInfo,
3228 uint32_t* pStatisticCount,
3229 VkPipelineExecutableStatisticKHR* pStatistics)
3231 //Not a CREATE or DESTROY function
3235 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineExecutableInternalRepresentationsKHR(
3237 const VkPipelineExecutableInfoKHR* pExecutableInfo,
3238 uint32_t* pInternalRepresentationCount,
3239 VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations)
3241 //Not a CREATE or DESTROY function
3245 #ifdef VK_ENABLE_BETA_EXTENSIONS
3246 #endif /* VK_ENABLE_BETA_EXTENSIONS */
3250 static VKAPI_ATTR VkResult VKAPI_CALL CreateDebugReportCallbackEXT(
3251 VkInstance instance,
3252 const VkDebugReportCallbackCreateInfoEXT* pCreateInfo,
3253 const VkAllocationCallbacks* pAllocator,
3254 VkDebugReportCallbackEXT* pCallback)
3256 unique_lock_t lock(global_lock);
3257 *pCallback = (VkDebugReportCallbackEXT)global_unique_handle++;
3261 static VKAPI_ATTR void VKAPI_CALL DestroyDebugReportCallbackEXT(
3262 VkInstance instance,
3263 VkDebugReportCallbackEXT callback,
3264 const VkAllocationCallbacks* pAllocator)
3269 static VKAPI_ATTR void VKAPI_CALL DebugReportMessageEXT(
3270 VkInstance instance,
3271 VkDebugReportFlagsEXT flags,
3272 VkDebugReportObjectTypeEXT objectType,
3275 int32_t messageCode,
3276 const char* pLayerPrefix,
3277 const char* pMessage)
3279 //Not a CREATE or DESTROY function
3289 static VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectTagEXT(
3291 const VkDebugMarkerObjectTagInfoEXT* pTagInfo)
3293 //Not a CREATE or DESTROY function
3297 static VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectNameEXT(
3299 const VkDebugMarkerObjectNameInfoEXT* pNameInfo)
3301 //Not a CREATE or DESTROY function
3305 static VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerBeginEXT(
3306 VkCommandBuffer commandBuffer,
3307 const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
3309 //Not a CREATE or DESTROY function
3312 static VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerEndEXT(
3313 VkCommandBuffer commandBuffer)
3315 //Not a CREATE or DESTROY function
3318 static VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerInsertEXT(
3319 VkCommandBuffer commandBuffer,
3320 const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
3322 //Not a CREATE or DESTROY function
3328 static VKAPI_ATTR void VKAPI_CALL CmdBindTransformFeedbackBuffersEXT(
3329 VkCommandBuffer commandBuffer,
3330 uint32_t firstBinding,
3331 uint32_t bindingCount,
3332 const VkBuffer* pBuffers,
3333 const VkDeviceSize* pOffsets,
3334 const VkDeviceSize* pSizes)
3336 //Not a CREATE or DESTROY function
3339 static VKAPI_ATTR void VKAPI_CALL CmdBeginTransformFeedbackEXT(
3340 VkCommandBuffer commandBuffer,
3341 uint32_t firstCounterBuffer,
3342 uint32_t counterBufferCount,
3343 const VkBuffer* pCounterBuffers,
3344 const VkDeviceSize* pCounterBufferOffsets)
3346 //Not a CREATE or DESTROY function
3349 static VKAPI_ATTR void VKAPI_CALL CmdEndTransformFeedbackEXT(
3350 VkCommandBuffer commandBuffer,
3351 uint32_t firstCounterBuffer,
3352 uint32_t counterBufferCount,
3353 const VkBuffer* pCounterBuffers,
3354 const VkDeviceSize* pCounterBufferOffsets)
3356 //Not a CREATE or DESTROY function
3359 static VKAPI_ATTR void VKAPI_CALL CmdBeginQueryIndexedEXT(
3360 VkCommandBuffer commandBuffer,
3361 VkQueryPool queryPool,
3363 VkQueryControlFlags flags,
3366 //Not a CREATE or DESTROY function
3369 static VKAPI_ATTR void VKAPI_CALL CmdEndQueryIndexedEXT(
3370 VkCommandBuffer commandBuffer,
3371 VkQueryPool queryPool,
3375 //Not a CREATE or DESTROY function
3378 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectByteCountEXT(
3379 VkCommandBuffer commandBuffer,
3380 uint32_t instanceCount,
3381 uint32_t firstInstance,
3382 VkBuffer counterBuffer,
3383 VkDeviceSize counterBufferOffset,
3384 uint32_t counterOffset,
3385 uint32_t vertexStride)
3387 //Not a CREATE or DESTROY function
3391 static VKAPI_ATTR uint32_t VKAPI_CALL GetImageViewHandleNVX(
3393 const VkImageViewHandleInfoNVX* pInfo)
3395 //Not a CREATE or DESTROY function
3399 static VKAPI_ATTR VkResult VKAPI_CALL GetImageViewAddressNVX(
3401 VkImageView imageView,
3402 VkImageViewAddressPropertiesNVX* pProperties)
3404 //Not a CREATE or DESTROY function
3409 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCountAMD(
3410 VkCommandBuffer commandBuffer,
3412 VkDeviceSize offset,
3413 VkBuffer countBuffer,
3414 VkDeviceSize countBufferOffset,
3415 uint32_t maxDrawCount,
3418 //Not a CREATE or DESTROY function
3421 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirectCountAMD(
3422 VkCommandBuffer commandBuffer,
3424 VkDeviceSize offset,
3425 VkBuffer countBuffer,
3426 VkDeviceSize countBufferOffset,
3427 uint32_t maxDrawCount,
3430 //Not a CREATE or DESTROY function
3438 static VKAPI_ATTR VkResult VKAPI_CALL GetShaderInfoAMD(
3440 VkPipeline pipeline,
3441 VkShaderStageFlagBits shaderStage,
3442 VkShaderInfoTypeAMD infoType,
3446 //Not a CREATE or DESTROY function
3451 #ifdef VK_USE_PLATFORM_GGP
3453 static VKAPI_ATTR VkResult VKAPI_CALL CreateStreamDescriptorSurfaceGGP(
3454 VkInstance instance,
3455 const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo,
3456 const VkAllocationCallbacks* pAllocator,
3457 VkSurfaceKHR* pSurface)
3459 unique_lock_t lock(global_lock);
3460 *pSurface = (VkSurfaceKHR)global_unique_handle++;
3463 #endif /* VK_USE_PLATFORM_GGP */
3468 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceExternalImageFormatPropertiesNV(
3469 VkPhysicalDevice physicalDevice,
3472 VkImageTiling tiling,
3473 VkImageUsageFlags usage,
3474 VkImageCreateFlags flags,
3475 VkExternalMemoryHandleTypeFlagsNV externalHandleType,
3476 VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties)
3478 //Not a CREATE or DESTROY function
3483 #ifdef VK_USE_PLATFORM_WIN32_KHR
3485 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandleNV(
3487 VkDeviceMemory memory,
3488 VkExternalMemoryHandleTypeFlagsNV handleType,
3491 //Not a CREATE or DESTROY function
3494 #endif /* VK_USE_PLATFORM_WIN32_KHR */
3496 #ifdef VK_USE_PLATFORM_WIN32_KHR
3497 #endif /* VK_USE_PLATFORM_WIN32_KHR */
3500 #ifdef VK_USE_PLATFORM_VI_NN
3502 static VKAPI_ATTR VkResult VKAPI_CALL CreateViSurfaceNN(
3503 VkInstance instance,
3504 const VkViSurfaceCreateInfoNN* pCreateInfo,
3505 const VkAllocationCallbacks* pAllocator,
3506 VkSurfaceKHR* pSurface)
3508 unique_lock_t lock(global_lock);
3509 *pSurface = (VkSurfaceKHR)global_unique_handle++;
3512 #endif /* VK_USE_PLATFORM_VI_NN */
3519 static VKAPI_ATTR void VKAPI_CALL CmdBeginConditionalRenderingEXT(
3520 VkCommandBuffer commandBuffer,
3521 const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin)
3523 //Not a CREATE or DESTROY function
3526 static VKAPI_ATTR void VKAPI_CALL CmdEndConditionalRenderingEXT(
3527 VkCommandBuffer commandBuffer)
3529 //Not a CREATE or DESTROY function
3533 static VKAPI_ATTR void VKAPI_CALL CmdSetViewportWScalingNV(
3534 VkCommandBuffer commandBuffer,
3535 uint32_t firstViewport,
3536 uint32_t viewportCount,
3537 const VkViewportWScalingNV* pViewportWScalings)
3539 //Not a CREATE or DESTROY function
3543 static VKAPI_ATTR VkResult VKAPI_CALL ReleaseDisplayEXT(
3544 VkPhysicalDevice physicalDevice,
3545 VkDisplayKHR display)
3547 //Not a CREATE or DESTROY function
3551 #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
3553 static VKAPI_ATTR VkResult VKAPI_CALL AcquireXlibDisplayEXT(
3554 VkPhysicalDevice physicalDevice,
3556 VkDisplayKHR display)
3558 //Not a CREATE or DESTROY function
3562 static VKAPI_ATTR VkResult VKAPI_CALL GetRandROutputDisplayEXT(
3563 VkPhysicalDevice physicalDevice,
3566 VkDisplayKHR* pDisplay)
3568 //Not a CREATE or DESTROY function
3571 #endif /* VK_USE_PLATFORM_XLIB_XRANDR_EXT */
3574 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilities2EXT(
3575 VkPhysicalDevice physicalDevice,
3576 VkSurfaceKHR surface,
3577 VkSurfaceCapabilities2EXT* pSurfaceCapabilities)
3579 //Not a CREATE or DESTROY function
3584 static VKAPI_ATTR VkResult VKAPI_CALL DisplayPowerControlEXT(
3586 VkDisplayKHR display,
3587 const VkDisplayPowerInfoEXT* pDisplayPowerInfo)
3589 //Not a CREATE or DESTROY function
3593 static VKAPI_ATTR VkResult VKAPI_CALL RegisterDeviceEventEXT(
3595 const VkDeviceEventInfoEXT* pDeviceEventInfo,
3596 const VkAllocationCallbacks* pAllocator,
3599 //Not a CREATE or DESTROY function
3603 static VKAPI_ATTR VkResult VKAPI_CALL RegisterDisplayEventEXT(
3605 VkDisplayKHR display,
3606 const VkDisplayEventInfoEXT* pDisplayEventInfo,
3607 const VkAllocationCallbacks* pAllocator,
3610 //Not a CREATE or DESTROY function
3614 static VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainCounterEXT(
3616 VkSwapchainKHR swapchain,
3617 VkSurfaceCounterFlagBitsEXT counter,
3618 uint64_t* pCounterValue)
3620 //Not a CREATE or DESTROY function
3625 static VKAPI_ATTR VkResult VKAPI_CALL GetRefreshCycleDurationGOOGLE(
3627 VkSwapchainKHR swapchain,
3628 VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties)
3630 //Not a CREATE or DESTROY function
3634 static VKAPI_ATTR VkResult VKAPI_CALL GetPastPresentationTimingGOOGLE(
3636 VkSwapchainKHR swapchain,
3637 uint32_t* pPresentationTimingCount,
3638 VkPastPresentationTimingGOOGLE* pPresentationTimings)
3640 //Not a CREATE or DESTROY function
3650 static VKAPI_ATTR void VKAPI_CALL CmdSetDiscardRectangleEXT(
3651 VkCommandBuffer commandBuffer,
3652 uint32_t firstDiscardRectangle,
3653 uint32_t discardRectangleCount,
3654 const VkRect2D* pDiscardRectangles)
3656 //Not a CREATE or DESTROY function
3663 static VKAPI_ATTR void VKAPI_CALL SetHdrMetadataEXT(
3665 uint32_t swapchainCount,
3666 const VkSwapchainKHR* pSwapchains,
3667 const VkHdrMetadataEXT* pMetadata)
3669 //Not a CREATE or DESTROY function
3672 #ifdef VK_USE_PLATFORM_IOS_MVK
3674 static VKAPI_ATTR VkResult VKAPI_CALL CreateIOSSurfaceMVK(
3675 VkInstance instance,
3676 const VkIOSSurfaceCreateInfoMVK* pCreateInfo,
3677 const VkAllocationCallbacks* pAllocator,
3678 VkSurfaceKHR* pSurface)
3680 unique_lock_t lock(global_lock);
3681 *pSurface = (VkSurfaceKHR)global_unique_handle++;
3684 #endif /* VK_USE_PLATFORM_IOS_MVK */
3686 #ifdef VK_USE_PLATFORM_MACOS_MVK
3688 static VKAPI_ATTR VkResult VKAPI_CALL CreateMacOSSurfaceMVK(
3689 VkInstance instance,
3690 const VkMacOSSurfaceCreateInfoMVK* pCreateInfo,
3691 const VkAllocationCallbacks* pAllocator,
3692 VkSurfaceKHR* pSurface)
3694 unique_lock_t lock(global_lock);
3695 *pSurface = (VkSurfaceKHR)global_unique_handle++;
3698 #endif /* VK_USE_PLATFORM_MACOS_MVK */
3703 static VKAPI_ATTR VkResult VKAPI_CALL SetDebugUtilsObjectNameEXT(
3705 const VkDebugUtilsObjectNameInfoEXT* pNameInfo)
3707 //Not a CREATE or DESTROY function
3711 static VKAPI_ATTR VkResult VKAPI_CALL SetDebugUtilsObjectTagEXT(
3713 const VkDebugUtilsObjectTagInfoEXT* pTagInfo)
3715 //Not a CREATE or DESTROY function
3719 static VKAPI_ATTR void VKAPI_CALL QueueBeginDebugUtilsLabelEXT(
3721 const VkDebugUtilsLabelEXT* pLabelInfo)
3723 //Not a CREATE or DESTROY function
3726 static VKAPI_ATTR void VKAPI_CALL QueueEndDebugUtilsLabelEXT(
3729 //Not a CREATE or DESTROY function
3732 static VKAPI_ATTR void VKAPI_CALL QueueInsertDebugUtilsLabelEXT(
3734 const VkDebugUtilsLabelEXT* pLabelInfo)
3736 //Not a CREATE or DESTROY function
3739 static VKAPI_ATTR void VKAPI_CALL CmdBeginDebugUtilsLabelEXT(
3740 VkCommandBuffer commandBuffer,
3741 const VkDebugUtilsLabelEXT* pLabelInfo)
3743 //Not a CREATE or DESTROY function
3746 static VKAPI_ATTR void VKAPI_CALL CmdEndDebugUtilsLabelEXT(
3747 VkCommandBuffer commandBuffer)
3749 //Not a CREATE or DESTROY function
3752 static VKAPI_ATTR void VKAPI_CALL CmdInsertDebugUtilsLabelEXT(
3753 VkCommandBuffer commandBuffer,
3754 const VkDebugUtilsLabelEXT* pLabelInfo)
3756 //Not a CREATE or DESTROY function
3759 static VKAPI_ATTR VkResult VKAPI_CALL CreateDebugUtilsMessengerEXT(
3760 VkInstance instance,
3761 const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
3762 const VkAllocationCallbacks* pAllocator,
3763 VkDebugUtilsMessengerEXT* pMessenger)
3765 unique_lock_t lock(global_lock);
3766 *pMessenger = (VkDebugUtilsMessengerEXT)global_unique_handle++;
3770 static VKAPI_ATTR void VKAPI_CALL DestroyDebugUtilsMessengerEXT(
3771 VkInstance instance,
3772 VkDebugUtilsMessengerEXT messenger,
3773 const VkAllocationCallbacks* pAllocator)
3778 static VKAPI_ATTR void VKAPI_CALL SubmitDebugUtilsMessageEXT(
3779 VkInstance instance,
3780 VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
3781 VkDebugUtilsMessageTypeFlagsEXT messageTypes,
3782 const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData)
3784 //Not a CREATE or DESTROY function
3787 #ifdef VK_USE_PLATFORM_ANDROID_KHR
3789 static VKAPI_ATTR VkResult VKAPI_CALL GetAndroidHardwareBufferPropertiesANDROID(
3791 const struct AHardwareBuffer* buffer,
3792 VkAndroidHardwareBufferPropertiesANDROID* pProperties)
3794 //Not a CREATE or DESTROY function
3798 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryAndroidHardwareBufferANDROID(
3800 const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo,
3801 struct AHardwareBuffer** pBuffer)
3803 //Not a CREATE or DESTROY function
3806 #endif /* VK_USE_PLATFORM_ANDROID_KHR */
3815 static VKAPI_ATTR void VKAPI_CALL CmdSetSampleLocationsEXT(
3816 VkCommandBuffer commandBuffer,
3817 const VkSampleLocationsInfoEXT* pSampleLocationsInfo)
3819 //Not a CREATE or DESTROY function
3822 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMultisamplePropertiesEXT(
3823 VkPhysicalDevice physicalDevice,
3824 VkSampleCountFlagBits samples,
3825 VkMultisamplePropertiesEXT* pMultisampleProperties)
3827 //Not a CREATE or DESTROY function
3837 static VKAPI_ATTR VkResult VKAPI_CALL GetImageDrmFormatModifierPropertiesEXT(
3840 VkImageDrmFormatModifierPropertiesEXT* pProperties)
3842 //Not a CREATE or DESTROY function
3847 static VKAPI_ATTR VkResult VKAPI_CALL CreateValidationCacheEXT(
3849 const VkValidationCacheCreateInfoEXT* pCreateInfo,
3850 const VkAllocationCallbacks* pAllocator,
3851 VkValidationCacheEXT* pValidationCache)
3853 unique_lock_t lock(global_lock);
3854 *pValidationCache = (VkValidationCacheEXT)global_unique_handle++;
3858 static VKAPI_ATTR void VKAPI_CALL DestroyValidationCacheEXT(
3860 VkValidationCacheEXT validationCache,
3861 const VkAllocationCallbacks* pAllocator)
3866 static VKAPI_ATTR VkResult VKAPI_CALL MergeValidationCachesEXT(
3868 VkValidationCacheEXT dstCache,
3869 uint32_t srcCacheCount,
3870 const VkValidationCacheEXT* pSrcCaches)
3872 //Not a CREATE or DESTROY function
3876 static VKAPI_ATTR VkResult VKAPI_CALL GetValidationCacheDataEXT(
3878 VkValidationCacheEXT validationCache,
3882 //Not a CREATE or DESTROY function
3889 static VKAPI_ATTR void VKAPI_CALL CmdBindShadingRateImageNV(
3890 VkCommandBuffer commandBuffer,
3891 VkImageView imageView,
3892 VkImageLayout imageLayout)
3894 //Not a CREATE or DESTROY function
3897 static VKAPI_ATTR void VKAPI_CALL CmdSetViewportShadingRatePaletteNV(
3898 VkCommandBuffer commandBuffer,
3899 uint32_t firstViewport,
3900 uint32_t viewportCount,
3901 const VkShadingRatePaletteNV* pShadingRatePalettes)
3903 //Not a CREATE or DESTROY function
3906 static VKAPI_ATTR void VKAPI_CALL CmdSetCoarseSampleOrderNV(
3907 VkCommandBuffer commandBuffer,
3908 VkCoarseSampleOrderTypeNV sampleOrderType,
3909 uint32_t customSampleOrderCount,
3910 const VkCoarseSampleOrderCustomNV* pCustomSampleOrders)
3912 //Not a CREATE or DESTROY function
3916 static VKAPI_ATTR VkResult VKAPI_CALL CreateAccelerationStructureNV(
3918 const VkAccelerationStructureCreateInfoNV* pCreateInfo,
3919 const VkAllocationCallbacks* pAllocator,
3920 VkAccelerationStructureNV* pAccelerationStructure)
3922 unique_lock_t lock(global_lock);
3923 *pAccelerationStructure = (VkAccelerationStructureNV)CreateDispObjHandle();
3927 static VKAPI_ATTR void VKAPI_CALL DestroyAccelerationStructureKHR(
3929 VkAccelerationStructureKHR accelerationStructure,
3930 const VkAllocationCallbacks* pAllocator)
3935 static VKAPI_ATTR void VKAPI_CALL DestroyAccelerationStructureNV(
3937 VkAccelerationStructureKHR accelerationStructure,
3938 const VkAllocationCallbacks* pAllocator)
3943 static VKAPI_ATTR void VKAPI_CALL GetAccelerationStructureMemoryRequirementsNV(
3945 const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo,
3946 VkMemoryRequirements2KHR* pMemoryRequirements)
3948 //Not a CREATE or DESTROY function
3951 static VKAPI_ATTR VkResult VKAPI_CALL BindAccelerationStructureMemoryKHR(
3953 uint32_t bindInfoCount,
3954 const VkBindAccelerationStructureMemoryInfoKHR* pBindInfos)
3956 //Not a CREATE or DESTROY function
3960 static VKAPI_ATTR VkResult VKAPI_CALL BindAccelerationStructureMemoryNV(
3962 uint32_t bindInfoCount,
3963 const VkBindAccelerationStructureMemoryInfoKHR* pBindInfos)
3965 //Not a CREATE or DESTROY function
3969 static VKAPI_ATTR void VKAPI_CALL CmdBuildAccelerationStructureNV(
3970 VkCommandBuffer commandBuffer,
3971 const VkAccelerationStructureInfoNV* pInfo,
3972 VkBuffer instanceData,
3973 VkDeviceSize instanceOffset,
3975 VkAccelerationStructureKHR dst,
3976 VkAccelerationStructureKHR src,
3978 VkDeviceSize scratchOffset)
3980 //Not a CREATE or DESTROY function
3983 static VKAPI_ATTR void VKAPI_CALL CmdCopyAccelerationStructureNV(
3984 VkCommandBuffer commandBuffer,
3985 VkAccelerationStructureKHR dst,
3986 VkAccelerationStructureKHR src,
3987 VkCopyAccelerationStructureModeKHR mode)
3989 //Not a CREATE or DESTROY function
3992 static VKAPI_ATTR void VKAPI_CALL CmdTraceRaysNV(
3993 VkCommandBuffer commandBuffer,
3994 VkBuffer raygenShaderBindingTableBuffer,
3995 VkDeviceSize raygenShaderBindingOffset,
3996 VkBuffer missShaderBindingTableBuffer,
3997 VkDeviceSize missShaderBindingOffset,
3998 VkDeviceSize missShaderBindingStride,
3999 VkBuffer hitShaderBindingTableBuffer,
4000 VkDeviceSize hitShaderBindingOffset,
4001 VkDeviceSize hitShaderBindingStride,
4002 VkBuffer callableShaderBindingTableBuffer,
4003 VkDeviceSize callableShaderBindingOffset,
4004 VkDeviceSize callableShaderBindingStride,
4009 //Not a CREATE or DESTROY function
4012 static VKAPI_ATTR VkResult VKAPI_CALL CreateRayTracingPipelinesNV(
4014 VkPipelineCache pipelineCache,
4015 uint32_t createInfoCount,
4016 const VkRayTracingPipelineCreateInfoNV* pCreateInfos,
4017 const VkAllocationCallbacks* pAllocator,
4018 VkPipeline* pPipelines)
4020 unique_lock_t lock(global_lock);
4021 for (uint32_t i = 0; i < createInfoCount; ++i) {
4022 pPipelines[i] = (VkPipeline)global_unique_handle++;
4027 static VKAPI_ATTR VkResult VKAPI_CALL GetRayTracingShaderGroupHandlesKHR(
4029 VkPipeline pipeline,
4030 uint32_t firstGroup,
4031 uint32_t groupCount,
4035 //Not a CREATE or DESTROY function
4039 static VKAPI_ATTR VkResult VKAPI_CALL GetRayTracingShaderGroupHandlesNV(
4041 VkPipeline pipeline,
4042 uint32_t firstGroup,
4043 uint32_t groupCount,
4047 //Not a CREATE or DESTROY function
4051 static VKAPI_ATTR VkResult VKAPI_CALL GetAccelerationStructureHandleNV(
4053 VkAccelerationStructureKHR accelerationStructure,
4057 //Not a CREATE or DESTROY function
4061 static VKAPI_ATTR void VKAPI_CALL CmdWriteAccelerationStructuresPropertiesKHR(
4062 VkCommandBuffer commandBuffer,
4063 uint32_t accelerationStructureCount,
4064 const VkAccelerationStructureKHR* pAccelerationStructures,
4065 VkQueryType queryType,
4066 VkQueryPool queryPool,
4067 uint32_t firstQuery)
4069 //Not a CREATE or DESTROY function
4072 static VKAPI_ATTR void VKAPI_CALL CmdWriteAccelerationStructuresPropertiesNV(
4073 VkCommandBuffer commandBuffer,
4074 uint32_t accelerationStructureCount,
4075 const VkAccelerationStructureKHR* pAccelerationStructures,
4076 VkQueryType queryType,
4077 VkQueryPool queryPool,
4078 uint32_t firstQuery)
4080 //Not a CREATE or DESTROY function
4083 static VKAPI_ATTR VkResult VKAPI_CALL CompileDeferredNV(
4085 VkPipeline pipeline,
4088 //Not a CREATE or DESTROY function
4097 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryHostPointerPropertiesEXT(
4099 VkExternalMemoryHandleTypeFlagBits handleType,
4100 const void* pHostPointer,
4101 VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties)
4103 //Not a CREATE or DESTROY function
4108 static VKAPI_ATTR void VKAPI_CALL CmdWriteBufferMarkerAMD(
4109 VkCommandBuffer commandBuffer,
4110 VkPipelineStageFlagBits pipelineStage,
4112 VkDeviceSize dstOffset,
4115 //Not a CREATE or DESTROY function
4120 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCalibrateableTimeDomainsEXT(
4121 VkPhysicalDevice physicalDevice,
4122 uint32_t* pTimeDomainCount,
4123 VkTimeDomainEXT* pTimeDomains)
4125 //Not a CREATE or DESTROY function
4129 static VKAPI_ATTR VkResult VKAPI_CALL GetCalibratedTimestampsEXT(
4131 uint32_t timestampCount,
4132 const VkCalibratedTimestampInfoEXT* pTimestampInfos,
4133 uint64_t* pTimestamps,
4134 uint64_t* pMaxDeviation)
4136 //Not a CREATE or DESTROY function
4143 #ifdef VK_USE_PLATFORM_GGP
4144 #endif /* VK_USE_PLATFORM_GGP */
4150 static VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksNV(
4151 VkCommandBuffer commandBuffer,
4155 //Not a CREATE or DESTROY function
4158 static VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksIndirectNV(
4159 VkCommandBuffer commandBuffer,
4161 VkDeviceSize offset,
4165 //Not a CREATE or DESTROY function
4168 static VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksIndirectCountNV(
4169 VkCommandBuffer commandBuffer,
4171 VkDeviceSize offset,
4172 VkBuffer countBuffer,
4173 VkDeviceSize countBufferOffset,
4174 uint32_t maxDrawCount,
4177 //Not a CREATE or DESTROY function
4183 static VKAPI_ATTR void VKAPI_CALL CmdSetExclusiveScissorNV(
4184 VkCommandBuffer commandBuffer,
4185 uint32_t firstExclusiveScissor,
4186 uint32_t exclusiveScissorCount,
4187 const VkRect2D* pExclusiveScissors)
4189 //Not a CREATE or DESTROY function
4193 static VKAPI_ATTR void VKAPI_CALL CmdSetCheckpointNV(
4194 VkCommandBuffer commandBuffer,
4195 const void* pCheckpointMarker)
4197 //Not a CREATE or DESTROY function
4200 static VKAPI_ATTR void VKAPI_CALL GetQueueCheckpointDataNV(
4202 uint32_t* pCheckpointDataCount,
4203 VkCheckpointDataNV* pCheckpointData)
4205 //Not a CREATE or DESTROY function
4210 static VKAPI_ATTR VkResult VKAPI_CALL InitializePerformanceApiINTEL(
4212 const VkInitializePerformanceApiInfoINTEL* pInitializeInfo)
4214 //Not a CREATE or DESTROY function
4218 static VKAPI_ATTR void VKAPI_CALL UninitializePerformanceApiINTEL(
4221 //Not a CREATE or DESTROY function
4224 static VKAPI_ATTR VkResult VKAPI_CALL CmdSetPerformanceMarkerINTEL(
4225 VkCommandBuffer commandBuffer,
4226 const VkPerformanceMarkerInfoINTEL* pMarkerInfo)
4228 //Not a CREATE or DESTROY function
4232 static VKAPI_ATTR VkResult VKAPI_CALL CmdSetPerformanceStreamMarkerINTEL(
4233 VkCommandBuffer commandBuffer,
4234 const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo)
4236 //Not a CREATE or DESTROY function
4240 static VKAPI_ATTR VkResult VKAPI_CALL CmdSetPerformanceOverrideINTEL(
4241 VkCommandBuffer commandBuffer,
4242 const VkPerformanceOverrideInfoINTEL* pOverrideInfo)
4244 //Not a CREATE or DESTROY function
4248 static VKAPI_ATTR VkResult VKAPI_CALL AcquirePerformanceConfigurationINTEL(
4250 const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo,
4251 VkPerformanceConfigurationINTEL* pConfiguration)
4253 //Not a CREATE or DESTROY function
4257 static VKAPI_ATTR VkResult VKAPI_CALL ReleasePerformanceConfigurationINTEL(
4259 VkPerformanceConfigurationINTEL configuration)
4261 //Not a CREATE or DESTROY function
4265 static VKAPI_ATTR VkResult VKAPI_CALL QueueSetPerformanceConfigurationINTEL(
4267 VkPerformanceConfigurationINTEL configuration)
4269 //Not a CREATE or DESTROY function
4273 static VKAPI_ATTR VkResult VKAPI_CALL GetPerformanceParameterINTEL(
4275 VkPerformanceParameterTypeINTEL parameter,
4276 VkPerformanceValueINTEL* pValue)
4278 //Not a CREATE or DESTROY function
4284 static VKAPI_ATTR void VKAPI_CALL SetLocalDimmingAMD(
4286 VkSwapchainKHR swapChain,
4287 VkBool32 localDimmingEnable)
4289 //Not a CREATE or DESTROY function
4292 #ifdef VK_USE_PLATFORM_FUCHSIA
4294 static VKAPI_ATTR VkResult VKAPI_CALL CreateImagePipeSurfaceFUCHSIA(
4295 VkInstance instance,
4296 const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo,
4297 const VkAllocationCallbacks* pAllocator,
4298 VkSurfaceKHR* pSurface)
4300 unique_lock_t lock(global_lock);
4301 *pSurface = (VkSurfaceKHR)global_unique_handle++;
4304 #endif /* VK_USE_PLATFORM_FUCHSIA */
4306 #ifdef VK_USE_PLATFORM_METAL_EXT
4308 static VKAPI_ATTR VkResult VKAPI_CALL CreateMetalSurfaceEXT(
4309 VkInstance instance,
4310 const VkMetalSurfaceCreateInfoEXT* pCreateInfo,
4311 const VkAllocationCallbacks* pAllocator,
4312 VkSurfaceKHR* pSurface)
4314 unique_lock_t lock(global_lock);
4315 *pSurface = (VkSurfaceKHR)global_unique_handle++;
4318 #endif /* VK_USE_PLATFORM_METAL_EXT */
4331 static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetBufferDeviceAddressEXT(
4333 const VkBufferDeviceAddressInfo* pInfo)
4335 //Not a CREATE or DESTROY function
4340 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceToolPropertiesEXT(
4341 VkPhysicalDevice physicalDevice,
4342 uint32_t* pToolCount,
4343 VkPhysicalDeviceToolPropertiesEXT* pToolProperties)
4345 //Not a CREATE or DESTROY function
4352 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCooperativeMatrixPropertiesNV(
4353 VkPhysicalDevice physicalDevice,
4354 uint32_t* pPropertyCount,
4355 VkCooperativeMatrixPropertiesNV* pProperties)
4357 //Not a CREATE or DESTROY function
4362 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(
4363 VkPhysicalDevice physicalDevice,
4364 uint32_t* pCombinationCount,
4365 VkFramebufferMixedSamplesCombinationNV* pCombinations)
4367 //Not a CREATE or DESTROY function
4373 #ifdef VK_USE_PLATFORM_WIN32_KHR
4375 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModes2EXT(
4376 VkPhysicalDevice physicalDevice,
4377 const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
4378 uint32_t* pPresentModeCount,
4379 VkPresentModeKHR* pPresentModes)
4381 //Not a CREATE or DESTROY function
4385 static VKAPI_ATTR VkResult VKAPI_CALL AcquireFullScreenExclusiveModeEXT(
4387 VkSwapchainKHR swapchain)
4389 //Not a CREATE or DESTROY function
4393 static VKAPI_ATTR VkResult VKAPI_CALL ReleaseFullScreenExclusiveModeEXT(
4395 VkSwapchainKHR swapchain)
4397 //Not a CREATE or DESTROY function
4401 static VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupSurfacePresentModes2EXT(
4403 const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
4404 VkDeviceGroupPresentModeFlagsKHR* pModes)
4406 //Not a CREATE or DESTROY function
4409 #endif /* VK_USE_PLATFORM_WIN32_KHR */
4412 static VKAPI_ATTR VkResult VKAPI_CALL CreateHeadlessSurfaceEXT(
4413 VkInstance instance,
4414 const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo,
4415 const VkAllocationCallbacks* pAllocator,
4416 VkSurfaceKHR* pSurface)
4418 unique_lock_t lock(global_lock);
4419 *pSurface = (VkSurfaceKHR)global_unique_handle++;
4424 static VKAPI_ATTR void VKAPI_CALL CmdSetLineStippleEXT(
4425 VkCommandBuffer commandBuffer,
4426 uint32_t lineStippleFactor,
4427 uint16_t lineStipplePattern)
4429 //Not a CREATE or DESTROY function
4433 static VKAPI_ATTR void VKAPI_CALL ResetQueryPoolEXT(
4435 VkQueryPool queryPool,
4436 uint32_t firstQuery,
4437 uint32_t queryCount)
4439 //Not a CREATE or DESTROY function
4445 static VKAPI_ATTR void VKAPI_CALL GetGeneratedCommandsMemoryRequirementsNV(
4447 const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo,
4448 VkMemoryRequirements2* pMemoryRequirements)
4450 //Not a CREATE or DESTROY function
4453 static VKAPI_ATTR void VKAPI_CALL CmdPreprocessGeneratedCommandsNV(
4454 VkCommandBuffer commandBuffer,
4455 const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo)
4457 //Not a CREATE or DESTROY function
4460 static VKAPI_ATTR void VKAPI_CALL CmdExecuteGeneratedCommandsNV(
4461 VkCommandBuffer commandBuffer,
4462 VkBool32 isPreprocessed,
4463 const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo)
4465 //Not a CREATE or DESTROY function
4468 static VKAPI_ATTR void VKAPI_CALL CmdBindPipelineShaderGroupNV(
4469 VkCommandBuffer commandBuffer,
4470 VkPipelineBindPoint pipelineBindPoint,
4471 VkPipeline pipeline,
4472 uint32_t groupIndex)
4474 //Not a CREATE or DESTROY function
4477 static VKAPI_ATTR VkResult VKAPI_CALL CreateIndirectCommandsLayoutNV(
4479 const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo,
4480 const VkAllocationCallbacks* pAllocator,
4481 VkIndirectCommandsLayoutNV* pIndirectCommandsLayout)
4483 unique_lock_t lock(global_lock);
4484 *pIndirectCommandsLayout = (VkIndirectCommandsLayoutNV)global_unique_handle++;
4488 static VKAPI_ATTR void VKAPI_CALL DestroyIndirectCommandsLayoutNV(
4490 VkIndirectCommandsLayoutNV indirectCommandsLayout,
4491 const VkAllocationCallbacks* pAllocator)
4502 static VKAPI_ATTR VkResult VKAPI_CALL CreatePrivateDataSlotEXT(
4504 const VkPrivateDataSlotCreateInfoEXT* pCreateInfo,
4505 const VkAllocationCallbacks* pAllocator,
4506 VkPrivateDataSlotEXT* pPrivateDataSlot)
4508 unique_lock_t lock(global_lock);
4509 *pPrivateDataSlot = (VkPrivateDataSlotEXT)global_unique_handle++;
4513 static VKAPI_ATTR void VKAPI_CALL DestroyPrivateDataSlotEXT(
4515 VkPrivateDataSlotEXT privateDataSlot,
4516 const VkAllocationCallbacks* pAllocator)
4521 static VKAPI_ATTR VkResult VKAPI_CALL SetPrivateDataEXT(
4523 VkObjectType objectType,
4524 uint64_t objectHandle,
4525 VkPrivateDataSlotEXT privateDataSlot,
4528 //Not a CREATE or DESTROY function
4532 static VKAPI_ATTR void VKAPI_CALL GetPrivateDataEXT(
4534 VkObjectType objectType,
4535 uint64_t objectHandle,
4536 VkPrivateDataSlotEXT privateDataSlot,
4539 //Not a CREATE or DESTROY function
4545 #ifdef VK_ENABLE_BETA_EXTENSIONS
4547 static VKAPI_ATTR VkResult VKAPI_CALL CreateAccelerationStructureKHR(
4549 const VkAccelerationStructureCreateInfoKHR* pCreateInfo,
4550 const VkAllocationCallbacks* pAllocator,
4551 VkAccelerationStructureKHR* pAccelerationStructure)
4553 unique_lock_t lock(global_lock);
4554 *pAccelerationStructure = (VkAccelerationStructureKHR)global_unique_handle++;
4558 static VKAPI_ATTR void VKAPI_CALL GetAccelerationStructureMemoryRequirementsKHR(
4560 const VkAccelerationStructureMemoryRequirementsInfoKHR* pInfo,
4561 VkMemoryRequirements2* pMemoryRequirements)
4563 //Not a CREATE or DESTROY function
4566 static VKAPI_ATTR void VKAPI_CALL CmdBuildAccelerationStructureKHR(
4567 VkCommandBuffer commandBuffer,
4569 const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,
4570 const VkAccelerationStructureBuildOffsetInfoKHR* const* ppOffsetInfos)
4572 //Not a CREATE or DESTROY function
4575 static VKAPI_ATTR void VKAPI_CALL CmdBuildAccelerationStructureIndirectKHR(
4576 VkCommandBuffer commandBuffer,
4577 const VkAccelerationStructureBuildGeometryInfoKHR* pInfo,
4578 VkBuffer indirectBuffer,
4579 VkDeviceSize indirectOffset,
4580 uint32_t indirectStride)
4582 //Not a CREATE or DESTROY function
4585 static VKAPI_ATTR VkResult VKAPI_CALL BuildAccelerationStructureKHR(
4588 const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,
4589 const VkAccelerationStructureBuildOffsetInfoKHR* const* ppOffsetInfos)
4591 //Not a CREATE or DESTROY function
4595 static VKAPI_ATTR VkResult VKAPI_CALL CopyAccelerationStructureKHR(
4597 const VkCopyAccelerationStructureInfoKHR* pInfo)
4599 //Not a CREATE or DESTROY function
4603 static VKAPI_ATTR VkResult VKAPI_CALL CopyAccelerationStructureToMemoryKHR(
4605 const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo)
4607 //Not a CREATE or DESTROY function
4611 static VKAPI_ATTR VkResult VKAPI_CALL CopyMemoryToAccelerationStructureKHR(
4613 const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo)
4615 //Not a CREATE or DESTROY function
4619 static VKAPI_ATTR VkResult VKAPI_CALL WriteAccelerationStructuresPropertiesKHR(
4621 uint32_t accelerationStructureCount,
4622 const VkAccelerationStructureKHR* pAccelerationStructures,
4623 VkQueryType queryType,
4628 //Not a CREATE or DESTROY function
4632 static VKAPI_ATTR void VKAPI_CALL CmdCopyAccelerationStructureKHR(
4633 VkCommandBuffer commandBuffer,
4634 const VkCopyAccelerationStructureInfoKHR* pInfo)
4636 //Not a CREATE or DESTROY function
4639 static VKAPI_ATTR void VKAPI_CALL CmdCopyAccelerationStructureToMemoryKHR(
4640 VkCommandBuffer commandBuffer,
4641 const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo)
4643 //Not a CREATE or DESTROY function
4646 static VKAPI_ATTR void VKAPI_CALL CmdCopyMemoryToAccelerationStructureKHR(
4647 VkCommandBuffer commandBuffer,
4648 const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo)
4650 //Not a CREATE or DESTROY function
4653 static VKAPI_ATTR void VKAPI_CALL CmdTraceRaysKHR(
4654 VkCommandBuffer commandBuffer,
4655 const VkStridedBufferRegionKHR* pRaygenShaderBindingTable,
4656 const VkStridedBufferRegionKHR* pMissShaderBindingTable,
4657 const VkStridedBufferRegionKHR* pHitShaderBindingTable,
4658 const VkStridedBufferRegionKHR* pCallableShaderBindingTable,
4663 //Not a CREATE or DESTROY function
4666 static VKAPI_ATTR VkResult VKAPI_CALL CreateRayTracingPipelinesKHR(
4668 VkPipelineCache pipelineCache,
4669 uint32_t createInfoCount,
4670 const VkRayTracingPipelineCreateInfoKHR* pCreateInfos,
4671 const VkAllocationCallbacks* pAllocator,
4672 VkPipeline* pPipelines)
4674 unique_lock_t lock(global_lock);
4675 for (uint32_t i = 0; i < createInfoCount; ++i) {
4676 pPipelines[i] = (VkPipeline)global_unique_handle++;
4681 static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetAccelerationStructureDeviceAddressKHR(
4683 const VkAccelerationStructureDeviceAddressInfoKHR* pInfo)
4685 //Not a CREATE or DESTROY function
4689 static VKAPI_ATTR VkResult VKAPI_CALL GetRayTracingCaptureReplayShaderGroupHandlesKHR(
4691 VkPipeline pipeline,
4692 uint32_t firstGroup,
4693 uint32_t groupCount,
4697 //Not a CREATE or DESTROY function
4701 static VKAPI_ATTR void VKAPI_CALL CmdTraceRaysIndirectKHR(
4702 VkCommandBuffer commandBuffer,
4703 const VkStridedBufferRegionKHR* pRaygenShaderBindingTable,
4704 const VkStridedBufferRegionKHR* pMissShaderBindingTable,
4705 const VkStridedBufferRegionKHR* pHitShaderBindingTable,
4706 const VkStridedBufferRegionKHR* pCallableShaderBindingTable,
4708 VkDeviceSize offset)
4710 //Not a CREATE or DESTROY function
4713 static VKAPI_ATTR VkResult VKAPI_CALL GetDeviceAccelerationStructureCompatibilityKHR(
4715 const VkAccelerationStructureVersionKHR* version)
4717 //Not a CREATE or DESTROY function
4720 #endif /* VK_ENABLE_BETA_EXTENSIONS */
4724 static VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetPhysicalDeviceProcAddr(VkInstance instance, const char *funcName) {
4725 // TODO: This function should only care about physical device functions and return nullptr for other functions
4726 const auto &item = name_to_funcptr_map.find(funcName);
4727 if (item != name_to_funcptr_map.end()) {
4728 return reinterpret_cast<PFN_vkVoidFunction>(item->second);
4730 // Mock should intercept all functions so if we get here just return null
4734 } // namespace vkmock
4736 #if defined(__GNUC__) && __GNUC__ >= 4
4737 #define EXPORT __attribute__((visibility("default")))
4738 #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
4739 #define EXPORT __attribute__((visibility("default")))
4746 EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetInstanceProcAddr(VkInstance instance, const char* pName) {
4747 if (!vkmock::negotiate_loader_icd_interface_called) {
4748 vkmock::loader_interface_version = 1;
4750 return vkmock::GetInstanceProcAddr(instance, pName);
4753 EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetPhysicalDeviceProcAddr(VkInstance instance, const char* pName) {
4754 return vkmock::GetPhysicalDeviceProcAddr(instance, pName);
4757 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vk_icdNegotiateLoaderICDInterfaceVersion(uint32_t* pSupportedVersion) {
4758 vkmock::negotiate_loader_icd_interface_called = true;
4759 vkmock::loader_interface_version = *pSupportedVersion;
4760 if (*pSupportedVersion > vkmock::SUPPORTED_LOADER_ICD_INTERFACE_VERSION) {
4761 *pSupportedVersion = vkmock::SUPPORTED_LOADER_ICD_INTERFACE_VERSION;
4767 EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR(
4768 VkInstance instance,
4769 VkSurfaceKHR surface,
4770 const VkAllocationCallbacks* pAllocator)
4772 vkmock::DestroySurfaceKHR(instance, surface, pAllocator);
4775 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceSupportKHR(
4776 VkPhysicalDevice physicalDevice,
4777 uint32_t queueFamilyIndex,
4778 VkSurfaceKHR surface,
4779 VkBool32* pSupported)
4781 return vkmock::GetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, pSupported);
4784 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
4785 VkPhysicalDevice physicalDevice,
4786 VkSurfaceKHR surface,
4787 VkSurfaceCapabilitiesKHR* pSurfaceCapabilities)
4789 return vkmock::GetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities);
4792 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormatsKHR(
4793 VkPhysicalDevice physicalDevice,
4794 VkSurfaceKHR surface,
4795 uint32_t* pSurfaceFormatCount,
4796 VkSurfaceFormatKHR* pSurfaceFormats)
4798 return vkmock::GetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats);
4801 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR(
4802 VkPhysicalDevice physicalDevice,
4803 VkSurfaceKHR surface,
4804 uint32_t* pPresentModeCount,
4805 VkPresentModeKHR* pPresentModes)
4807 return vkmock::GetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, pPresentModeCount, pPresentModes);
4810 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR(
4811 VkInstance instance,
4812 const VkDisplaySurfaceCreateInfoKHR* pCreateInfo,
4813 const VkAllocationCallbacks* pAllocator,
4814 VkSurfaceKHR* pSurface)
4816 return vkmock::CreateDisplayPlaneSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
4819 #ifdef VK_USE_PLATFORM_XLIB_KHR
4821 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR(
4822 VkInstance instance,
4823 const VkXlibSurfaceCreateInfoKHR* pCreateInfo,
4824 const VkAllocationCallbacks* pAllocator,
4825 VkSurfaceKHR* pSurface)
4827 return vkmock::CreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
4829 #endif /* VK_USE_PLATFORM_XLIB_KHR */
4831 #ifdef VK_USE_PLATFORM_XCB_KHR
4833 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR(
4834 VkInstance instance,
4835 const VkXcbSurfaceCreateInfoKHR* pCreateInfo,
4836 const VkAllocationCallbacks* pAllocator,
4837 VkSurfaceKHR* pSurface)
4839 return vkmock::CreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
4841 #endif /* VK_USE_PLATFORM_XCB_KHR */
4843 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
4845 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR(
4846 VkInstance instance,
4847 const VkWaylandSurfaceCreateInfoKHR* pCreateInfo,
4848 const VkAllocationCallbacks* pAllocator,
4849 VkSurfaceKHR* pSurface)
4851 return vkmock::CreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
4853 #endif /* VK_USE_PLATFORM_WAYLAND_KHR */
4855 #ifdef VK_USE_PLATFORM_ANDROID_KHR
4857 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR(
4858 VkInstance instance,
4859 const VkAndroidSurfaceCreateInfoKHR* pCreateInfo,
4860 const VkAllocationCallbacks* pAllocator,
4861 VkSurfaceKHR* pSurface)
4863 return vkmock::CreateAndroidSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
4865 #endif /* VK_USE_PLATFORM_ANDROID_KHR */
4867 #ifdef VK_USE_PLATFORM_WIN32_KHR
4869 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR(
4870 VkInstance instance,
4871 const VkWin32SurfaceCreateInfoKHR* pCreateInfo,
4872 const VkAllocationCallbacks* pAllocator,
4873 VkSurfaceKHR* pSurface)
4875 return vkmock::CreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
4877 #endif /* VK_USE_PLATFORM_WIN32_KHR */
4879 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModesKHR(
4881 VkSurfaceKHR surface,
4882 VkDeviceGroupPresentModeFlagsKHR* pModes)
4884 return vkmock::GetDeviceGroupSurfacePresentModesKHR(device, surface, pModes);
4887 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHR(
4888 VkPhysicalDevice physicalDevice,
4889 VkSurfaceKHR surface,
4890 uint32_t* pRectCount,
4893 return vkmock::GetPhysicalDevicePresentRectanglesKHR(physicalDevice, surface, pRectCount, pRects);
4896 #ifdef VK_USE_PLATFORM_VI_NN
4898 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateViSurfaceNN(
4899 VkInstance instance,
4900 const VkViSurfaceCreateInfoNN* pCreateInfo,
4901 const VkAllocationCallbacks* pAllocator,
4902 VkSurfaceKHR* pSurface)
4904 return vkmock::CreateViSurfaceNN(instance, pCreateInfo, pAllocator, pSurface);
4906 #endif /* VK_USE_PLATFORM_VI_NN */
4908 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2EXT(
4909 VkPhysicalDevice physicalDevice,
4910 VkSurfaceKHR surface,
4911 VkSurfaceCapabilities2EXT* pSurfaceCapabilities)
4913 return vkmock::GetPhysicalDeviceSurfaceCapabilities2EXT(physicalDevice, surface, pSurfaceCapabilities);
4916 #ifdef VK_USE_PLATFORM_IOS_MVK
4918 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateIOSSurfaceMVK(
4919 VkInstance instance,
4920 const VkIOSSurfaceCreateInfoMVK* pCreateInfo,
4921 const VkAllocationCallbacks* pAllocator,
4922 VkSurfaceKHR* pSurface)
4924 return vkmock::CreateIOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
4926 #endif /* VK_USE_PLATFORM_IOS_MVK */
4928 #ifdef VK_USE_PLATFORM_MACOS_MVK
4930 EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK(
4931 VkInstance instance,
4932 const VkMacOSSurfaceCreateInfoMVK* pCreateInfo,
4933 const VkAllocationCallbacks* pAllocator,
4934 VkSurfaceKHR* pSurface)
4936 return vkmock::CreateMacOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
4938 #endif /* VK_USE_PLATFORM_MACOS_MVK */