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