diff --git a/doc/Doxyfile b/doc/Doxyfile
index cbdf75f6c..fd6a8a2c0 100644
--- a/doc/Doxyfile
+++ b/doc/Doxyfile
@@ -303,6 +303,8 @@ ALIASES = \
"type_vk{1}=Vk\1" \
"val_vk{2}=VK_\1" \
"def_vk{1}=VK_\1" \
+ "requires_vk11=@xrefitem requires-vk11 \"Requires Vulkan 1.1\" \"Functionality requiring Vulkan 1.1\"" \
+ "requires_vk12=@xrefitem requires-vk12 \"Requires Vulkan 1.2\" \"Functionality requiring Vulkan 1.2\"" \
"requires_vk_extension=@xrefitem requires-vk-extension \"Requires Vulkan extension\" \"Functionality requiring specific Vulkan extension\"" \
"vk_extension{2}= \1_\2" \
"fn_al{1}=`al\1()`" \
diff --git a/doc/Doxyfile-mcss b/doc/Doxyfile-mcss
index 1aa2182c7..fdfda237a 100644
--- a/doc/Doxyfile-mcss
+++ b/doc/Doxyfile-mcss
@@ -60,6 +60,8 @@ ALIASES = \
"type_vk{1}=@m_class{m-doc-external} Vk\1" \
"val_vk{2}=@m_class{m-doc-external} VK_\1" \
"def_vk{1}=@m_class{m-doc-external} VK_\1" \
+ "requires_vk11=@xrefitem requires-vk11 \"Requires Vulkan 1.1\" \"Functionality requiring Vulkan 1.1\"" \
+ "requires_vk12=@xrefitem requires-vk12 \"Requires Vulkan 1.2\" \"Functionality requiring Vulkan 1.2\"" \
"requires_vk_extension=@xrefitem requires-vk-extension \"Requires Vulkan extension\" \"Functionality requiring specific Vulkan extension\"" \
"vk_extension{2}=@m_class{m-doc-external} \1_\2" \
"fn_al{1}=@m_class{m-doc-external} al\1()" \
diff --git a/doc/Doxyfile-public b/doc/Doxyfile-public
index 29d4e1971..4460f654f 100644
--- a/doc/Doxyfile-public
+++ b/doc/Doxyfile-public
@@ -56,6 +56,8 @@ ALIASES = \
"type_vk{1}=@m_class{m-doc-external} Vk\1" \
"val_vk{2}=@m_class{m-doc-external} VK_\1" \
"def_vk{1}=@m_class{m-doc-external} VK_\1" \
+ "requires_vk11=@xrefitem requires-vk11 \"Requires Vulkan 1.1\" \"Functionality requiring Vulkan 1.1\"" \
+ "requires_vk12=@xrefitem requires-vk12 \"Requires Vulkan 1.2\" \"Functionality requiring Vulkan 1.2\"" \
"requires_vk_extension=@xrefitem requires-vk-extension \"Requires Vulkan extension\" \"Functionality requiring specific Vulkan extension\"" \
"vk_extension{2}=@m_class{m-doc-external} \1_\2" \
"fn_al{1}=@m_class{m-doc-external} al\1()" \
diff --git a/doc/vulkan-mapping.dox b/doc/vulkan-mapping.dox
new file mode 100644
index 000000000..c53492551
--- /dev/null
+++ b/doc/vulkan-mapping.dox
@@ -0,0 +1,299 @@
+/*
+ This file is part of Magnum.
+
+ Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
+ 2020 Vladimír Vondruš
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+*/
+
+namespace Magnum { namespace Vk {
+
+/** @page vulkan-mapping Command mapping
+@brief List of Vulkan commands corresponding to particular Magnum API.
+
+@tableofcontents
+@m_footernavigation
+
+Legend:
+
+- @m_class{m-label m-flat m-success} **X.Y** --- given feature is new in
+ Vulkan version X.Y
+- @m_class{m-label m-flat m-success} **ABC, X.Y** --- given feature is
+ exposed though an ABC extension and then promoted to Vulkan version X.Y;
+ both the extension and the core entrypoints are available
+- @m_class{m-label m-flat m-warning} **ABC** --- given feature is
+ exposed though an ABC extension
+- @m_class{m-label m-danger} **deprecated** --- given feature is deprecated
+ in newer versions of Vulkan and replaced by different functionality
+
+@section vulkan-mapping-functions Functions
+
+@subsection vulkan-mapping-functions-a A
+
+@m_class{m-fullwidth}
+
+Vulkan function | Matching API
+--------------------------------------- | ------------
+@fn_vk{AllocateCommandBuffers}, \n @fn_vk{FreeCommandBuffers} | |
+@fn_vk{AllocateDescriptorSets}, \n @fn_vk{FreeDescriptorSets} | |
+@fn_vk{AllocateMemory}, \n @fn_vk{FreeMemory} | |
+
+@subsection vulkan-mapping-functions-b B
+
+@m_class{m-fullwidth}
+
+Vulkan function | Matching API
+--------------------------------------- | ------------
+@fn_vk{BeginCommandBuffer}, \n \fn_vk{EndCommandBuffer} | |
+@fn_vk{BindBufferMemory}, \n @fn_vk{BindBufferMemory2} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+@fn_vk{BindImageMemory}, \n @fn_vk{BindImageMemory2} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+
+@subsection vulkan-mapping-functions-c C
+
+@m_class{m-fullwidth}
+
+Vulkan function | Matching API
+--------------------------------------- | ------------
+@fn_vk{CmdBeginQuery}, \n @fn_vk{CmdEndQuery} | |
+@fn_vk{CmdBeginDebugUtilsLabelEXT} @m_class{m-label m-flat m-warning} **EXT**, \n @fn_vk{CmdEndebugUtilsLabelEXT} @m_class{m-label m-flat m-warning} **EXT** | |
+@fn_vk{CmdBeginRenderPass}, \n @fn_vk{CmdBeginRenderPass2} @m_class{m-label m-flat m-success} **KHR, 1.2**, \n @fn_vk{CmdEndRenderpass}, \n @fn_vk{CmdEndRenderpass2} @m_class{m-label m-flat m-success} **KHR, 1.2** | |
+@fn_vk{CmdBindDescriptorSets} | |
+@fn_vk{CmdBindIndexBuffer} | |
+@fn_vk{CmdBindPipeline} | |
+@fn_vk{CmdBindVertexBuffers} | |
+@fn_vk{CmdBlitImage} | |
+@fn_vk{CmdClearAttachments} | |
+@fn_vk{CmdClearColorImage} | |
+@fn_vk{CmdClearDepthStencilImage} | |
+@fn_vk{CmdCopyBuffer} | |
+@fn_vk{CmdCopyBufferToImage} | |
+@fn_vk{CmdCopyImage} | |
+@fn_vk{CmdCopyImageToBuffer} | |
+@fn_vk{CmdCopyQueryPoolResults} | |
+@fn_vk{CmdDebugMarkerBeginEXT} @m_class{m-label m-danger} **deprecated** @m_class{m-label m-flat m-warning} **EXT**, \n @fn_vk{CmdDebugMarkerEndEXT} @m_class{m-label m-danger} **deprecated** @m_class{m-label m-flat m-warning} **EXT** | |
+@fn_vk{CmdDebugMarkerInsertEXT} @m_class{m-label m-danger} **deprecated** @m_class{m-label m-flat m-warning} **EXT** | |
+@fn_vk{CmdDispatch} | |
+@fn_vk{CmdDispatchBase} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+@fn_vk{CmdDispatchIndirect} | |
+@fn_vk{CmdDraw} | |
+@fn_vk{CmdDrawIndexed} | |
+@fn_vk{CmdDrawIndexedIndirect} | |
+@fn_vk{CmdDrawIndexedIndirectCount} @m_class{m-label m-flat m-success} **KHR, 1.2** | |
+@fn_vk{CmdDrawIndirect} | |
+@fn_vk{CmdDrawIndirectCount} @m_class{m-label m-flat m-success} **KHR, 1.2** | |
+@fn_vk{CmdExecuteCommands} | |
+@fn_vk{CmdFillBuffer} | |
+@fn_vk{CmdInsertDebugUtilsLabelEXT} @m_class{m-label m-flat m-warning} **EXT** | |
+@fn_vk{CmdNextSubpass}, \n @fn_vk{CmdNextSubpass2} @m_class{m-label m-flat m-success} **KHR, 1.2** | |
+@fn_vk{CmdPipelineBarrier} | |
+@fn_vk{CmdPushConstants} | |
+@fn_vk{CmdResetEvent} | |
+@fn_vk{CmdResetQueryPool} | |
+@fn_vk{CmdResolveImage} | |
+@fn_vk{CmdSetBlendConstants} | |
+@fn_vk{CmdSetDepthBias} | |
+@fn_vk{CmdSetDeviceMask} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+@fn_vk{CmdSetDepthBounds} | |
+@fn_vk{CmdSetEvent} | |
+@fn_vk{CmdSetLineWidth} | |
+@fn_vk{CmdSetScissor} | |
+@fn_vk{CmdSetStencilCompareMask} | |
+@fn_vk{CmdSetStencilReference} | |
+@fn_vk{CmdSetStencilWriteMask} | |
+@fn_vk{CmdSetViewport} | |
+@fn_vk{CmdUpdateBuffer} | |
+@fn_vk{CmdWaitEvents} | |
+@fn_vk{CmdWriteTimestamp} | |
+@fn_vk{CreateBuffer}, \n @fn_vk{DestroyBuffer} | |
+@fn_vk{CreateBufferView}, \n @fn_vk{DestroyBufferView} | |
+@fn_vk{CreateCommandPool}, \n @fn_vk{DestroyCommandPool} | |
+@fn_vk{CreateComputePipelines}, \n @fn_vk{DestroyComputePipelines} | |
+@fn_vk{CreateDebugReportCallbackEXT} @m_class{m-label m-danger} **deprecated** @m_class{m-label m-flat m-warning} **EXT**, \n @fn_vk{DestroyDebugReportCallbackEXT} @m_class{m-label m-danger} **deprecated** @m_class{m-label m-flat m-warning} **EXT** | |
+@fn_vk{CreateDebugUtilsMessengerEXT} @m_class{m-label m-flat m-warning} **EXT**, \n @fn_vk{DestroyDebugUtilsMessengerEXT} @m_class{m-label m-flat m-warning} **EXT** | |
+@fn_vk{CreateDescriptorPool}, \n @fn_vk{DestroyDescriptorPool} | |
+@fn_vk{CreateDescriptorSetLayout}, \n @fn_vk{DestroyDescriptorSetLayout} | |
+@fn_vk{CreateDescriptorUpdateTemplate} @m_class{m-label m-flat m-success} **KHR, 1.1**, \n @fn_vk{DestroyDescriptorUpdateTemplate} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+@fn_vk{CreateDevice}, \n @fn_vk{DestroyDevice} | |
+@fn_vk{CreateEvent}, \n @fn_vk{DestroyEvent} | |
+@fn_vk{CreateFence}, \n @fn_vk{DestroyFence} | |
+@fn_vk{CreateFramebuffer}, \n @fn_vk{DestroyFramebuffer} | |
+@fn_vk{CreateImage}, \n @fn_vk{DestroyImage} | |
+@fn_vk{CreateImageView}, \n @fn_vk{DestroyImageView} | |
+@fn_vk{CreateInstance}, \n @fn_vk{DestroyInstance} | |
+@fn_vk{CreatePipeline}, \n @fn_vk{DestroyPipeline} | |
+@fn_vk{CreatePipelineCache}, \n @fn_vk{DestroyPipelineCache} | |
+@fn_vk{CreatePipelineLayout}, \n @fn_vk{DestroyPipelineLayout} | |
+@fn_vk{CreateQueryPool}, \n @fn_vk{DestroyQueryPool} | |
+@fn_vk{CreateRenderPass}, \n @fn_vk{CreateRenderPass2} @m_class{m-label m-flat m-success} **KHR, 1.2**, \n @fn_vk{DestroyRenderPass} | |
+@fn_vk{CreateSampler}, \n @fn_vk{DestroySampler} | |
+@fn_vk{CreateSamplerYcbcrConversion} @m_class{m-label m-flat m-success} **KHR, 1.1** , \n @fn_vk{DestroySamplerYcbcrConversion} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+@fn_vk{CreateSemaphore}, \n @fn_vk{DestroySemaphore} | |
+@fn_vk{CreateShaderModule}, \n @fn_vk{DestroyShaderModule} | |
+
+@subsection vulkan-mapping-functions-d D
+
+@m_class{m-fullwidth}
+
+Vulkan function | Matching API
+--------------------------------------- | ------------
+@fn_vk{DeviceWaitIdle} | |
+@fn_vk{DebugMarkerSetObjectNameEXT} @m_class{m-label m-danger} **deprecated** @m_class{m-label m-flat m-warning} **EXT** | |
+@fn_vk{DebugMarkerSetObjectTagEXT} @m_class{m-label m-danger} **deprecated** @m_class{m-label m-flat m-warning} **EXT** | |
+@fn_vk{DebugReportMessageEXT} @m_class{m-label m-danger} **deprecated** @m_class{m-label m-flat m-warning} **EXT** | |
+
+@subsection vulkan-mapping-functions-e E
+
+@m_class{m-fullwidth}
+
+Vulkan function | Matching API
+--------------------------------------- | ------------
+@fn_vk{EnumerateDeviceLayerProperties} @m_class{m-label m-danger} **deprecated in 1.0.13** | not exposed, [spec commit](https://github.com/KhronosGroup/Vulkan-Docs/commit/2656f459333b3a1dc63619a9ebd83490eea22e93)
+@fn_vk{EnumerateDeviceExtensionProperties} | |
+@fn_vk{EnumerateInstanceExtensionProperties} | |
+@fn_vk{EnumerateInstanceLayerProperties} | |
+@fn_vk{EnumerateInstanceVersion} @m_class{m-label m-flat m-success} **1.1** | |
+@fn_vk{EnumeratePhysicalDevices} | |
+@fn_vk{EnumeratePhysicalDeviceGroups} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+
+@subsection vulkan-mapping-functions-f F
+
+@m_class{m-fullwidth}
+
+Vulkan function | Matching API
+--------------------------------------- | ------------
+@fn_vk{FlushMappedMemoryRanges} | |
+
+@subsection vulkan-mapping-functions-g G
+
+@m_class{m-fullwidth}
+
+Vulkan function | Matching API
+--------------------------------------- | ------------
+@fn_vk{GetBufferDeviceAddress} @m_class{m-label m-flat m-success} **KHR, 1.2** | |
+@fn_vk{GetBufferOpaqueCaptureAddress} @m_class{m-label m-flat m-success} **KHR, 1.2** | |
+@fn_vk{GetDeviceMemoryOpaqueCaptureAddress} @m_class{m-label m-flat m-success} **KHR, 1.2** | |
+@fn_vk{GetBufferMemoryRequirements}, \n @fn_vk{GetBufferMemoryRequirements2} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+@fn_vk{GetDescriptorSetLayoutSupport} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+@fn_vk{GetDeviceGroupPeerMemoryFeatures} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+@fn_vk{GetDeviceMemoryCommitment} | |
+@fn_vk{GetDeviceProcAddr} | |
+@fn_vk{GetDeviceQueue}, \n @fn_vk{GetDeviceQueue2} @m_class{m-label m-flat m-success} **1.1** | |
+@fn_vk{GetEventStatus} | |
+@fn_vk{GetFenceStatus} | |
+@fn_vk{GetImageMemoryRequirements}, \n @fn_vk{GetImageMemoryRequirements2} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+@fn_vk{GetImageSparseMemoryRequirements}, \n @fn_vk{GetImageSparseMemoryRequirements2} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+@fn_vk{GetImageSubresourceLayout} | |
+@fn_vk{GetInstanceProcAddr} | |
+@fn_vk{GetPhysicalDeviceExternalBufferProperties} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+@fn_vk{GetPhysicalDeviceExternalFenceProperties} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+@fn_vk{GetPhysicalDeviceExternalSemaphoreProperties} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+@fn_vk{GetPhysicalDeviceFeatures}, \n @fn_vk{GetPhysicalDeviceFeatures2} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+@fn_vk{GetPhysicalDeviceFormatProperties}, \n @fn_vk{GetPhysicalDeviceFormatProperties2} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+@fn_vk{GetPhysicalDeviceImageFormatProperties}, \n @fn_vk{GetPhysicalDeviceImageFormatProperties2} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+@fn_vk{GetPhysicalDeviceMemoryProperties}, \n @fn_vk{GetPhysicalDeviceMemoryProperties2} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+@fn_vk{GetPhysicalDeviceProperties}, \n @fn_vk{GetPhysicalDeviceProperties2} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+@fn_vk{GetPhysicalDeviceQueueFamilyProperties}, \n @fn_vk{GetPhysicalDeviceQueueFamilyProperties2} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+@fn_vk{GetPhysicalDeviceSparseImageFormatProperties}, \n @fn_vk{GetPhysicalDeviceSparseImageFormatProperties2} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+@fn_vk{GetPipelineCacheData} | |
+@fn_vk{GetQueryPoolResults} | |
+@fn_vk{GetRenderAreaGranularity} | |
+@fn_vk{GetSemaphoreCounterValue} @m_class{m-label m-flat m-success} **KHR, 1.2** | |
+
+@subsection vulkan-mapping-functions-i I
+
+@m_class{m-fullwidth}
+
+Vulkan function | Matching API
+--------------------------------------- | ------------
+@fn_vk{InvalidateMappedMemoryRanges} | |
+
+@subsection vulkan-mapping-functions-m M
+
+@m_class{m-fullwidth}
+
+Vulkan function | Matching API
+--------------------------------------- | ------------
+@fn_vk{MapMemory}, \n @fn_vk{UnmapMemory} | |
+@fn_vk{MergePipelineCaches} | |
+
+@subsection vulkan-mapping-functions-q Q
+
+@m_class{m-fullwidth}
+
+Vulkan function | Matching API
+--------------------------------------- | ------------
+@fn_vk{QueueBeginDebugUtilsLabelEXT} @m_class{m-label m-flat m-warning} **EXT**, \n @fn_vk{QueueEndDebugUtilsLabelEXT} @m_class{m-label m-flat m-warning} **EXT** | |
+@fn_vk{QueueBindSparse} | |
+@fn_vk{QueueInsertDebugUtilsLabelEXT} @m_class{m-label m-flat m-warning} **EXT** | |
+@fn_vk{QueueSubmit} | |
+@fn_vk{QueueWaitIdle} | |
+
+@subsection vulkan-mapping-functions-r R
+
+@m_class{m-fullwidth}
+
+Vulkan function | Matching API
+--------------------------------------- | ------------
+@fn_vk{ResetCommandBuffer} | |
+@fn_vk{ResetCommandPool} | |
+@fn_vk{ResetDescriptorPool} | |
+@fn_vk{ResetFences} | |
+@fn_vk{ResetQueryPool} @m_class{m-label m-flat m-success} **EXT, 1.2** | |
+
+@subsection vulkan-mapping-functions-s S
+
+@m_class{m-fullwidth}
+
+Vulkan function | Matching API
+--------------------------------------- | ------------
+@fn_vk{SetDebugUtilsObjectNameEXT} @m_class{m-label m-flat m-warning} **EXT** | |
+@fn_vk{SetDebugUtilsObjectTagEXT} @m_class{m-label m-flat m-warning} **EXT** | |
+@fn_vk{SetEvent}, \n @fn_vk{ResetEvent} | |
+@fn_vk{SignalSemaphore} @m_class{m-label m-flat m-success} **KHR, 1.2**, \n @fn_vk{WaitSemaphores} @m_class{m-label m-flat m-success} **KHR, 1.2** | |
+@fn_vk{SubmitDebugUtilsMessageEXT} @m_class{m-label m-flat m-warning} **EXT** | |
+
+@subsection vulkan-mapping-functions-t T
+
+@m_class{m-fullwidth}
+
+Vulkan function | Matching API
+--------------------------------------- | ------------
+@fn_vk{TrimCommandPool} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+
+@subsection vulkan-mapping-functions-u U
+
+@m_class{m-fullwidth}
+
+Vulkan function | Matching API
+--------------------------------------- | ------------
+@fn_vk{UpdateDescriptorSets} | |
+@fn_vk{UpdateDescriptorSetWithTemplate} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
+
+@subsection vulkan-mapping-functions-w W
+
+@m_class{m-fullwidth}
+
+Vulkan function | Matching API
+--------------------------------------- | ------------
+@fn_vk{WaitForFences} | |
+
+*/
+
+}}
diff --git a/doc/vulkan-support.dox b/doc/vulkan-support.dox
new file mode 100644
index 000000000..95309a5db
--- /dev/null
+++ b/doc/vulkan-support.dox
@@ -0,0 +1,128 @@
+/*
+ This file is part of Magnum.
+
+ Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
+ 2020 Vladimír Vondruš
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+*/
+
+namespace Magnum {
+
+/** @page vulkan-support Support state
+@brief List of (un)supported Vulkan features and extensions.
+@m_since_latest
+
+@tableofcontents
+@m_footernavigation
+
+@section vulkan-support-state Vulkan implementation state
+
+The extension implementation is considered complete if all its defined types,
+functions and enum values are exposed through the API.
+
+All extensions from the below lists are available in the @ref Vk::Extensions
+namespace. Extensions marked with @m_class{m-label m-info} **instance** are
+instance extensions, unmarked ones are device extensions. Extensions marked
+with @m_class{m-label m-danger} **deprecated** are superseded by other
+extensions, but still included for compatibility with drivers that don't
+provide support for the replacement extensions.
+
+@subsection vulkan-support-10 Vulkan 1.0
+
+TBD
+
+@subsection vulkan-support-11 Vulkan 1.1
+
+@m_class{m-fullwidth}
+
+Extension | Status
+--------------------------------------------------- | ------
+@vk_extension{KHR,multiview} | |
+@vk_extension{KHR,get_physical_device_properties2} @m_class{m-label m-info} **instance** | |
+@vk_extension{KHR,device_group} | |
+@vk_extension{KHR,shader_draw_parameters} | |
+@vk_extension{KHR,maintenance1} | |
+@vk_extension{KHR,device_group_creation} @m_class{m-label m-info} **instance** | |
+@vk_extension{KHR,external_memory_capabilities} @m_class{m-label m-info} **instance** | |
+@vk_extension{KHR,external_memory} | |
+@vk_extension{KHR,external_semaphore_capabilities} @m_class{m-label m-info} **instance** | |
+@vk_extension{KHR,external_semaphore} | |
+@vk_extension{KHR,16bit_storage} | |
+@vk_extension{KHR,descriptor_update_template} | |
+@vk_extension{KHR,external_fence_capabilities} @m_class{m-label m-info} **instance** | |
+@vk_extension{KHR,external_fence} | |
+@vk_extension{KHR,maintenance2} | |
+@vk_extension{KHR,variable_pointers} | |
+@vk_extension{KHR,dedicated_allocation} | |
+@vk_extension{KHR,storage_buffer_storage_class} | |
+@vk_extension{KHR,relaxed_block_layout} | |
+@vk_extension{KHR,get_memory_requirements2} | |
+@vk_extension{KHR,sampler_ycbcr_conversion} | |
+@vk_extension{KHR,bind_memory2} | |
+@vk_extension{KHR,maintenance3} | |
+
+@subsection vulkan-support-12 Vulkan 1.2
+
+@m_class{m-fullwidth}
+
+Extension | Status
+--------------------------------------------------- | ------
+@vk_extension{KHR,sampler_mirror_clamp_to_edge} | |
+@vk_extension{KHR,shader_float16_int8} | |
+@vk_extension{KHR,imageless_framebuffer} | |
+@vk_extension{KHR,create_renderpass2} | |
+@vk_extension{EXT,sampler_filter_minmax} | |
+@vk_extension{KHR,image_format_list} | |
+@vk_extension{EXT,descriptor_indexing} | |
+@vk_extension{EXT,shader_viewport_index_layer} | |
+@vk_extension{KHR,draw_indirect_count} | |
+@vk_extension{KHR,shader_subgroup_extended_types} | |
+@vk_extension{KHR,8bit_storage} | |
+@vk_extension{KHR,shader_atomic_int64} | |
+@vk_extension{KHR,driver_properties} | |
+@vk_extension{KHR,shader_float_controls} | |
+@vk_extension{KHR,depth_stencil_resolve} | |
+@vk_extension{KHR,timeline_semaphore} | |
+@vk_extension{KHR,vulkan_memory_model} | |
+@vk_extension{KHR,spirv_1_4} | |
+@vk_extension{EXT,scalar_block_layout} | |
+@vk_extension{KHR,separate_depth_stencil_layouts} | |
+@vk_extension{EXT,separate_stencil_usage} | |
+@vk_extension{KHR,uniform_buffer_standard_layout} | |
+@vk_extension{KHR,buffer_device_address} | |
+@vk_extension{EXT,host_query_reset} | |
+
+@section vulkan-support-extensions-vendor Vendor Vulkan extensions
+
+@m_class{m-fullwidth}
+
+Extension | Status
+--------------------------------------------------- | ------
+@vk_extension{EXT,debug_report} @m_class{m-label m-danger} **deprecated** @m_class{m-label m-info} **instance** | |
+@vk_extension{EXT,debug_marker} @m_class{m-label m-danger} **deprecated** | |
+@vk_extension{EXT,texture_compression_astc_hdr} | |
+@vk_extension{EXT,debug_utils} @m_class{m-label m-info} **instance** | |
+@vk_extension{EXT,validation_features} @m_class{m-label m-info} **instance** | |
+@vk_extension{EXT,index_type_uint8} | |
+@vk_extension{IMG,format_pvrtc} | |
+
+*/
+
+}
diff --git a/doc/vulkan.dox b/doc/vulkan.dox
index 8a851ef01..71035fe46 100644
--- a/doc/vulkan.dox
+++ b/doc/vulkan.dox
@@ -28,7 +28,48 @@ namespace Magnum {
/** @page vulkan Vuulkan
@brief State of Vulkan support, version and extension requirements.
-Nothing to see here yet, sorry.
+The following table maps Vulkan function names to Magnum API, useful for
+developers with existing Vulkan background. Note that, as reverse mapping, each
+function documentation also contains list of Vulkan functions used. You can
+also use the search functionality to find out which Vulkan API corresponds to
+which Magnum function, class or enum value. Just enter name of an Vulkan
+function, define or GLSL name into the search box.
+
+- @subpage vulkan-mapping
+
+State of implementation of particular Vulkan versions and extensions is in the
+following table.
+
+- @subpage vulkan-support
+
+@section vulkan-required-extensions Version and extension requirements
+
+The engine can work on unextended Vulkan 1.0, but some specific functionality
+has greater requirements. Following are lists of features requiring specific
+Vulkan version. In most cases it is also specified which extension is required,
+so if a particular driver supports the required extension, it doesn't need to
+have required Vulkan version too (e.g. @vk_extension{KHR,sampler_mirror_clamp_to_edge}
+is usually supported everywhere, even if the drivers don't have Vulkan 1.2).
+
+- @subpage requires-vk11
+- @subpage requires-vk12
+- @subpage requires-vk-extension
+
*/
+/** @page requires-vk11 Functionality requiring Vulkan 1.1
+ * @m_footernavigation
+ * @m_since_latest
+ */
+
+/** @page requires-vk12 Functionality requiring Vulkan 1.2
+ * @m_footernavigation
+ * @m_since_latest
+ */
+
+/** @page requires-vk-extension Functionality requiring specific Vulkan extension
+ * @m_footernavigation
+ * @m_since_latest
+ */
+
}
diff --git a/src/Magnum/Vk/CMakeLists.txt b/src/Magnum/Vk/CMakeLists.txt
index 0a8962722..117450208 100644
--- a/src/Magnum/Vk/CMakeLists.txt
+++ b/src/Magnum/Vk/CMakeLists.txt
@@ -27,6 +27,7 @@
find_package(Vulkan REQUIRED)
set(MagnumVk_SRCS
+ Extensions.cpp
Result.cpp
Version.cpp)
@@ -34,9 +35,13 @@ set(MagnumVk_GracefulAssert_SRCS
Enums.cpp)
set(MagnumVk_HEADERS
+ Device.h
Enums.h
+ Extensions.h
+ Instance.h
Integration.h
Result.h
+ TypeTraits.h
Version.h
Vk.h
Vulkan.h
diff --git a/src/Magnum/Vk/Device.h b/src/Magnum/Vk/Device.h
new file mode 100644
index 000000000..c707338d1
--- /dev/null
+++ b/src/Magnum/Vk/Device.h
@@ -0,0 +1,43 @@
+#ifndef Magnum_Vk_Device_h
+#define Magnum_Vk_Device_h
+/*
+ This file is part of Magnum.
+
+ Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
+ 2020 Vladimír Vondruš
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+*/
+
+/** @file
+ * @brief Nothing, haha
+ * @m_since_latest
+ */
+
+#include
+
+namespace Magnum { namespace Vk {
+
+namespace Implementation {
+ enum: std::size_t { ExtensionCount = 72 };
+}
+
+}}
+
+#endif
diff --git a/src/Magnum/Vk/Extensions.cpp b/src/Magnum/Vk/Extensions.cpp
new file mode 100644
index 000000000..b34631784
--- /dev/null
+++ b/src/Magnum/Vk/Extensions.cpp
@@ -0,0 +1,135 @@
+/*
+ This file is part of Magnum.
+
+ Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
+ 2020 Vladimír Vondruš
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+*/
+
+#include "Extensions.h"
+
+#include
+
+namespace Magnum { namespace Vk {
+
+namespace {
+
+/* When adding a new list, InstanceExtension::extensions() needs to be adapted.
+ Binary search is performed on the extensions, thus they have to be sorted
+ alphabetically. */
+constexpr InstanceExtension InstanceExtensions[] {
+ Extensions::EXT::debug_report{},
+ Extensions::EXT::debug_utils{},
+ Extensions::EXT::validation_features{},
+};
+constexpr InstanceExtension InstanceExtensions11[] {
+ Extensions::KHR::device_group_creation{},
+ Extensions::KHR::external_fence_capabilities{},
+ Extensions::KHR::external_memory_capabilities{},
+ Extensions::KHR::external_semaphore_capabilities{},
+ Extensions::KHR::get_physical_device_properties2{},
+};
+/* No Vulkan 1.2 instance extensions */
+
+}
+
+Containers::ArrayView InstanceExtension::extensions(const Version version) {
+ switch(version) {
+ case Version::None: return Containers::arrayView(InstanceExtensions);
+ case Version::Vk10: return nullptr;
+ case Version::Vk11: return Containers::arrayView(InstanceExtensions11);
+ case Version::Vk12: return nullptr;
+ }
+
+ CORRADE_INTERNAL_ASSERT_UNREACHABLE(); /* LCOV_EXCL_LINE */
+}
+
+namespace {
+
+/* When adding a new list, Extension::extensions() needs to be adapted. Binary
+ search is performed on the extensions, thus they have to be sorted
+ alphabetically. */
+constexpr Extension DeviceExtensions[] {
+ Extensions::EXT::debug_marker{},
+ Extensions::EXT::index_type_uint8{},
+ Extensions::EXT::texture_compression_astc_hdr{},
+ Extensions::IMG::format_pvrtc{},
+};
+constexpr Extension DeviceExtensions11[] {
+ //Extensions::KHR::16bit_storage{},
+ Extensions::KHR::bind_memory2{},
+ Extensions::KHR::dedicated_allocation{},
+ Extensions::KHR::descriptor_update_template{},
+ Extensions::KHR::device_group{},
+ Extensions::KHR::external_fence{},
+ Extensions::KHR::external_memory{},
+ Extensions::KHR::external_semaphore{},
+ Extensions::KHR::get_memory_requirements2{},
+ Extensions::KHR::maintenance1{},
+ Extensions::KHR::maintenance2{},
+ Extensions::KHR::maintenance3{},
+ Extensions::KHR::multiview{},
+ Extensions::KHR::relaxed_block_layout{},
+ Extensions::KHR::sampler_ycbcr_conversion{},
+ Extensions::KHR::shader_draw_parameters{},
+ Extensions::KHR::storage_buffer_storage_class{},
+ Extensions::KHR::variable_pointers{},
+};
+constexpr Extension DeviceExtensions12[] {
+ Extensions::EXT::descriptor_indexing{},
+ Extensions::EXT::host_query_reset{},
+ Extensions::EXT::sampler_filter_minmax{},
+ Extensions::EXT::scalar_block_layout{},
+ Extensions::EXT::separate_stencil_usage{},
+ Extensions::EXT::shader_viewport_index_layer{},
+ //Extensions::KHR::8bit_storage{},
+ Extensions::KHR::buffer_device_address{},
+ Extensions::KHR::create_renderpass2{},
+ Extensions::KHR::depth_stencil_resolve{},
+ Extensions::KHR::draw_indirect_count{},
+ Extensions::KHR::driver_properties{},
+ Extensions::KHR::image_format_list{},
+ Extensions::KHR::imageless_framebuffer{},
+ Extensions::KHR::sampler_mirror_clamp_to_edge{},
+ Extensions::KHR::separate_depth_stencil_layouts{},
+ Extensions::KHR::shader_atomic_int64{},
+ Extensions::KHR::shader_float16_int8{},
+ Extensions::KHR::shader_float_controls{},
+ Extensions::KHR::shader_subgroup_extended_types{},
+ Extensions::KHR::spirv_1_4{},
+ Extensions::KHR::timeline_semaphore{},
+ Extensions::KHR::uniform_buffer_standard_layout{},
+ Extensions::KHR::vulkan_memory_model{},
+};
+
+}
+
+Containers::ArrayView Extension::extensions(const Version version) {
+ switch(version) {
+ case Version::None: return Containers::arrayView(DeviceExtensions);
+ case Version::Vk10: return nullptr;
+ case Version::Vk11: return Containers::arrayView(DeviceExtensions11);
+ case Version::Vk12: return Containers::arrayView(DeviceExtensions12);
+ }
+
+ CORRADE_INTERNAL_ASSERT_UNREACHABLE(); /* LCOV_EXCL_LINE */
+}
+
+}}
diff --git a/src/Magnum/Vk/Extensions.h b/src/Magnum/Vk/Extensions.h
new file mode 100644
index 000000000..f35d26d0d
--- /dev/null
+++ b/src/Magnum/Vk/Extensions.h
@@ -0,0 +1,248 @@
+#ifndef Magnum_Vk_Extensions_h
+#define Magnum_Vk_Extensions_h
+/*
+ This file is part of Magnum.
+
+ Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
+ 2020 Vladimír Vondruš
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+*/
+
+/** @file
+ * @brief Namespace @ref Magnum::Vk::Extensions, class @ref Magnum::Vk::InstanceExtension, @ref Magnum::Vk::Extension
+ * @m_since_latest
+ */
+
+#include
+
+#include "Magnum/Magnum.h"
+#include "Magnum/Vk/TypeTraits.h"
+#include "Magnum/Vk/Version.h"
+
+namespace Magnum { namespace Vk {
+
+/**
+@brief Compile-time information about Vulkan instance and device extensions
+@m_since_latest
+
+Each extension is a @cpp struct @ce named hierarchically by prefix, vendor and
+extension name taken from list at @ref vulkan-support, for example
+@cpp Vk::Extensions::EXT::debug_report @ce.
+
+Each struct has the same public methods as the @ref InstanceExtension /
+@ref Extension class (@ref Extension::requiredVersion() "requiredVersion()",
+@ref Extension::coreVersion() "coreVersion()" and @ref Extension::string() "string()"),
+but these structs are better suited for compile-time decisions rather than
+@ref Extension instances.
+
+This library is built if `WITH_VK` is enabled when building Magnum. To use this
+library with CMake, you need to request the `Vk` component of the `Magnum`
+package and link to the `Magnum::Vk` target:
+
+@code{.cmake}
+find_package(Magnum REQUIRED Vk)
+
+# ...
+target_link_libraries(your-app Magnum::Vk)
+@endcode
+
+See @ref building, @ref cmake and @ref vulkan for more information.
+*/
+namespace Extensions {
+
+#ifndef DOXYGEN_GENERATING_OUTPUT
+
+#define _extension(index, vendor, extension, _requiredVersion, _coreVersion) \
+ struct extension { \
+ enum: std::size_t { InstanceIndex = index }; \
+ constexpr static Version requiredVersion() { return Version::_requiredVersion; } \
+ constexpr static Version coreVersion() { return Version::_coreVersion; } \
+ constexpr static Containers::StringView string() { \
+ using namespace Containers::Literals; \
+ return "VK_" #vendor "_" #extension ""_s; \
+ } \
+ };
+namespace EXT {
+ /** @todo remove EXT_debug_report when all platforms have EXT_debug_utils
+ (my Huawei P10 doesn't have it) */
+ _extension(0, EXT,debug_report, Vk10, None) // #12
+ _extension(1, EXT,debug_utils, Vk10, None) // #129
+ _extension(2, EXT,validation_features, Vk10, None) // #248
+} namespace KHR {
+ _extension(10, KHR,get_physical_device_properties2, Vk10, Vk11) // #60
+ _extension(11, KHR,device_group_creation, Vk10, Vk11) // #71
+ _extension(12, KHR,external_memory_capabilities, Vk10, Vk11) // #72
+ _extension(13, KHR,external_semaphore_capabilities, Vk10, Vk11) // #77
+ _extension(14, KHR,external_fence_capabilities, Vk10, Vk11) // #113
+}
+#undef _extension
+
+#define _extension(index, vendor, extension, _requiredVersion, _coreVersion) \
+ struct extension { \
+ enum: std::size_t { Index = index }; \
+ constexpr static Version requiredVersion() { return Version::_requiredVersion; } \
+ constexpr static Version coreVersion() { return Version::_coreVersion; } \
+ constexpr static Containers::StringView string() { \
+ using namespace Containers::Literals; \
+ return "VK_" #vendor "_" #extension ""_s; \
+ } \
+ };
+namespace EXT {
+ /** @todo remove EXT_debug_marker when all platforms have EXT_debug_utils
+ (my Huawei P10 doesn't have it) */
+ _extension(0, EXT,debug_marker, Vk10, None) // #23
+ _extension(1, EXT,texture_compression_astc_hdr, Vk10, None) // #67
+ _extension(2, EXT,sampler_filter_minmax, Vk10, Vk12) // #131
+ _extension(3, EXT,descriptor_indexing, Vk10, Vk12) // #162
+ _extension(4, EXT,shader_viewport_index_layer, Vk10, Vk12) // #163
+ _extension(5, EXT,scalar_block_layout, Vk10, Vk12) // #222
+ _extension(6, EXT,separate_stencil_usage, Vk10, Vk12) // #247
+ _extension(7, EXT,host_query_reset, Vk10, Vk12) // #262
+ _extension(8, EXT,index_type_uint8, Vk10, None) // #266
+} namespace IMG {
+ _extension(20, IMG,format_pvrtc, Vk10, None) // #55
+} namespace KHR {
+ _extension(30, KHR,sampler_mirror_clamp_to_edge, Vk10, Vk12) // #15
+ _extension(31, KHR,multiview, Vk10, Vk11) // #54
+ _extension(32, KHR,device_group, Vk10, Vk11) // #61
+ _extension(33, KHR,shader_draw_parameters, Vk10, Vk11) // #64
+ _extension(34, KHR,maintenance1, Vk10, Vk11) // #70
+ _extension(35, KHR,external_semaphore, Vk10, Vk11) // #78
+ _extension(36, KHR,shader_float16_int8, Vk10, Vk12) // #83
+ //_extension(37, KHR,16bit_storage, VK10, Vk11) // #84
+ _extension(38, KHR,descriptor_update_template, Vk10, Vk11) // #86
+ _extension(39, KHR,external_memory, Vk10, Vk11) // #73
+ _extension(40, KHR,imageless_framebuffer, Vk10, Vk12) // #109
+ _extension(41, KHR,create_renderpass2, Vk10, Vk12) // #110
+ _extension(42, KHR,external_fence, Vk10, Vk11) // #114
+ _extension(43, KHR,maintenance2, Vk10, Vk11) // #118
+ _extension(44, KHR,variable_pointers, Vk10, Vk11) // #121
+ _extension(45, KHR,dedicated_allocation, Vk10, Vk11) // #128
+ _extension(46, KHR,storage_buffer_storage_class, Vk10, Vk11) // #142
+ _extension(47, KHR,relaxed_block_layout, Vk10, Vk11) // #145
+ _extension(48, KHR,get_memory_requirements2, Vk10, Vk11) // #147
+ _extension(49, KHR,image_format_list, Vk10, Vk12) // #148
+ _extension(50, KHR,sampler_ycbcr_conversion, Vk10, Vk11) // #157
+ _extension(51, KHR,bind_memory2, Vk10, Vk11) // #158
+ _extension(52, KHR,maintenance3, Vk10, Vk11) // #169
+ _extension(53, KHR,draw_indirect_count, Vk10, Vk12) // #170
+ _extension(54, KHR,shader_subgroup_extended_types, Vk11, Vk12) // #176
+ //_extension(55, KHR,8bit_storage, Vk10, Vk12) // #178
+ _extension(56, KHR,shader_atomic_int64, Vk10, Vk12) // #181
+ _extension(57, KHR,driver_properties, Vk10, Vk12) // #197
+ _extension(58, KHR,shader_float_controls, Vk10, Vk12) // #198
+ _extension(59, KHR,depth_stencil_resolve, Vk10, Vk12) // #200
+ _extension(60, KHR,timeline_semaphore, Vk10, Vk12) // #208
+ _extension(61, KHR,vulkan_memory_model, Vk10, Vk12) // #212
+ _extension(62, KHR,spirv_1_4, Vk11, Vk12) // #237
+ _extension(63, KHR,separate_depth_stencil_layouts, Vk10, Vk12) // #242
+ _extension(64, KHR,uniform_buffer_standard_layout, Vk10, Vk12) // #254
+ _extension(65, KHR,buffer_device_address, Vk10, Vk12) // #258
+}
+#undef _extension
+
+#endif
+
+}
+
+/**
+@brief Run-time information about a Vulkan instance extension
+@m_since_latest
+
+Encapsulates runtime information about a Vulkan extension, such as name string,
+minimal required Vulkan version and version in which the extension was adopted
+to core.
+
+See also the @ref Extensions namespace, which contain compile-time information
+about Vulkan extensions.
+*/
+class MAGNUM_VK_EXPORT InstanceExtension {
+ public:
+ /** @brief All known instance extensions for given Vulkan version */
+ static Containers::ArrayView extensions(Version version);
+
+ /** @brief Internal unique extension index */
+ constexpr std::size_t index() const { return _index; }
+
+ /** @brief Minimal version required by this extension */
+ constexpr Version requiredVersion() const { return _requiredVersion; }
+
+ /** @brief Version in which this extension was adopted to core */
+ constexpr Version coreVersion() const { return _coreVersion; }
+
+ /**
+ * @brief Extension string
+ *
+ * The returned view is a global memory.
+ */
+ constexpr Containers::StringView string() const { return _string; }
+
+ /** @brief Construct from a compile-time instance extension */
+ template::value>::type> constexpr /*implicit*/ InstanceExtension(const E&): _index{E::InstanceIndex}, _requiredVersion{E::requiredVersion()}, _coreVersion{E::coreVersion()}, _string{E::string()} {}
+
+ private:
+ std::size_t _index;
+ Version _requiredVersion;
+ Version _coreVersion;
+ Containers::StringView _string;
+};
+
+/**
+@brief Run-time information about a Vulkan device extension
+@m_since_latest
+
+Encapsulates runtime information about a Vulkan extension, such as name string,
+minimal required Vulkan version and version in which the extension was adopted
+to core.
+
+See also the @ref Extensions namespace, which contain compile-time information
+about Vulkan extensions.
+*/
+class MAGNUM_VK_EXPORT Extension {
+ public:
+ /** @brief All known device extensions for given Vulkan version */
+ static Containers::ArrayView extensions(Version version);
+
+ /** @brief Internal unique extension index */
+ constexpr std::size_t index() const { return _index; }
+
+ /** @brief Minimal version required by this extension */
+ constexpr Version requiredVersion() const { return _requiredVersion; }
+
+ /** @brief Version in which this extension was adopted to core */
+ constexpr Version coreVersion() const { return _coreVersion; }
+
+ /** @brief Extension string */
+ constexpr Containers::StringView string() const { return _string; }
+
+ /** @brief Construct from a compile-time device extension */
+ /** @todo prohibit conversion from GL/AL extensions also? */
+ template::value>::type> constexpr /*implicit*/ Extension(const E&): _index{E::Index}, _requiredVersion{E::requiredVersion()}, _coreVersion{E::coreVersion()}, _string{E::string()} {}
+
+ private:
+ std::size_t _index;
+ Version _requiredVersion;
+ Version _coreVersion;
+ Containers::StringView _string;
+};
+
+}}
+
+#endif
diff --git a/src/Magnum/Vk/Instance.h b/src/Magnum/Vk/Instance.h
new file mode 100644
index 000000000..77024c35a
--- /dev/null
+++ b/src/Magnum/Vk/Instance.h
@@ -0,0 +1,43 @@
+#ifndef Magnum_Vk_Instance_h
+#define Magnum_Vk_Instance_h
+/*
+ This file is part of Magnum.
+
+ Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
+ 2020 Vladimír Vondruš
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+*/
+
+/** @file
+ * @brief Nothing, haha
+ * @m_since_latest
+ */
+
+#include
+
+namespace Magnum { namespace Vk {
+
+namespace Implementation {
+ enum: std::size_t { InstanceExtensionCount = 16 };
+}
+
+}}
+
+#endif
diff --git a/src/Magnum/Vk/Test/CMakeLists.txt b/src/Magnum/Vk/Test/CMakeLists.txt
index 42ef5c923..c0cffea2b 100644
--- a/src/Magnum/Vk/Test/CMakeLists.txt
+++ b/src/Magnum/Vk/Test/CMakeLists.txt
@@ -25,6 +25,7 @@
#
corrade_add_test(VkEnumsTest EnumsTest.cpp LIBRARIES MagnumVkTestLib)
+corrade_add_test(VkExtensionsTest ExtensionsTest.cpp LIBRARIES MagnumVk)
corrade_add_test(VkIntegrationTest IntegrationTest.cpp LIBRARIES MagnumVk)
corrade_add_test(VkResultTest ResultTest.cpp LIBRARIES MagnumVk)
corrade_add_test(VkVersionTest VersionTest.cpp LIBRARIES MagnumVk)
diff --git a/src/Magnum/Vk/Test/ExtensionsTest.cpp b/src/Magnum/Vk/Test/ExtensionsTest.cpp
new file mode 100644
index 000000000..40b0e4127
--- /dev/null
+++ b/src/Magnum/Vk/Test/ExtensionsTest.cpp
@@ -0,0 +1,229 @@
+/*
+ This file is part of Magnum.
+
+ Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
+ 2020 Vladimír Vondruš
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+*/
+
+#include
+#include
+#include
+#include
+
+#include "Magnum/Vk/Extensions.h"
+#include "Magnum/Vk/Device.h"
+#include "Magnum/Vk/Instance.h"
+
+namespace Magnum { namespace Vk { namespace Test { namespace {
+
+struct ExtensionsTest: TestSuite::Tester {
+ explicit ExtensionsTest();
+
+ void isInstanceExtension();
+ void isExtension();
+
+ void constructInstanceExtensionFromCompileTimeExtension();
+ void constructExtensionFromCompileTimeExtension();
+
+ void instanceExtensions();
+ void extensions();
+};
+
+ExtensionsTest::ExtensionsTest() {
+ addTests({&ExtensionsTest::isInstanceExtension,
+ &ExtensionsTest::isExtension,
+
+ &ExtensionsTest::constructInstanceExtensionFromCompileTimeExtension,
+ &ExtensionsTest::constructExtensionFromCompileTimeExtension,
+
+ &ExtensionsTest::instanceExtensions,
+ &ExtensionsTest::extensions});
+}
+
+void ExtensionsTest::isInstanceExtension() {
+ CORRADE_VERIFY(Implementation::IsInstanceExtension::value);
+ CORRADE_VERIFY(!Implementation::IsInstanceExtension::value);
+ CORRADE_VERIFY(!Implementation::IsInstanceExtension::value);
+}
+
+void ExtensionsTest::isExtension() {
+ CORRADE_VERIFY(Implementation::IsExtension::value);
+ CORRADE_VERIFY(!Implementation::IsExtension::value);
+ CORRADE_VERIFY(!Implementation::IsExtension::value);
+
+ {
+ /* Not really a problem right now, but once people hit this we might
+ want to guard against this (especially because the Index might be
+ out of bounds) */
+ struct GLExtension {
+ enum: std::size_t { Index };
+ };
+ CORRADE_EXPECT_FAIL("GL/AL extensions are not rejected right now.");
+ CORRADE_VERIFY(!Implementation::IsExtension::value);
+ }
+}
+
+void ExtensionsTest::constructInstanceExtensionFromCompileTimeExtension() {
+ InstanceExtension a{Extensions::KHR::get_physical_device_properties2{}};
+ CORRADE_COMPARE(a.index(), Extensions::KHR::get_physical_device_properties2::InstanceIndex);
+ CORRADE_COMPARE(a.requiredVersion(), Extensions::KHR::get_physical_device_properties2::requiredVersion());
+ CORRADE_COMPARE(a.coreVersion(), Extensions::KHR::get_physical_device_properties2::coreVersion());
+ CORRADE_COMPARE(a.string(), Extensions::KHR::get_physical_device_properties2::string());
+
+ /* Should be convertible from device extensions, but not instance exts */
+ CORRADE_VERIFY((std::is_convertible::value));
+ CORRADE_VERIFY(!(std::is_convertible::value));
+
+ /* Shouldn't be convertible from strings to avoid ambiguity in APIs that
+ have string/extension overloads */
+ CORRADE_VERIFY(!(std::is_convertible::value));
+}
+
+void ExtensionsTest::constructExtensionFromCompileTimeExtension() {
+ Extension a{Extensions::KHR::external_memory{}};
+ CORRADE_COMPARE(a.index(), Extensions::KHR::external_memory::Index);
+ CORRADE_COMPARE(a.requiredVersion(), Extensions::KHR::external_memory::requiredVersion());
+ CORRADE_COMPARE(a.coreVersion(), Extensions::KHR::external_memory::coreVersion());
+ CORRADE_COMPARE(a.string(), Extensions::KHR::external_memory::string());
+
+ /* Should be convertible from device extensions, but not instance exts */
+ CORRADE_VERIFY((std::is_convertible::value));
+ CORRADE_VERIFY(!(std::is_convertible::value));
+
+ /* Shouldn't be convertible from strings to avoid ambiguity in APIs that
+ have string/extension overloads */
+ CORRADE_VERIFY(!(std::is_convertible::value));
+}
+
+void ExtensionsTest::instanceExtensions() {
+ Containers::StringView used[Implementation::InstanceExtensionCount]{};
+
+ std::set unique;
+
+ /* Check that all extension indices are unique, are in correct lists, are
+ listed just once etc. */
+ for(Version version: {
+ Version::Vk10,
+ Version::Vk11,
+ Version::Vk12,
+ Version::None})
+ {
+ Containers::StringView previous;
+ for(const InstanceExtension& e: InstanceExtension::extensions(version)) {
+ CORRADE_ITERATION(e.string());
+
+ /** @todo convert to CORRADE_ERROR() when that's done */
+
+ /* Binary search is performed on each list to find known
+ extensions, so the exts have to be sorted */
+ if(!previous.isEmpty() && previous >= e.string()) {
+ Error{} << "Extension not sorted after" << previous;
+ CORRADE_VERIFY(false);
+ }
+
+ if(e.index() >= Implementation::InstanceExtensionCount) {
+ Error{} << "Index" << e.index() << "larger than" << Implementation::InstanceExtensionCount;
+ CORRADE_VERIFY(false);
+ }
+
+ if(used[e.index()] != nullptr) {
+ Error{} << "Index" << e.index() << "already used by" << used[e.index()];
+ CORRADE_VERIFY(false);
+ }
+
+ used[e.index()] = e.string();
+ if(!unique.insert(e.string()).second) {
+ Error{} << "Extension listed more than once";
+ CORRADE_VERIFY(false);
+ }
+
+ CORRADE_COMPARE_AS(e.coreVersion(), e.requiredVersion(), TestSuite::Compare::GreaterOrEqual);
+ if(e.coreVersion() != version) {
+ Error{} << "Extension should have core version" << version << "but has" << e.coreVersion();
+ CORRADE_VERIFY(false);
+ }
+
+ previous = e.string();
+ }
+ }
+
+ CORRADE_VERIFY(true);
+}
+
+void ExtensionsTest::extensions() {
+ Containers::StringView used[Implementation::ExtensionCount]{};
+
+ std::set unique;
+
+ /* Check that all extension indices are unique, are in correct lists, are
+ not compiled on versions that shouldn't have them, are listed just once
+ etc. */
+ for(Version version: {
+ Version::Vk10,
+ Version::Vk11,
+ Version::Vk12,
+ Version::None})
+ {
+ Containers::StringView previous;
+ for(const Extension& e: Extension::extensions(version)) {
+ CORRADE_ITERATION(e.string());
+
+ /** @todo convert to CORRADE_ERROR() when that's done */
+
+ /* Binary search is performed on each list to find known
+ extensions, so the exts have to be sorted */
+ if(!previous.isEmpty() && previous >= e.string()) {
+ Error{} << "Extension not sorted after" << previous;
+ CORRADE_VERIFY(false);
+ }
+
+ if(e.index() >= Implementation::ExtensionCount) {
+ Error{} << "Index" << e.index() << "larger than" << Implementation::ExtensionCount;
+ CORRADE_VERIFY(false);
+ }
+
+ if(used[e.index()] != nullptr) {
+ Error{} << "Index" << e.index() << "already used by" << used[e.index()];
+ CORRADE_VERIFY(false);
+ }
+
+ used[e.index()] = e.string();
+ if(!unique.insert(e.string()).second) {
+ Error{} << "Extension listed more than once";
+ CORRADE_VERIFY(false);
+ }
+
+ CORRADE_COMPARE_AS(e.coreVersion(), e.requiredVersion(), TestSuite::Compare::GreaterOrEqual);
+ if(e.coreVersion() != version) {
+ Error{} << "Extensio should have core version" << version << "but has" << e.coreVersion();
+ CORRADE_VERIFY(false);
+ }
+
+ previous = e.string();
+ }
+ }
+
+ CORRADE_VERIFY(true);
+}
+
+}}}}
+
+CORRADE_TEST_MAIN(Magnum::Vk::Test::ExtensionsTest)
diff --git a/src/Magnum/Vk/TypeTraits.h b/src/Magnum/Vk/TypeTraits.h
new file mode 100644
index 000000000..406c6fbad
--- /dev/null
+++ b/src/Magnum/Vk/TypeTraits.h
@@ -0,0 +1,47 @@
+#ifndef Magnum_Vk_TypeTraits_h
+#define Magnum_Vk_TypeTraits_h
+/*
+ This file is part of Magnum.
+
+ Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
+ 2020 Vladimír Vondruš
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+*/
+
+/** @file
+ * @brief Vulkan type traits
+ * @m_since_latest
+ */
+
+#include
+
+namespace Magnum { namespace Vk {
+
+namespace Implementation {
+ /* Put into a separate header so APIs that need it don't need to pull in
+ the whole Extensions.h. Tested in ExtensionsTest also. */
+ /** @todo filter out GL/AL extensions also */
+ CORRADE_HAS_TYPE(IsInstanceExtension, decltype(T::InstanceIndex));
+ CORRADE_HAS_TYPE(IsExtension, decltype(T::Index));
+}
+
+}}
+
+#endif
diff --git a/src/Magnum/Vk/Vk.h b/src/Magnum/Vk/Vk.h
index b9725d3ea..4b7697e94 100644
--- a/src/Magnum/Vk/Vk.h
+++ b/src/Magnum/Vk/Vk.h
@@ -34,6 +34,9 @@
namespace Magnum { namespace Vk {
#ifndef DOXYGEN_GENERATING_OUTPUT
+class Extension;
+class InstanceExtension;
+
enum class Result: Int;
enum class Version: UnsignedInt;
#endif
diff --git a/src/MagnumExternal/Vulkan/extensions.txt b/src/MagnumExternal/Vulkan/extensions.txt
index a63b7f01c..a00871bc4 100644
--- a/src/MagnumExternal/Vulkan/extensions.txt
+++ b/src/MagnumExternal/Vulkan/extensions.txt
@@ -1,32 +1,72 @@
version 1.2 vulkan
-extension KHR_16bit_storage optional
-extension KHR_bind_memory2 optional
-extension KHR_dedicated_allocation optional
-extension KHR_descriptor_update_template optional
-extension KHR_device_group optional
-extension KHR_device_group_creation optional
-extension KHR_external_memory optional
-extension KHR_external_memory_capabilities optional
-extension KHR_external_semaphore optional
-extension KHR_external_semaphore_capabilities optional
-extension KHR_external_fence optional
-extension KHR_external_fence_capabilities optional
-extension KHR_get_memory_requirements2 optional
-extension KHR_get_physical_device_properties2 optional
-extension KHR_maintenance1 optional
-extension KHR_maintenance2 optional
-extension KHR_maintenance3 optional
-extension KHR_multiview optional
-extension KHR_relaxed_block_layout optional
-extension KHR_sampler_ycbcr_conversion optional
-extension KHR_shader_draw_parameters optional
-extension KHR_storage_buffer_storage_class optional
-extension KHR_variable_pointers optional
+# For core extensions, only ones that introduce suffixed function pointers are
+# enabled, as structures, types and enums are already present.
+# TODO: extend flextGL to include only function pointers from these
-extension EXT_texture_compression_astc_hdr optional
-extension EXT_index_type_uint8 optional
+# Instance extensions
+extension KHR_get_physical_device_properties2 optional
+extension KHR_device_group_creation optional
+extension KHR_external_memory_capabilities optional
+extension KHR_external_semaphore_capabilities optional
+extension KHR_external_fence_capabilities optional
-extension IMG_format_pvrtc optional
+# Device extensions
+#extension EXT_sampler_filter_minmax optional
+#extension EXT_descriptor_indexing optional
+#extension EXT_shader_viewport_index_layer optional
+#extension EXT_scalar_block_layout optional
+#extension EXT_separate_stencil_usage optional
+extension EXT_host_query_reset optional
+#extension KHR_sampler_mirror_clamp_to_edge optional
+#extension KHR_multiview optional
+extension KHR_device_group optional
+#extension KHR_shader_draw_parameters optional
+extension KHR_maintenance1 optional
+#extension KHR_external_semaphore optional
+#extension KHR_shader_float16_int8 optional
+#extension KHR_16bit_storage optional
+extension KHR_descriptor_update_template optional
+#extension KHR_external_memory optional
+#extension KHR_imageless_framebuffer optional
+extension KHR_create_renderpass2 optional
+#extension KHR_external_fence optional
+#extension KHR_maintenance2 optional
+#extension KHR_variable_pointers optional
+#extension KHR_dedicated_allocation optional
+#extension KHR_storage_buffer_storage_class optional
+#extension KHR_relaxed_block_layout optional
+extension KHR_get_memory_requirements2 optional
+#extension KHR_image_format_list optional
+extension KHR_sampler_ycbcr_conversion optional
+extension KHR_bind_memory2 optional
+extension KHR_maintenance3 optional
+extension KHR_draw_indirect_count optional
+#extension KHR_shader_subgroup_extended_types optional
+#extension KHR_8bit_storage optional
+#extension KHR_shader_atomic_int64 optional
+#extension KHR_driver_properties optional
+#extension KHR_shader_float_controls optional
+#extension KHR_depth_stencil_resolve optional
+extension KHR_timeline_semaphore optional
+#extension KHR_vulkan_memory_model optional
+#extension KHR_spirv_1_4 optional
+#extension KHR_separate_depth_stencil_layouts optional
+#extension KHR_uniform_buffer_standard_layout optional
+extension KHR_buffer_device_address optional
+
+# Non-core / vendor extensions
+extension EXT_debug_report optional
+extension EXT_debug_marker optional
+extension EXT_debug_utils optional
+extension EXT_validation_features optional
+extension EXT_texture_compression_astc_hdr optional
+extension EXT_index_type_uint8 optional
+extension IMG_format_pvrtc optional
+
+begin functions blacklist
+ # Deprecated since 1.0.13, not used
+ EnumerateDeviceLayerProperties
+end functions blacklist
# kate: hl python
diff --git a/src/MagnumExternal/Vulkan/flextVk.cpp b/src/MagnumExternal/Vulkan/flextVk.cpp
index e8ddf1ae5..2f332a15d 100644
--- a/src/MagnumExternal/Vulkan/flextVk.cpp
+++ b/src/MagnumExternal/Vulkan/flextVk.cpp
@@ -33,6 +33,12 @@ FlextVkInstance flextVkInstance{};
FlextVkDevice flextVkDevice{};
void flextVkInitInstance(VkInstance instance, FlextVkInstance* data) {
+ data->CreateDebugReportCallbackEXT = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkCreateDebugReportCallbackEXT"));
+ data->DebugReportMessageEXT = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkDebugReportMessageEXT"));
+ data->DestroyDebugReportCallbackEXT = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkDestroyDebugReportCallbackEXT"));
+ data->CreateDebugUtilsMessengerEXT = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkCreateDebugUtilsMessengerEXT"));
+ data->DestroyDebugUtilsMessengerEXT = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkDestroyDebugUtilsMessengerEXT"));
+ data->SubmitDebugUtilsMessageEXT = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkSubmitDebugUtilsMessageEXT"));
data->EnumeratePhysicalDeviceGroupsKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkEnumeratePhysicalDeviceGroupsKHR"));
data->GetPhysicalDeviceExternalFencePropertiesKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceExternalFencePropertiesKHR"));
data->GetPhysicalDeviceExternalBufferPropertiesKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceExternalBufferPropertiesKHR"));
@@ -47,7 +53,6 @@ void flextVkInitInstance(VkInstance instance, FlextVkInstance* data) {
data->CreateDevice = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkCreateDevice"));
data->DestroyInstance = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkDestroyInstance"));
data->EnumerateDeviceExtensionProperties = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkEnumerateDeviceExtensionProperties"));
- data->EnumerateDeviceLayerProperties = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkEnumerateDeviceLayerProperties"));
data->EnumeratePhysicalDevices = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkEnumeratePhysicalDevices"));
data->GetDeviceProcAddr = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkGetDeviceProcAddr"));
data->GetPhysicalDeviceFeatures = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFeatures"));
@@ -71,14 +76,37 @@ void flextVkInitInstance(VkInstance instance, FlextVkInstance* data) {
}
void flextVkInitDevice(VkDevice device, FlextVkDevice* data, PFN_vkVoidFunction(VKAPI_PTR *getDeviceProcAddr)(VkDevice, const char*)) {
+ data->CmdDebugMarkerBeginEXT = reinterpret_cast(getDeviceProcAddr(device, "vkCmdDebugMarkerBeginEXT"));
+ data->CmdDebugMarkerEndEXT = reinterpret_cast(getDeviceProcAddr(device, "vkCmdDebugMarkerEndEXT"));
+ data->CmdDebugMarkerInsertEXT = reinterpret_cast(getDeviceProcAddr(device, "vkCmdDebugMarkerInsertEXT"));
+ data->DebugMarkerSetObjectNameEXT = reinterpret_cast(getDeviceProcAddr(device, "vkDebugMarkerSetObjectNameEXT"));
+ data->DebugMarkerSetObjectTagEXT = reinterpret_cast(getDeviceProcAddr(device, "vkDebugMarkerSetObjectTagEXT"));
+ data->CmdBeginDebugUtilsLabelEXT = reinterpret_cast(getDeviceProcAddr(device, "vkCmdBeginDebugUtilsLabelEXT"));
+ data->CmdEndDebugUtilsLabelEXT = reinterpret_cast(getDeviceProcAddr(device, "vkCmdEndDebugUtilsLabelEXT"));
+ data->CmdInsertDebugUtilsLabelEXT = reinterpret_cast(getDeviceProcAddr(device, "vkCmdInsertDebugUtilsLabelEXT"));
+ data->QueueBeginDebugUtilsLabelEXT = reinterpret_cast(getDeviceProcAddr(device, "vkQueueBeginDebugUtilsLabelEXT"));
+ data->QueueEndDebugUtilsLabelEXT = reinterpret_cast(getDeviceProcAddr(device, "vkQueueEndDebugUtilsLabelEXT"));
+ data->QueueInsertDebugUtilsLabelEXT = reinterpret_cast(getDeviceProcAddr(device, "vkQueueInsertDebugUtilsLabelEXT"));
+ data->SetDebugUtilsObjectNameEXT = reinterpret_cast(getDeviceProcAddr(device, "vkSetDebugUtilsObjectNameEXT"));
+ data->SetDebugUtilsObjectTagEXT = reinterpret_cast(getDeviceProcAddr(device, "vkSetDebugUtilsObjectTagEXT"));
+ data->ResetQueryPoolEXT = reinterpret_cast(getDeviceProcAddr(device, "vkResetQueryPoolEXT"));
data->BindBufferMemory2KHR = reinterpret_cast(getDeviceProcAddr(device, "vkBindBufferMemory2KHR"));
data->BindImageMemory2KHR = reinterpret_cast(getDeviceProcAddr(device, "vkBindImageMemory2KHR"));
+ data->GetBufferDeviceAddressKHR = reinterpret_cast(getDeviceProcAddr(device, "vkGetBufferDeviceAddressKHR"));
+ data->GetBufferOpaqueCaptureAddressKHR = reinterpret_cast(getDeviceProcAddr(device, "vkGetBufferOpaqueCaptureAddressKHR"));
+ data->GetDeviceMemoryOpaqueCaptureAddressKHR = reinterpret_cast(getDeviceProcAddr(device, "vkGetDeviceMemoryOpaqueCaptureAddressKHR"));
+ data->CmdBeginRenderPass2KHR = reinterpret_cast(getDeviceProcAddr(device, "vkCmdBeginRenderPass2KHR"));
+ data->CmdEndRenderPass2KHR = reinterpret_cast(getDeviceProcAddr(device, "vkCmdEndRenderPass2KHR"));
+ data->CmdNextSubpass2KHR = reinterpret_cast(getDeviceProcAddr(device, "vkCmdNextSubpass2KHR"));
+ data->CreateRenderPass2KHR = reinterpret_cast(getDeviceProcAddr(device, "vkCreateRenderPass2KHR"));
data->CreateDescriptorUpdateTemplateKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCreateDescriptorUpdateTemplateKHR"));
data->DestroyDescriptorUpdateTemplateKHR = reinterpret_cast(getDeviceProcAddr(device, "vkDestroyDescriptorUpdateTemplateKHR"));
data->UpdateDescriptorSetWithTemplateKHR = reinterpret_cast(getDeviceProcAddr(device, "vkUpdateDescriptorSetWithTemplateKHR"));
data->CmdDispatchBaseKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCmdDispatchBaseKHR"));
data->CmdSetDeviceMaskKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCmdSetDeviceMaskKHR"));
data->GetDeviceGroupPeerMemoryFeaturesKHR = reinterpret_cast(getDeviceProcAddr(device, "vkGetDeviceGroupPeerMemoryFeaturesKHR"));
+ data->CmdDrawIndexedIndirectCountKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCmdDrawIndexedIndirectCountKHR"));
+ data->CmdDrawIndirectCountKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCmdDrawIndirectCountKHR"));
data->GetBufferMemoryRequirements2KHR = reinterpret_cast(getDeviceProcAddr(device, "vkGetBufferMemoryRequirements2KHR"));
data->GetImageMemoryRequirements2KHR = reinterpret_cast(getDeviceProcAddr(device, "vkGetImageMemoryRequirements2KHR"));
data->GetImageSparseMemoryRequirements2KHR = reinterpret_cast(getDeviceProcAddr(device, "vkGetImageSparseMemoryRequirements2KHR"));
@@ -86,6 +114,9 @@ void flextVkInitDevice(VkDevice device, FlextVkDevice* data, PFN_vkVoidFunction(
data->GetDescriptorSetLayoutSupportKHR = reinterpret_cast(getDeviceProcAddr(device, "vkGetDescriptorSetLayoutSupportKHR"));
data->CreateSamplerYcbcrConversionKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCreateSamplerYcbcrConversionKHR"));
data->DestroySamplerYcbcrConversionKHR = reinterpret_cast(getDeviceProcAddr(device, "vkDestroySamplerYcbcrConversionKHR"));
+ data->GetSemaphoreCounterValueKHR = reinterpret_cast(getDeviceProcAddr(device, "vkGetSemaphoreCounterValueKHR"));
+ data->SignalSemaphoreKHR = reinterpret_cast(getDeviceProcAddr(device, "vkSignalSemaphoreKHR"));
+ data->WaitSemaphoresKHR = reinterpret_cast(getDeviceProcAddr(device, "vkWaitSemaphoresKHR"));
data->AllocateCommandBuffers = reinterpret_cast(getDeviceProcAddr(device, "vkAllocateCommandBuffers"));
data->AllocateDescriptorSets = reinterpret_cast(getDeviceProcAddr(device, "vkAllocateDescriptorSets"));
data->AllocateMemory = reinterpret_cast(getDeviceProcAddr(device, "vkAllocateMemory"));
diff --git a/src/MagnumExternal/Vulkan/flextVk.h b/src/MagnumExternal/Vulkan/flextVk.h
index 5d848b853..ffffe47de 100644
--- a/src/MagnumExternal/Vulkan/flextVk.h
+++ b/src/MagnumExternal/Vulkan/flextVk.h
@@ -93,22 +93,21 @@ extern "C" {
#define VK_MAX_DESCRIPTION_SIZE 256
#define VK_MAX_MEMORY_TYPES 32
#define VK_MAX_MEMORY_HEAPS 16
-#define VK_QUEUE_FAMILY_EXTERNAL (~0U-1)
#define VK_MAX_DEVICE_GROUP_SIZE 32
#define VK_MAX_DRIVER_NAME_SIZE 256
#define VK_MAX_DRIVER_INFO_SIZE 256
/* VK_VERSION_1_0 */
-#define VK_LOD_CLAMP_NONE 1000.0f
-#define VK_REMAINING_MIP_LEVELS (~0U)
-#define VK_REMAINING_ARRAY_LAYERS (~0U)
-#define VK_WHOLE_SIZE (~0ULL)
#define VK_ATTACHMENT_UNUSED (~0U)
-#define VK_TRUE 1
#define VK_FALSE 0
+#define VK_LOD_CLAMP_NONE 1000.0f
#define VK_QUEUE_FAMILY_IGNORED (~0U)
+#define VK_REMAINING_ARRAY_LAYERS (~0U)
+#define VK_REMAINING_MIP_LEVELS (~0U)
#define VK_SUBPASS_EXTERNAL (~0U)
+#define VK_TRUE 1
+#define VK_WHOLE_SIZE (~0ULL)
/* VK_VERSION_1_1 */
@@ -126,120 +125,119 @@ extern "C" {
#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION 2
#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_physical_device_properties2"
-/* VK_KHR_storage_buffer_storage_class */
-
-#define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION 1
-#define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME "VK_KHR_storage_buffer_storage_class"
-
-/* VK_KHR_16bit_storage */
-
-#define VK_KHR_16BIT_STORAGE_SPEC_VERSION 1
-#define VK_KHR_16BIT_STORAGE_EXTENSION_NAME "VK_KHR_16bit_storage"
-
-/* VK_KHR_bind_memory2 */
-
-#define VK_KHR_BIND_MEMORY_2_SPEC_VERSION 1
-#define VK_KHR_BIND_MEMORY_2_EXTENSION_NAME "VK_KHR_bind_memory2"
-
-/* VK_KHR_get_memory_requirements2 */
-
-#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION 1
-#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME "VK_KHR_get_memory_requirements2"
-
-/* VK_KHR_dedicated_allocation */
-
-#define VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION 3
-#define VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_KHR_dedicated_allocation"
-
-/* VK_KHR_descriptor_update_template */
-
-#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION 1
-#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME "VK_KHR_descriptor_update_template"
-
/* VK_KHR_device_group_creation */
#define VK_KHR_DEVICE_GROUP_CREATION_SPEC_VERSION 1
#define VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME "VK_KHR_device_group_creation"
#define VK_MAX_DEVICE_GROUP_SIZE_KHR VK_MAX_DEVICE_GROUP_SIZE
-/* VK_KHR_device_group */
-
-#define VK_KHR_DEVICE_GROUP_SPEC_VERSION 4
-#define VK_KHR_DEVICE_GROUP_EXTENSION_NAME "VK_KHR_device_group"
-
/* VK_KHR_external_memory_capabilities */
#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1
#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_memory_capabilities"
#define VK_LUID_SIZE_KHR VK_LUID_SIZE
-/* VK_KHR_external_memory */
-
-#define VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME "VK_KHR_external_memory"
-#define VK_QUEUE_FAMILY_EXTERNAL_KHR VK_QUEUE_FAMILY_EXTERNAL
-
/* VK_KHR_external_semaphore_capabilities */
#define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION 1
#define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_semaphore_capabilities"
#define VK_LUID_SIZE_KHR VK_LUID_SIZE
-/* VK_KHR_external_semaphore */
-
-#define VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_KHR_external_semaphore"
-
/* VK_KHR_external_fence_capabilities */
#define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION 1
#define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_fence_capabilities"
#define VK_LUID_SIZE_KHR VK_LUID_SIZE
-/* VK_KHR_external_fence */
+/* VK_EXT_host_query_reset */
+
+#define VK_EXT_HOST_QUERY_RESET_SPEC_VERSION 1
+#define VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME "VK_EXT_host_query_reset"
-#define VK_KHR_EXTERNAL_FENCE_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME "VK_KHR_external_fence"
+/* VK_KHR_bind_memory2 */
+
+#define VK_KHR_BIND_MEMORY_2_SPEC_VERSION 1
+#define VK_KHR_BIND_MEMORY_2_EXTENSION_NAME "VK_KHR_bind_memory2"
+
+/* VK_KHR_device_group */
+
+#define VK_KHR_DEVICE_GROUP_SPEC_VERSION 4
+#define VK_KHR_DEVICE_GROUP_EXTENSION_NAME "VK_KHR_device_group"
/* VK_KHR_maintenance1 */
#define VK_KHR_MAINTENANCE1_SPEC_VERSION 2
#define VK_KHR_MAINTENANCE1_EXTENSION_NAME "VK_KHR_maintenance1"
-/* VK_KHR_maintenance2 */
+/* VK_EXT_debug_report */
-#define VK_KHR_MAINTENANCE2_SPEC_VERSION 1
-#define VK_KHR_MAINTENANCE2_EXTENSION_NAME "VK_KHR_maintenance2"
+#define VK_EXT_DEBUG_REPORT_SPEC_VERSION 9
+#define VK_EXT_DEBUG_REPORT_EXTENSION_NAME "VK_EXT_debug_report"
-/* VK_KHR_maintenance3 */
+/* VK_KHR_descriptor_update_template */
-#define VK_KHR_MAINTENANCE3_SPEC_VERSION 1
-#define VK_KHR_MAINTENANCE3_EXTENSION_NAME "VK_KHR_maintenance3"
+#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION 1
+#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME "VK_KHR_descriptor_update_template"
/* VK_KHR_multiview */
#define VK_KHR_MULTIVIEW_SPEC_VERSION 1
#define VK_KHR_MULTIVIEW_EXTENSION_NAME "VK_KHR_multiview"
-/* VK_KHR_relaxed_block_layout */
+/* VK_KHR_maintenance2 */
+
+#define VK_KHR_MAINTENANCE2_SPEC_VERSION 1
+#define VK_KHR_MAINTENANCE2_EXTENSION_NAME "VK_KHR_maintenance2"
+
+/* VK_KHR_create_renderpass2 */
+
+#define VK_KHR_CREATE_RENDERPASS_2_SPEC_VERSION 1
+#define VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME "VK_KHR_create_renderpass2"
-#define VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION 1
-#define VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME "VK_KHR_relaxed_block_layout"
+/* VK_KHR_get_memory_requirements2 */
+
+#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION 1
+#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME "VK_KHR_get_memory_requirements2"
/* VK_KHR_sampler_ycbcr_conversion */
#define VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION 14
#define VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME "VK_KHR_sampler_ycbcr_conversion"
-/* VK_KHR_shader_draw_parameters */
+/* VK_KHR_maintenance3 */
+
+#define VK_KHR_MAINTENANCE3_SPEC_VERSION 1
+#define VK_KHR_MAINTENANCE3_EXTENSION_NAME "VK_KHR_maintenance3"
+
+/* VK_KHR_draw_indirect_count */
+
+#define VK_KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION 1
+#define VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME "VK_KHR_draw_indirect_count"
+
+/* VK_KHR_timeline_semaphore */
+
+#define VK_KHR_TIMELINE_SEMAPHORE_SPEC_VERSION 2
+#define VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME "VK_KHR_timeline_semaphore"
+
+/* VK_KHR_buffer_device_address */
-#define VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION 1
-#define VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME "VK_KHR_shader_draw_parameters"
+#define VK_KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION 1
+#define VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME "VK_KHR_buffer_device_address"
-/* VK_KHR_variable_pointers */
+/* VK_EXT_debug_marker */
-#define VK_KHR_VARIABLE_POINTERS_SPEC_VERSION 1
-#define VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME "VK_KHR_variable_pointers"
+#define VK_EXT_DEBUG_MARKER_SPEC_VERSION 4
+#define VK_EXT_DEBUG_MARKER_EXTENSION_NAME "VK_EXT_debug_marker"
+
+/* VK_EXT_debug_utils */
+
+#define VK_EXT_DEBUG_UTILS_SPEC_VERSION 2
+#define VK_EXT_DEBUG_UTILS_EXTENSION_NAME "VK_EXT_debug_utils"
+
+/* VK_EXT_validation_features */
+
+#define VK_EXT_VALIDATION_FEATURES_SPEC_VERSION 3
+#define VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME "VK_EXT_validation_features"
/* VK_EXT_texture_compression_astc_hdr */
@@ -259,7 +257,7 @@ extern "C" {
/* Data types */
#define VK_MAKE_VERSION(major, minor, patch) \
- (((major) << 22) | ((minor) << 12) | (patch))
+ ((((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch)))
#define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22)
#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
@@ -270,7 +268,9 @@ extern "C" {
// Vulkan 1.2 version number
#define VK_API_VERSION_1_2 VK_MAKE_VERSION(1, 2, 0)// Patch version should always be set to 0
// Version of this file
-#define VK_HEADER_VERSION 133
+#define VK_HEADER_VERSION 146
+// Complete version of this file
+#define VK_HEADER_VERSION_COMPLETE VK_MAKE_VERSION(1, 2, VK_HEADER_VERSION)
#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
#if !defined(VK_DEFINE_NON_DISPATCHABLE_HANDLE)
#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
@@ -350,6 +350,7 @@ typedef VkFlags VkPeerMemoryFeatureFlags;
typedef VkPeerMemoryFeatureFlags VkPeerMemoryFeatureFlagsKHR;
typedef VkFlags VkMemoryAllocateFlags;
+typedef VkFlags VkDebugReportFlagsEXT;
typedef VkFlags VkCommandPoolTrimFlags;
typedef VkCommandPoolTrimFlags VkCommandPoolTrimFlagsKHR;
@@ -359,6 +360,10 @@ typedef VkFlags VkExternalSemaphoreHandleTypeFlags;
typedef VkFlags VkExternalSemaphoreFeatureFlags;
typedef VkFlags VkExternalFenceHandleTypeFlags;
typedef VkFlags VkExternalFenceFeatureFlags;
+typedef VkFlags VkDebugUtilsMessageSeverityFlagsEXT;
+typedef VkFlags VkDebugUtilsMessageTypeFlagsEXT;
+typedef VkFlags VkDebugUtilsMessengerCreateFlagsEXT;
+typedef VkFlags VkDebugUtilsMessengerCallbackDataFlagsEXT;
typedef VkFlags VkDescriptorBindingFlags;
typedef VkFlags VkResolveModeFlags;
VK_DEFINE_HANDLE(VkInstance)
@@ -392,6 +397,8 @@ typedef VkDescriptorUpdateTemplate VkDescriptorUpdateTemplateKHR;
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSamplerYcbcrConversion)
typedef VkSamplerYcbcrConversion VkSamplerYcbcrConversionKHR;
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugUtilsMessengerEXT)
typedef enum {
VK_ATTACHMENT_LOAD_OP_LOAD = 0,
@@ -443,7 +450,9 @@ typedef enum {
VK_BORDER_COLOR_INT_OPAQUE_WHITE = 5
} VkBorderColor;
-typedef int VkFramebufferCreateFlagBits;
+typedef enum {
+ VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT = 1 << 0
+} VkFramebufferCreateFlagBits;
typedef int VkRenderPassCreateFlagBits;
@@ -453,18 +462,25 @@ typedef enum {
VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1
} VkPipelineCacheHeaderVersion;
+typedef int VkPipelineCacheCreateFlagBits;
+
typedef int VkPipelineShaderStageCreateFlagBits;
-typedef int VkDescriptorSetLayoutCreateFlagBits;
+typedef enum {
+ VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT = 1 << 1
+} VkDescriptorSetLayoutCreateFlagBits;
-typedef int VkDeviceQueueCreateFlagBits;
+typedef enum {
+ VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT = 1 << 0
+} VkDeviceQueueCreateFlagBits;
typedef enum {
VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 1 << 0,
VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 1 << 1,
VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 1 << 2,
VK_BUFFER_CREATE_PROTECTED_BIT = 1 << 3,
- VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = 1 << 4
+ VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = 1 << 4,
+ VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT
} VkBufferCreateFlagBits;
typedef enum {
@@ -477,7 +493,8 @@ typedef enum {
VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 1 << 6,
VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 1 << 7,
VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 1 << 8,
- VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT = 1 << 17
+ VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT = 1 << 17,
+ VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT
} VkBufferUsageFlagBits;
typedef enum {
@@ -1152,8 +1169,9 @@ typedef enum {
VK_ERROR_INVALID_EXTERNAL_HANDLE = -1000072003,
VK_ERROR_FRAGMENTATION = -1000161000,
VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS = -1000257000,
- VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR = VK_ERROR_INVALID_EXTERNAL_HANDLE,
- VK_ERROR_OUT_OF_POOL_MEMORY_KHR = VK_ERROR_OUT_OF_POOL_MEMORY
+ VK_ERROR_OUT_OF_POOL_MEMORY_KHR = VK_ERROR_OUT_OF_POOL_MEMORY,
+ VK_ERROR_VALIDATION_FAILED_EXT = -1000011001,
+ VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS
} VkResult;
typedef enum {
@@ -1365,17 +1383,6 @@ typedef enum {
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2,
VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES,
- VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO,
- VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO,
- VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2,
- VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,
- VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2,
- VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2,
- VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2,
- VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS,
- VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO,
- VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES,
VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO,
@@ -1383,32 +1390,63 @@ typedef enum {
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO,
VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES,
- VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO,
- VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO,
- VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO,
VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES,
- VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO,
VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES,
- VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES,
+ VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO,
+ VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO,
+ VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT = 1000011000,
+ VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
+ VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO,
+ VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES,
VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO,
VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO,
VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES,
- VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT,
- VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES,
+ VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,
+ VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,
+ VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2,
+ VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR = VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2,
+ VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2,
+ VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO,
+ VK_STRUCTURE_TYPE_SUBPASS_END_INFO_KHR = VK_STRUCTURE_TYPE_SUBPASS_END_INFO,
+ VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2,
+ VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,
+ VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2,
+ VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2,
+ VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2,
VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO,
VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO,
VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO,
VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES,
VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES,
+ VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES,
+ VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO,
+ VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO,
+ VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO,
+ VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES,
+ VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO,
+ VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO,
+ VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO,
+ VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO,
+ VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT = 1000022000,
+ VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT = 1000022001,
+ VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT = 1000022002,
+ VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT = 1000128000,
+ VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT = 1000128001,
+ VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT = 1000128002,
+ VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT = 1000128003,
+ VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT = 1000128004,
+ VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT = 1000247000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT = 1000066000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT = 1000265000
} VkStructureType;
@@ -1501,6 +1539,41 @@ typedef enum {
VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR = VK_DEPENDENCY_VIEW_LOCAL_BIT
} VkDependencyFlagBits;
+typedef enum {
+ VK_OBJECT_TYPE_UNKNOWN = 0,
+ VK_OBJECT_TYPE_INSTANCE = 1,
+ VK_OBJECT_TYPE_PHYSICAL_DEVICE = 2,
+ VK_OBJECT_TYPE_DEVICE = 3,
+ VK_OBJECT_TYPE_QUEUE = 4,
+ VK_OBJECT_TYPE_SEMAPHORE = 5,
+ VK_OBJECT_TYPE_COMMAND_BUFFER = 6,
+ VK_OBJECT_TYPE_FENCE = 7,
+ VK_OBJECT_TYPE_DEVICE_MEMORY = 8,
+ VK_OBJECT_TYPE_BUFFER = 9,
+ VK_OBJECT_TYPE_IMAGE = 10,
+ VK_OBJECT_TYPE_EVENT = 11,
+ VK_OBJECT_TYPE_QUERY_POOL = 12,
+ VK_OBJECT_TYPE_BUFFER_VIEW = 13,
+ VK_OBJECT_TYPE_IMAGE_VIEW = 14,
+ VK_OBJECT_TYPE_SHADER_MODULE = 15,
+ VK_OBJECT_TYPE_PIPELINE_CACHE = 16,
+ VK_OBJECT_TYPE_PIPELINE_LAYOUT = 17,
+ VK_OBJECT_TYPE_RENDER_PASS = 18,
+ VK_OBJECT_TYPE_PIPELINE = 19,
+ VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = 20,
+ VK_OBJECT_TYPE_SAMPLER = 21,
+ VK_OBJECT_TYPE_DESCRIPTOR_POOL = 22,
+ VK_OBJECT_TYPE_DESCRIPTOR_SET = 23,
+ VK_OBJECT_TYPE_FRAMEBUFFER = 24,
+ VK_OBJECT_TYPE_COMMAND_POOL = 25,
+ VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION = 1000156000,
+ VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE = 1000085000,
+ VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT = 1000011000,
+ VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE,
+ VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR = VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION,
+ VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT = 1000128000
+} VkObjectType;
+
typedef enum {
VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET = 0
} VkDescriptorUpdateTemplateType;
@@ -1531,15 +1604,82 @@ typedef enum {
typedef enum {
VK_SEMAPHORE_TYPE_BINARY = 0,
- VK_SEMAPHORE_TYPE_TIMELINE = 1
+ VK_SEMAPHORE_TYPE_TIMELINE = 1,
+ VK_SEMAPHORE_TYPE_BINARY_KHR = VK_SEMAPHORE_TYPE_BINARY,
+ VK_SEMAPHORE_TYPE_TIMELINE_KHR = VK_SEMAPHORE_TYPE_TIMELINE
} VkSemaphoreType;
typedef enum {
- VK_SEMAPHORE_WAIT_ANY_BIT = 1 << 0
+ VK_SEMAPHORE_WAIT_ANY_BIT = 1 << 0,
+ VK_SEMAPHORE_WAIT_ANY_BIT_KHR = VK_SEMAPHORE_WAIT_ANY_BIT
} VkSemaphoreWaitFlagBits;
typedef int VkShaderModuleCreateFlagBits;
+typedef enum {
+ VK_DEBUG_REPORT_INFORMATION_BIT_EXT = 1 << 0,
+ VK_DEBUG_REPORT_WARNING_BIT_EXT = 1 << 1,
+ VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT = 1 << 2,
+ VK_DEBUG_REPORT_ERROR_BIT_EXT = 1 << 3,
+ VK_DEBUG_REPORT_DEBUG_BIT_EXT = 1 << 4
+} VkDebugReportFlagBitsEXT;
+
+typedef enum {
+ VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT = 0,
+ VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT = 1,
+ VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT = 2,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT = 3,
+ VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT = 4,
+ VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT = 5,
+ VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT = 6,
+ VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT = 7,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT = 8,
+ VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT = 9,
+ VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT = 10,
+ VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT = 11,
+ VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT = 12,
+ VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT = 13,
+ VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT = 14,
+ VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT = 15,
+ VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT = 16,
+ VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT = 17,
+ VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT = 18,
+ VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT = 19,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT = 20,
+ VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT = 21,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT = 22,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT = 23,
+ VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT = 24,
+ VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = 25,
+ VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = 26,
+ VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = 27,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT = 28,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT = 29,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT = 30,
+ VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT = 33,
+ VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT,
+ VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT = 1000156000,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT = 1000085000
+} VkDebugReportObjectTypeEXT;
+
+typedef enum {
+ VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT = 0,
+ VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT = 1,
+ VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT = 2,
+ VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT = 3
+} VkValidationFeatureEnableEXT;
+
+typedef enum {
+ VK_VALIDATION_FEATURE_DISABLE_ALL_EXT = 0,
+ VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT = 1,
+ VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT = 2,
+ VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT = 3,
+ VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT = 4,
+ VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT = 5,
+ VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT = 6
+} VkValidationFeatureDisableEXT;
+
typedef enum {
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT = 1 << 0,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT = 1 << 1,
@@ -1619,7 +1759,9 @@ typedef enum {
VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT = 1 << 0,
VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT = 1 << 1,
VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = 1 << 2,
- VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT
+ VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT,
+ VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT,
+ VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT
} VkMemoryAllocateFlagBits;
typedef enum {
@@ -1673,6 +1815,19 @@ typedef enum {
VK_SAMPLER_REDUCTION_MODE_MAX = 2
} VkSamplerReductionMode;
+typedef enum {
+ VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT = 1 << 0,
+ VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT = 1 << 4,
+ VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT = 1 << 8,
+ VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT = 1 << 12
+} VkDebugUtilsMessageSeverityFlagBitsEXT;
+
+typedef enum {
+ VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT = 1 << 0,
+ VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT = 1 << 1,
+ VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT = 1 << 2
+} VkDebugUtilsMessageTypeFlagBitsEXT;
+
typedef enum {
VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY = 0,
VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL = 1,
@@ -1683,7 +1838,8 @@ typedef enum {
VK_VENDOR_ID_VIV = 0x10001,
VK_VENDOR_ID_VSI = 0x10002,
VK_VENDOR_ID_KAZAN = 0x10003,
- VK_VENDOR_ID_CODEPLAY = 0x10004
+ VK_VENDOR_ID_CODEPLAY = 0x10004,
+ VK_VENDOR_ID_MESA = 0x10005
} VkVendorId;
typedef enum {
@@ -1698,7 +1854,8 @@ typedef enum {
VK_DRIVER_ID_ARM_PROPRIETARY = 9,
VK_DRIVER_ID_GOOGLE_SWIFTSHADER = 10,
VK_DRIVER_ID_GGP_PROPRIETARY = 11,
- VK_DRIVER_ID_BROADCOM_PROPRIETARY = 12
+ VK_DRIVER_ID_BROADCOM_PROPRIETARY = 12,
+ VK_DRIVER_ID_MESA_LLVMPIPE = 13
} VkDriverId;
typedef void (VKAPI_PTR *PFN_vkInternalAllocationNotification)(
void* pUserData,
@@ -1725,6 +1882,50 @@ typedef void (VKAPI_PTR *PFN_vkFreeFunction)(
void* pUserData,
void* pMemory);
typedef void (VKAPI_PTR *PFN_vkVoidFunction)(void);
+typedef VkBool32 (VKAPI_PTR *PFN_vkDebugReportCallbackEXT)(
+ VkDebugReportFlagsEXT flags,
+ VkDebugReportObjectTypeEXT objectType,
+ uint64_t object,
+ size_t location,
+ int32_t messageCode,
+ const char* pLayerPrefix,
+ const char* pMessage,
+ void* pUserData);
+
+typedef struct VkDebugUtilsLabelEXT {
+ VkStructureType sType;
+ const void* pNext;
+ const char* pLabelName;
+ float color[4];
+} VkDebugUtilsLabelEXT;
+
+typedef struct VkDebugUtilsObjectNameInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkObjectType objectType;
+ uint64_t objectHandle;
+ const char* pObjectName;
+} VkDebugUtilsObjectNameInfoEXT;
+
+typedef struct VkDebugUtilsMessengerCallbackDataEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkDebugUtilsMessengerCallbackDataFlagsEXT flags;
+ const char* pMessageIdName;
+ int32_t messageIdNumber;
+ const char* pMessage;
+ uint32_t queueLabelCount;
+ const VkDebugUtilsLabelEXT* pQueueLabels;
+ uint32_t cmdBufLabelCount;
+ const VkDebugUtilsLabelEXT* pCmdBufLabels;
+ uint32_t objectCount;
+ const VkDebugUtilsObjectNameInfoEXT* pObjects;
+} VkDebugUtilsMessengerCallbackDataEXT;
+typedef VkBool32 (VKAPI_PTR *PFN_vkDebugUtilsMessengerCallbackEXT)(
+ VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
+ VkDebugUtilsMessageTypeFlagsEXT messageTypes,
+ const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
+ void* pUserData);
typedef struct VkBaseOutStructure {
VkStructureType sType;
@@ -2811,6 +3012,48 @@ typedef struct VkSubmitInfo {
const VkSemaphore* pSignalSemaphores;
} VkSubmitInfo;
+typedef struct VkDebugReportCallbackCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkDebugReportFlagsEXT flags;
+ PFN_vkDebugReportCallbackEXT pfnCallback;
+ void* pUserData;
+} VkDebugReportCallbackCreateInfoEXT;
+
+typedef struct VkValidationFeaturesEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t enabledValidationFeatureCount;
+ const VkValidationFeatureEnableEXT* pEnabledValidationFeatures;
+ uint32_t disabledValidationFeatureCount;
+ const VkValidationFeatureDisableEXT* pDisabledValidationFeatures;
+} VkValidationFeaturesEXT;
+
+typedef struct VkDebugMarkerObjectNameInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkDebugReportObjectTypeEXT objectType;
+ uint64_t object;
+ const char* pObjectName;
+} VkDebugMarkerObjectNameInfoEXT;
+
+typedef struct VkDebugMarkerObjectTagInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkDebugReportObjectTypeEXT objectType;
+ uint64_t object;
+ uint64_t tagName;
+ size_t tagSize;
+ const void* pTag;
+} VkDebugMarkerObjectTagInfoEXT;
+
+typedef struct VkDebugMarkerMarkerInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ const char* pMarkerName;
+ float color[4];
+} VkDebugMarkerMarkerInfoEXT;
+
typedef struct VkPhysicalDeviceFeatures2 {
VkStructureType sType;
void* pNext;
@@ -2914,10 +3157,6 @@ typedef struct VkPhysicalDeviceVariablePointersFeatures {
VkBool32 variablePointers;
} VkPhysicalDeviceVariablePointersFeatures;
-typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointersFeaturesKHR;
-
-typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointerFeaturesKHR;
-
typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointerFeatures;
typedef struct VkExternalMemoryProperties {
@@ -2978,24 +3217,18 @@ typedef struct VkExternalMemoryImageCreateInfo {
VkExternalMemoryHandleTypeFlags handleTypes;
} VkExternalMemoryImageCreateInfo;
-typedef VkExternalMemoryImageCreateInfo VkExternalMemoryImageCreateInfoKHR;
-
typedef struct VkExternalMemoryBufferCreateInfo {
VkStructureType sType;
const void* pNext;
VkExternalMemoryHandleTypeFlags handleTypes;
} VkExternalMemoryBufferCreateInfo;
-typedef VkExternalMemoryBufferCreateInfo VkExternalMemoryBufferCreateInfoKHR;
-
typedef struct VkExportMemoryAllocateInfo {
VkStructureType sType;
const void* pNext;
VkExternalMemoryHandleTypeFlags handleTypes;
} VkExportMemoryAllocateInfo;
-typedef VkExportMemoryAllocateInfo VkExportMemoryAllocateInfoKHR;
-
typedef struct VkPhysicalDeviceExternalSemaphoreInfo {
VkStructureType sType;
const void* pNext;
@@ -3020,8 +3253,6 @@ typedef struct VkExportSemaphoreCreateInfo {
VkExternalSemaphoreHandleTypeFlags handleTypes;
} VkExportSemaphoreCreateInfo;
-typedef VkExportSemaphoreCreateInfo VkExportSemaphoreCreateInfoKHR;
-
typedef struct VkPhysicalDeviceExternalFenceInfo {
VkStructureType sType;
const void* pNext;
@@ -3046,8 +3277,6 @@ typedef struct VkExportFenceCreateInfo {
VkExternalFenceHandleTypeFlags handleTypes;
} VkExportFenceCreateInfo;
-typedef VkExportFenceCreateInfo VkExportFenceCreateInfoKHR;
-
typedef struct VkPhysicalDeviceMultiviewFeatures {
VkStructureType sType;
void* pNext;
@@ -3232,8 +3461,6 @@ typedef struct VkPhysicalDevice16BitStorageFeatures {
VkBool32 storageInputOutput16;
} VkPhysicalDevice16BitStorageFeatures;
-typedef VkPhysicalDevice16BitStorageFeatures VkPhysicalDevice16BitStorageFeaturesKHR;
-
typedef struct VkPhysicalDeviceSubgroupProperties {
VkStructureType sType;
void* pNext;
@@ -3304,8 +3531,6 @@ typedef struct VkMemoryDedicatedRequirements {
VkBool32 requiresDedicatedAllocation;
} VkMemoryDedicatedRequirements;
-typedef VkMemoryDedicatedRequirements VkMemoryDedicatedRequirementsKHR;
-
typedef struct VkMemoryDedicatedAllocateInfo {
VkStructureType sType;
const void* pNext;
@@ -3313,8 +3538,6 @@ typedef struct VkMemoryDedicatedAllocateInfo {
VkBuffer buffer;
} VkMemoryDedicatedAllocateInfo;
-typedef VkMemoryDedicatedAllocateInfo VkMemoryDedicatedAllocateInfoKHR;
-
typedef struct VkImageViewUsageCreateInfo {
VkStructureType sType;
const void* pNext;
@@ -3492,6 +3715,28 @@ typedef struct VkPhysicalDeviceHostQueryResetFeatures {
VkBool32 hostQueryReset;
} VkPhysicalDeviceHostQueryResetFeatures;
+typedef VkPhysicalDeviceHostQueryResetFeatures VkPhysicalDeviceHostQueryResetFeaturesEXT;
+
+typedef struct VkDebugUtilsObjectTagInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkObjectType objectType;
+ uint64_t objectHandle;
+ uint64_t tagName;
+ size_t tagSize;
+ const void* pTag;
+} VkDebugUtilsObjectTagInfoEXT;
+
+typedef struct VkDebugUtilsMessengerCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkDebugUtilsMessengerCreateFlagsEXT flags;
+ VkDebugUtilsMessageSeverityFlagsEXT messageSeverity;
+ VkDebugUtilsMessageTypeFlagsEXT messageType;
+ PFN_vkDebugUtilsMessengerCallbackEXT pfnUserCallback;
+ void* pUserData;
+} VkDebugUtilsMessengerCreateInfoEXT;
+
typedef struct VkPhysicalDeviceDescriptorIndexingFeatures {
VkStructureType sType;
void* pNext;
@@ -3630,29 +3875,39 @@ typedef struct VkRenderPassCreateInfo2 {
const uint32_t* pCorrelatedViewMasks;
} VkRenderPassCreateInfo2;
+typedef VkRenderPassCreateInfo2 VkRenderPassCreateInfo2KHR;
+
typedef struct VkSubpassBeginInfo {
VkStructureType sType;
const void* pNext;
VkSubpassContents contents;
} VkSubpassBeginInfo;
+typedef VkSubpassBeginInfo VkSubpassBeginInfoKHR;
+
typedef struct VkSubpassEndInfo {
VkStructureType sType;
const void* pNext;
} VkSubpassEndInfo;
+typedef VkSubpassEndInfo VkSubpassEndInfoKHR;
+
typedef struct VkPhysicalDeviceTimelineSemaphoreFeatures {
VkStructureType sType;
void* pNext;
VkBool32 timelineSemaphore;
} VkPhysicalDeviceTimelineSemaphoreFeatures;
+typedef VkPhysicalDeviceTimelineSemaphoreFeatures VkPhysicalDeviceTimelineSemaphoreFeaturesKHR;
+
typedef struct VkPhysicalDeviceTimelineSemaphoreProperties {
VkStructureType sType;
void* pNext;
uint64_t maxTimelineSemaphoreValueDifference;
} VkPhysicalDeviceTimelineSemaphoreProperties;
+typedef VkPhysicalDeviceTimelineSemaphoreProperties VkPhysicalDeviceTimelineSemaphorePropertiesKHR;
+
typedef struct VkSemaphoreTypeCreateInfo {
VkStructureType sType;
const void* pNext;
@@ -3660,6 +3915,8 @@ typedef struct VkSemaphoreTypeCreateInfo {
uint64_t initialValue;
} VkSemaphoreTypeCreateInfo;
+typedef VkSemaphoreTypeCreateInfo VkSemaphoreTypeCreateInfoKHR;
+
typedef struct VkTimelineSemaphoreSubmitInfo {
VkStructureType sType;
const void* pNext;
@@ -3669,6 +3926,8 @@ typedef struct VkTimelineSemaphoreSubmitInfo {
const uint64_t* pSignalSemaphoreValues;
} VkTimelineSemaphoreSubmitInfo;
+typedef VkTimelineSemaphoreSubmitInfo VkTimelineSemaphoreSubmitInfoKHR;
+
typedef struct VkSemaphoreWaitInfo {
VkStructureType sType;
const void* pNext;
@@ -3678,6 +3937,8 @@ typedef struct VkSemaphoreWaitInfo {
const uint64_t* pValues;
} VkSemaphoreWaitInfo;
+typedef VkSemaphoreWaitInfo VkSemaphoreWaitInfoKHR;
+
typedef struct VkSemaphoreSignalInfo {
VkStructureType sType;
const void* pNext;
@@ -3685,6 +3946,8 @@ typedef struct VkSemaphoreSignalInfo {
uint64_t value;
} VkSemaphoreSignalInfo;
+typedef VkSemaphoreSignalInfo VkSemaphoreSignalInfoKHR;
+
typedef struct VkPhysicalDevice8BitStorageFeatures {
VkStructureType sType;
void* pNext;
@@ -3751,18 +4014,24 @@ typedef struct VkPhysicalDeviceBufferDeviceAddressFeatures {
VkBool32 bufferDeviceAddressMultiDevice;
} VkPhysicalDeviceBufferDeviceAddressFeatures;
+typedef VkPhysicalDeviceBufferDeviceAddressFeatures VkPhysicalDeviceBufferDeviceAddressFeaturesKHR;
+
typedef struct VkBufferDeviceAddressInfo {
VkStructureType sType;
const void* pNext;
VkBuffer buffer;
} VkBufferDeviceAddressInfo;
+typedef VkBufferDeviceAddressInfo VkBufferDeviceAddressInfoKHR;
+
typedef struct VkBufferOpaqueCaptureAddressCreateInfo {
VkStructureType sType;
const void* pNext;
uint64_t opaqueCaptureAddress;
} VkBufferOpaqueCaptureAddressCreateInfo;
+typedef VkBufferOpaqueCaptureAddressCreateInfo VkBufferOpaqueCaptureAddressCreateInfoKHR;
+
typedef struct VkPhysicalDeviceImagelessFramebufferFeatures {
VkStructureType sType;
void* pNext;
@@ -3832,12 +4101,16 @@ typedef struct VkMemoryOpaqueCaptureAddressAllocateInfo {
uint64_t opaqueCaptureAddress;
} VkMemoryOpaqueCaptureAddressAllocateInfo;
+typedef VkMemoryOpaqueCaptureAddressAllocateInfo VkMemoryOpaqueCaptureAddressAllocateInfoKHR;
+
typedef struct VkDeviceMemoryOpaqueCaptureAddressInfo {
VkStructureType sType;
const void* pNext;
VkDeviceMemory memory;
} VkDeviceMemoryOpaqueCaptureAddressInfo;
+typedef VkDeviceMemoryOpaqueCaptureAddressInfo VkDeviceMemoryOpaqueCaptureAddressInfoKHR;
+
typedef struct VkPhysicalDeviceVulkan11Features {
VkStructureType sType;
void* pNext;
@@ -4003,9 +4276,33 @@ extern FLEXTVK_EXPORT VkResult(VKAPI_PTR *flextvkEnumerateInstanceVersion)(uint3
/* Per-instance function pointers */
struct FlextVkInstance {
+ /* VK_EXT_debug_marker */
+
+
+ /* VK_EXT_debug_report */
+
+ VkResult (VKAPI_PTR *CreateDebugReportCallbackEXT)(VkInstance, const VkDebugReportCallbackCreateInfoEXT*, const VkAllocationCallbacks*, VkDebugReportCallbackEXT*);
+ void (VKAPI_PTR *DebugReportMessageEXT)(VkInstance, VkDebugReportFlagsEXT, VkDebugReportObjectTypeEXT, uint64_t, size_t, int32_t, const char*, const char*);
+ void (VKAPI_PTR *DestroyDebugReportCallbackEXT)(VkInstance, VkDebugReportCallbackEXT, const VkAllocationCallbacks*);
+
+ /* VK_EXT_debug_utils */
+
+ VkResult (VKAPI_PTR *CreateDebugUtilsMessengerEXT)(VkInstance, const VkDebugUtilsMessengerCreateInfoEXT*, const VkAllocationCallbacks*, VkDebugUtilsMessengerEXT*);
+ void (VKAPI_PTR *DestroyDebugUtilsMessengerEXT)(VkInstance, VkDebugUtilsMessengerEXT, const VkAllocationCallbacks*);
+ void (VKAPI_PTR *SubmitDebugUtilsMessageEXT)(VkInstance, VkDebugUtilsMessageSeverityFlagBitsEXT, VkDebugUtilsMessageTypeFlagsEXT, const VkDebugUtilsMessengerCallbackDataEXT*);
+
+ /* VK_EXT_host_query_reset */
+
+
/* VK_KHR_bind_memory2 */
+ /* VK_KHR_buffer_device_address */
+
+
+ /* VK_KHR_create_renderpass2 */
+
+
/* VK_KHR_descriptor_update_template */
@@ -4016,6 +4313,9 @@ struct FlextVkInstance {
VkResult (VKAPI_PTR *EnumeratePhysicalDeviceGroupsKHR)(VkInstance, uint32_t*, VkPhysicalDeviceGroupProperties*);
+ /* VK_KHR_draw_indirect_count */
+
+
/* VK_KHR_external_fence_capabilities */
void (VKAPI_PTR *GetPhysicalDeviceExternalFencePropertiesKHR)(VkPhysicalDevice, const VkPhysicalDeviceExternalFenceInfo*, VkExternalFenceProperties*);
@@ -4050,12 +4350,14 @@ struct FlextVkInstance {
/* VK_KHR_sampler_ycbcr_conversion */
+ /* VK_KHR_timeline_semaphore */
+
+
/* VK_VERSION_1_0 */
VkResult (VKAPI_PTR *CreateDevice)(VkPhysicalDevice, const VkDeviceCreateInfo*, const VkAllocationCallbacks*, VkDevice*);
void (VKAPI_PTR *DestroyInstance)(VkInstance, const VkAllocationCallbacks*);
VkResult (VKAPI_PTR *EnumerateDeviceExtensionProperties)(VkPhysicalDevice, const char*, uint32_t*, VkExtensionProperties*);
- VkResult (VKAPI_PTR *EnumerateDeviceLayerProperties)(VkPhysicalDevice, uint32_t*, VkLayerProperties*);
VkResult (VKAPI_PTR *EnumeratePhysicalDevices)(VkInstance, uint32_t*, VkPhysicalDevice*);
PFN_vkVoidFunction (VKAPI_PTR *GetDeviceProcAddr)(VkDevice, const char*);
void (VKAPI_PTR *GetPhysicalDeviceFeatures)(VkPhysicalDevice, VkPhysicalDeviceFeatures*);
@@ -4090,11 +4392,50 @@ void FLEXTVK_EXPORT flextVkInitInstance(VkInstance instance, FlextVkInstance* da
/* Per-device function pointers */
struct FlextVkDevice {
+ /* VK_EXT_debug_marker */
+
+ void (VKAPI_PTR *CmdDebugMarkerBeginEXT)(VkCommandBuffer, const VkDebugMarkerMarkerInfoEXT*);
+ void (VKAPI_PTR *CmdDebugMarkerEndEXT)(VkCommandBuffer);
+ void (VKAPI_PTR *CmdDebugMarkerInsertEXT)(VkCommandBuffer, const VkDebugMarkerMarkerInfoEXT*);
+ VkResult (VKAPI_PTR *DebugMarkerSetObjectNameEXT)(VkDevice, const VkDebugMarkerObjectNameInfoEXT*);
+ VkResult (VKAPI_PTR *DebugMarkerSetObjectTagEXT)(VkDevice, const VkDebugMarkerObjectTagInfoEXT*);
+
+ /* VK_EXT_debug_report */
+
+
+ /* VK_EXT_debug_utils */
+
+ void (VKAPI_PTR *CmdBeginDebugUtilsLabelEXT)(VkCommandBuffer, const VkDebugUtilsLabelEXT*);
+ void (VKAPI_PTR *CmdEndDebugUtilsLabelEXT)(VkCommandBuffer);
+ void (VKAPI_PTR *CmdInsertDebugUtilsLabelEXT)(VkCommandBuffer, const VkDebugUtilsLabelEXT*);
+ void (VKAPI_PTR *QueueBeginDebugUtilsLabelEXT)(VkQueue, const VkDebugUtilsLabelEXT*);
+ void (VKAPI_PTR *QueueEndDebugUtilsLabelEXT)(VkQueue);
+ void (VKAPI_PTR *QueueInsertDebugUtilsLabelEXT)(VkQueue, const VkDebugUtilsLabelEXT*);
+ VkResult (VKAPI_PTR *SetDebugUtilsObjectNameEXT)(VkDevice, const VkDebugUtilsObjectNameInfoEXT*);
+ VkResult (VKAPI_PTR *SetDebugUtilsObjectTagEXT)(VkDevice, const VkDebugUtilsObjectTagInfoEXT*);
+
+ /* VK_EXT_host_query_reset */
+
+ void (VKAPI_PTR *ResetQueryPoolEXT)(VkDevice, VkQueryPool, uint32_t, uint32_t);
+
/* VK_KHR_bind_memory2 */
VkResult (VKAPI_PTR *BindBufferMemory2KHR)(VkDevice, uint32_t, const VkBindBufferMemoryInfo*);
VkResult (VKAPI_PTR *BindImageMemory2KHR)(VkDevice, uint32_t, const VkBindImageMemoryInfo*);
+ /* VK_KHR_buffer_device_address */
+
+ VkDeviceAddress (VKAPI_PTR *GetBufferDeviceAddressKHR)(VkDevice, const VkBufferDeviceAddressInfo*);
+ uint64_t (VKAPI_PTR *GetBufferOpaqueCaptureAddressKHR)(VkDevice, const VkBufferDeviceAddressInfo*);
+ uint64_t (VKAPI_PTR *GetDeviceMemoryOpaqueCaptureAddressKHR)(VkDevice, const VkDeviceMemoryOpaqueCaptureAddressInfo*);
+
+ /* VK_KHR_create_renderpass2 */
+
+ void (VKAPI_PTR *CmdBeginRenderPass2KHR)(VkCommandBuffer, const VkRenderPassBeginInfo*, const VkSubpassBeginInfo*);
+ void (VKAPI_PTR *CmdEndRenderPass2KHR)(VkCommandBuffer, const VkSubpassEndInfo*);
+ void (VKAPI_PTR *CmdNextSubpass2KHR)(VkCommandBuffer, const VkSubpassBeginInfo*, const VkSubpassEndInfo*);
+ VkResult (VKAPI_PTR *CreateRenderPass2KHR)(VkDevice, const VkRenderPassCreateInfo2*, const VkAllocationCallbacks*, VkRenderPass*);
+
/* VK_KHR_descriptor_update_template */
VkResult (VKAPI_PTR *CreateDescriptorUpdateTemplateKHR)(VkDevice, const VkDescriptorUpdateTemplateCreateInfo*, const VkAllocationCallbacks*, VkDescriptorUpdateTemplate*);
@@ -4110,6 +4451,11 @@ struct FlextVkDevice {
/* VK_KHR_device_group_creation */
+ /* VK_KHR_draw_indirect_count */
+
+ void (VKAPI_PTR *CmdDrawIndexedIndirectCountKHR)(VkCommandBuffer, VkBuffer, VkDeviceSize, VkBuffer, VkDeviceSize, uint32_t, uint32_t);
+ void (VKAPI_PTR *CmdDrawIndirectCountKHR)(VkCommandBuffer, VkBuffer, VkDeviceSize, VkBuffer, VkDeviceSize, uint32_t, uint32_t);
+
/* VK_KHR_external_fence_capabilities */
@@ -4141,6 +4487,12 @@ struct FlextVkDevice {
VkResult (VKAPI_PTR *CreateSamplerYcbcrConversionKHR)(VkDevice, const VkSamplerYcbcrConversionCreateInfo*, const VkAllocationCallbacks*, VkSamplerYcbcrConversion*);
void (VKAPI_PTR *DestroySamplerYcbcrConversionKHR)(VkDevice, VkSamplerYcbcrConversion, const VkAllocationCallbacks*);
+ /* VK_KHR_timeline_semaphore */
+
+ VkResult (VKAPI_PTR *GetSemaphoreCounterValueKHR)(VkDevice, VkSemaphore, uint64_t*);
+ VkResult (VKAPI_PTR *SignalSemaphoreKHR)(VkDevice, const VkSemaphoreSignalInfo*);
+ VkResult (VKAPI_PTR *WaitSemaphoresKHR)(VkDevice, const VkSemaphoreWaitInfo*, uint64_t);
+
/* VK_VERSION_1_0 */
VkResult (VKAPI_PTR *AllocateCommandBuffers)(VkDevice, const VkCommandBufferAllocateInfo*, VkCommandBuffer*);
diff --git a/src/MagnumExternal/Vulkan/flextVkGlobal.h b/src/MagnumExternal/Vulkan/flextVkGlobal.h
index 14eb61603..11aed5a6a 100644
--- a/src/MagnumExternal/Vulkan/flextVkGlobal.h
+++ b/src/MagnumExternal/Vulkan/flextVkGlobal.h
@@ -36,9 +36,33 @@ extern "C" {
/* Per-instance function pointers */
extern FLEXTVK_EXPORT FlextVkInstance flextVkInstance;
+/* VK_EXT_debug_marker */
+
+
+/* VK_EXT_debug_report */
+
+#define vkCreateDebugReportCallbackEXT flextVkInstance.CreateDebugReportCallbackEXT
+#define vkDebugReportMessageEXT flextVkInstance.DebugReportMessageEXT
+#define vkDestroyDebugReportCallbackEXT flextVkInstance.DestroyDebugReportCallbackEXT
+
+/* VK_EXT_debug_utils */
+
+#define vkCreateDebugUtilsMessengerEXT flextVkInstance.CreateDebugUtilsMessengerEXT
+#define vkDestroyDebugUtilsMessengerEXT flextVkInstance.DestroyDebugUtilsMessengerEXT
+#define vkSubmitDebugUtilsMessageEXT flextVkInstance.SubmitDebugUtilsMessageEXT
+
+/* VK_EXT_host_query_reset */
+
+
/* VK_KHR_bind_memory2 */
+/* VK_KHR_buffer_device_address */
+
+
+/* VK_KHR_create_renderpass2 */
+
+
/* VK_KHR_descriptor_update_template */
@@ -49,6 +73,9 @@ extern FLEXTVK_EXPORT FlextVkInstance flextVkInstance;
#define vkEnumeratePhysicalDeviceGroupsKHR flextVkInstance.EnumeratePhysicalDeviceGroupsKHR
+/* VK_KHR_draw_indirect_count */
+
+
/* VK_KHR_external_fence_capabilities */
#define vkGetPhysicalDeviceExternalFencePropertiesKHR flextVkInstance.GetPhysicalDeviceExternalFencePropertiesKHR
@@ -83,12 +110,14 @@ extern FLEXTVK_EXPORT FlextVkInstance flextVkInstance;
/* VK_KHR_sampler_ycbcr_conversion */
+/* VK_KHR_timeline_semaphore */
+
+
/* VK_VERSION_1_0 */
#define vkCreateDevice flextVkInstance.CreateDevice
#define vkDestroyInstance flextVkInstance.DestroyInstance
#define vkEnumerateDeviceExtensionProperties flextVkInstance.EnumerateDeviceExtensionProperties
-#define vkEnumerateDeviceLayerProperties flextVkInstance.EnumerateDeviceLayerProperties
#define vkEnumeratePhysicalDevices flextVkInstance.EnumeratePhysicalDevices
#define vkGetDeviceProcAddr flextVkInstance.GetDeviceProcAddr
#define vkGetPhysicalDeviceFeatures flextVkInstance.GetPhysicalDeviceFeatures
@@ -119,11 +148,50 @@ extern FLEXTVK_EXPORT FlextVkInstance flextVkInstance;
/* Per-device function pointers */
extern FLEXTVK_EXPORT FlextVkDevice flextVkDevice;
+/* VK_EXT_debug_marker */
+
+#define vkCmdDebugMarkerBeginEXT flextVkDevice.CmdDebugMarkerBeginEXT
+#define vkCmdDebugMarkerEndEXT flextVkDevice.CmdDebugMarkerEndEXT
+#define vkCmdDebugMarkerInsertEXT flextVkDevice.CmdDebugMarkerInsertEXT
+#define vkDebugMarkerSetObjectNameEXT flextVkDevice.DebugMarkerSetObjectNameEXT
+#define vkDebugMarkerSetObjectTagEXT flextVkDevice.DebugMarkerSetObjectTagEXT
+
+/* VK_EXT_debug_report */
+
+
+/* VK_EXT_debug_utils */
+
+#define vkCmdBeginDebugUtilsLabelEXT flextVkDevice.CmdBeginDebugUtilsLabelEXT
+#define vkCmdEndDebugUtilsLabelEXT flextVkDevice.CmdEndDebugUtilsLabelEXT
+#define vkCmdInsertDebugUtilsLabelEXT flextVkDevice.CmdInsertDebugUtilsLabelEXT
+#define vkQueueBeginDebugUtilsLabelEXT flextVkDevice.QueueBeginDebugUtilsLabelEXT
+#define vkQueueEndDebugUtilsLabelEXT flextVkDevice.QueueEndDebugUtilsLabelEXT
+#define vkQueueInsertDebugUtilsLabelEXT flextVkDevice.QueueInsertDebugUtilsLabelEXT
+#define vkSetDebugUtilsObjectNameEXT flextVkDevice.SetDebugUtilsObjectNameEXT
+#define vkSetDebugUtilsObjectTagEXT flextVkDevice.SetDebugUtilsObjectTagEXT
+
+/* VK_EXT_host_query_reset */
+
+#define vkResetQueryPoolEXT flextVkDevice.ResetQueryPoolEXT
+
/* VK_KHR_bind_memory2 */
#define vkBindBufferMemory2KHR flextVkDevice.BindBufferMemory2KHR
#define vkBindImageMemory2KHR flextVkDevice.BindImageMemory2KHR
+/* VK_KHR_buffer_device_address */
+
+#define vkGetBufferDeviceAddressKHR flextVkDevice.GetBufferDeviceAddressKHR
+#define vkGetBufferOpaqueCaptureAddressKHR flextVkDevice.GetBufferOpaqueCaptureAddressKHR
+#define vkGetDeviceMemoryOpaqueCaptureAddressKHR flextVkDevice.GetDeviceMemoryOpaqueCaptureAddressKHR
+
+/* VK_KHR_create_renderpass2 */
+
+#define vkCmdBeginRenderPass2KHR flextVkDevice.CmdBeginRenderPass2KHR
+#define vkCmdEndRenderPass2KHR flextVkDevice.CmdEndRenderPass2KHR
+#define vkCmdNextSubpass2KHR flextVkDevice.CmdNextSubpass2KHR
+#define vkCreateRenderPass2KHR flextVkDevice.CreateRenderPass2KHR
+
/* VK_KHR_descriptor_update_template */
#define vkCreateDescriptorUpdateTemplateKHR flextVkDevice.CreateDescriptorUpdateTemplateKHR
@@ -139,6 +207,11 @@ extern FLEXTVK_EXPORT FlextVkDevice flextVkDevice;
/* VK_KHR_device_group_creation */
+/* VK_KHR_draw_indirect_count */
+
+#define vkCmdDrawIndexedIndirectCountKHR flextVkDevice.CmdDrawIndexedIndirectCountKHR
+#define vkCmdDrawIndirectCountKHR flextVkDevice.CmdDrawIndirectCountKHR
+
/* VK_KHR_external_fence_capabilities */
@@ -170,6 +243,12 @@ extern FLEXTVK_EXPORT FlextVkDevice flextVkDevice;
#define vkCreateSamplerYcbcrConversionKHR flextVkDevice.CreateSamplerYcbcrConversionKHR
#define vkDestroySamplerYcbcrConversionKHR flextVkDevice.DestroySamplerYcbcrConversionKHR
+/* VK_KHR_timeline_semaphore */
+
+#define vkGetSemaphoreCounterValueKHR flextVkDevice.GetSemaphoreCounterValueKHR
+#define vkSignalSemaphoreKHR flextVkDevice.SignalSemaphoreKHR
+#define vkWaitSemaphoresKHR flextVkDevice.WaitSemaphoresKHR
+
/* VK_VERSION_1_0 */
#define vkAllocateCommandBuffers flextVkDevice.AllocateCommandBuffers