From 7bdf0feba114b671f51f2516fd8c159770021cf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 17 Dec 2020 13:13:26 +0100 Subject: [PATCH] Vk: expose the new RT extensions. Enabling them in the Vulkan header, function pointer loader, extension lists and feature queries / setup: - KHR_acceleration_structure - KHR_deferred_host_operations - KHR_pipeline_library - KHR_ray_tracing_pipeline - KHR_ray_query --- doc/vulkan-mapping.dox | 60 +- doc/vulkan-support.dox | 5 + src/Magnum/Vk/BufferCreateInfo.h | 1 + src/Magnum/Vk/Device.cpp | 11 +- src/Magnum/Vk/DeviceFeatures.h | 102 +++- src/Magnum/Vk/DeviceProperties.cpp | 6 + src/Magnum/Vk/Extensions.cpp | 5 + src/Magnum/Vk/Extensions.h | 37 +- src/Magnum/Vk/Implementation/DeviceFeatures.h | 3 + .../Implementation/deviceFeatureMapping.hpp | 18 + src/MagnumExternal/Vulkan/extensions.txt | 5 + src/MagnumExternal/Vulkan/flextVk.cpp | 28 + src/MagnumExternal/Vulkan/flextVk.h | 519 +++++++++++++++++- src/MagnumExternal/Vulkan/flextVkGlobal.h | 46 ++ 14 files changed, 802 insertions(+), 44 deletions(-) diff --git a/doc/vulkan-mapping.dox b/doc/vulkan-mapping.dox index ea157a339..89180a174 100644 --- a/doc/vulkan-mapping.dox +++ b/doc/vulkan-mapping.dox @@ -65,6 +65,7 @@ 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** | @ref Buffer::bindMemory() @fn_vk{BindImageMemory}, \n @fn_vk{BindImageMemory2} @m_class{m-label m-flat m-success} **KHR, 1.1** | @ref Image::bindMemory() +@fn_vk{BuildAccelerationStructuresKHR} @m_class{m-label m-flat m-warning} **KHR** | | @subsection vulkan-mapping-functions-c C @@ -80,13 +81,18 @@ Vulkan function | Matching API @fn_vk{CmdBindPipeline} | | @fn_vk{CmdBindVertexBuffers} | | @fn_vk{CmdBlitImage} | | +@fn_vk{CmdBuildAccelerationStructuresIndirectKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@fn_vk{CmdBuildAccelerationStructuresKHR} @m_class{m-label m-flat m-warning} **KHR** | | @fn_vk{CmdClearAttachments} | | @fn_vk{CmdClearColorImage} | | @fn_vk{CmdClearDepthStencilImage} | | +@fn_vk{CmdCopyAccelerationStructureKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@fn_vk{CmdCopyAccelerationStructureToMemoryKHR} @m_class{m-label m-flat m-warning} **KHR** | | @fn_vk{CmdCopyBuffer} | | @fn_vk{CmdCopyBufferToImage} | | @fn_vk{CmdCopyImage} | | @fn_vk{CmdCopyImageToBuffer} | | +@fn_vk{CmdCopyMemoryToAccelerationStructureKHR} @m_class{m-label m-flat m-warning} **KHR** | | @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** | | @@ -114,20 +120,30 @@ Vulkan function | Matching API @fn_vk{CmdSetDepthBounds} | | @fn_vk{CmdSetEvent} | | @fn_vk{CmdSetLineWidth} | | +@fn_vk{CmdSetRayTracingPipelineStackSizeKHR} @m_class{m-label m-flat m-warning} **KHR** | | @fn_vk{CmdSetScissor} | | @fn_vk{CmdSetStencilCompareMask} | | @fn_vk{CmdSetStencilReference} | | @fn_vk{CmdSetStencilWriteMask} | | @fn_vk{CmdSetViewport} | | +@fn_vk{CmdTraceRaysIndirectKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@fn_vk{CmdTraceRaysKHR} @m_class{m-label m-flat m-warning} **KHR** | | @fn_vk{CmdUpdateBuffer} | | @fn_vk{CmdWaitEvents} | | +@fn_vk{CmdWriteAccelerationStructuresPropertiesKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@fn_vk{CmdBuildAccelerationStructuresIndirectKHR} @m_class{m-label m-flat m-warning} **KHR** | | @fn_vk{CmdWriteTimestamp} | | +@fn_vk{CopyAccelerationStructureKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@fn_vk{CopyAccelerationStructureToMemoryKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@fn_vk{CopyMemoryToAccelerationStructureKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@fn_vk{CreateAccelerationStructureKHR} @m_class{m-label m-flat m-warning} **KHR**, \n @fn_vk{DestroyAccelerationStructureKHR} @m_class{m-label m-flat m-warning} **KHR** | | @fn_vk{CreateBuffer}, \n @fn_vk{DestroyBuffer} | @ref Buffer constructor and destructor @fn_vk{CreateBufferView}, \n @fn_vk{DestroyBufferView} | | @fn_vk{CreateCommandPool}, \n @fn_vk{DestroyCommandPool} | @ref CommandPool constructor and destructor @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{CreateDeferredOperationKHR} @m_class{m-label m-flat m-warning} **KHR**, \n @fn_vk{DestroyDeferredOperationKHR} @m_class{m-label m-flat m-warning} **KHR** | | @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** | | @@ -142,6 +158,7 @@ Vulkan function | Matching API @fn_vk{CreatePipelineCache}, \n @fn_vk{DestroyPipelineCache} | | @fn_vk{CreatePipelineLayout}, \n @fn_vk{DestroyPipelineLayout} | | @fn_vk{CreateQueryPool}, \n @fn_vk{DestroyQueryPool} | | +@fn_vk{CreateRayTracingPipelinesKHR} @m_class{m-label m-flat m-warning} **KHR** | | @fn_vk{CreateRenderPass}, \n @fn_vk{CreateRenderPass2} @m_class{m-label m-flat m-success} **KHR, 1.2**, \n @fn_vk{DestroyRenderPass} | @ref RenderPass constructor and destructor @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** | | @@ -158,6 +175,7 @@ Vulkan function | Matching API @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** | | +@fn_vk{DeferredOperationJoinKHR} @m_class{m-label m-flat m-warning} **KHR** | | @subsection vulkan-mapping-functions-e E @@ -187,13 +205,18 @@ Vulkan function | Matching API Vulkan function | Matching API --------------------------------------- | ------------ +@fn_vk{GetAccelerationStructureBuildSizesKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@fn_vk{GetAccelerationStructureDeviceAddressKHR} @m_class{m-label m-flat m-warning} **KHR** | | @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** | @ref Buffer::memoryRequirements() +@fn_vk{GetDeferredOperationMaxConcurrencyKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@fn_vk{GetDeferredOperationResultKHR} @m_class{m-label m-flat m-warning} **KHR** | | @fn_vk{GetDescriptorSetLayoutSupport} @m_class{m-label m-flat m-success} **KHR, 1.1** | | +@fn_vk{GetDeviceAccelerationStructureCompatibilityKHR} @m_class{m-label m-flat m-warning} **KHR** | | @fn_vk{GetDeviceGroupPeerMemoryFeatures} @m_class{m-label m-flat m-success} **KHR, 1.1** | | @fn_vk{GetDeviceMemoryCommitment} | | +@fn_vk{GetDeviceMemoryOpaqueCaptureAddress} @m_class{m-label m-flat m-success} **KHR, 1.2** | | @fn_vk{GetDeviceProcAddr} | @ref Device constructor @fn_vk{GetDeviceQueue}, \n @fn_vk{GetDeviceQueue2} @m_class{m-label m-flat m-success} **1.1** | @ref Device constructor @fn_vk{GetEventStatus} | | @@ -213,6 +236,9 @@ Vulkan function | Matching API @fn_vk{GetPhysicalDeviceQueueFamilyProperties}, \n @fn_vk{GetPhysicalDeviceQueueFamilyProperties2} @m_class{m-label m-flat m-success} **KHR, 1.1** | @ref DeviceProperties::queueFamilyProperties() @fn_vk{GetPhysicalDeviceSparseImageFormatProperties}, \n @fn_vk{GetPhysicalDeviceSparseImageFormatProperties2} @m_class{m-label m-flat m-success} **KHR, 1.1** | | @fn_vk{GetPipelineCacheData} | | +@fn_vk{GetRayTracingCaptureReplayShaderGroupHandlesKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@fn_vk{GetRayTracingShaderGroupHandlesKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@fn_vk{GetRayTracingShaderGroupStackSizeKHR} @m_class{m-label m-flat m-warning} **KHR** | | @fn_vk{GetQueryPoolResults} | | @fn_vk{GetRenderAreaGranularity} | | @fn_vk{GetSemaphoreCounterValue} @m_class{m-label m-flat m-success} **KHR, 1.2** | | @@ -294,6 +320,7 @@ Vulkan function | Matching API Vulkan function | Matching API --------------------------------------- | ------------ @fn_vk{WaitForFences} | | +@fn_vk{WriteAccelerationStructuresPropertiesKHR} @m_class{m-label m-flat m-warning} **KHR** | | @section vulkan-mapping-structures Structures @@ -303,6 +330,19 @@ Vulkan function | Matching API Vulkan structure | Matching API --------------------------------------- | ------------ +@type_vk{AabbPositionsKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@type_vk{AccelerationStructureBuildGeometryInfoKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@type_vk{AccelerationStructureBuildRangeInfoKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@type_vk{AccelerationStructureBuildSizesInfoKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@type_vk{AccelerationStructureCreateInfoKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@type_vk{AccelerationStructureDeviceAddressInfoKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@type_vk{AccelerationStructureGeometryAabbsDataKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@type_vk{AccelerationStructureGeometryDataKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@type_vk{AccelerationStructureGeometryInstancesDataKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@type_vk{AccelerationStructureGeometryKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@type_vk{AccelerationStructureGeometryTrianglesDataKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@type_vk{AccelerationStructureInstanceKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@type_vk{AccelerationStructureVersionInfoKHR} @m_class{m-label m-flat m-warning} **KHR** | | @type_vk{AllocationCallbacks} | intentionally @ref vulkan-wrapping-host-allocation "not exposed" @type_vk{ApplicationInfo} | @ref InstanceCreateInfo @type_vk{AttachmentDescription}, \n @type_vk{AttachmentDescription2} @m_class{m-label m-flat m-success} **KHR, 1.2** | @ref AttachmentDescription @@ -351,6 +391,9 @@ Vulkan structure | Matching API @type_vk{ComponentMapping} | | @type_vk{ComputePipelineCreateInfo} | | @type_vk{ConformanceVersion} | | +@type_vk{CopyAccelerationStructureInfoKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@type_vk{CopyAccelerationStructureToMemoryInfoKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@type_vk{CopyMemoryToAccelerationStructureInfoKHR} @m_class{m-label m-flat m-warning} **KHR** | | @type_vk{CopyDescriptorSet} | | @subsection vulkan-mapping-structures-d D @@ -382,6 +425,8 @@ Vulkan structure | Matching API @type_vk{DescriptorSetVariableDescriptorCountLayoutSupport} @m_class{m-label m-flat m-success} **EXT, 1.2** | | @type_vk{DescriptorUpdateTemplateEntry} @m_class{m-label m-flat m-success} **KHR, 1.1** | | @type_vk{DescriptorUpdateTemplateCreateInfo} @m_class{m-label m-flat m-success} **KHR, 1.1** | | +@type_vk{DeviceOrHostAddressConstKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@type_vk{DeviceOrHostAddressKHR} @m_class{m-label m-flat m-warning} **KHR** | | @type_vk{DeviceCreateInfo} | @ref DeviceCreateInfo @type_vk{DeviceGroupBindSparseInfo} @m_class{m-label m-flat m-success} **KHR, 1.1** | | @type_vk{DeviceGroupCommandBufferBeginInfo} @m_class{m-label m-flat m-success} **KHR, 1.1** | | @@ -501,6 +546,8 @@ Vulkan structure | Matching API --------------------------------------- | ------------ @type_vk{PhysicalDevice8bitStorageFeatures} @m_class{m-label m-flat m-success} **KHR, 1.2** | @ref DeviceFeatures @type_vk{PhysicalDevice16bitStorageFeatures} @m_class{m-label m-flat m-success} **KHR, 1.1** | @ref DeviceFeatures +@type_vk{PhysicalDeviceAccelerationStructureFeaturesKHR} @m_class{m-label m-flat m-warning} **KHR** | @ref DeviceFeatures +@type_vk{PhysicalDeviceAccelerationStructurePropertiesKHR} @m_class{m-label m-flat m-warning} **KHR** | | @type_vk{PhysicalDeviceBufferDeviceAddressFeatures} @m_class{m-label m-flat m-success} **KHR, 1.2** | @ref DeviceFeatures @type_vk{PhysicalDeviceDepthStencilResolveProperties} @m_class{m-label m-flat m-success} **KHR, 1.2** | | @type_vk{PhysicalDeviceDescriptorIndexingFeatures} @m_class{m-label m-flat m-success} **EXT, 1.2** | @ref DeviceFeatures @@ -528,6 +575,9 @@ Vulkan structure | Matching API @type_vk{PhysicalDeviceProperties}, \n @type_vk{PhysicalDeviceProperties2} @m_class{m-label m-flat m-success} **KHR, 1.1** | @ref DeviceProperties @type_vk{PhysicalDeviceProtectedMemoryFeatures} @m_class{m-label m-flat m-success} **1.1** | @ref DeviceFeatures @type_vk{PhysicalDeviceProtectedMemoryProperties} @m_class{m-label m-flat m-success} **1.1** | | +@type_vk{PhysicalDeviceRayQueryFeaturesKHR} @m_class{m-label m-flat m-warning} **KHR** | @ref DeviceFeatures +@type_vk{PhysicalDeviceRayTracingPipelineFeaturesKHR} @m_class{m-label m-flat m-warning} **KHR** | @ref DeviceFeatures +@type_vk{PhysicalDeviceRayTracingPipelinePropertiesKHR} @m_class{m-label m-flat m-warning} **KHR** | | @type_vk{PhysicalDeviceSamplerFilterMinmaxProperties} @m_class{m-label m-flat m-success} **EXT, 1.2** | | @type_vk{PhysicalDeviceSamplerYcbcrConversionFeatures} @m_class{m-label m-flat m-success} **KHR, 1.1** | @ref DeviceFeatures @type_vk{PhysicalDeviceSeparateDepthStencilLayoutsFeatures} @m_class{m-label m-flat m-success} **KHR, 1.2** | @ref DeviceFeatures @@ -555,6 +605,7 @@ Vulkan structure | Matching API @type_vk{PipelineDynamicStateCreateInfo} | | @type_vk{PipelineInputAssemblyStateCreateInfo} | | @type_vk{PipelineLayoutCreateInfo} | | +@type_vk{PipelineLibraryCreateInfoKHR} @m_class{m-label m-flat m-warning} **KHR** | | @type_vk{PipelineMultisampleStateCreateInfo} | | @type_vk{PipelineRasterizationStateCreateInfo} | | @type_vk{PipelineShaderStageCreateInfo} | | @@ -580,6 +631,9 @@ Vulkan structure | Matching API Vulkan structure | Matching API --------------------------------------- | ------------ +@type_vk{RayTracingPipelineCreateInfoKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@type_vk{RayTracingPipelineInterfaceCreateInfoKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@type_vk{RayTracingShaderGroupCreateInfoKHR} @m_class{m-label m-flat m-warning} **KHR** | | @type_vk{Rect2D} | convertible from/to @ref Range2Di using @ref Magnum/Vk/Integration.h @type_vk{RenderPassBeginInfo} | | @type_vk{RenderPassAttachmentBeginInfo} @m_class{m-label m-flat m-success} **KHR, 1.2** | | @@ -613,6 +667,7 @@ Vulkan structure | Matching API @type_vk{SpecializationInfo} | | @type_vk{SpecializationMapEntry} | | @type_vk{StencilOpState} | | +@type_vk{StridedDeviceAddressRegionKHR} @m_class{m-label m-flat m-warning} **KHR** | | @type_vk{SubmitInfo} | | @type_vk{SubpassBeginInfo} @m_class{m-label m-flat m-success} **KHR, 1.2** | | @type_vk{SubpassEndInfo} @m_class{m-label m-flat m-success} **KHR, 1.2** | | @@ -628,6 +683,8 @@ Vulkan structure | Matching API Vulkan structure | Matching API --------------------------------------- | ------------ @type_vk{TimelineSemaphoreSubmitInfo} @m_class{m-label m-flat m-success} **KHR, 1.2** | | +@type_vk{TraceRaysIndirectCommandKHR} @m_class{m-label m-flat m-warning} **KHR** | | +@type_vk{TransformMatrixKHR} @m_class{m-label m-flat m-warning} **KHR** | | @subsection vulkan-mapping-structures-v V @@ -647,6 +704,7 @@ Vulkan structure | Matching API Vulkan structure | Matching API --------------------------------------- | ------------ @type_vk{WriteDescriptorSet} | | +@type_vk{WriteDescriptorSetAccelerationStructureKHR} @m_class{m-label m-flat m-warning} **KHR** | | */ diff --git a/doc/vulkan-support.dox b/doc/vulkan-support.dox index 36dbbef2a..f0361512a 100644 --- a/doc/vulkan-support.dox +++ b/doc/vulkan-support.dox @@ -121,6 +121,11 @@ Extension | Status @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} | @ref Vk::vkIndexType() only +@vk_extension{KHR,acceleration_structure} | | +@vk_extension{KHR,deferred_host_operations} | | +@vk_extension{KHR,pipeline_library} | | +@vk_extension{KHR,ray_tracing_pipeline} | | +@vk_extension{KHR,ray_query} | | @vk_extension{IMG,format_pvrtc} | @ref Vk::vkFormat() only */ diff --git a/src/Magnum/Vk/BufferCreateInfo.h b/src/Magnum/Vk/BufferCreateInfo.h index 04ba371a5..aed74a979 100644 --- a/src/Magnum/Vk/BufferCreateInfo.h +++ b/src/Magnum/Vk/BufferCreateInfo.h @@ -77,6 +77,7 @@ enum class BufferUsage: UnsignedInt { IndirectBuffer = VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, /** @todo VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, 1.2 */ + /** @todo RT-related usages */ }; /** diff --git a/src/Magnum/Vk/Device.cpp b/src/Magnum/Vk/Device.cpp index 45bc29781..021a6aef9 100644 --- a/src/Magnum/Vk/Device.cpp +++ b/src/Magnum/Vk/Device.cpp @@ -342,6 +342,7 @@ DeviceCreateInfo& DeviceCreateInfo::setEnabledFeatures(const DeviceFeatures& fea _state->features._16BitStorage, _state->features.imagelessFramebuffer, _state->features.variablePointers, + _state->features.accelerationStructure, _state->features.samplerYcbcrConversion, _state->features.descriptorIndexing, _state->features.shaderSubgroupExtendedTypes, @@ -354,7 +355,9 @@ DeviceCreateInfo& DeviceCreateInfo::setEnabledFeatures(const DeviceFeatures& fea _state->features.uniformBufferStandardLayout, _state->features.bufferDeviceAddress, _state->features.hostQueryReset, - _state->features.indexTypeUint8 + _state->features.indexTypeUint8, + _state->features.rayTracingPipeline, + _state->features.rayQuery }); _state->firstEnabledFeature = {}; @@ -440,6 +443,8 @@ DeviceCreateInfo& DeviceCreateInfo::setEnabledFeatures(const DeviceFeatures& fea _state->features.imagelessFramebuffer, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES); structureConnectIfUsed(next, _state->firstEnabledFeature, _state->features.variablePointers, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES); + structureConnectIfUsed(next, _state->firstEnabledFeature, + _state->features.accelerationStructure, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR); structureConnectIfUsed(next, _state->firstEnabledFeature, _state->features.samplerYcbcrConversion, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES); structureConnectIfUsed(next, _state->firstEnabledFeature, @@ -466,6 +471,10 @@ DeviceCreateInfo& DeviceCreateInfo::setEnabledFeatures(const DeviceFeatures& fea _state->features.hostQueryReset, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES); structureConnectIfUsed(next, _state->firstEnabledFeature, _state->features.indexTypeUint8, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT); + structureConnectIfUsed(next, _state->firstEnabledFeature, + _state->features.rayTracingPipeline, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR); + structureConnectIfUsed(next, _state->firstEnabledFeature, + _state->features.rayQuery, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR); return *this; } diff --git a/src/Magnum/Vk/DeviceFeatures.h b/src/Magnum/Vk/DeviceFeatures.h index 9c1687fe9..569c472a1 100644 --- a/src/Magnum/Vk/DeviceFeatures.h +++ b/src/Magnum/Vk/DeviceFeatures.h @@ -530,6 +530,46 @@ enum class DeviceFeature: UnsignedShort { */ VariablePointers, + /* VkPhysicalDeviceAccelerationStructureFeaturesKHR, #151 */ + + /** + * Whether acceleration structure functionality is supported. + * @requires_vk_extension Extension @vk_extension{KHR,acceleration_structure} + */ + AccelerationStructure, + + /** + * Whether saving and reusing acceleration structure devices for trace + * capture and replay is supported. + * @requires_vk_extension Extension @vk_extension{KHR,acceleration_structure} + */ + AccelerationStructureCaptureReplay, + + /** + * Whether indirect acceleration structure builds are supported. + * @requires_vk_extension Extension @vk_extension{KHR,acceleration_structure} + */ + AccelerationStructureIndirectBuild, + + /** + * Whether host-side acceleration structure commands are supported. + * @requires_vk_extension Extension @vk_extension{KHR,acceleration_structure} + */ + AccelerationStructureHostCommands, + + /** + * Whether acceleration structure descriptors can be updated after a set is + * bound. + * @see @ref DeviceFeature::DescriptorBindingUniformBufferUpdateAfterBind, + * @ref DeviceFeature::DescriptorBindingSampledImageUpdateAfterBind, + * @ref DeviceFeature::DescriptorBindingStorageImageUpdateAfterBind, + * @ref DeviceFeature::DescriptorBindingStorageBufferUpdateAfterBind, + * @ref DeviceFeature::DescriptorBindingUniformTexelBufferUpdateAfterBind, + * @ref DeviceFeature::DescriptorBindingStorageTexelBufferUpdateAfterBind + * @requires_vk_extension Extension @vk_extension{KHR,acceleration_structure} + */ + DescriptorBindingAccelerationStructureUpdateAfterBind, + /* VkPhysicalDeviceSamplerYcbcrConversionFeatures, #157 */ /** @@ -742,7 +782,8 @@ enum class DeviceFeature: UnsignedShort { /** * Whether uniform buffer descriptors can be updated after a set is bound. - * @see @ref DeviceFeature::DescriptorBindingSampledImageUpdateAfterBind, + * @see @ref DeviceFeature::DescriptorBindingAccelerationStructureUpdateAfterBind, + * @ref DeviceFeature::DescriptorBindingSampledImageUpdateAfterBind, * @ref DeviceFeature::DescriptorBindingStorageImageUpdateAfterBind, * @ref DeviceFeature::DescriptorBindingStorageBufferUpdateAfterBind, * @ref DeviceFeature::DescriptorBindingUniformTexelBufferUpdateAfterBind, @@ -753,7 +794,8 @@ enum class DeviceFeature: UnsignedShort { /** * Whether sampled image descriptors can be updated after a set is bound. - * @see @ref DeviceFeature::DescriptorBindingUniformBufferUpdateAfterBind, + * @see @ref DeviceFeature::DescriptorBindingAccelerationStructureUpdateAfterBind, + * @ref DeviceFeature::DescriptorBindingUniformBufferUpdateAfterBind, * @ref DeviceFeature::DescriptorBindingStorageImageUpdateAfterBind, * @ref DeviceFeature::DescriptorBindingStorageBufferUpdateAfterBind, * @ref DeviceFeature::DescriptorBindingUniformTexelBufferUpdateAfterBind, @@ -764,7 +806,8 @@ enum class DeviceFeature: UnsignedShort { /** * Whether storage image descriptors can be updated after a set is bound. - * @see @ref DeviceFeature::DescriptorBindingUniformBufferUpdateAfterBind, + * @see @ref DeviceFeature::DescriptorBindingAccelerationStructureUpdateAfterBind, + * @ref DeviceFeature::DescriptorBindingUniformBufferUpdateAfterBind, * @ref DeviceFeature::DescriptorBindingSampledImageUpdateAfterBind, * @ref DeviceFeature::DescriptorBindingStorageBufferUpdateAfterBind, * @ref DeviceFeature::DescriptorBindingUniformTexelBufferUpdateAfterBind, @@ -775,7 +818,8 @@ enum class DeviceFeature: UnsignedShort { /** * Whether storage buffer descriptors can be updated after a set is bound. - * @see @ref DeviceFeature::DescriptorBindingUniformBufferUpdateAfterBind, + * @see @ref DeviceFeature::DescriptorBindingAccelerationStructureUpdateAfterBind, + * @ref DeviceFeature::DescriptorBindingUniformBufferUpdateAfterBind, * @ref DeviceFeature::DescriptorBindingSampledImageUpdateAfterBind, * @ref DeviceFeature::DescriptorBindingStorageImageUpdateAfterBind, * @ref DeviceFeature::DescriptorBindingUniformTexelBufferUpdateAfterBind, @@ -787,7 +831,8 @@ enum class DeviceFeature: UnsignedShort { /** * Whether uniform texel buffer descriptors can be updated after a set is * bound. - * @see @ref DeviceFeature::DescriptorBindingUniformBufferUpdateAfterBind, + * @see @ref DeviceFeature::DescriptorBindingAccelerationStructureUpdateAfterBind, + * @ref DeviceFeature::DescriptorBindingUniformBufferUpdateAfterBind, * @ref DeviceFeature::DescriptorBindingSampledImageUpdateAfterBind, * @ref DeviceFeature::DescriptorBindingStorageImageUpdateAfterBind, * @ref DeviceFeature::DescriptorBindingStorageBufferUpdateAfterBind, @@ -799,7 +844,8 @@ enum class DeviceFeature: UnsignedShort { /** * Whether storage texel buffer descriptors can be updated after a set is * bound. - * @see @ref DeviceFeature::DescriptorBindingUniformBufferUpdateAfterBind, + * @see @ref DeviceFeature::DescriptorBindingAccelerationStructureUpdateAfterBind, + * @ref DeviceFeature::DescriptorBindingUniformBufferUpdateAfterBind, * @ref DeviceFeature::DescriptorBindingSampledImageUpdateAfterBind, * @ref DeviceFeature::DescriptorBindingStorageImageUpdateAfterBind, * @ref DeviceFeature::DescriptorBindingStorageBufferUpdateAfterBind, @@ -1000,7 +1046,49 @@ enum class DeviceFeature: UnsignedShort { * @see @ref DeviceFeature::FullDrawIndexUint32 * @requires_vk_extension Extension @vk_extension{EXT,index_type_uint8} */ - IndexTypeUint8 + IndexTypeUint8, + + /* VkPhysicalDeviceRayTracingPipelineFeaturesKHR, #348 */ + + /** + * Whether ray tracing pipeline functionality is supported. + * @requires_vk_extension Extension @vk_extension{KHR,ray_tracing_pipeline} + */ + RayTracingPipeline, + + /** + * Whether saving and reusing shader group handles for trace capture and + * replay is supported. + * @requires_vk_extension Extension @vk_extension{KHR,ray_tracing_pipeline} + */ + RayTracingPipelineShaderGroupHandleCaptureReplay, + + /** + * Whether reused shader group handles can be arbitrarily mixed with + * creation of non-reused shader group handles. + * @requires_vk_extension Extension @vk_extension{KHR,ray_tracing_pipeline} + */ + RayTracingPipelineShaderGroupHandleCaptureReplayMixed, + + /** + * Whether indirect trace ray commands are supported. + * @requires_vk_extension Extension @vk_extension{KHR,ray_tracing_pipeline} + */ + RayTracingPipelineTraceRaysIndirect, + + /** + * Whether primitive culling during ray traversal is supported. + * @requires_vk_extension Extension @vk_extension{KHR,ray_tracing_pipeline} + */ + RayTraversalPrimitiveCulling, + + /* VkPhysicalDeviceRayQueryFeaturesKHR, #349 */ + + /** + * Whether ray query functionality is supported. + * @requires_vk_extension Extension @vk_extension{KHR,ray_query} + */ + RayQuery }; /** diff --git a/src/Magnum/Vk/DeviceProperties.cpp b/src/Magnum/Vk/DeviceProperties.cpp index 774ab50f5..aab422e16 100644 --- a/src/Magnum/Vk/DeviceProperties.cpp +++ b/src/Magnum/Vk/DeviceProperties.cpp @@ -303,6 +303,8 @@ const DeviceFeatures& DeviceProperties::features() { Implementation::structureConnect(next, features.imagelessFramebuffer, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES); if(isOrVersionSupportedInternal()) Implementation::structureConnect(next, features.variablePointers, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES); + if(isOrVersionSupportedInternal()) + Implementation::structureConnect(next, features.accelerationStructure, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR); if(isOrVersionSupportedInternal()) Implementation::structureConnect(next, features.samplerYcbcrConversion, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES); if(isOrVersionSupportedInternal()) @@ -329,6 +331,10 @@ const DeviceFeatures& DeviceProperties::features() { Implementation::structureConnect(next, features.hostQueryReset, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES); if(isOrVersionSupportedInternal()) Implementation::structureConnect(next, features.indexTypeUint8, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT); + if(isOrVersionSupportedInternal()) + Implementation::structureConnect(next, features.rayTracingPipeline, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR); + if(isOrVersionSupportedInternal()) + Implementation::structureConnect(next, features.rayQuery, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR); _state->getFeaturesImplementation(*this, features2); diff --git a/src/Magnum/Vk/Extensions.cpp b/src/Magnum/Vk/Extensions.cpp index 8d74b1b6a..f0745e81b 100644 --- a/src/Magnum/Vk/Extensions.cpp +++ b/src/Magnum/Vk/Extensions.cpp @@ -71,6 +71,11 @@ constexpr Extension DeviceExtensions[] { Extensions::EXT::index_type_uint8{}, Extensions::EXT::texture_compression_astc_hdr{}, Extensions::IMG::format_pvrtc{}, + Extensions::KHR::acceleration_structure{}, + Extensions::KHR::deferred_host_operations{}, + Extensions::KHR::pipeline_library{}, + Extensions::KHR::ray_query{}, + Extensions::KHR::ray_tracing_pipeline{}, }; constexpr Extension DeviceExtensions11[] { Extensions::KHR::_16bit_storage{}, diff --git a/src/Magnum/Vk/Extensions.h b/src/Magnum/Vk/Extensions.h index 46f6deb45..ae4c787e3 100644 --- a/src/Magnum/Vk/Extensions.h +++ b/src/Magnum/Vk/Extensions.h @@ -145,22 +145,27 @@ namespace EXT { _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,_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 + _extension(50, KHR,acceleration_structure, Vk11, None) // #151 + _extension(51, KHR,sampler_ycbcr_conversion, Vk10, Vk11) // #157 + _extension(52, KHR,bind_memory2, Vk10, Vk11) // #158 + _extension(53, KHR,maintenance3, Vk10, Vk11) // #169 + _extension(54, KHR,draw_indirect_count, Vk10, Vk12) // #170 + _extension(55, KHR,shader_subgroup_extended_types, Vk11, Vk12) // #176 + _extension_(56, KHR,8bit_storage,_8bit_storage, Vk10, Vk12) // #178 + _extension(57, KHR,shader_atomic_int64, Vk10, Vk12) // #181 + _extension(58, KHR,driver_properties, Vk10, Vk12) // #197 + _extension(59, KHR,shader_float_controls, Vk10, Vk12) // #198 + _extension(60, KHR,depth_stencil_resolve, Vk10, Vk12) // #200 + _extension(61, KHR,timeline_semaphore, Vk10, Vk12) // #208 + _extension(62, KHR,vulkan_memory_model, Vk10, Vk12) // #212 + _extension(63, KHR,spirv_1_4, Vk11, Vk12) // #237 + _extension(64, KHR,separate_depth_stencil_layouts, Vk10, Vk12) // #242 + _extension(65, KHR,uniform_buffer_standard_layout, Vk10, Vk12) // #254 + _extension(66, KHR,buffer_device_address, Vk10, Vk12) // #258 + _extension(67, KHR,deferred_host_operations, Vk10, None) // #259 + _extension(68, KHR,pipeline_library, Vk10, None) // #291 + _extension(69, KHR,ray_tracing_pipeline, Vk11, None) // #348 + _extension(70, KHR,ray_query, Vk11, None) // #349 } #undef _extension diff --git a/src/Magnum/Vk/Implementation/DeviceFeatures.h b/src/Magnum/Vk/Implementation/DeviceFeatures.h index ea4de0ef5..2ff86fc97 100644 --- a/src/Magnum/Vk/Implementation/DeviceFeatures.h +++ b/src/Magnum/Vk/Implementation/DeviceFeatures.h @@ -44,6 +44,7 @@ struct DeviceFeatures { VkPhysicalDevice16BitStorageFeatures _16BitStorage; VkPhysicalDeviceImagelessFramebufferFeatures imagelessFramebuffer; VkPhysicalDeviceVariablePointersFeatures variablePointers; + VkPhysicalDeviceAccelerationStructureFeaturesKHR accelerationStructure; VkPhysicalDeviceSamplerYcbcrConversionFeatures samplerYcbcrConversion; VkPhysicalDeviceDescriptorIndexingFeatures descriptorIndexing; VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures shaderSubgroupExtendedTypes; @@ -57,6 +58,8 @@ struct DeviceFeatures { VkPhysicalDeviceBufferDeviceAddressFeatures bufferDeviceAddress; VkPhysicalDeviceHostQueryResetFeatures hostQueryReset; VkPhysicalDeviceIndexTypeUint8FeaturesEXT indexTypeUint8; + VkPhysicalDeviceRayTracingPipelineFeaturesKHR rayTracingPipeline; + VkPhysicalDeviceRayQueryFeaturesKHR rayQuery; }; }}} diff --git a/src/Magnum/Vk/Implementation/deviceFeatureMapping.hpp b/src/Magnum/Vk/Implementation/deviceFeatureMapping.hpp index 4c5872434..04ff64754 100644 --- a/src/Magnum/Vk/Implementation/deviceFeatureMapping.hpp +++ b/src/Magnum/Vk/Implementation/deviceFeatureMapping.hpp @@ -122,6 +122,14 @@ _ce(VariablePointersStorageBuffer, variablePointersStorageBuffer) _ce(VariablePointers, variablePointers) #undef _ce +#define _ce(value, field) _cext(value, field, accelerationStructure, KHR::acceleration_structure) +_ce(AccelerationStructure, accelerationStructure) +_ce(AccelerationStructureCaptureReplay, accelerationStructureCaptureReplay) +_ce(AccelerationStructureIndirectBuild, accelerationStructureIndirectBuild) +_ce(AccelerationStructureHostCommands, accelerationStructureHostCommands) +_ce(DescriptorBindingAccelerationStructureUpdateAfterBind, descriptorBindingAccelerationStructureUpdateAfterBind) +#undef _ce + _cext(SamplerYcbcrConversion, samplerYcbcrConversion, samplerYcbcrConversion, KHR::sampler_ycbcr_conversion) #define _ce(value, field) _cext(value, field, descriptorIndexing, EXT::descriptor_indexing) @@ -183,4 +191,14 @@ _ce(BufferDeviceAddressMultiDevice, bufferDeviceAddressMultiDevice) _cext(HostQueryReset, hostQueryReset, hostQueryReset, EXT::host_query_reset) _cext(IndexTypeUint8, indexTypeUint8, indexTypeUint8, EXT::index_type_uint8) + +#define _ce(value, field) _cext(value, field, rayTracingPipeline, KHR::ray_tracing_pipeline) +_ce(RayTracingPipeline, rayTracingPipeline) +_ce(RayTracingPipelineShaderGroupHandleCaptureReplay, rayTracingPipelineShaderGroupHandleCaptureReplay) +_ce(RayTracingPipelineShaderGroupHandleCaptureReplayMixed, rayTracingPipelineShaderGroupHandleCaptureReplayMixed) +_ce(RayTracingPipelineTraceRaysIndirect, rayTracingPipelineTraceRaysIndirect) +_ce(RayTraversalPrimitiveCulling, rayTraversalPrimitiveCulling) +#undef _ce + +_cext(RayQuery, rayQuery, rayQuery, KHR::ray_query) #endif diff --git a/src/MagnumExternal/Vulkan/extensions.txt b/src/MagnumExternal/Vulkan/extensions.txt index a00871bc4..d10b5b654 100644 --- a/src/MagnumExternal/Vulkan/extensions.txt +++ b/src/MagnumExternal/Vulkan/extensions.txt @@ -63,6 +63,11 @@ extension EXT_validation_features optional extension EXT_texture_compression_astc_hdr optional extension EXT_index_type_uint8 optional extension IMG_format_pvrtc optional +extension KHR_acceleration_structure optional +extension KHR_deferred_host_operations optional +extension KHR_pipeline_library optional +extension KHR_ray_tracing_pipeline optional +extension KHR_ray_query optional begin functions blacklist # Deprecated since 1.0.13, not used diff --git a/src/MagnumExternal/Vulkan/flextVk.cpp b/src/MagnumExternal/Vulkan/flextVk.cpp index 2f332a15d..9533b7bfd 100644 --- a/src/MagnumExternal/Vulkan/flextVk.cpp +++ b/src/MagnumExternal/Vulkan/flextVk.cpp @@ -90,6 +90,22 @@ void flextVkInitDevice(VkDevice device, FlextVkDevice* data, PFN_vkVoidFunction( data->SetDebugUtilsObjectNameEXT = reinterpret_cast(getDeviceProcAddr(device, "vkSetDebugUtilsObjectNameEXT")); data->SetDebugUtilsObjectTagEXT = reinterpret_cast(getDeviceProcAddr(device, "vkSetDebugUtilsObjectTagEXT")); data->ResetQueryPoolEXT = reinterpret_cast(getDeviceProcAddr(device, "vkResetQueryPoolEXT")); + data->BuildAccelerationStructuresKHR = reinterpret_cast(getDeviceProcAddr(device, "vkBuildAccelerationStructuresKHR")); + data->CmdBuildAccelerationStructuresIndirectKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCmdBuildAccelerationStructuresIndirectKHR")); + data->CmdBuildAccelerationStructuresKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCmdBuildAccelerationStructuresKHR")); + data->CmdCopyAccelerationStructureKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCmdCopyAccelerationStructureKHR")); + data->CmdCopyAccelerationStructureToMemoryKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCmdCopyAccelerationStructureToMemoryKHR")); + data->CmdCopyMemoryToAccelerationStructureKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCmdCopyMemoryToAccelerationStructureKHR")); + data->CmdWriteAccelerationStructuresPropertiesKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCmdWriteAccelerationStructuresPropertiesKHR")); + data->CopyAccelerationStructureKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCopyAccelerationStructureKHR")); + data->CopyAccelerationStructureToMemoryKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCopyAccelerationStructureToMemoryKHR")); + data->CopyMemoryToAccelerationStructureKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCopyMemoryToAccelerationStructureKHR")); + data->CreateAccelerationStructureKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCreateAccelerationStructureKHR")); + data->DestroyAccelerationStructureKHR = reinterpret_cast(getDeviceProcAddr(device, "vkDestroyAccelerationStructureKHR")); + data->GetAccelerationStructureBuildSizesKHR = reinterpret_cast(getDeviceProcAddr(device, "vkGetAccelerationStructureBuildSizesKHR")); + data->GetAccelerationStructureDeviceAddressKHR = reinterpret_cast(getDeviceProcAddr(device, "vkGetAccelerationStructureDeviceAddressKHR")); + data->GetDeviceAccelerationStructureCompatibilityKHR = reinterpret_cast(getDeviceProcAddr(device, "vkGetDeviceAccelerationStructureCompatibilityKHR")); + data->WriteAccelerationStructuresPropertiesKHR = reinterpret_cast(getDeviceProcAddr(device, "vkWriteAccelerationStructuresPropertiesKHR")); data->BindBufferMemory2KHR = reinterpret_cast(getDeviceProcAddr(device, "vkBindBufferMemory2KHR")); data->BindImageMemory2KHR = reinterpret_cast(getDeviceProcAddr(device, "vkBindImageMemory2KHR")); data->GetBufferDeviceAddressKHR = reinterpret_cast(getDeviceProcAddr(device, "vkGetBufferDeviceAddressKHR")); @@ -99,6 +115,11 @@ void flextVkInitDevice(VkDevice device, FlextVkDevice* data, PFN_vkVoidFunction( data->CmdEndRenderPass2KHR = reinterpret_cast(getDeviceProcAddr(device, "vkCmdEndRenderPass2KHR")); data->CmdNextSubpass2KHR = reinterpret_cast(getDeviceProcAddr(device, "vkCmdNextSubpass2KHR")); data->CreateRenderPass2KHR = reinterpret_cast(getDeviceProcAddr(device, "vkCreateRenderPass2KHR")); + data->CreateDeferredOperationKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCreateDeferredOperationKHR")); + data->DeferredOperationJoinKHR = reinterpret_cast(getDeviceProcAddr(device, "vkDeferredOperationJoinKHR")); + data->DestroyDeferredOperationKHR = reinterpret_cast(getDeviceProcAddr(device, "vkDestroyDeferredOperationKHR")); + data->GetDeferredOperationMaxConcurrencyKHR = reinterpret_cast(getDeviceProcAddr(device, "vkGetDeferredOperationMaxConcurrencyKHR")); + data->GetDeferredOperationResultKHR = reinterpret_cast(getDeviceProcAddr(device, "vkGetDeferredOperationResultKHR")); data->CreateDescriptorUpdateTemplateKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCreateDescriptorUpdateTemplateKHR")); data->DestroyDescriptorUpdateTemplateKHR = reinterpret_cast(getDeviceProcAddr(device, "vkDestroyDescriptorUpdateTemplateKHR")); data->UpdateDescriptorSetWithTemplateKHR = reinterpret_cast(getDeviceProcAddr(device, "vkUpdateDescriptorSetWithTemplateKHR")); @@ -112,6 +133,13 @@ void flextVkInitDevice(VkDevice device, FlextVkDevice* data, PFN_vkVoidFunction( data->GetImageSparseMemoryRequirements2KHR = reinterpret_cast(getDeviceProcAddr(device, "vkGetImageSparseMemoryRequirements2KHR")); data->TrimCommandPoolKHR = reinterpret_cast(getDeviceProcAddr(device, "vkTrimCommandPoolKHR")); data->GetDescriptorSetLayoutSupportKHR = reinterpret_cast(getDeviceProcAddr(device, "vkGetDescriptorSetLayoutSupportKHR")); + data->CmdSetRayTracingPipelineStackSizeKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCmdSetRayTracingPipelineStackSizeKHR")); + data->CmdTraceRaysIndirectKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCmdTraceRaysIndirectKHR")); + data->CmdTraceRaysKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCmdTraceRaysKHR")); + data->CreateRayTracingPipelinesKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCreateRayTracingPipelinesKHR")); + data->GetRayTracingCaptureReplayShaderGroupHandlesKHR = reinterpret_cast(getDeviceProcAddr(device, "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR")); + data->GetRayTracingShaderGroupHandlesKHR = reinterpret_cast(getDeviceProcAddr(device, "vkGetRayTracingShaderGroupHandlesKHR")); + data->GetRayTracingShaderGroupStackSizeKHR = reinterpret_cast(getDeviceProcAddr(device, "vkGetRayTracingShaderGroupStackSizeKHR")); data->CreateSamplerYcbcrConversionKHR = reinterpret_cast(getDeviceProcAddr(device, "vkCreateSamplerYcbcrConversionKHR")); data->DestroySamplerYcbcrConversionKHR = reinterpret_cast(getDeviceProcAddr(device, "vkDestroySamplerYcbcrConversionKHR")); data->GetSemaphoreCounterValueKHR = reinterpret_cast(getDeviceProcAddr(device, "vkGetSemaphoreCounterValueKHR")); diff --git a/src/MagnumExternal/Vulkan/flextVk.h b/src/MagnumExternal/Vulkan/flextVk.h index 636630184..09c2df591 100644 --- a/src/MagnumExternal/Vulkan/flextVk.h +++ b/src/MagnumExternal/Vulkan/flextVk.h @@ -254,6 +254,47 @@ extern "C" { #define VK_IMG_FORMAT_PVRTC_SPEC_VERSION 1 #define VK_IMG_FORMAT_PVRTC_EXTENSION_NAME "VK_IMG_format_pvrtc" +/* VK_EXT_descriptor_indexing */ + +#define VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION 2 +#define VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME "VK_EXT_descriptor_indexing" + +/* VK_KHR_deferred_host_operations */ + +#define VK_KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION 4 +#define VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME "VK_KHR_deferred_host_operations" + +/* VK_KHR_acceleration_structure */ + +#define VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION 11 +#define VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME "VK_KHR_acceleration_structure" + +/* VK_KHR_pipeline_library */ + +#define VK_KHR_PIPELINE_LIBRARY_SPEC_VERSION 1 +#define VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME "VK_KHR_pipeline_library" + +/* VK_KHR_shader_float_controls */ + +#define VK_KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION 4 +#define VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME "VK_KHR_shader_float_controls" + +/* VK_KHR_spirv_1_4 */ + +#define VK_KHR_SPIRV_1_4_SPEC_VERSION 1 +#define VK_KHR_SPIRV_1_4_EXTENSION_NAME "VK_KHR_spirv_1_4" + +/* VK_KHR_ray_tracing_pipeline */ + +#define VK_KHR_RAY_TRACING_PIPELINE_SPEC_VERSION 1 +#define VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME "VK_KHR_ray_tracing_pipeline" +#define VK_SHADER_UNUSED_KHR (~0U) + +/* VK_KHR_ray_query */ + +#define VK_KHR_RAY_QUERY_SPEC_VERSION 1 +#define VK_KHR_RAY_QUERY_EXTENSION_NAME "VK_KHR_ray_query" + /* Data types */ #define VK_MAKE_VERSION(major, minor, patch) \ @@ -344,6 +385,9 @@ typedef VkFlags VkDescriptorPoolCreateFlags; typedef VkFlags VkDescriptorPoolResetFlags; typedef VkFlags VkDependencyFlags; typedef VkFlags VkSubgroupFeatureFlags; +typedef VkFlags VkGeometryFlagsKHR; +typedef VkFlags VkBuildAccelerationStructureFlagsKHR; +typedef VkFlags VkAccelerationStructureCreateFlagsKHR; typedef VkFlags VkDescriptorUpdateTemplateCreateFlags; typedef VkFlags VkSemaphoreWaitFlags; typedef VkFlags VkPeerMemoryFeatureFlags; @@ -397,6 +441,8 @@ typedef VkDescriptorUpdateTemplate VkDescriptorUpdateTemplateKHR; VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSamplerYcbcrConversion) typedef VkSamplerYcbcrConversion VkSamplerYcbcrConversionKHR; +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureKHR) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeferredOperationKHR) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugUtilsMessengerEXT) @@ -467,7 +513,8 @@ typedef int VkPipelineCacheCreateFlagBits; typedef int VkPipelineShaderStageCreateFlagBits; typedef enum { - VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT = 1 << 1 + VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT = 1 << 1, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT } VkDescriptorSetLayoutCreateFlagBits; typedef enum { @@ -494,7 +541,10 @@ typedef enum { 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_KHR = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT + VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, + VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR = 1 << 19, + VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR = 1 << 20, + VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR = 1 << 10 } VkBufferUsageFlagBits; typedef enum { @@ -568,7 +618,8 @@ typedef enum { VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = 7, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 8, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 9, - VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 10 + VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 10, + VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR = 1000150000 } VkDescriptorType; typedef enum { @@ -580,7 +631,8 @@ typedef enum { VK_DYNAMIC_STATE_DEPTH_BOUNDS = 5, VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 6, VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 7, - VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8 + VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8, + VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR = 1000347000 } VkDynamicState; typedef enum { @@ -903,7 +955,8 @@ typedef enum { VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT, VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT, VK_FORMAT_FEATURE_DISJOINT_BIT_KHR = VK_FORMAT_FEATURE_DISJOINT_BIT, - VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT + VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT, + VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR = 1 << 29 } VkFormatFeatureFlagBits; typedef enum { @@ -1006,7 +1059,8 @@ typedef enum { typedef enum { VK_INDEX_TYPE_UINT16 = 0, VK_INDEX_TYPE_UINT32 = 1, - VK_INDEX_TYPE_UINT8_EXT = 1000265000 + VK_INDEX_TYPE_UINT8_EXT = 1000265000, + VK_INDEX_TYPE_NONE_KHR = 1000165000 } VkIndexType; typedef enum { @@ -1051,7 +1105,9 @@ typedef enum { VK_ACCESS_HOST_READ_BIT = 1 << 13, VK_ACCESS_HOST_WRITE_BIT = 1 << 14, VK_ACCESS_MEMORY_READ_BIT = 1 << 15, - VK_ACCESS_MEMORY_WRITE_BIT = 1 << 16 + VK_ACCESS_MEMORY_WRITE_BIT = 1 << 16, + VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR = 1 << 21, + VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = 1 << 22 } VkAccessFlagBits; typedef enum { @@ -1073,7 +1129,8 @@ typedef enum { typedef enum { VK_PIPELINE_BIND_POINT_GRAPHICS = 0, - VK_PIPELINE_BIND_POINT_COMPUTE = 1 + VK_PIPELINE_BIND_POINT_COMPUTE = 1, + VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR = 1000165000 } VkPipelineBindPoint; typedef enum { @@ -1084,7 +1141,15 @@ typedef enum { VK_PIPELINE_CREATE_DISPATCH_BASE_BIT = 1 << 4, VK_PIPELINE_CREATE_DISPATCH_BASE = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT, VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT, - VK_PIPELINE_CREATE_DISPATCH_BASE_KHR = VK_PIPELINE_CREATE_DISPATCH_BASE + VK_PIPELINE_CREATE_DISPATCH_BASE_KHR = VK_PIPELINE_CREATE_DISPATCH_BASE, + VK_PIPELINE_CREATE_LIBRARY_BIT_KHR = 1 << 11, + VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR = 1 << 14, + VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR = 1 << 15, + VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR = 1 << 16, + VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR = 1 << 17, + VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR = 1 << 12, + VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR = 1 << 13, + VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR = 1 << 19 } VkPipelineCreateFlagBits; typedef enum { @@ -1129,7 +1194,9 @@ typedef enum { typedef enum { VK_QUERY_TYPE_OCCLUSION = 0, VK_QUERY_TYPE_PIPELINE_STATISTICS = 1, - VK_QUERY_TYPE_TIMESTAMP = 2 + VK_QUERY_TYPE_TIMESTAMP = 2, + VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR = 1000150000, + VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR = 1000150001 } VkQueryType; typedef enum { @@ -1171,7 +1238,12 @@ typedef enum { VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS = -1000257000, 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 + VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS, + VK_ERROR_FRAGMENTATION_EXT = VK_ERROR_FRAGMENTATION, + VK_THREAD_IDLE_KHR = 1000268000, + VK_THREAD_DONE_KHR = 1000268001, + VK_OPERATION_DEFERRED_KHR = 1000268002, + VK_OPERATION_NOT_DEFERRED_KHR = 1000268003 } VkResult; typedef enum { @@ -1182,7 +1254,13 @@ typedef enum { VK_SHADER_STAGE_FRAGMENT_BIT = 1 << 4, VK_SHADER_STAGE_COMPUTE_BIT = 1 << 5, VK_SHADER_STAGE_ALL_GRAPHICS = 0x0000001F, - VK_SHADER_STAGE_ALL = 0x7FFFFFFF + VK_SHADER_STAGE_ALL = 0x7FFFFFFF, + VK_SHADER_STAGE_RAYGEN_BIT_KHR = 1 << 8, + VK_SHADER_STAGE_ANY_HIT_BIT_KHR = 1 << 9, + VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR = 1 << 10, + VK_SHADER_STAGE_MISS_BIT_KHR = 1 << 11, + VK_SHADER_STAGE_INTERSECTION_BIT_KHR = 1 << 12, + VK_SHADER_STAGE_CALLABLE_BIT_KHR = 1 << 13 } VkShaderStageFlagBits; typedef enum { @@ -1448,7 +1526,35 @@ typedef enum { 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 + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT = 1000265000, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR = 1000150007, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR = 1000150000, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR = 1000150002, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR = 1000150003, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR = 1000150004, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR = 1000150005, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR = 1000150006, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR = 1000150009, + VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR = 1000150010, + VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR = 1000150011, + VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR = 1000150012, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR = 1000150013, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR = 1000150014, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR = 1000150017, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR = 1000150020, + VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR = 1000290000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR = 1000347000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR = 1000347001, + VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR = 1000150015, + VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR = 1000150016, + VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR = 1000150018, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR = 1000348013 } VkStructureType; typedef enum { @@ -1503,7 +1609,9 @@ typedef enum { VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = 1 << 13, VK_PIPELINE_STAGE_HOST_BIT = 1 << 14, VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = 1 << 15, - VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 1 << 16 + VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 1 << 16, + VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = 1 << 25, + VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR = 1 << 21 } VkPipelineStageFlagBits; typedef enum { @@ -1528,7 +1636,8 @@ typedef enum { typedef enum { VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 1 << 0, - VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT = 1 << 1 + VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT = 1 << 1, + VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT = VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT } VkDescriptorPoolCreateFlagBits; typedef enum { @@ -1571,7 +1680,9 @@ typedef enum { 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 + VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT = 1000128000, + VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR = 1000268000, + VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR = 1000150000 } VkObjectType; typedef enum { @@ -1599,7 +1710,11 @@ typedef enum { VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT = 1 << 0, VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT = 1 << 1, VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT = 1 << 2, - VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT = 1 << 3 + VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT = 1 << 3, + VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT = VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT, + VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT = VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT, + VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT = VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT, + VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT = VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT } VkDescriptorBindingFlagBits; typedef enum { @@ -1609,6 +1724,71 @@ typedef enum { VK_SEMAPHORE_TYPE_TIMELINE_KHR = VK_SEMAPHORE_TYPE_TIMELINE } VkSemaphoreType; +typedef enum { + VK_GEOMETRY_OPAQUE_BIT_KHR = 1 << 0, + VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR = 1 << 1 +} VkGeometryFlagBitsKHR; + +typedef enum { + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR = 1 << 0, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR = 1 << 1, + VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR = 1 << 2, + VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR = 1 << 3, + VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR = 1 << 4 +} VkBuildAccelerationStructureFlagBitsKHR; + +typedef enum { + VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = 1 << 0 +} VkAccelerationStructureCreateFlagBitsKHR; + +typedef enum { + VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR = 0, + VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR = 1 +} VkBuildAccelerationStructureModeKHR; + +typedef enum { + VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR = 0, + VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR = 1, + VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR = 2, + VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR = 3 +} VkCopyAccelerationStructureModeKHR; + +typedef enum { + VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR = 0, + VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR = 1, + VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR = 2 +} VkAccelerationStructureTypeKHR; + +typedef enum { + VK_GEOMETRY_TYPE_TRIANGLES_KHR = 0, + VK_GEOMETRY_TYPE_AABBS_KHR = 1, + VK_GEOMETRY_TYPE_INSTANCES_KHR = 2 +} VkGeometryTypeKHR; + +typedef enum { + VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR = 0, + VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR = 1, + VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR = 2 +} VkRayTracingShaderGroupTypeKHR; + +typedef enum { + VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR = 0, + VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR = 1, + VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR = 2 +} VkAccelerationStructureBuildTypeKHR; + +typedef enum { + VK_ACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR = 0, + VK_ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR = 1 +} VkAccelerationStructureCompatibilityKHR; + +typedef enum { + VK_SHADER_GROUP_SHADER_GENERAL_KHR = 0, + VK_SHADER_GROUP_SHADER_CLOSEST_HIT_KHR = 1, + VK_SHADER_GROUP_SHADER_ANY_HIT_KHR = 2, + VK_SHADER_GROUP_SHADER_INTERSECTION_KHR = 3 +} VkShaderGroupShaderKHR; + typedef enum { VK_SEMAPHORE_WAIT_ANY_BIT = 1 << 0, VK_SEMAPHORE_WAIT_ANY_BIT_KHR = VK_SEMAPHORE_WAIT_ANY_BIT @@ -1660,7 +1840,8 @@ typedef enum { 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 + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT = 1000085000, + VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT = 1000150000 } VkDebugReportObjectTypeEXT; typedef enum { @@ -1833,7 +2014,10 @@ typedef enum { typedef enum { VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY = 0, VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL = 1, - VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE = 2 + VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE = 2, + VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY, + VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL, + VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE } VkShaderFloatControlsIndependence; typedef enum { @@ -3713,6 +3897,8 @@ typedef struct VkPhysicalDeviceFloatControlsProperties { VkBool32 shaderRoundingModeRTZFloat64; } VkPhysicalDeviceFloatControlsProperties; +typedef VkPhysicalDeviceFloatControlsProperties VkPhysicalDeviceFloatControlsPropertiesKHR; + typedef struct VkPhysicalDeviceHostQueryResetFeatures { VkStructureType sType; void* pNext; @@ -3766,6 +3952,8 @@ typedef struct VkPhysicalDeviceDescriptorIndexingFeatures { VkBool32 runtimeDescriptorArray; } VkPhysicalDeviceDescriptorIndexingFeatures; +typedef VkPhysicalDeviceDescriptorIndexingFeatures VkPhysicalDeviceDescriptorIndexingFeaturesEXT; + typedef struct VkPhysicalDeviceDescriptorIndexingProperties { VkStructureType sType; void* pNext; @@ -3794,6 +3982,8 @@ typedef struct VkPhysicalDeviceDescriptorIndexingProperties { uint32_t maxDescriptorSetUpdateAfterBindInputAttachments; } VkPhysicalDeviceDescriptorIndexingProperties; +typedef VkPhysicalDeviceDescriptorIndexingProperties VkPhysicalDeviceDescriptorIndexingPropertiesEXT; + typedef struct VkDescriptorSetLayoutBindingFlagsCreateInfo { VkStructureType sType; const void* pNext; @@ -3801,6 +3991,8 @@ typedef struct VkDescriptorSetLayoutBindingFlagsCreateInfo { const VkDescriptorBindingFlags* pBindingFlags; } VkDescriptorSetLayoutBindingFlagsCreateInfo; +typedef VkDescriptorSetLayoutBindingFlagsCreateInfo VkDescriptorSetLayoutBindingFlagsCreateInfoEXT; + typedef struct VkDescriptorSetVariableDescriptorCountAllocateInfo { VkStructureType sType; const void* pNext; @@ -3808,12 +4000,16 @@ typedef struct VkDescriptorSetVariableDescriptorCountAllocateInfo { const uint32_t* pDescriptorCounts; } VkDescriptorSetVariableDescriptorCountAllocateInfo; +typedef VkDescriptorSetVariableDescriptorCountAllocateInfo VkDescriptorSetVariableDescriptorCountAllocateInfoEXT; + typedef struct VkDescriptorSetVariableDescriptorCountLayoutSupport { VkStructureType sType; void* pNext; uint32_t maxVariableDescriptorCount; } VkDescriptorSetVariableDescriptorCountLayoutSupport; +typedef VkDescriptorSetVariableDescriptorCountLayoutSupport VkDescriptorSetVariableDescriptorCountLayoutSupportEXT; + typedef struct VkAttachmentDescription2 { VkStructureType sType; const void* pNext; @@ -3992,6 +4188,119 @@ typedef struct VkSubpassDescriptionDepthStencilResolve { const VkAttachmentReference2* pDepthStencilResolveAttachment; } VkSubpassDescriptionDepthStencilResolve; +typedef struct VkRayTracingShaderGroupCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkRayTracingShaderGroupTypeKHR type; + uint32_t generalShader; + uint32_t closestHitShader; + uint32_t anyHitShader; + uint32_t intersectionShader; + const void* pShaderGroupCaptureReplayHandle; +} VkRayTracingShaderGroupCreateInfoKHR; + +typedef struct VkPipelineLibraryCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t libraryCount; + const VkPipeline* pLibraries; +} VkPipelineLibraryCreateInfoKHR; + +typedef struct VkRayTracingPipelineInterfaceCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t maxPipelineRayPayloadSize; + uint32_t maxPipelineRayHitAttributeSize; +} VkRayTracingPipelineInterfaceCreateInfoKHR; + +typedef struct VkRayTracingPipelineCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkPipelineCreateFlags flags; + uint32_t stageCount; + const VkPipelineShaderStageCreateInfo* pStages; + uint32_t groupCount; + const VkRayTracingShaderGroupCreateInfoKHR* pGroups; + uint32_t maxPipelineRayRecursionDepth; + const VkPipelineLibraryCreateInfoKHR* pLibraryInfo; + const VkRayTracingPipelineInterfaceCreateInfoKHR* pLibraryInterface; + const VkPipelineDynamicStateCreateInfo* pDynamicState; + VkPipelineLayout layout; + VkPipeline basePipelineHandle; + int32_t basePipelineIndex; +} VkRayTracingPipelineCreateInfoKHR; + +typedef struct VkWriteDescriptorSetAccelerationStructureKHR { + VkStructureType sType; + const void* pNext; + uint32_t accelerationStructureCount; + const VkAccelerationStructureKHR* pAccelerationStructures; +} VkWriteDescriptorSetAccelerationStructureKHR; + +typedef struct VkPhysicalDeviceAccelerationStructureFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 accelerationStructure; + VkBool32 accelerationStructureCaptureReplay; + VkBool32 accelerationStructureIndirectBuild; + VkBool32 accelerationStructureHostCommands; + VkBool32 descriptorBindingAccelerationStructureUpdateAfterBind; +} VkPhysicalDeviceAccelerationStructureFeaturesKHR; + +typedef struct VkPhysicalDeviceRayTracingPipelineFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 rayTracingPipeline; + VkBool32 rayTracingPipelineShaderGroupHandleCaptureReplay; + VkBool32 rayTracingPipelineShaderGroupHandleCaptureReplayMixed; + VkBool32 rayTracingPipelineTraceRaysIndirect; + VkBool32 rayTraversalPrimitiveCulling; +} VkPhysicalDeviceRayTracingPipelineFeaturesKHR; + +typedef struct VkPhysicalDeviceRayQueryFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 rayQuery; +} VkPhysicalDeviceRayQueryFeaturesKHR; + +typedef struct VkPhysicalDeviceAccelerationStructurePropertiesKHR { + VkStructureType sType; + void* pNext; + uint64_t maxGeometryCount; + uint64_t maxInstanceCount; + uint64_t maxPrimitiveCount; + uint32_t maxPerStageDescriptorAccelerationStructures; + uint32_t maxPerStageDescriptorUpdateAfterBindAccelerationStructures; + uint32_t maxDescriptorSetAccelerationStructures; + uint32_t maxDescriptorSetUpdateAfterBindAccelerationStructures; + uint32_t minAccelerationStructureScratchOffsetAlignment; +} VkPhysicalDeviceAccelerationStructurePropertiesKHR; + +typedef struct VkPhysicalDeviceRayTracingPipelinePropertiesKHR { + VkStructureType sType; + void* pNext; + uint32_t shaderGroupHandleSize; + uint32_t maxRayRecursionDepth; + uint32_t maxShaderGroupStride; + uint32_t shaderGroupBaseAlignment; + uint32_t shaderGroupHandleCaptureReplaySize; + uint32_t maxRayDispatchInvocationCount; + uint32_t shaderGroupHandleAlignment; + uint32_t maxRayHitAttributeSize; +} VkPhysicalDeviceRayTracingPipelinePropertiesKHR; + +typedef struct VkStridedDeviceAddressRegionKHR { + VkDeviceAddress deviceAddress; + VkDeviceSize stride; + VkDeviceSize size; +} VkStridedDeviceAddressRegionKHR; + +typedef struct VkTraceRaysIndirectCommandKHR { + uint32_t width; + uint32_t height; + uint32_t depth; +} VkTraceRaysIndirectCommandKHR; + typedef struct VkImageStencilUsageCreateInfo { VkStructureType sType; const void* pNext; @@ -4261,6 +4570,132 @@ typedef struct VkPhysicalDeviceVulkan12Properties { VkSampleCountFlags framebufferIntegerColorSampleCounts; } VkPhysicalDeviceVulkan12Properties; +typedef union VkDeviceOrHostAddressKHR { + VkDeviceAddress deviceAddress; + void* hostAddress; +} VkDeviceOrHostAddressKHR; + +typedef union VkDeviceOrHostAddressConstKHR { + VkDeviceAddress deviceAddress; + const void* hostAddress; +} VkDeviceOrHostAddressConstKHR; + +typedef struct VkAccelerationStructureGeometryTrianglesDataKHR { + VkStructureType sType; + const void* pNext; + VkFormat vertexFormat; + VkDeviceOrHostAddressConstKHR vertexData; + VkDeviceSize vertexStride; + uint32_t maxVertex; + VkIndexType indexType; + VkDeviceOrHostAddressConstKHR indexData; + VkDeviceOrHostAddressConstKHR transformData; +} VkAccelerationStructureGeometryTrianglesDataKHR; + +typedef struct VkAccelerationStructureGeometryAabbsDataKHR { + VkStructureType sType; + const void* pNext; + VkDeviceOrHostAddressConstKHR data; + VkDeviceSize stride; +} VkAccelerationStructureGeometryAabbsDataKHR; + +typedef struct VkAccelerationStructureGeometryInstancesDataKHR { + VkStructureType sType; + const void* pNext; + VkBool32 arrayOfPointers; + VkDeviceOrHostAddressConstKHR data; +} VkAccelerationStructureGeometryInstancesDataKHR; + +typedef union VkAccelerationStructureGeometryDataKHR { + VkAccelerationStructureGeometryTrianglesDataKHR triangles; + VkAccelerationStructureGeometryAabbsDataKHR aabbs; + VkAccelerationStructureGeometryInstancesDataKHR instances; +} VkAccelerationStructureGeometryDataKHR; + +typedef struct VkAccelerationStructureGeometryKHR { + VkStructureType sType; + const void* pNext; + VkGeometryTypeKHR geometryType; + VkAccelerationStructureGeometryDataKHR geometry; + VkGeometryFlagsKHR flags; +} VkAccelerationStructureGeometryKHR; + +typedef struct VkAccelerationStructureBuildGeometryInfoKHR { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureTypeKHR type; + VkBuildAccelerationStructureFlagsKHR flags; + VkBuildAccelerationStructureModeKHR mode; + VkAccelerationStructureKHR srcAccelerationStructure; + VkAccelerationStructureKHR dstAccelerationStructure; + uint32_t geometryCount; + const VkAccelerationStructureGeometryKHR* pGeometries; + const VkAccelerationStructureGeometryKHR* const* ppGeometries; + VkDeviceOrHostAddressKHR scratchData; +} VkAccelerationStructureBuildGeometryInfoKHR; + +typedef struct VkAccelerationStructureBuildRangeInfoKHR { + uint32_t primitiveCount; + uint32_t primitiveOffset; + uint32_t firstVertex; + uint32_t transformOffset; +} VkAccelerationStructureBuildRangeInfoKHR; + +typedef struct VkAccelerationStructureCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureCreateFlagsKHR createFlags; + VkBuffer buffer; + VkDeviceSize offset; + VkDeviceSize size; + VkAccelerationStructureTypeKHR type; + VkDeviceAddress deviceAddress; +} VkAccelerationStructureCreateInfoKHR; + +typedef struct VkAccelerationStructureDeviceAddressInfoKHR { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureKHR accelerationStructure; +} VkAccelerationStructureDeviceAddressInfoKHR; + +typedef struct VkAccelerationStructureVersionInfoKHR { + VkStructureType sType; + const void* pNext; + const uint8_t* pVersionData; +} VkAccelerationStructureVersionInfoKHR; + +typedef struct VkCopyAccelerationStructureInfoKHR { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureKHR src; + VkAccelerationStructureKHR dst; + VkCopyAccelerationStructureModeKHR mode; +} VkCopyAccelerationStructureInfoKHR; + +typedef struct VkCopyAccelerationStructureToMemoryInfoKHR { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureKHR src; + VkDeviceOrHostAddressKHR dst; + VkCopyAccelerationStructureModeKHR mode; +} VkCopyAccelerationStructureToMemoryInfoKHR; + +typedef struct VkCopyMemoryToAccelerationStructureInfoKHR { + VkStructureType sType; + const void* pNext; + VkDeviceOrHostAddressConstKHR src; + VkAccelerationStructureKHR dst; + VkCopyAccelerationStructureModeKHR mode; +} VkCopyMemoryToAccelerationStructureInfoKHR; + +typedef struct VkAccelerationStructureBuildSizesInfoKHR { + VkStructureType sType; + const void* pNext; + VkDeviceSize accelerationStructureSize; + VkDeviceSize updateScratchSize; + VkDeviceSize buildScratchSize; +} VkAccelerationStructureBuildSizesInfoKHR; + /* I'll bite the bullet and expect that vkCreateInstance(), vkEnumerateInstanceExtensionProperties() and vkEnumerateInstanceLayerProperties() functions can be loaded statically to avoid the need for a global @@ -4298,6 +4733,9 @@ struct FlextVkInstance { /* VK_EXT_host_query_reset */ + /* VK_KHR_acceleration_structure */ + + /* VK_KHR_bind_memory2 */ @@ -4307,6 +4745,9 @@ struct FlextVkInstance { /* VK_KHR_create_renderpass2 */ + /* VK_KHR_deferred_host_operations */ + + /* VK_KHR_descriptor_update_template */ @@ -4351,6 +4792,9 @@ struct FlextVkInstance { /* VK_KHR_maintenance3 */ + /* VK_KHR_ray_tracing_pipeline */ + + /* VK_KHR_sampler_ycbcr_conversion */ @@ -4422,6 +4866,25 @@ struct FlextVkDevice { void (VKAPI_PTR *ResetQueryPoolEXT)(VkDevice, VkQueryPool, uint32_t, uint32_t); + /* VK_KHR_acceleration_structure */ + + VkResult (VKAPI_PTR *BuildAccelerationStructuresKHR)(VkDevice, VkDeferredOperationKHR, uint32_t, const VkAccelerationStructureBuildGeometryInfoKHR*, const VkAccelerationStructureBuildRangeInfoKHR* const*); + void (VKAPI_PTR *CmdBuildAccelerationStructuresIndirectKHR)(VkCommandBuffer, uint32_t, const VkAccelerationStructureBuildGeometryInfoKHR*, const VkDeviceAddress*, const uint32_t*, const uint32_t* const*); + void (VKAPI_PTR *CmdBuildAccelerationStructuresKHR)(VkCommandBuffer, uint32_t, const VkAccelerationStructureBuildGeometryInfoKHR*, const VkAccelerationStructureBuildRangeInfoKHR* const*); + void (VKAPI_PTR *CmdCopyAccelerationStructureKHR)(VkCommandBuffer, const VkCopyAccelerationStructureInfoKHR*); + void (VKAPI_PTR *CmdCopyAccelerationStructureToMemoryKHR)(VkCommandBuffer, const VkCopyAccelerationStructureToMemoryInfoKHR*); + void (VKAPI_PTR *CmdCopyMemoryToAccelerationStructureKHR)(VkCommandBuffer, const VkCopyMemoryToAccelerationStructureInfoKHR*); + void (VKAPI_PTR *CmdWriteAccelerationStructuresPropertiesKHR)(VkCommandBuffer, uint32_t, const VkAccelerationStructureKHR*, VkQueryType, VkQueryPool, uint32_t); + VkResult (VKAPI_PTR *CopyAccelerationStructureKHR)(VkDevice, VkDeferredOperationKHR, const VkCopyAccelerationStructureInfoKHR*); + VkResult (VKAPI_PTR *CopyAccelerationStructureToMemoryKHR)(VkDevice, VkDeferredOperationKHR, const VkCopyAccelerationStructureToMemoryInfoKHR*); + VkResult (VKAPI_PTR *CopyMemoryToAccelerationStructureKHR)(VkDevice, VkDeferredOperationKHR, const VkCopyMemoryToAccelerationStructureInfoKHR*); + VkResult (VKAPI_PTR *CreateAccelerationStructureKHR)(VkDevice, const VkAccelerationStructureCreateInfoKHR*, const VkAllocationCallbacks*, VkAccelerationStructureKHR*); + void (VKAPI_PTR *DestroyAccelerationStructureKHR)(VkDevice, VkAccelerationStructureKHR, const VkAllocationCallbacks*); + void (VKAPI_PTR *GetAccelerationStructureBuildSizesKHR)(VkDevice, VkAccelerationStructureBuildTypeKHR, const VkAccelerationStructureBuildGeometryInfoKHR*, const uint32_t*, VkAccelerationStructureBuildSizesInfoKHR*); + VkDeviceAddress (VKAPI_PTR *GetAccelerationStructureDeviceAddressKHR)(VkDevice, const VkAccelerationStructureDeviceAddressInfoKHR*); + void (VKAPI_PTR *GetDeviceAccelerationStructureCompatibilityKHR)(VkDevice, const VkAccelerationStructureVersionInfoKHR*, VkAccelerationStructureCompatibilityKHR*); + VkResult (VKAPI_PTR *WriteAccelerationStructuresPropertiesKHR)(VkDevice, uint32_t, const VkAccelerationStructureKHR*, VkQueryType, size_t, void*, size_t); + /* VK_KHR_bind_memory2 */ VkResult (VKAPI_PTR *BindBufferMemory2KHR)(VkDevice, uint32_t, const VkBindBufferMemoryInfo*); @@ -4440,6 +4903,14 @@ struct FlextVkDevice { void (VKAPI_PTR *CmdNextSubpass2KHR)(VkCommandBuffer, const VkSubpassBeginInfo*, const VkSubpassEndInfo*); VkResult (VKAPI_PTR *CreateRenderPass2KHR)(VkDevice, const VkRenderPassCreateInfo2*, const VkAllocationCallbacks*, VkRenderPass*); + /* VK_KHR_deferred_host_operations */ + + VkResult (VKAPI_PTR *CreateDeferredOperationKHR)(VkDevice, const VkAllocationCallbacks*, VkDeferredOperationKHR*); + VkResult (VKAPI_PTR *DeferredOperationJoinKHR)(VkDevice, VkDeferredOperationKHR); + void (VKAPI_PTR *DestroyDeferredOperationKHR)(VkDevice, VkDeferredOperationKHR, const VkAllocationCallbacks*); + uint32_t (VKAPI_PTR *GetDeferredOperationMaxConcurrencyKHR)(VkDevice, VkDeferredOperationKHR); + VkResult (VKAPI_PTR *GetDeferredOperationResultKHR)(VkDevice, VkDeferredOperationKHR); + /* VK_KHR_descriptor_update_template */ VkResult (VKAPI_PTR *CreateDescriptorUpdateTemplateKHR)(VkDevice, const VkDescriptorUpdateTemplateCreateInfo*, const VkAllocationCallbacks*, VkDescriptorUpdateTemplate*); @@ -4486,6 +4957,16 @@ struct FlextVkDevice { void (VKAPI_PTR *GetDescriptorSetLayoutSupportKHR)(VkDevice, const VkDescriptorSetLayoutCreateInfo*, VkDescriptorSetLayoutSupport*); + /* VK_KHR_ray_tracing_pipeline */ + + void (VKAPI_PTR *CmdSetRayTracingPipelineStackSizeKHR)(VkCommandBuffer, uint32_t); + void (VKAPI_PTR *CmdTraceRaysIndirectKHR)(VkCommandBuffer, const VkStridedDeviceAddressRegionKHR*, const VkStridedDeviceAddressRegionKHR*, const VkStridedDeviceAddressRegionKHR*, const VkStridedDeviceAddressRegionKHR*, VkDeviceAddress); + void (VKAPI_PTR *CmdTraceRaysKHR)(VkCommandBuffer, const VkStridedDeviceAddressRegionKHR*, const VkStridedDeviceAddressRegionKHR*, const VkStridedDeviceAddressRegionKHR*, const VkStridedDeviceAddressRegionKHR*, uint32_t, uint32_t, uint32_t); + VkResult (VKAPI_PTR *CreateRayTracingPipelinesKHR)(VkDevice, VkDeferredOperationKHR, VkPipelineCache, uint32_t, const VkRayTracingPipelineCreateInfoKHR*, const VkAllocationCallbacks*, VkPipeline*); + VkResult (VKAPI_PTR *GetRayTracingCaptureReplayShaderGroupHandlesKHR)(VkDevice, VkPipeline, uint32_t, uint32_t, size_t, void*); + VkResult (VKAPI_PTR *GetRayTracingShaderGroupHandlesKHR)(VkDevice, VkPipeline, uint32_t, uint32_t, size_t, void*); + VkDeviceSize (VKAPI_PTR *GetRayTracingShaderGroupStackSizeKHR)(VkDevice, VkPipeline, uint32_t, VkShaderGroupShaderKHR); + /* VK_KHR_sampler_ycbcr_conversion */ VkResult (VKAPI_PTR *CreateSamplerYcbcrConversionKHR)(VkDevice, const VkSamplerYcbcrConversionCreateInfo*, const VkAllocationCallbacks*, VkSamplerYcbcrConversion*); diff --git a/src/MagnumExternal/Vulkan/flextVkGlobal.h b/src/MagnumExternal/Vulkan/flextVkGlobal.h index 11aed5a6a..44ab5cb5a 100644 --- a/src/MagnumExternal/Vulkan/flextVkGlobal.h +++ b/src/MagnumExternal/Vulkan/flextVkGlobal.h @@ -54,6 +54,9 @@ extern FLEXTVK_EXPORT FlextVkInstance flextVkInstance; /* VK_EXT_host_query_reset */ +/* VK_KHR_acceleration_structure */ + + /* VK_KHR_bind_memory2 */ @@ -63,6 +66,9 @@ extern FLEXTVK_EXPORT FlextVkInstance flextVkInstance; /* VK_KHR_create_renderpass2 */ +/* VK_KHR_deferred_host_operations */ + + /* VK_KHR_descriptor_update_template */ @@ -107,6 +113,9 @@ extern FLEXTVK_EXPORT FlextVkInstance flextVkInstance; /* VK_KHR_maintenance3 */ +/* VK_KHR_ray_tracing_pipeline */ + + /* VK_KHR_sampler_ycbcr_conversion */ @@ -174,6 +183,25 @@ extern FLEXTVK_EXPORT FlextVkDevice flextVkDevice; #define vkResetQueryPoolEXT flextVkDevice.ResetQueryPoolEXT +/* VK_KHR_acceleration_structure */ + +#define vkBuildAccelerationStructuresKHR flextVkDevice.BuildAccelerationStructuresKHR +#define vkCmdBuildAccelerationStructuresIndirectKHR flextVkDevice.CmdBuildAccelerationStructuresIndirectKHR +#define vkCmdBuildAccelerationStructuresKHR flextVkDevice.CmdBuildAccelerationStructuresKHR +#define vkCmdCopyAccelerationStructureKHR flextVkDevice.CmdCopyAccelerationStructureKHR +#define vkCmdCopyAccelerationStructureToMemoryKHR flextVkDevice.CmdCopyAccelerationStructureToMemoryKHR +#define vkCmdCopyMemoryToAccelerationStructureKHR flextVkDevice.CmdCopyMemoryToAccelerationStructureKHR +#define vkCmdWriteAccelerationStructuresPropertiesKHR flextVkDevice.CmdWriteAccelerationStructuresPropertiesKHR +#define vkCopyAccelerationStructureKHR flextVkDevice.CopyAccelerationStructureKHR +#define vkCopyAccelerationStructureToMemoryKHR flextVkDevice.CopyAccelerationStructureToMemoryKHR +#define vkCopyMemoryToAccelerationStructureKHR flextVkDevice.CopyMemoryToAccelerationStructureKHR +#define vkCreateAccelerationStructureKHR flextVkDevice.CreateAccelerationStructureKHR +#define vkDestroyAccelerationStructureKHR flextVkDevice.DestroyAccelerationStructureKHR +#define vkGetAccelerationStructureBuildSizesKHR flextVkDevice.GetAccelerationStructureBuildSizesKHR +#define vkGetAccelerationStructureDeviceAddressKHR flextVkDevice.GetAccelerationStructureDeviceAddressKHR +#define vkGetDeviceAccelerationStructureCompatibilityKHR flextVkDevice.GetDeviceAccelerationStructureCompatibilityKHR +#define vkWriteAccelerationStructuresPropertiesKHR flextVkDevice.WriteAccelerationStructuresPropertiesKHR + /* VK_KHR_bind_memory2 */ #define vkBindBufferMemory2KHR flextVkDevice.BindBufferMemory2KHR @@ -192,6 +220,14 @@ extern FLEXTVK_EXPORT FlextVkDevice flextVkDevice; #define vkCmdNextSubpass2KHR flextVkDevice.CmdNextSubpass2KHR #define vkCreateRenderPass2KHR flextVkDevice.CreateRenderPass2KHR +/* VK_KHR_deferred_host_operations */ + +#define vkCreateDeferredOperationKHR flextVkDevice.CreateDeferredOperationKHR +#define vkDeferredOperationJoinKHR flextVkDevice.DeferredOperationJoinKHR +#define vkDestroyDeferredOperationKHR flextVkDevice.DestroyDeferredOperationKHR +#define vkGetDeferredOperationMaxConcurrencyKHR flextVkDevice.GetDeferredOperationMaxConcurrencyKHR +#define vkGetDeferredOperationResultKHR flextVkDevice.GetDeferredOperationResultKHR + /* VK_KHR_descriptor_update_template */ #define vkCreateDescriptorUpdateTemplateKHR flextVkDevice.CreateDescriptorUpdateTemplateKHR @@ -238,6 +274,16 @@ extern FLEXTVK_EXPORT FlextVkDevice flextVkDevice; #define vkGetDescriptorSetLayoutSupportKHR flextVkDevice.GetDescriptorSetLayoutSupportKHR +/* VK_KHR_ray_tracing_pipeline */ + +#define vkCmdSetRayTracingPipelineStackSizeKHR flextVkDevice.CmdSetRayTracingPipelineStackSizeKHR +#define vkCmdTraceRaysIndirectKHR flextVkDevice.CmdTraceRaysIndirectKHR +#define vkCmdTraceRaysKHR flextVkDevice.CmdTraceRaysKHR +#define vkCreateRayTracingPipelinesKHR flextVkDevice.CreateRayTracingPipelinesKHR +#define vkGetRayTracingCaptureReplayShaderGroupHandlesKHR flextVkDevice.GetRayTracingCaptureReplayShaderGroupHandlesKHR +#define vkGetRayTracingShaderGroupHandlesKHR flextVkDevice.GetRayTracingShaderGroupHandlesKHR +#define vkGetRayTracingShaderGroupStackSizeKHR flextVkDevice.GetRayTracingShaderGroupStackSizeKHR + /* VK_KHR_sampler_ycbcr_conversion */ #define vkCreateSamplerYcbcrConversionKHR flextVkDevice.CreateSamplerYcbcrConversionKHR