{-# language CPP #-} -- | = Name -- -- VK_KHR_ray_tracing_maintenance1 - device extension -- -- = VK_KHR_ray_tracing_maintenance1 -- -- [__Name String__] -- @VK_KHR_ray_tracing_maintenance1@ -- -- [__Extension Type__] -- Device extension -- -- [__Registered Extension Number__] -- 387 -- -- [__Revision__] -- 1 -- -- [__Ratification Status__] -- Ratified -- -- [__Extension and Version Dependencies__] -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure> -- -- [__API Interactions__] -- -- - Interacts with VK_VERSION_1_3 -- -- - Interacts with VK_EXT_device_generated_commands -- -- - Interacts with VK_KHR_ray_tracing_pipeline -- -- - Interacts with VK_KHR_synchronization2 -- -- [__SPIR-V Dependencies__] -- -- - <https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/KHR/SPV_KHR_ray_cull_mask.html SPV_KHR_ray_cull_mask> -- -- [__Contact__] -- -- - Daniel Koch -- <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_KHR_ray_tracing_maintenance1] @dgkoch%0A*Here describe the issue or question you have about the VK_KHR_ray_tracing_maintenance1 extension* > -- -- == Other Extension Metadata -- -- [__Last Modified Date__] -- 2022-02-21 -- -- [__Interactions and External Dependencies__] -- -- - This extension provides API support for -- <https://github.com/KhronosGroup/GLSL/blob/main/extensions/ext/GLSL_EXT_ray_cull_mask.txt GLSL_EXT_ray_cull_mask> -- -- - Interacts with @VK_KHR_ray_tracing_pipeline@ -- -- - Interacts with @VK_KHR_synchronization2@ -- -- [__Contributors__] -- -- - Stu Smith, AMD -- -- - Tobias Hector, AMD -- -- - Marius Bjorge, Arm -- -- - Tom Olson, Arm -- -- - Yuriy O’Donnell, Epic Games -- -- - Yunpeng Zhu, Huawei -- -- - Andrew Garrard, Imagination -- -- - Dae Kim, Imagination -- -- - Joshua Barczak, Intel -- -- - Lionel Landwerlin, Intel -- -- - Daniel Koch, NVIDIA -- -- - Eric Werness, NVIDIA -- -- - Spencer Fricke, Samsung -- -- == Description -- -- @VK_KHR_ray_tracing_maintenance1@ adds a collection of minor ray tracing -- features, none of which would warrant an entire extension of their own. -- -- The new features are as follows: -- -- - Adds support for the @SPV_KHR_ray_cull_mask@ SPIR-V extension in -- Vulkan. This extension provides access to built-in @CullMaskKHR@ -- shader variable which contains the value of the @OpTrace*@ -- @Cull Mask@ parameter. This new shader variable is accessible in the -- intersection, any-hit, closest hit and miss shader stages. -- -- - Adds support for a new pipeline stage and access mask built on top -- of @VK_KHR_synchronization2@: -- -- - 'Vulkan.Core13.Enums.PipelineStageFlags2.PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR' -- to specify execution of -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#acceleration-structure-copying acceleration structure copy commands> -- -- - 'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR' -- to specify read access to a -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#shader-binding-table shader binding table> -- in any shader pipeline stage -- -- - Adds two new acceleration structure query parameters: -- -- - 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR' -- to query the acceleration structure size on the device timeline -- -- - 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR' -- to query the number of bottom level acceleration structure -- pointers for serialization -- -- - Adds an optional new indirect ray tracing dispatch command, -- 'cmdTraceRaysIndirect2KHR', which sources the shader binding table -- parameters as well as the dispatch dimensions from the device. The -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-rayTracingPipelineTraceRaysIndirect2 rayTracingPipelineTraceRaysIndirect2> -- feature indicates whether this functionality is supported. -- -- == New Commands -- -- If -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_ray_tracing_pipeline VK_KHR_ray_tracing_pipeline> -- is supported: -- -- - 'cmdTraceRaysIndirect2KHR' -- -- == New Structures -- -- - Extending -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2', -- 'Vulkan.Core10.Device.DeviceCreateInfo': -- -- - 'PhysicalDeviceRayTracingMaintenance1FeaturesKHR' -- -- If -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_ray_tracing_pipeline VK_KHR_ray_tracing_pipeline> -- is supported: -- -- - 'TraceRaysIndirectCommand2KHR' -- -- == New Enum Constants -- -- - 'KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME' -- -- - 'KHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION' -- -- - Extending 'Vulkan.Core10.Enums.QueryType.QueryType': -- -- - 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR' -- -- - 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR' -- -- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType': -- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR' -- -- If -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2> -- or -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#versions-1.3 Vulkan Version 1.3> -- and -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_ray_tracing_pipeline VK_KHR_ray_tracing_pipeline> -- is supported: -- -- - Extending 'Vulkan.Core13.Enums.AccessFlags2.AccessFlagBits2': -- -- - 'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR' -- -- If -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands> -- is supported: -- -- - Extending -- 'Vulkan.Extensions.VK_EXT_device_generated_commands.IndirectCommandsTokenTypeEXT': -- -- - 'Vulkan.Extensions.VK_EXT_device_generated_commands.INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT' -- -- If -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2> -- or -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#versions-1.3 Vulkan Version 1.3> -- is supported: -- -- - Extending -- 'Vulkan.Core13.Enums.PipelineStageFlags2.PipelineStageFlagBits2': -- -- - 'Vulkan.Core13.Enums.PipelineStageFlags2.PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR' -- -- == New Built-In Variables -- -- - <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#interfaces-builtin-variables-cullmask CullMaskKHR> -- -- == New SPIR-V Capabilities -- -- - <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#spirvenv-capabilities-table-RayCullMaskKHR RayCullMaskKHR> -- -- == Issues -- -- None Yet! -- -- == Version History -- -- - Revision 1, 2022-02-21 (Members of the Vulkan Ray Tracing TSG) -- -- - internal revisions -- -- == See Also -- -- No cross-references are available -- -- == Document Notes -- -- For more information, see the -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VK_KHR_ray_tracing_maintenance1 Vulkan Specification>. -- -- This page is a generated document. Fixes and changes should be made to -- the generator scripts, not directly. module Vulkan.Extensions.VK_KHR_ray_tracing_maintenance1 ( cmdTraceRaysIndirect2KHR , TraceRaysIndirectCommand2KHR(..) , PhysicalDeviceRayTracingMaintenance1FeaturesKHR(..) , KHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION , pattern KHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION , KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME , pattern KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME , IndirectCommandsTokenTypeEXT(..) ) where import Vulkan.Internal.Utils (traceAroundEvent) import Control.Monad (unless) import Control.Monad.IO.Class (liftIO) import Foreign.Marshal.Alloc (allocaBytes) import GHC.IO (throwIO) import GHC.Ptr (nullFunPtr) import Foreign.Ptr (nullPtr) import Foreign.Ptr (plusPtr) import Vulkan.CStruct (FromCStruct) import Vulkan.CStruct (FromCStruct(..)) import Vulkan.CStruct (ToCStruct) import Vulkan.CStruct (ToCStruct(..)) import Vulkan.Zero (Zero(..)) import Control.Monad.IO.Class (MonadIO) import Data.String (IsString) import Data.Typeable (Typeable) import Foreign.Storable (Storable) import Foreign.Storable (Storable(peek)) import Foreign.Storable (Storable(poke)) import qualified Foreign.Storable (Storable(..)) import GHC.Generics (Generic) import GHC.IO.Exception (IOErrorType(..)) import GHC.IO.Exception (IOException(..)) import Foreign.Ptr (FunPtr) import Foreign.Ptr (Ptr) import Data.Word (Word32) import Data.Kind (Type) import Vulkan.Core10.FundamentalTypes (bool32ToBool) import Vulkan.Core10.FundamentalTypes (boolToBool32) import Vulkan.NamedType ((:::)) import Vulkan.Core10.FundamentalTypes (Bool32) import Vulkan.Core10.Handles (CommandBuffer) import Vulkan.Core10.Handles (CommandBuffer(..)) import Vulkan.Core10.Handles (CommandBuffer(CommandBuffer)) import Vulkan.Core10.Handles (CommandBuffer_T) import Vulkan.Core10.FundamentalTypes (DeviceAddress) import Vulkan.Dynamic (DeviceCmds(pVkCmdTraceRaysIndirect2KHR)) import Vulkan.Core10.FundamentalTypes (DeviceSize) import Vulkan.Core10.Enums.StructureType (StructureType) import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR)) import Vulkan.Extensions.VK_EXT_device_generated_commands (IndirectCommandsTokenTypeEXT(..)) foreign import ccall #if !defined(SAFE_FOREIGN_CALLS) unsafe #endif "dynamic" mkVkCmdTraceRaysIndirect2KHR :: FunPtr (Ptr CommandBuffer_T -> DeviceAddress -> IO ()) -> Ptr CommandBuffer_T -> DeviceAddress -> IO () -- | vkCmdTraceRaysIndirect2KHR - Initialize an indirect ray tracing dispatch -- with indirect shader binding tables -- -- = Description -- -- 'cmdTraceRaysIndirect2KHR' behaves similarly to -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.cmdTraceRaysIndirectKHR' -- except that shader binding table parameters as well as dispatch -- dimensions are read by the device from @indirectDeviceAddress@ during -- execution. -- -- == Valid Usage -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-magFilter-04553# If a -- 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or -- @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR', -- @reductionMode@ equal to -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE', -- and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' -- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of -- this command, then the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-magFilter-09598# If a -- 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or -- @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and -- @reductionMode@ equal to either -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN' -- or -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX' -- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of -- this command, then the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-mipmapMode-04770# If a -- 'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to -- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR', -- @reductionMode@ equal to -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE', -- and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' -- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of -- this command, then the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-mipmapMode-09599# If a -- 'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to -- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR' -- and @reductionMode@ equal to either -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN' -- or -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX' -- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of -- this command, then the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-unnormalizedCoordinates-09635# If a -- 'Vulkan.Core10.Handles.Sampler' created with -- @unnormalizedCoordinates@ equal to -- 'Vulkan.Core10.FundamentalTypes.TRUE' is used to sample a -- 'Vulkan.Core10.Handles.ImageView' as a result of this command, then -- the image view’s @levelCount@ and @layerCount@ /must/ be 1 -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-08609# If a -- 'Vulkan.Core10.Handles.Sampler' created with -- @unnormalizedCoordinates@ equal to -- 'Vulkan.Core10.FundamentalTypes.TRUE' is used to sample a -- 'Vulkan.Core10.Handles.ImageView' as a result of this command, then -- the image view’s @viewType@ /must/ be -- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D' or -- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-08610# If a -- 'Vulkan.Core10.Handles.Sampler' created with -- @unnormalizedCoordinates@ equal to -- 'Vulkan.Core10.FundamentalTypes.TRUE' is used to sample a -- 'Vulkan.Core10.Handles.ImageView' as a result of this command, then -- the sampler /must/ not be used with any of the SPIR-V -- @OpImageSample*@ or @OpImageSparseSample*@ instructions with -- @ImplicitLod@, @Dref@ or @Proj@ in their name -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-08611# If a -- 'Vulkan.Core10.Handles.Sampler' created with -- @unnormalizedCoordinates@ equal to -- 'Vulkan.Core10.FundamentalTypes.TRUE' is used to sample a -- 'Vulkan.Core10.Handles.ImageView' as a result of this command, then -- the sampler /must/ not be used with any of the SPIR-V -- @OpImageSample*@ or @OpImageSparseSample*@ instructions that -- includes a LOD bias or any offset values -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-06479# If a -- 'Vulkan.Core10.Handles.ImageView' is sampled with -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-depth-compare-operation depth comparison>, -- the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-02691# If a -- 'Vulkan.Core10.Handles.ImageView' is accessed using atomic -- operations as a result of this command, then the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-07888# If a -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER' -- descriptor is accessed using atomic operations as a result of this -- command, then the storage texel buffer’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-buffer-view-format-features format features> -- /must/ contain -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-02692# If a -- 'Vulkan.Core10.Handles.ImageView' is sampled with -- 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as a result of this -- command, then the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-02693# If the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_filter_cubic VK_EXT_filter_cubic> -- extension is not enabled and any 'Vulkan.Core10.Handles.ImageView' -- is sampled with 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as a -- result of this command, it /must/ not have a -- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' of -- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D', -- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE', or -- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-filterCubic-02694# Any -- 'Vulkan.Core10.Handles.ImageView' being sampled with -- 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as a result of this -- command /must/ have a -- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that -- supports cubic filtering, as specified by -- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@ -- returned by -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-filterCubicMinmax-02695# Any -- 'Vulkan.Core10.Handles.ImageView' being sampled with -- 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' with a reduction mode -- of either -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN' -- or -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX' -- as a result of this command /must/ have a -- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that -- supports cubic filtering together with minmax filtering, as -- specified by -- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@ -- returned by -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-cubicRangeClamp-09212# If the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-cubicRangeClamp cubicRangeClamp> -- feature is not enabled, then any 'Vulkan.Core10.Handles.ImageView' -- being sampled with 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as -- a result of this command /must/ not have a -- 'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo'::@reductionMode@ -- equal to -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-reductionMode-09213# Any -- 'Vulkan.Core10.Handles.ImageView' being sampled with a -- 'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo'::@reductionMode@ -- equal to -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM' -- as a result of this command /must/ sample with -- 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-selectableCubicWeights-09214# If -- the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-selectableCubicWeights selectableCubicWeights> -- feature is not enabled, then any 'Vulkan.Core10.Handles.ImageView' -- being sampled with 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as -- a result of this command /must/ have -- 'Vulkan.Extensions.VK_QCOM_filter_cubic_weights.SamplerCubicWeightsCreateInfoQCOM'::@cubicWeights@ -- equal to -- 'Vulkan.Extensions.VK_QCOM_filter_cubic_weights.CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-flags-02696# Any -- 'Vulkan.Core10.Handles.Image' created with a -- 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV' -- sampled as a result of this command /must/ only be sampled using a -- 'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of -- 'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-OpTypeImage-07027# For any -- 'Vulkan.Core10.Handles.ImageView' being written as a storage image -- where the image format field of the @OpTypeImage@ is @Unknown@, the -- view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-OpTypeImage-07028# For any -- 'Vulkan.Core10.Handles.ImageView' being read as a storage image -- where the image format field of the @OpTypeImage@ is @Unknown@, the -- view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-OpTypeImage-07029# For any -- 'Vulkan.Core10.Handles.BufferView' being written as a storage texel -- buffer where the image format field of the @OpTypeImage@ is -- @Unknown@, the view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkFormatProperties3 buffer features> -- /must/ contain -- 'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-OpTypeImage-07030# Any -- 'Vulkan.Core10.Handles.BufferView' being read as a storage texel -- buffer where the image format field of the @OpTypeImage@ is -- @Unknown@ then the view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkFormatProperties3 buffer features> -- /must/ contain -- 'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-08600# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader> -- was created as a 'Vulkan.Extensions.Handles.ShaderEXT' without the -- 'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT' -- flag or as part of a pipeline without the -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- flag, and that shader statically uses a set /n/, a descriptor set -- /must/ have been bound to /n/ at the same pipeline bind point, with -- a 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set -- /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create -- the current 'Vulkan.Core10.Handles.Pipeline' or the -- 'Vulkan.Core10.Handles.DescriptorSetLayout' array used to create the -- current 'Vulkan.Extensions.Handles.ShaderEXT' , as described in -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???> -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-08601# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader> -- was created as a 'Vulkan.Extensions.Handles.ShaderEXT' without the -- 'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT' -- flag or as part of a pipeline without the -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- flag, and that shader statically uses a push constant value, that -- value /must/ have been set for the same pipeline bind point, with a -- 'Vulkan.Core10.Handles.PipelineLayout' that is -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility compatible for push constants> -- with the 'Vulkan.Core10.Handles.PipelineLayout' used to create the -- current 'Vulkan.Core10.Handles.Pipeline' or the -- 'Vulkan.Core10.Handles.DescriptorSetLayout' array used to create the -- current 'Vulkan.Extensions.Handles.ShaderEXT' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-10068# For each array of -- resources that is used by -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>, -- the indices used to access members of the array /must/ be less than -- the descriptor count for the identified binding in the descriptor -- sets used by this command -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-maintenance4-08602# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader> -- was created as a 'Vulkan.Extensions.Handles.ShaderEXT' without the -- 'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT' -- flag or as part of a pipeline without the -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- flag, and that shader statically uses a push constant value, that -- value /must/ have been set for the same pipeline bind point, with a -- 'Vulkan.Core10.Handles.PipelineLayout' that is -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility compatible for push constants> -- with the 'Vulkan.Core10.Handles.PipelineLayout' used to create the -- current 'Vulkan.Core10.Handles.Pipeline' or the -- 'Vulkan.Core10.Handles.DescriptorSetLayout' and -- 'Vulkan.Core10.PipelineLayout.PushConstantRange' arrays used to -- create the current 'Vulkan.Extensions.Handles.ShaderEXT' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-08114# Descriptors in each -- bound descriptor set, specified via -- 'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/ -- be valid if they are accessed as described by -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptor-validity descriptor validity> -- by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind -- point used by this command and the bound -- 'Vulkan.Core10.Handles.Pipeline' was not created with -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-imageLayout-00344# If an image -- descriptor is accessed by a shader, the -- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' /must/ match the -- subresource accessible from the 'Vulkan.Core10.Handles.ImageView' as -- defined by the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-layouts-matching-rule image layout matching rules> -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-08115# If the descriptors used -- by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind -- point were specified via -- 'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', the -- bound 'Vulkan.Core10.Handles.Pipeline' /must/ have been created -- without -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-08116# Descriptors in bound -- descriptor buffers, specified via -- 'Vulkan.Extensions.VK_EXT_descriptor_buffer.cmdSetDescriptorBufferOffsetsEXT', -- /must/ be valid if they are dynamically used by the -- 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point -- used by this command and the bound 'Vulkan.Core10.Handles.Pipeline' -- was created with -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-08604# Descriptors in bound -- descriptor buffers, specified via -- 'Vulkan.Extensions.VK_EXT_descriptor_buffer.cmdSetDescriptorBufferOffsetsEXT', -- /must/ be valid if they are dynamically used by any -- 'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding -- to the pipeline bind point used by this command -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-08117# If the descriptors used -- by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind -- point were specified via -- 'Vulkan.Extensions.VK_EXT_descriptor_buffer.cmdSetDescriptorBufferOffsetsEXT', -- the bound 'Vulkan.Core10.Handles.Pipeline' /must/ have been created -- with -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-08119# If a descriptor is -- dynamically used with a 'Vulkan.Core10.Handles.Pipeline' created -- with -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT', -- the descriptor memory /must/ be resident -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-08605# If a descriptor is -- dynamically used with a 'Vulkan.Extensions.Handles.ShaderEXT' -- created with a 'Vulkan.Core10.Handles.DescriptorSetLayout' that was -- created with -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT', -- the descriptor memory /must/ be resident -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-08606# If the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shaderObject shaderObject> -- feature is not enabled, a valid pipeline /must/ be bound to the -- pipeline bind point used by this command -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-08608# If a pipeline is bound -- to the pipeline bind point used by this command, there /must/ not -- have been any calls to dynamic state setting commands for any state -- specified statically in the 'Vulkan.Core10.Handles.Pipeline' object -- bound to the pipeline bind point used by this command, since that -- pipeline was bound -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-uniformBuffers-06935# If any stage -- of the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline -- bind point used by this command accesses a uniform buffer, and that -- stage was created without enabling either -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS' -- or -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2' -- for @uniformBuffers@, and the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess> -- feature is not enabled, that stage /must/ not access values outside -- of the range of the buffer as specified in the descriptor set bound -- to the same pipeline bind point -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-08612# If the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess> -- feature is not enabled, and any -- 'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding -- to the pipeline bind point used by this command accesses a uniform -- buffer, it /must/ not access values outside of the range of the -- buffer as specified in the descriptor set bound to the same pipeline -- bind point -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-storageBuffers-06936# If any stage -- of the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline -- bind point used by this command accesses a storage buffer, and that -- stage was created without enabling either -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS' -- or -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2' -- for @storageBuffers@, and the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess> -- feature is not enabled, that stage /must/ not access values outside -- of the range of the buffer as specified in the descriptor set bound -- to the same pipeline bind point -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-08613# If the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess> -- feature is not enabled, and any -- 'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding -- to the pipeline bind point used by this command accesses a storage -- buffer, it /must/ not access values outside of the range of the -- buffer as specified in the descriptor set bound to the same pipeline -- bind point -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-commandBuffer-02707# If -- @commandBuffer@ is an unprotected command buffer and -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-protectedNoFault protectedNoFault> -- is not supported, any resource accessed by -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding bound shaders> -- /must/ not be a protected resource -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-viewType-07752# If a -- 'Vulkan.Core10.Handles.ImageView' is accessed as a result of this -- command, then the image view’s @viewType@ /must/ match the @Dim@ -- operand of the @OpTypeImage@ as described in -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-image-dimensions ???> -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-format-07753# If a -- 'Vulkan.Core10.Handles.ImageView' or -- 'Vulkan.Core10.Handles.BufferView' is accessed as a result of this -- command, then the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-numericformat numeric type> -- of the view’s @format@ and the @Sampled@ @Type@ operand of the -- @OpTypeImage@ /must/ match -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-OpImageWrite-08795# If a -- 'Vulkan.Core10.Handles.ImageView' created with a format other than -- 'Vulkan.Core10.Enums.Format.FORMAT_A8_UNORM' is accessed using -- @OpImageWrite@ as a result of this command, then the @Type@ of the -- @Texel@ operand of that instruction /must/ have at least as many -- components as the image view’s format -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-OpImageWrite-08796# If a -- 'Vulkan.Core10.Handles.ImageView' created with the format -- 'Vulkan.Core10.Enums.Format.FORMAT_A8_UNORM' is accessed using -- @OpImageWrite@ as a result of this command, then the @Type@ of the -- @Texel@ operand of that instruction /must/ have four components -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-OpImageWrite-04469# If a -- 'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@ -- as a result of this command, then the @Type@ of the @Texel@ operand -- of that instruction /must/ have at least as many components as the -- buffer view’s format -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-SampledType-04470# If a -- 'Vulkan.Core10.Handles.ImageView' with a -- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component -- width is accessed as a result of this command, the @SampledType@ of -- the @OpTypeImage@ operand of that instruction /must/ have a @Width@ -- of 64 -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-SampledType-04471# If a -- 'Vulkan.Core10.Handles.ImageView' with a -- 'Vulkan.Core10.Enums.Format.Format' that has a component width less -- than 64-bit is accessed as a result of this command, the -- @SampledType@ of the @OpTypeImage@ operand of that instruction -- /must/ have a @Width@ of 32 -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-SampledType-04472# If a -- 'Vulkan.Core10.Handles.BufferView' with a -- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component -- width is accessed as a result of this command, the @SampledType@ of -- the @OpTypeImage@ operand of that instruction /must/ have a @Width@ -- of 64 -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-SampledType-04473# If a -- 'Vulkan.Core10.Handles.BufferView' with a -- 'Vulkan.Core10.Enums.Format.Format' that has a component width less -- than 64-bit is accessed as a result of this command, the -- @SampledType@ of the @OpTypeImage@ operand of that instruction -- /must/ have a @Width@ of 32 -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-sparseImageInt64Atomics-04474# If -- the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics> -- feature is not enabled, 'Vulkan.Core10.Handles.Image' objects -- created with the -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT' -- flag /must/ not be accessed by atomic instructions through an -- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this -- command -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-sparseImageInt64Atomics-04475# If -- the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics> -- feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects -- created with the -- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT' -- flag /must/ not be accessed by atomic instructions through an -- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this -- command -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-OpImageSampleWeightedQCOM-06971# If -- @OpImageSampleWeightedQCOM@ is used to sample a -- 'Vulkan.Core10.Handles.ImageView' as a result of this command, then -- the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-OpImageSampleWeightedQCOM-06972# If -- @OpImageSampleWeightedQCOM@ uses a 'Vulkan.Core10.Handles.ImageView' -- as a sample weight image as a result of this command, then the image -- view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-OpImageBoxFilterQCOM-06973# If -- @OpImageBoxFilterQCOM@ is used to sample a -- 'Vulkan.Core10.Handles.ImageView' as a result of this command, then -- the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-OpImageBlockMatchSSDQCOM-06974# If -- @OpImageBlockMatchSSDQCOM@ is used to read from an -- 'Vulkan.Core10.Handles.ImageView' as a result of this command, then -- the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-OpImageBlockMatchSADQCOM-06975# If -- @OpImageBlockMatchSADQCOM@ is used to read from an -- 'Vulkan.Core10.Handles.ImageView' as a result of this command, then -- the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-OpImageBlockMatchSADQCOM-06976# If -- @OpImageBlockMatchSADQCOM@ or OpImageBlockMatchSSDQCOM is used to -- read from a reference image as result of this command, then the -- specified reference coordinates /must/ not fail -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-integer-coordinate-validation integer texel coordinate validation> -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-OpImageSampleWeightedQCOM-06977# If -- @OpImageSampleWeightedQCOM@, @OpImageBoxFilterQCOM@, -- @OpImageBlockMatchWindowSSDQCOM@, @OpImageBlockMatchWindowSADQCOM@, -- @OpImageBlockMatchGatherSSDQCOM@, @OpImageBlockMatchGatherSADQCOM@, -- @OpImageBlockMatchSSDQCOM@, or @OpImageBlockMatchSADQCOM@ uses a -- 'Vulkan.Core10.Handles.Sampler' as a result of this command, then -- the sampler /must/ have been created with -- 'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-OpImageSampleWeightedQCOM-06978# If -- any command other than @OpImageSampleWeightedQCOM@, -- @OpImageBoxFilterQCOM@, @OpImageBlockMatchWindowSSDQCOM@, -- @OpImageBlockMatchWindowSADQCOM@, @OpImageBlockMatchGatherSSDQCOM@, -- @OpImageBlockMatchGatherSADQCOM@, @OpImageBlockMatchSSDQCOM@, or -- @OpImageBlockMatchSADQCOM@ uses a 'Vulkan.Core10.Handles.Sampler' as -- a result of this command, then the sampler /must/ not have been -- created with -- 'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-OpImageBlockMatchWindow-09215# If a -- @OpImageBlockMatchWindow*QCOM@ or @OpImageBlockMatchGather*QCOM@ -- instruction is used to read from an -- 'Vulkan.Core10.Handles.ImageView' as a result of this command, then -- the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-OpImageBlockMatchWindow-09216# If a -- @OpImageBlockMatchWindow*QCOM@ or @OpImageBlockMatchGather*QCOM@ -- instruction is used to read from an -- 'Vulkan.Core10.Handles.ImageView' as a result of this command, then -- the image view’s format /must/ be a single-component format -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-OpImageBlockMatchWindow-09217# If a -- @OpImageBlockMatchWindow*QCOM@ or @OpImageBlockMatchGather*QCOM@ -- read from a reference image as result of this command, then the -- specified reference coordinates /must/ not fail -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-integer-coordinate-validation integer texel coordinate validation> -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-07288# Any shader invocation -- executed by this command /must/ -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-termination terminate> -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-09600# If a descriptor with -- type equal to any of -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM', -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM', -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE', -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE', -- or -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT' -- is accessed as a result of this command, all image subresources -- identified by that descriptor /must/ be in the image layout -- identified when the descriptor was written -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-commandBuffer-10746# The -- 'Vulkan.Core10.Handles.DeviceMemory' object allocated from a -- 'Vulkan.Core10.DeviceInitialization.MemoryHeap' with the -- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_TILE_MEMORY_BIT_QCOM' -- property that is bound to a resource accessed as a result of this -- command /must/ be the active bound -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-bind-tile-memory bound tile memory object> -- in @commandBuffer@ -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-10678# If this command is -- recorded inside a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-tile-shading tile shading render pass> -- instance, the stages corresponding to the pipeline bind point used -- by this command /must/ only include -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT', -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT', -- and\/or -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-10679# If this command is -- recorded where -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-per-tile-execution-model per-tile execution model> -- is enabled, there /must/ be no access to any image while the image -- was be transitioned to the -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT' -- layout -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-pDescription-09900# If a -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_TENSOR_ARM' -- descriptor is accessed as a result of this command, then the -- underlying 'Vulkan.Extensions.Handles.TensorARM' object /must/ have -- been created with the -- 'Vulkan.Extensions.VK_ARM_tensors.TENSOR_USAGE_SHADER_BIT_ARM' usage -- flag set -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-dimensionCount-09905# If a -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_TENSOR_ARM' -- descriptor is accessed as a result of this command, then the @Rank@ -- of the @OpTypeTensorARM@ of the tensor resource variable /must/ be -- equal to the @dimensionCount@ provided via -- 'Vulkan.Extensions.VK_ARM_tensors.TensorCreateInfoARM'::@pDescription@ -- when creating the underlying 'Vulkan.Extensions.Handles.TensorARM' -- object -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-OpTypeTensorARM-09906# If a -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_TENSOR_ARM' -- descriptor is accessed as a result of this command, then the element -- type of the @OpTypeTensorARM@ of the tensor resource variable /must/ -- be -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-tensor-formats compatible> -- with the 'Vulkan.Core10.Enums.Format.Format' of the -- 'Vulkan.Extensions.Handles.TensorViewARM' used for the access -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11297# If a pipeline is bound -- to the pipeline bind point used by this command, or shader is bound -- to a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses a @OpTypeStruct@ decorated with @Block@ or -- @BufferBlock@ using that mapping, the calculated offset for the -- resource heap /must/ be a multiple of -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-bufferDescriptorAlignment bufferDescriptorAlignment> -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11298# If a pipeline is bound -- to the pipeline bind point used by this command, or shader is bound -- to a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses an @OpTypeImage@ or @OpTypeSampledImage@ using -- that mapping, the calculated offset for the resource heap /must/ be -- a multiple of -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-imageDescriptorAlignment imageDescriptorAlignment> -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11299# If a pipeline is bound -- to the pipeline bind point used by this command, or shader is bound -- to a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses an @OpTypeSampler@ or @OpTypeSampledImage@ -- using that mapping, the calculated offset for the sampler heap -- /must/ be a multiple of -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-samplerDescriptorAlignment samplerDescriptorAlignment> -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11397# If a pipeline is bound -- to the pipeline bind point used by this command, or shader is bound -- to a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses an @OpTypeTensorARM@ using that mapping, the -- calculated offset for the resource heap /must/ be a multiple of -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-tensorDescriptorAlignment tensorDescriptorAlignment> -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11300# If a pipeline is bound -- to the pipeline bind point used by this command, or shader is bound -- to a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT' -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address at the expected location in push data /must/ be a -- multiple of 4 -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11301# If a pipeline is bound -- to the pipeline bind point used by this command, or shader is bound -- to a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT' -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address at the expected location in push data /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' backed by physical -- memory at every offset specified by each mapping -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11302# If a pipeline is bound -- to the pipeline bind point used by this command, or shader is bound -- to a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address at the expected location in push data /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11304# If a pipeline is bound -- to the pipeline bind point used by this command, or shader is bound -- to a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address at the expected location in push data /must/ be a -- multiple of 8 -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11305# If a pipeline is bound -- to the pipeline bind point used by this command, or shader is bound -- to a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address at the expected location in push data /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' backed by physical -- memory at every offset specified by each mapping -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11306# If a pipeline is bound -- to the pipeline bind point used by this command, or shader is bound -- to a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address pointed to by the address in push data /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11308# For each -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps descriptor heap> -- that is statically used by -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>, -- either directly or via a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping>, -- a valid descriptor heap /must/ be bound -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11309# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding bound shader> -- was created as a 'Vulkan.Extensions.Handles.ShaderEXT' with the -- 'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT' -- flag or as part of a pipeline with the -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- flag, execution of this command /must/ not result in any descriptor -- read accessing data outside of the user range of the respective heap -- bound by @vkCmdBind*HeapEXT@ commands -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11372# If any stage of the -- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind -- point used by this command accesses a uniform buffer or uniform -- texel buffer through a descriptor in the bound resource heap, that -- stage was created without enabling either -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS' -- or -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2' -- for @uniformBuffers@, the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2> -- feature is not enabled, and the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess> -- feature is not enabled, that stage /must/ not access values outside -- of the range of the descriptor specified via -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DeviceAddressRangeEXT' -- when the descriptor was written -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11373# If any stage of the -- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind -- point used by this command accesses a storage buffer or storage -- texel buffer through a descriptor in the bound resource heap, that -- stage was created without enabling either -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS' -- or -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2' -- for @storageBuffers@, the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2> -- feature is not enabled, and the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess> -- feature is not enabled, that stage /must/ not access values outside -- of the range of the descriptor specified by -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DeviceAddressRangeEXT' -- when the descriptor was written -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11374# If the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2> -- feature is not enabled, the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess> -- feature is not enabled, and any -- 'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding -- to the pipeline bind point used by this command accesses a uniform -- buffer, uniform texel buffer, storage buffer, or storage texel -- buffer, that shader /must/ not access values outside of the range of -- the buffer as specified by -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DeviceAddressRangeEXT' -- when the descriptor was written -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-pBindInfo-11375# If any -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding bound shader> -- uses an embedded sampler via a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping>, -- the value of @pBindInfo->reservedRangeSize@ set for -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.cmdBindSamplerHeapEXT' -- /must/ be greater than or equal to -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-minSamplerHeapReservedRangeWithEmbedded minSamplerHeapReservedRangeWithEmbedded> -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11376# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding bound shader> -- was created as a 'Vulkan.Extensions.Handles.ShaderEXT' with the -- 'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT' -- flag or as part of a pipeline with the -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- flag, and that shader statically uses a push constant value, that -- value /must/ have been set by -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.cmdPushDataEXT' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11398# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding bound shader> -- was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the access -- /must/ not be -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-execution-memory-access-bounds out of bounds> -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11437# If a pipeline is bound -- to the pipeline bind point used by this command, or shader is bound -- to a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the buffer from -- which the address in push data was queried /must/ have been created -- with the -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_BUFFER_BIT' -- usage flag set -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11438# If a pipeline is bound -- to the pipeline bind point used by this command, or shader is bound -- to a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a uniform buffer using that mapping, the -- address that the uniform buffer is mapped to /must/ have been -- queried from a buffer created with the -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_BUFFER_BIT' -- usage flag set -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11441# If a pipeline is bound -- to the pipeline bind point used by this command, or shader is bound -- to a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a uniform buffer using that mapping, the -- address that the uniform buffer is mapped to /must/ be aligned to -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-minUniformBufferOffsetAlignment minUniformBufferOffsetAlignment> -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11439# If a pipeline is bound -- to the pipeline bind point used by this command, or shader is bound -- to a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a storage buffer using that mapping, the -- address that the storage buffer is mapped to /must/ have been -- queried from a buffer created with the -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_BUFFER_BIT' -- usage flag set -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11442# If a pipeline is bound -- to the pipeline bind point used by this command, or shader is bound -- to a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a storage buffer using that mapping, the -- address that the storage buffer is mapped to /must/ be aligned to -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-minStorageBufferOffsetAlignment minStorageBufferOffsetAlignment> -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11485# If a pipeline is bound -- to the pipeline bind point used by this command, or shader is bound -- to a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses an acceleration structure using that mapping, -- the address that the acceleration structure is mapped to /must/ be -- an acceleration structure address retrieved from a -- 'Vulkan.Extensions.Handles.AccelerationStructureKHR' object via -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.getAccelerationStructureDeviceAddressKHR' -- or handle retrieved from a -- 'Vulkan.Extensions.Handles.AccelerationStructureNV' object via -- 'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV' -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-index-11450# If a shader uses a -- sampler descriptor to sample an image as a result of this command, -- and that sampler descriptor uses a custom border color with an index -- defined by -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.SamplerCustomBorderColorIndexCreateInfoEXT', -- the value of -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.SamplerCustomBorderColorIndexCreateInfoEXT'::@index@ -- /must/ have been registered before this command was recorded, and -- still be registered during the sampling operation, with an -- identically defined color -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-protectedNoFault-11455# If -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-protectedNoFault protectedNoFault> -- is not supported, a pipeline is bound to the pipeline bind point -- used by this command, or a shader is bound to a shader stage used by -- this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- the address that the resource is mapped to /must/ have been queried -- from a buffer created without the -- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT' -- create flag set -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-protectedNoFault-11456# If -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-protectedNoFault protectedNoFault> -- is not supported, a pipeline is bound to the pipeline bind point -- used by this command, or a shader is bound to a shader stage used by -- this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT' -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- the address of the indirect memory /must/ have been queried from a -- buffer created without the -- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT' -- create flag set -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-03429# Any shader group handle -- referenced by this call /must/ have been queried from the bound ray -- tracing pipeline -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-09458# If the bound ray -- tracing pipeline state was created with the -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR' -- dynamic state enabled then -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.cmdSetRayTracingPipelineStackSizeKHR' -- /must/ have been called in the current command buffer prior to this -- trace command -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-None-11319# If a pipeline is bound -- to the pipeline bind point used by this command, or shader is bound -- to a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- the value of the address at the expected location in shader record -- data /must/ be a valid address -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-maxPipelineRayRecursionDepth-03679# -- This command /must/ not cause a shader call instruction to be -- executed from a shader invocation with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing-recursion-depth recursion depth> -- greater than the value of @maxPipelineRayRecursionDepth@ used to -- create the bound ray tracing pipeline -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-commandBuffer-03635# -- @commandBuffer@ /must/ not be a protected command buffer -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-indirectDeviceAddress-03633# -- @indirectDeviceAddress@ /must/ be a device address allocated to the -- application from a buffer created with the -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT' -- usage flag set -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-indirectDeviceAddress-03634# -- @indirectDeviceAddress@ /must/ be a multiple of @4@ -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-indirectDeviceAddress-03636# All -- device addresses between @indirectDeviceAddress@ and -- @indirectDeviceAddress@ + @sizeof@('TraceRaysIndirectCommand2KHR') - -- 1 /must/ be in the buffer device address range of the same buffer -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-rayTracingPipelineTraceRaysIndirect2-03637# -- The -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayTracingPipelineTraceRaysIndirect2 rayTracingPipelineTraceRaysIndirect2> -- feature /must/ be enabled -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-rayTracingMotionBlurPipelineTraceRaysIndirect-04951# -- If the bound ray tracing pipeline was created with -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV' -- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.PhysicalDeviceRayTracingMotionBlurFeaturesNV'::@rayTracingMotionBlurPipelineTraceRaysIndirect@ -- feature /must/ be enabled -- -- == Valid Usage (Implicit) -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-commandBuffer-parameter# -- @commandBuffer@ /must/ be a valid -- 'Vulkan.Core10.Handles.CommandBuffer' handle -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-indirectDeviceAddress-parameter# -- @indirectDeviceAddress@ /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' value -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-commandBuffer-recording# -- @commandBuffer@ /must/ be in the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-commandBuffer-cmdpool# The -- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was -- allocated from /must/ support -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT' operations -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-renderpass# This command /must/ -- only be called outside of a render pass instance -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-suspended# This command /must/ not -- be called between suspended render pass instances -- -- - #VUID-vkCmdTraceRaysIndirect2KHR-videocoding# This command /must/ -- only be called outside of a video coding scope -- -- == Host Synchronization -- -- - Host access to @commandBuffer@ /must/ be externally synchronized -- -- - Host access to the 'Vulkan.Core10.Handles.CommandPool' that -- @commandBuffer@ was allocated from /must/ be externally synchronized -- -- == Command Properties -- -- \' -- -- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+ -- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginVideoCodingKHR Video Coding Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-queueoperation-command-types Command Type> | -- +============================================================================================================================+========================================================================================================================+=============================================================================================================================+=======================================================================================================================+========================================================================================================================================+ -- | Primary | Outside | Outside | VK_QUEUE_COMPUTE_BIT | Action | -- | Secondary | | | | | -- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+ -- -- == Conditional Rendering -- -- vkCmdTraceRaysIndirect2KHR is not affected by -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-conditional-rendering conditional rendering> -- -- = See Also -- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_ray_tracing_maintenance1 VK_KHR_ray_tracing_maintenance1>, -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_ray_tracing_pipeline VK_KHR_ray_tracing_pipeline>, -- 'Vulkan.Core10.Handles.CommandBuffer', -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' cmdTraceRaysIndirect2KHR :: forall io . (MonadIO io) => -- | @commandBuffer@ is the command buffer into which the command will be -- recorded. CommandBuffer -> -- | @indirectDeviceAddress@ is a buffer device address which is a pointer to -- a 'TraceRaysIndirectCommand2KHR' structure containing the trace ray -- parameters. ("indirectDeviceAddress" ::: DeviceAddress) -> io () cmdTraceRaysIndirect2KHR :: forall (io :: * -> *). MonadIO io => CommandBuffer -> ("indirectDeviceAddress" ::: DeviceAddress) -> io () cmdTraceRaysIndirect2KHR CommandBuffer commandBuffer "indirectDeviceAddress" ::: DeviceAddress indirectDeviceAddress = IO () -> io () forall a. IO a -> io a forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO () -> io ()) -> IO () -> io () forall a b. (a -> b) -> a -> b $ do let vkCmdTraceRaysIndirect2KHRPtr :: FunPtr (Ptr CommandBuffer_T -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO ()) vkCmdTraceRaysIndirect2KHRPtr = DeviceCmds -> FunPtr (Ptr CommandBuffer_T -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO ()) pVkCmdTraceRaysIndirect2KHR (case CommandBuffer commandBuffer of CommandBuffer{DeviceCmds deviceCmds :: DeviceCmds deviceCmds :: CommandBuffer -> DeviceCmds deviceCmds} -> DeviceCmds deviceCmds) Bool -> IO () -> IO () forall (f :: * -> *). Applicative f => Bool -> f () -> f () unless (FunPtr (Ptr CommandBuffer_T -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO ()) vkCmdTraceRaysIndirect2KHRPtr FunPtr (Ptr CommandBuffer_T -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO ()) -> FunPtr (Ptr CommandBuffer_T -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO ()) -> Bool forall a. Eq a => a -> a -> Bool /= FunPtr (Ptr CommandBuffer_T -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO ()) forall a. FunPtr a nullFunPtr) (IO () -> IO ()) -> IO () -> IO () forall a b. (a -> b) -> a -> b $ IOException -> IO () forall e a. (HasCallStack, Exception e) => e -> IO a throwIO (IOException -> IO ()) -> IOException -> IO () forall a b. (a -> b) -> a -> b $ Maybe Handle -> IOErrorType -> String -> String -> Maybe CInt -> Maybe String -> IOException IOError Maybe Handle forall a. Maybe a Nothing IOErrorType InvalidArgument String "" String "The function pointer for vkCmdTraceRaysIndirect2KHR is null" Maybe CInt forall a. Maybe a Nothing Maybe String forall a. Maybe a Nothing let vkCmdTraceRaysIndirect2KHR' :: Ptr CommandBuffer_T -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () vkCmdTraceRaysIndirect2KHR' = FunPtr (Ptr CommandBuffer_T -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO ()) -> Ptr CommandBuffer_T -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () mkVkCmdTraceRaysIndirect2KHR FunPtr (Ptr CommandBuffer_T -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO ()) vkCmdTraceRaysIndirect2KHRPtr String -> IO () -> IO () forall a. String -> IO a -> IO a traceAroundEvent String "vkCmdTraceRaysIndirect2KHR" (Ptr CommandBuffer_T -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () vkCmdTraceRaysIndirect2KHR' (CommandBuffer -> Ptr CommandBuffer_T commandBufferHandle (CommandBuffer commandBuffer)) ("indirectDeviceAddress" ::: DeviceAddress indirectDeviceAddress)) () -> IO () forall a. a -> IO a forall (f :: * -> *) a. Applicative f => a -> f a pure (() -> IO ()) -> () -> IO () forall a b. (a -> b) -> a -> b $ () -- | VkTraceRaysIndirectCommand2KHR - Structure specifying the parameters of -- an indirect trace ray command with indirect shader binding tables -- -- = Description -- -- The members of 'TraceRaysIndirectCommand2KHR' have the same meaning as -- the similarly named parameters of -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.cmdTraceRaysKHR'. -- -- Indirect shader binding table buffer parameters /must/ satisfy the same -- memory alignment and binding requirements as their counterparts in -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.cmdTraceRaysIndirectKHR' -- and 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.cmdTraceRaysKHR'. -- -- == Valid Usage -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-pRayGenShaderBindingTable-03681# -- @raygenShaderRecordAddress@ /must/ be a device address allocated to -- the application from a buffer created with the -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR' -- usage flag set -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-pRayGenShaderBindingTable-03682# -- @raygenShaderRecordAddress@ /must/ be a multiple of -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupBaseAlignment@ -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-pMissShaderBindingTable-03684# -- @missShaderBindingTableAddress@ /must/ be a device address allocated -- to the application from a buffer created with the -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR' -- usage flag set -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-pMissShaderBindingTable-03685# -- @missShaderBindingTableAddress@ /must/ be a multiple of -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupBaseAlignment@ -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-stride-03686# -- @missShaderBindingTableStride@ /must/ be a multiple of -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupHandleAlignment@ -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-stride-04029# -- @missShaderBindingTableStride@ /must/ be less than or equal to -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxShaderGroupStride@ -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-pHitShaderBindingTable-03688# -- @hitShaderBindingTableAddress@ /must/ be a device address allocated -- to the application from a buffer created with the -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR' -- usage flag set -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-pHitShaderBindingTable-03689# -- @hitShaderBindingTableAddress@ /must/ be a multiple of -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupBaseAlignment@ -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-stride-03690# -- @hitShaderBindingTableStride@ /must/ be a multiple of -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupHandleAlignment@ -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-stride-04035# -- @hitShaderBindingTableStride@ /must/ be less than or equal to -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxShaderGroupStride@ -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-pCallableShaderBindingTable-03692# -- @callableShaderBindingTableAddress@ /must/ be a device address -- allocated to the application from a buffer created with the -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR' -- usage flag set -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-pCallableShaderBindingTable-03693# -- @callableShaderBindingTableAddress@ /must/ be a multiple of -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupBaseAlignment@ -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-stride-03694# -- @callableShaderBindingTableStride@ /must/ be a multiple of -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupHandleAlignment@ -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-stride-04041# -- @callableShaderBindingTableStride@ /must/ be less than or equal to -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxShaderGroupStride@ -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-flags-03511# If the bound ray -- tracing pipeline was created with @flags@ that included -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR', -- the entries in the table identified by -- @missShaderBindingTableAddress@ accessed as a result of this command -- in order to execute a miss shader /must/ not be zero -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-flags-03512# If the bound ray -- tracing pipeline was created with @flags@ that included -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR', -- entries in the table identified by @hitShaderBindingTableAddress@ -- accessed as a result of this command in order to execute an any-hit -- shader /must/ not be zero -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-flags-03513# If the bound ray -- tracing pipeline was created with @flags@ that included -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR', -- entries in the table identified by @hitShaderBindingTableAddress@ -- accessed as a result of this command in order to execute a closest -- hit shader /must/ not be zero -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-flags-03514# If the bound ray -- tracing pipeline was created with @flags@ that included -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR', -- entries in the table identified by @hitShaderBindingTableAddress@ -- accessed as a result of this command in order to execute an -- intersection shader /must/ not be zero -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-pHitShaderBindingTable-04735# -- Any non-zero hit shader group entries in the table identified by -- @hitShaderBindingTableAddress@ accessed by this call from a geometry -- with a @geometryType@ of -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.GEOMETRY_TYPE_TRIANGLES_KHR' -- /must/ have been created with -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-pHitShaderBindingTable-04736# -- Any non-zero hit shader group entries in the table identified by -- @hitShaderBindingTableAddress@ accessed by this call from a geometry -- with a @geometryType@ of -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.GEOMETRY_TYPE_AABBS_KHR' -- /must/ have been created with -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR' -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-width-03638# @width@ /must/ be -- less than or equal to -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0] -- × -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupSize@[0] -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-height-03639# @height@ /must/ -- be less than or equal to -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1] -- × -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupSize@[1] -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-depth-03640# @depth@ /must/ be -- less than or equal to -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2] -- × -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupSize@[2] -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-width-03641# @width@ × @height@ -- × @depth@ /must/ be less than or equal to -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxRayDispatchInvocationCount@ -- -- == Valid Usage (Implicit) -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-raygenShaderRecordAddress-parameter# -- @raygenShaderRecordAddress@ /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' value -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-missShaderBindingTableAddress-parameter# -- @missShaderBindingTableAddress@ /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' value -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-hitShaderBindingTableAddress-parameter# -- @hitShaderBindingTableAddress@ /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' value -- -- - #VUID-VkTraceRaysIndirectCommand2KHR-callableShaderBindingTableAddress-parameter# -- @callableShaderBindingTableAddress@ /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' value -- -- = See Also -- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_ray_tracing_maintenance1 VK_KHR_ray_tracing_maintenance1>, -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_ray_tracing_pipeline VK_KHR_ray_tracing_pipeline>, -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress', -- 'Vulkan.Core10.FundamentalTypes.DeviceSize' data TraceRaysIndirectCommand2KHR = TraceRaysIndirectCommand2KHR { -- | @raygenShaderRecordAddress@ is a -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' of the ray generation -- shader binding table record used by this command. TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress raygenShaderRecordAddress :: DeviceAddress , -- | @raygenShaderRecordSize@ is a -- 'Vulkan.Core10.FundamentalTypes.DeviceSize' number of bytes -- corresponding to the ray generation shader binding table record at base -- address @raygenShaderRecordAddress@. TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress raygenShaderRecordSize :: DeviceSize , -- | @missShaderBindingTableAddress@ is a -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' of the first record in -- the miss shader binding table used by this command. TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress missShaderBindingTableAddress :: DeviceAddress , -- | @missShaderBindingTableSize@ is a -- 'Vulkan.Core10.FundamentalTypes.DeviceSize' number of bytes -- corresponding to the total size of the miss shader binding table at -- @missShaderBindingTableAddress@ that may be accessed by this command. TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress missShaderBindingTableSize :: DeviceSize , -- | @missShaderBindingTableStride@ is a -- 'Vulkan.Core10.FundamentalTypes.DeviceSize' number of bytes between -- records of the miss shader binding table. TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress missShaderBindingTableStride :: DeviceSize , -- | @hitShaderBindingTableAddress@ is a -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' of the first record in -- the hit shader binding table used by this command. TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress hitShaderBindingTableAddress :: DeviceAddress , -- | @hitShaderBindingTableSize@ is a -- 'Vulkan.Core10.FundamentalTypes.DeviceSize' number of bytes -- corresponding to the total size of the hit shader binding table at -- @hitShaderBindingTableAddress@ that may be accessed by this command. TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress hitShaderBindingTableSize :: DeviceSize , -- | @hitShaderBindingTableStride@ is a -- 'Vulkan.Core10.FundamentalTypes.DeviceSize' number of bytes between -- records of the hit shader binding table. TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress hitShaderBindingTableStride :: DeviceSize , -- | @callableShaderBindingTableAddress@ is a -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' of the first record in -- the callable shader binding table used by this command. TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress callableShaderBindingTableAddress :: DeviceAddress , -- | @callableShaderBindingTableSize@ is a -- 'Vulkan.Core10.FundamentalTypes.DeviceSize' number of bytes -- corresponding to the total size of the callable shader binding table at -- @callableShaderBindingTableAddress@ that may be accessed by this -- command. TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress callableShaderBindingTableSize :: DeviceSize , -- | @callableShaderBindingTableStride@ is a -- 'Vulkan.Core10.FundamentalTypes.DeviceSize' number of bytes between -- records of the callable shader binding table. TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress callableShaderBindingTableStride :: DeviceSize , -- | @width@ is the width of the ray trace query dimensions. TraceRaysIndirectCommand2KHR -> Word32 width :: Word32 , -- | @height@ is height of the ray trace query dimensions. TraceRaysIndirectCommand2KHR -> Word32 height :: Word32 , -- | @depth@ is depth of the ray trace query dimensions. TraceRaysIndirectCommand2KHR -> Word32 depth :: Word32 } deriving (Typeable, TraceRaysIndirectCommand2KHR -> TraceRaysIndirectCommand2KHR -> Bool (TraceRaysIndirectCommand2KHR -> TraceRaysIndirectCommand2KHR -> Bool) -> (TraceRaysIndirectCommand2KHR -> TraceRaysIndirectCommand2KHR -> Bool) -> Eq TraceRaysIndirectCommand2KHR forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: TraceRaysIndirectCommand2KHR -> TraceRaysIndirectCommand2KHR -> Bool == :: TraceRaysIndirectCommand2KHR -> TraceRaysIndirectCommand2KHR -> Bool $c/= :: TraceRaysIndirectCommand2KHR -> TraceRaysIndirectCommand2KHR -> Bool /= :: TraceRaysIndirectCommand2KHR -> TraceRaysIndirectCommand2KHR -> Bool Eq) #if defined(GENERIC_INSTANCES) deriving instance Generic (TraceRaysIndirectCommand2KHR) #endif deriving instance Show TraceRaysIndirectCommand2KHR instance ToCStruct TraceRaysIndirectCommand2KHR where withCStruct :: forall b. TraceRaysIndirectCommand2KHR -> (Ptr TraceRaysIndirectCommand2KHR -> IO b) -> IO b withCStruct TraceRaysIndirectCommand2KHR x Ptr TraceRaysIndirectCommand2KHR -> IO b f = Int -> (Ptr TraceRaysIndirectCommand2KHR -> IO b) -> IO b forall a b. Int -> (Ptr a -> IO b) -> IO b allocaBytes Int 104 ((Ptr TraceRaysIndirectCommand2KHR -> IO b) -> IO b) -> (Ptr TraceRaysIndirectCommand2KHR -> IO b) -> IO b forall a b. (a -> b) -> a -> b $ \Ptr TraceRaysIndirectCommand2KHR p -> Ptr TraceRaysIndirectCommand2KHR -> TraceRaysIndirectCommand2KHR -> IO b -> IO b forall b. Ptr TraceRaysIndirectCommand2KHR -> TraceRaysIndirectCommand2KHR -> IO b -> IO b forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b pokeCStruct Ptr TraceRaysIndirectCommand2KHR p TraceRaysIndirectCommand2KHR x (Ptr TraceRaysIndirectCommand2KHR -> IO b f Ptr TraceRaysIndirectCommand2KHR p) pokeCStruct :: forall b. Ptr TraceRaysIndirectCommand2KHR -> TraceRaysIndirectCommand2KHR -> IO b -> IO b pokeCStruct Ptr TraceRaysIndirectCommand2KHR p TraceRaysIndirectCommand2KHR{Word32 "indirectDeviceAddress" ::: DeviceAddress raygenShaderRecordAddress :: TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress raygenShaderRecordSize :: TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress missShaderBindingTableAddress :: TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress missShaderBindingTableSize :: TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress missShaderBindingTableStride :: TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress hitShaderBindingTableAddress :: TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress hitShaderBindingTableSize :: TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress hitShaderBindingTableStride :: TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress callableShaderBindingTableAddress :: TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress callableShaderBindingTableSize :: TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress callableShaderBindingTableStride :: TraceRaysIndirectCommand2KHR -> "indirectDeviceAddress" ::: DeviceAddress width :: TraceRaysIndirectCommand2KHR -> Word32 height :: TraceRaysIndirectCommand2KHR -> Word32 depth :: TraceRaysIndirectCommand2KHR -> Word32 raygenShaderRecordAddress :: "indirectDeviceAddress" ::: DeviceAddress raygenShaderRecordSize :: "indirectDeviceAddress" ::: DeviceAddress missShaderBindingTableAddress :: "indirectDeviceAddress" ::: DeviceAddress missShaderBindingTableSize :: "indirectDeviceAddress" ::: DeviceAddress missShaderBindingTableStride :: "indirectDeviceAddress" ::: DeviceAddress hitShaderBindingTableAddress :: "indirectDeviceAddress" ::: DeviceAddress hitShaderBindingTableSize :: "indirectDeviceAddress" ::: DeviceAddress hitShaderBindingTableStride :: "indirectDeviceAddress" ::: DeviceAddress callableShaderBindingTableAddress :: "indirectDeviceAddress" ::: DeviceAddress callableShaderBindingTableSize :: "indirectDeviceAddress" ::: DeviceAddress callableShaderBindingTableStride :: "indirectDeviceAddress" ::: DeviceAddress width :: Word32 height :: Word32 depth :: Word32 ..} IO b f = do Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr DeviceAddress)) ("indirectDeviceAddress" ::: DeviceAddress raygenShaderRecordAddress) Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr DeviceSize)) ("indirectDeviceAddress" ::: DeviceAddress raygenShaderRecordSize) Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr DeviceAddress)) ("indirectDeviceAddress" ::: DeviceAddress missShaderBindingTableAddress) Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 24 :: Ptr DeviceSize)) ("indirectDeviceAddress" ::: DeviceAddress missShaderBindingTableSize) Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 32 :: Ptr DeviceSize)) ("indirectDeviceAddress" ::: DeviceAddress missShaderBindingTableStride) Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 40 :: Ptr DeviceAddress)) ("indirectDeviceAddress" ::: DeviceAddress hitShaderBindingTableAddress) Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 48 :: Ptr DeviceSize)) ("indirectDeviceAddress" ::: DeviceAddress hitShaderBindingTableSize) Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 56 :: Ptr DeviceSize)) ("indirectDeviceAddress" ::: DeviceAddress hitShaderBindingTableStride) Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 64 :: Ptr DeviceAddress)) ("indirectDeviceAddress" ::: DeviceAddress callableShaderBindingTableAddress) Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 72 :: Ptr DeviceSize)) ("indirectDeviceAddress" ::: DeviceAddress callableShaderBindingTableSize) Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 80 :: Ptr DeviceSize)) ("indirectDeviceAddress" ::: DeviceAddress callableShaderBindingTableStride) Ptr Word32 -> Word32 -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr Word32 forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 88 :: Ptr Word32)) (Word32 width) Ptr Word32 -> Word32 -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr Word32 forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 92 :: Ptr Word32)) (Word32 height) Ptr Word32 -> Word32 -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr Word32 forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 96 :: Ptr Word32)) (Word32 depth) IO b f cStructSize :: Int cStructSize = Int 104 cStructAlignment :: Int cStructAlignment = Int 8 pokeZeroCStruct :: forall b. Ptr TraceRaysIndirectCommand2KHR -> IO b -> IO b pokeZeroCStruct Ptr TraceRaysIndirectCommand2KHR p IO b f = do Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr DeviceAddress)) ("indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero) Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr DeviceSize)) ("indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero) Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr DeviceAddress)) ("indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero) Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 24 :: Ptr DeviceSize)) ("indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero) Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 32 :: Ptr DeviceSize)) ("indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero) Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 40 :: Ptr DeviceAddress)) ("indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero) Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 48 :: Ptr DeviceSize)) ("indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero) Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 56 :: Ptr DeviceSize)) ("indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero) Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 64 :: Ptr DeviceAddress)) ("indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero) Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 72 :: Ptr DeviceSize)) ("indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero) Ptr ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 80 :: Ptr DeviceSize)) ("indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero) Ptr Word32 -> Word32 -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr Word32 forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 88 :: Ptr Word32)) (Word32 forall a. Zero a => a zero) Ptr Word32 -> Word32 -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr Word32 forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 92 :: Ptr Word32)) (Word32 forall a. Zero a => a zero) Ptr Word32 -> Word32 -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr Word32 forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 96 :: Ptr Word32)) (Word32 forall a. Zero a => a zero) IO b f instance FromCStruct TraceRaysIndirectCommand2KHR where peekCStruct :: Ptr TraceRaysIndirectCommand2KHR -> IO TraceRaysIndirectCommand2KHR peekCStruct Ptr TraceRaysIndirectCommand2KHR p = do raygenShaderRecordAddress <- forall a. Storable a => Ptr a -> IO a peek @DeviceAddress ((Ptr TraceRaysIndirectCommand2KHR p Ptr TraceRaysIndirectCommand2KHR -> Int -> Ptr ("indirectDeviceAddress" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr DeviceAddress)) raygenShaderRecordSize <- peek @DeviceSize ((p `plusPtr` 8 :: Ptr DeviceSize)) missShaderBindingTableAddress <- peek @DeviceAddress ((p `plusPtr` 16 :: Ptr DeviceAddress)) missShaderBindingTableSize <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize)) missShaderBindingTableStride <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize)) hitShaderBindingTableAddress <- peek @DeviceAddress ((p `plusPtr` 40 :: Ptr DeviceAddress)) hitShaderBindingTableSize <- peek @DeviceSize ((p `plusPtr` 48 :: Ptr DeviceSize)) hitShaderBindingTableStride <- peek @DeviceSize ((p `plusPtr` 56 :: Ptr DeviceSize)) callableShaderBindingTableAddress <- peek @DeviceAddress ((p `plusPtr` 64 :: Ptr DeviceAddress)) callableShaderBindingTableSize <- peek @DeviceSize ((p `plusPtr` 72 :: Ptr DeviceSize)) callableShaderBindingTableStride <- peek @DeviceSize ((p `plusPtr` 80 :: Ptr DeviceSize)) width <- peek @Word32 ((p `plusPtr` 88 :: Ptr Word32)) height <- peek @Word32 ((p `plusPtr` 92 :: Ptr Word32)) depth <- peek @Word32 ((p `plusPtr` 96 :: Ptr Word32)) pure $ TraceRaysIndirectCommand2KHR raygenShaderRecordAddress raygenShaderRecordSize missShaderBindingTableAddress missShaderBindingTableSize missShaderBindingTableStride hitShaderBindingTableAddress hitShaderBindingTableSize hitShaderBindingTableStride callableShaderBindingTableAddress callableShaderBindingTableSize callableShaderBindingTableStride width height depth instance Storable TraceRaysIndirectCommand2KHR where sizeOf :: TraceRaysIndirectCommand2KHR -> Int sizeOf ~TraceRaysIndirectCommand2KHR _ = Int 104 alignment :: TraceRaysIndirectCommand2KHR -> Int alignment ~TraceRaysIndirectCommand2KHR _ = Int 8 peek :: Ptr TraceRaysIndirectCommand2KHR -> IO TraceRaysIndirectCommand2KHR peek = Ptr TraceRaysIndirectCommand2KHR -> IO TraceRaysIndirectCommand2KHR forall a. FromCStruct a => Ptr a -> IO a peekCStruct poke :: Ptr TraceRaysIndirectCommand2KHR -> TraceRaysIndirectCommand2KHR -> IO () poke Ptr TraceRaysIndirectCommand2KHR ptr TraceRaysIndirectCommand2KHR poked = Ptr TraceRaysIndirectCommand2KHR -> TraceRaysIndirectCommand2KHR -> IO () -> IO () forall b. Ptr TraceRaysIndirectCommand2KHR -> TraceRaysIndirectCommand2KHR -> IO b -> IO b forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b pokeCStruct Ptr TraceRaysIndirectCommand2KHR ptr TraceRaysIndirectCommand2KHR poked (() -> IO () forall a. a -> IO a forall (f :: * -> *) a. Applicative f => a -> f a pure ()) instance Zero TraceRaysIndirectCommand2KHR where zero :: TraceRaysIndirectCommand2KHR zero = ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> ("indirectDeviceAddress" ::: DeviceAddress) -> Word32 -> Word32 -> Word32 -> TraceRaysIndirectCommand2KHR TraceRaysIndirectCommand2KHR "indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero "indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero "indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero "indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero "indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero "indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero "indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero "indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero "indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero "indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero "indirectDeviceAddress" ::: DeviceAddress forall a. Zero a => a zero Word32 forall a. Zero a => a zero Word32 forall a. Zero a => a zero Word32 forall a. Zero a => a zero -- | VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR - Structure describing -- the ray tracing maintenance features that can be supported by an -- implementation -- -- = Members -- -- This structure describes the following features: -- -- = Description -- -- If the 'PhysicalDeviceRayTracingMaintenance1FeaturesKHR' structure is -- included in the @pNext@ chain of the -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2' -- structure passed to -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2', -- it is filled in to indicate whether each corresponding feature is -- supported. If the application wishes to use a -- 'Vulkan.Core10.Handles.Device' with any features described by -- 'PhysicalDeviceRayTracingMaintenance1FeaturesKHR', it /must/ add an -- instance of the structure, with the desired feature members set to -- 'Vulkan.Core10.FundamentalTypes.TRUE', to the @pNext@ chain of -- 'Vulkan.Core10.Device.DeviceCreateInfo' when creating the -- 'Vulkan.Core10.Handles.Device'. -- -- == Valid Usage (Implicit) -- -- = See Also -- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_ray_tracing_maintenance1 VK_KHR_ray_tracing_maintenance1>, -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceRayTracingMaintenance1FeaturesKHR = PhysicalDeviceRayTracingMaintenance1FeaturesKHR { -- | #features-rayTracingMaintenance1# @rayTracingMaintenance1@ indicates -- that the implementation supports the following: -- -- - The @CullMaskKHR@ SPIR-V builtin using the @SPV_KHR_ray_cull_mask@ -- SPIR-V extension. -- -- - Additional acceleration structure property queries: -- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR' -- and -- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR'. -- -- - A new access flag -- 'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR'. -- -- - A new pipeline stage flag bit -- 'Vulkan.Core13.Enums.PipelineStageFlags2.PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR' PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Bool rayTracingMaintenance1 :: Bool , -- | #features-rayTracingPipelineTraceRaysIndirect2# -- @rayTracingPipelineTraceRaysIndirect2@ indicates whether the -- implementation supports the extended indirect ray tracing command -- 'cmdTraceRaysIndirect2KHR'. PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Bool rayTracingPipelineTraceRaysIndirect2 :: Bool } deriving (Typeable, PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Bool (PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Bool) -> (PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Bool) -> Eq PhysicalDeviceRayTracingMaintenance1FeaturesKHR forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Bool == :: PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Bool $c/= :: PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Bool /= :: PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Bool Eq) #if defined(GENERIC_INSTANCES) deriving instance Generic (PhysicalDeviceRayTracingMaintenance1FeaturesKHR) #endif deriving instance Show PhysicalDeviceRayTracingMaintenance1FeaturesKHR instance ToCStruct PhysicalDeviceRayTracingMaintenance1FeaturesKHR where withCStruct :: forall b. PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> (Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> IO b) -> IO b withCStruct PhysicalDeviceRayTracingMaintenance1FeaturesKHR x Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> IO b f = Int -> (Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> IO b) -> IO b forall a b. Int -> (Ptr a -> IO b) -> IO b allocaBytes Int 24 ((Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> IO b) -> IO b) -> (Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> IO b) -> IO b forall a b. (a -> b) -> a -> b $ \Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR p -> Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> IO b -> IO b forall b. Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> IO b -> IO b forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b pokeCStruct Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR p PhysicalDeviceRayTracingMaintenance1FeaturesKHR x (Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> IO b f Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR p) pokeCStruct :: forall b. Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> IO b -> IO b pokeCStruct Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR p PhysicalDeviceRayTracingMaintenance1FeaturesKHR{Bool rayTracingMaintenance1 :: PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Bool rayTracingPipelineTraceRaysIndirect2 :: PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Bool rayTracingMaintenance1 :: Bool rayTracingPipelineTraceRaysIndirect2 :: Bool ..} IO b f = do Ptr StructureType -> StructureType -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR p Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Int -> Ptr StructureType forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr StructureType)) (StructureType STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR) Ptr (Ptr ()) -> Ptr () -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR p Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Int -> Ptr (Ptr ()) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr (Ptr ()))) (Ptr () forall a. Ptr a nullPtr) Ptr Bool32 -> Bool32 -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR p Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Int -> Ptr Bool32 forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr Bool32)) (Bool -> Bool32 boolToBool32 (Bool rayTracingMaintenance1)) Ptr Bool32 -> Bool32 -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR p Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Int -> Ptr Bool32 forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 20 :: Ptr Bool32)) (Bool -> Bool32 boolToBool32 (Bool rayTracingPipelineTraceRaysIndirect2)) IO b f cStructSize :: Int cStructSize = Int 24 cStructAlignment :: Int cStructAlignment = Int 8 pokeZeroCStruct :: forall b. Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> IO b -> IO b pokeZeroCStruct Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR p IO b f = do Ptr StructureType -> StructureType -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR p Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Int -> Ptr StructureType forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr StructureType)) (StructureType STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR) Ptr (Ptr ()) -> Ptr () -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR p Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Int -> Ptr (Ptr ()) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr (Ptr ()))) (Ptr () forall a. Ptr a nullPtr) Ptr Bool32 -> Bool32 -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR p Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Int -> Ptr Bool32 forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr Bool32)) (Bool -> Bool32 boolToBool32 (Bool forall a. Zero a => a zero)) Ptr Bool32 -> Bool32 -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR p Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Int -> Ptr Bool32 forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 20 :: Ptr Bool32)) (Bool -> Bool32 boolToBool32 (Bool forall a. Zero a => a zero)) IO b f instance FromCStruct PhysicalDeviceRayTracingMaintenance1FeaturesKHR where peekCStruct :: Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> IO PhysicalDeviceRayTracingMaintenance1FeaturesKHR peekCStruct Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR p = do rayTracingMaintenance1 <- forall a. Storable a => Ptr a -> IO a peek @Bool32 ((Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR p Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Int -> Ptr Bool32 forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr Bool32)) rayTracingPipelineTraceRaysIndirect2 <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32)) pure $ PhysicalDeviceRayTracingMaintenance1FeaturesKHR (bool32ToBool rayTracingMaintenance1) (bool32ToBool rayTracingPipelineTraceRaysIndirect2) instance Storable PhysicalDeviceRayTracingMaintenance1FeaturesKHR where sizeOf :: PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Int sizeOf ~PhysicalDeviceRayTracingMaintenance1FeaturesKHR _ = Int 24 alignment :: PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> Int alignment ~PhysicalDeviceRayTracingMaintenance1FeaturesKHR _ = Int 8 peek :: Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> IO PhysicalDeviceRayTracingMaintenance1FeaturesKHR peek = Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> IO PhysicalDeviceRayTracingMaintenance1FeaturesKHR forall a. FromCStruct a => Ptr a -> IO a peekCStruct poke :: Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> IO () poke Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR poked = Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> IO () -> IO () forall b. Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> PhysicalDeviceRayTracingMaintenance1FeaturesKHR -> IO b -> IO b forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b pokeCStruct Ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR ptr PhysicalDeviceRayTracingMaintenance1FeaturesKHR poked (() -> IO () forall a. a -> IO a forall (f :: * -> *) a. Applicative f => a -> f a pure ()) instance Zero PhysicalDeviceRayTracingMaintenance1FeaturesKHR where zero :: PhysicalDeviceRayTracingMaintenance1FeaturesKHR zero = Bool -> Bool -> PhysicalDeviceRayTracingMaintenance1FeaturesKHR PhysicalDeviceRayTracingMaintenance1FeaturesKHR Bool forall a. Zero a => a zero Bool forall a. Zero a => a zero type KHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION = 1 -- No documentation found for TopLevel "VK_KHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION" pattern KHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION :: forall a . Integral a => a pattern $mKHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION :: forall {r} {a}. Integral a => a -> ((# #) -> r) -> ((# #) -> r) -> r $bKHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION :: forall a. Integral a => a KHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION = 1 type KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME = "VK_KHR_ray_tracing_maintenance1" -- No documentation found for TopLevel "VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME" pattern KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a pattern $mKHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME :: forall {r} {a}. (Eq a, IsString a) => a -> ((# #) -> r) -> ((# #) -> r) -> r $bKHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME = "VK_KHR_ray_tracing_maintenance1"