{-# language CPP #-} -- | = Name -- -- VK_KHR_ray_tracing_pipeline - device extension -- -- = VK_KHR_ray_tracing_pipeline -- -- [__Name String__] -- @VK_KHR_ray_tracing_pipeline@ -- -- [__Extension Type__] -- Device extension -- -- [__Registered Extension Number__] -- 348 -- -- [__Revision__] -- 1 -- -- [__Ratification Status__] -- Ratified -- -- [__Extension and Version Dependencies__] -- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_spirv_1_4 VK_KHR_spirv_1_4> -- or -- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#versions-1.2 Vulkan Version 1.2> -- and -- <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_KHR_ray_query -- -- [__SPIR-V Dependencies__] -- -- - <https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/KHR/SPV_KHR_ray_tracing.html SPV_KHR_ray_tracing> -- -- [__Contact__] -- -- - Daniel Koch -- <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_KHR_ray_tracing_pipeline] @dgkoch%0A*Here describe the issue or question you have about the VK_KHR_ray_tracing_pipeline extension* > -- -- == Other Extension Metadata -- -- [__Last Modified Date__] -- 2020-11-12 -- -- [__Interactions and External Dependencies__] -- -- - This extension provides API support for -- <https://github.com/KhronosGroup/GLSL/blob/main/extensions/ext/GLSL_EXT_ray_tracing.txt GLSL_EXT_ray_tracing> -- -- - This extension interacts with -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#versions-1.2 Vulkan 1.2> -- and @VK_KHR_vulkan_memory_model@, adding the -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#shader-call-related shader-call-related> -- relation of invocations, -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#shader-call-order shader-call-order> -- partial order of dynamic instances of instructions, and the -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#shaders-scope-shadercall ShaderCallKHR> -- scope. -- -- - This extension interacts with @VK_KHR_pipeline_library@, -- enabling pipeline libraries to be used with ray tracing -- pipelines and enabling usage of -- 'RayTracingPipelineInterfaceCreateInfoKHR'. -- -- [__Contributors__] -- -- - Matthäus Chajdas, AMD -- -- - Greg Grebe, AMD -- -- - Nicolai Hähnle, AMD -- -- - Tobias Hector, AMD -- -- - Dave Oldcorn, AMD -- -- - Skyler Saleh, AMD -- -- - Mathieu Robart, Arm -- -- - Marius Bjorge, Arm -- -- - Tom Olson, Arm -- -- - Sebastian Tafuri, EA -- -- - Henrik Rydgard, Embark -- -- - Juan Cañada, Epic Games -- -- - Patrick Kelly, Epic Games -- -- - Yuriy O’Donnell, Epic Games -- -- - Michael Doggett, Facebook\/Oculus -- -- - Andrew Garrard, Imagination -- -- - Don Scorgie, Imagination -- -- - Dae Kim, Imagination -- -- - Joshua Barczak, Intel -- -- - Slawek Grajewski, Intel -- -- - Jeff Bolz, NVIDIA -- -- - Pascal Gautron, NVIDIA -- -- - Daniel Koch, NVIDIA -- -- - Christoph Kubisch, NVIDIA -- -- - Ashwin Lele, NVIDIA -- -- - Robert Stepinski, NVIDIA -- -- - Martin Stich, NVIDIA -- -- - Nuno Subtil, NVIDIA -- -- - Eric Werness, NVIDIA -- -- - Jon Leech, Khronos -- -- - Jeroen van Schijndel, OTOY -- -- - Juul Joosten, OTOY -- -- - Alex Bourd, Qualcomm -- -- - Roman Larionov, Qualcomm -- -- - David McAllister, Qualcomm -- -- - Spencer Fricke, Samsung -- -- - Lewis Gordon, Samsung -- -- - Ralph Potter, Samsung -- -- - Jasper Bekkers, Traverse Research -- -- - Jesse Barker, Unity -- -- - Baldur Karlsson, Valve -- -- == Description -- -- Rasterization has been the dominant method to produce interactive -- graphics, but increasing performance of graphics hardware has made ray -- tracing a viable option for interactive rendering. Being able to -- integrate ray tracing with traditional rasterization makes it easier for -- applications to incrementally add ray traced effects to existing -- applications or to do hybrid approaches with rasterization for primary -- visibility and ray tracing for secondary queries. -- -- To enable ray tracing, this extension adds a few different categories of -- new functionality: -- -- - A new ray tracing pipeline type with new shader domains: ray -- generation, intersection, any-hit, closest hit, miss, and callable -- -- - A shader binding indirection table to link shader groups with -- acceleration structure items -- -- - Ray tracing commands which initiate the ray pipeline traversal and -- invocation of the various new shader domains depending on which -- traversal conditions are met -- -- This extension adds support for the following SPIR-V extension in -- Vulkan: -- -- - @SPV_KHR_ray_tracing@ -- -- == New Commands -- -- - 'cmdSetRayTracingPipelineStackSizeKHR' -- -- - 'cmdTraceRaysIndirectKHR' -- -- - 'cmdTraceRaysKHR' -- -- - 'createRayTracingPipelinesKHR' -- -- - 'getRayTracingCaptureReplayShaderGroupHandlesKHR' -- -- - 'getRayTracingShaderGroupHandlesKHR' -- -- - 'getRayTracingShaderGroupStackSizeKHR' -- -- == New Structures -- -- - 'RayTracingPipelineCreateInfoKHR' -- -- - 'RayTracingPipelineInterfaceCreateInfoKHR' -- -- - 'RayTracingShaderGroupCreateInfoKHR' -- -- - 'StridedDeviceAddressRegionKHR' -- -- - 'TraceRaysIndirectCommandKHR' -- -- - Extending -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2', -- 'Vulkan.Core10.Device.DeviceCreateInfo': -- -- - 'PhysicalDeviceRayTracingPipelineFeaturesKHR' -- -- - Extending -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2': -- -- - 'PhysicalDeviceRayTracingPipelinePropertiesKHR' -- -- == New Enums -- -- - 'RayTracingShaderGroupTypeKHR' -- -- - 'ShaderGroupShaderKHR' -- -- == New Enum Constants -- -- - 'KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME' -- -- - 'KHR_RAY_TRACING_PIPELINE_SPEC_VERSION' -- -- - 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' -- -- - Extending -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BufferUsageFlagBits': -- -- - 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR' -- -- - Extending 'Vulkan.Core10.Enums.DynamicState.DynamicState': -- -- - 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR' -- -- - Extending 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint': -- -- - 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_RAY_TRACING_KHR' -- -- - Extending -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits': -- -- - 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR' -- -- - 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR' -- -- - 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR' -- -- - 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR' -- -- - 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR' -- -- - 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR' -- -- - 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR' -- -- - Extending -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PipelineCreateFlagBits2': -- -- - 'PIPELINE_CREATE_2_RAY_TRACING_SKIP_BUILT_IN_PRIMITIVES_BIT_KHR' -- -- - Extending -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits': -- -- - 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR' -- -- - Extending -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits': -- -- - 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_ANY_HIT_BIT_KHR' -- -- - 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_CALLABLE_BIT_KHR' -- -- - 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_CLOSEST_HIT_BIT_KHR' -- -- - 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_INTERSECTION_BIT_KHR' -- -- - 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MISS_BIT_KHR' -- -- - 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_RAYGEN_BIT_KHR' -- -- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType': -- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR' -- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR' -- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR' -- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR' -- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR' -- -- == New or Modified Built-In Variables -- -- - <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#interfaces-builtin-variables-launchid LaunchIdKHR> -- -- - <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#interfaces-builtin-variables-launchsize LaunchSizeKHR> -- -- - <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#interfaces-builtin-variables-worldrayorigin WorldRayOriginKHR> -- -- - <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#interfaces-builtin-variables-worldraydirection WorldRayDirectionKHR> -- -- - <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#interfaces-builtin-variables-objectrayorigin ObjectRayOriginKHR> -- -- - <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#interfaces-builtin-variables-objectraydirection ObjectRayDirectionKHR> -- -- - <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#interfaces-builtin-variables-raytmin RayTminKHR> -- -- - <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#interfaces-builtin-variables-raytmax RayTmaxKHR> -- -- - <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#interfaces-builtin-variables-instancecustomindex InstanceCustomIndexKHR> -- -- - <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#interfaces-builtin-variables-instanceid InstanceId> -- -- - <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#interfaces-builtin-variables-objecttoworld ObjectToWorldKHR> -- -- - <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#interfaces-builtin-variables-worldtoobject WorldToObjectKHR> -- -- - <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#interfaces-builtin-variables-hitkind HitKindKHR> -- -- - <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#interfaces-builtin-variables-incomingrayflags IncomingRayFlagsKHR> -- -- - <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#interfaces-builtin-variables-raygeometryindex RayGeometryIndexKHR> -- -- - (modified)@PrimitiveId@ -- -- == New SPIR-V Capabilities -- -- - <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#spirvenv-capabilities-table-RayTracingKHR RayTracingKHR> -- -- - <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#spirvenv-capabilities-table-RayTraversalPrimitiveCullingKHR RayTraversalPrimitiveCullingKHR> -- -- == Issues -- -- (1) How does this extension differ from VK_NV_ray_tracing? -- -- __DISCUSSION__: -- -- The following is a summary of the main functional differences between -- VK_KHR_ray_tracing_pipeline and VK_NV_ray_tracing: -- -- - added support for indirect ray tracing ('cmdTraceRaysIndirectKHR') -- -- - uses SPV_KHR_ray_tracing instead of SPV_NV_ray_tracing -- -- - refer to KHR SPIR-V enums instead of NV SPIR-V enums (which are -- functionally equivalent and aliased to the same values). -- -- - added @RayGeometryIndexKHR@ built-in -- -- - removed vkCompileDeferredNV compilation functionality and replaced -- with -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#deferred-host-operations deferred host operations> -- interactions for ray tracing -- -- - added 'PhysicalDeviceRayTracingPipelineFeaturesKHR' structure -- -- - extended 'PhysicalDeviceRayTracingPipelinePropertiesKHR' structure -- -- - renamed @maxRecursionDepth@ to @maxRayRecursionDepth@ and it has -- a minimum of 1 instead of 31 -- -- - require @shaderGroupHandleSize@ to be 32 bytes -- -- - added @maxRayDispatchInvocationCount@, -- @shaderGroupHandleAlignment@ and @maxRayHitAttributeSize@ -- -- - reworked geometry structures so they could be better shared between -- device, host, and indirect builds -- -- - changed SBT parameters to a structure and added size -- ('StridedDeviceAddressRegionKHR') -- -- - add parameter for requesting memory requirements for host and\/or -- device build -- -- - added -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#pipelines-library pipeline library> -- support for ray tracing -- -- - added -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#ray-traversal-watertight watertightness guarantees> -- -- - added no-null-shader pipeline flags -- (@VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_*_SHADERS_BIT_KHR@) -- -- - added -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#ray-tracing-shader-call memory model interactions> -- with ray tracing and define how subgroups work and can be repacked -- -- (2) Can you give a more detailed comparison of differences and -- similarities between VK_NV_ray_tracing and VK_KHR_ray_tracing_pipeline? -- -- __DISCUSSION__: -- -- The following is a more detailed comparison of which commands, -- structures, and enums are aliased, changed, or removed. -- -- - Aliased functionality — enums, structures, and commands that are -- considered equivalent: -- -- - 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingShaderGroupTypeNV' -- ↔ 'RayTracingShaderGroupTypeKHR' -- -- - 'Vulkan.Extensions.VK_NV_ray_tracing.getRayTracingShaderGroupHandlesNV' -- ↔ 'getRayTracingShaderGroupHandlesKHR' -- -- - Changed enums, structures, and commands: -- -- - 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingShaderGroupCreateInfoNV' -- → 'RayTracingShaderGroupCreateInfoKHR' (added -- @pShaderGroupCaptureReplayHandle@) -- -- - 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV' -- → 'RayTracingPipelineCreateInfoKHR' (changed type of @pGroups@, -- added @libraries@, @pLibraryInterface@, and @pDynamicState@) -- -- - 'Vulkan.Extensions.VK_NV_ray_tracing.PhysicalDeviceRayTracingPropertiesNV' -- → 'PhysicalDeviceRayTracingPipelinePropertiesKHR' (renamed -- @maxTriangleCount@ to @maxPrimitiveCount@, added -- @shaderGroupHandleCaptureReplaySize@) -- -- - 'Vulkan.Extensions.VK_NV_ray_tracing.cmdTraceRaysNV' → -- 'cmdTraceRaysKHR' (params to struct) -- -- - 'Vulkan.Extensions.VK_NV_ray_tracing.createRayTracingPipelinesNV' -- → 'createRayTracingPipelinesKHR' (different struct, changed -- functionality) -- -- - Added enums, structures, and commands: -- -- - 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR' -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR', -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR', -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR', -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR', -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR' -- to -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits' -- -- - 'PhysicalDeviceRayTracingPipelineFeaturesKHR' structure -- -- - 'Vulkan.Extensions.VK_KHR_acceleration_structure.DeviceOrHostAddressKHR' -- and -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.DeviceOrHostAddressConstKHR' -- unions -- -- - 'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR' -- struct -- -- - 'RayTracingPipelineInterfaceCreateInfoKHR' struct -- -- - 'StridedDeviceAddressRegionKHR' struct -- -- - 'cmdTraceRaysIndirectKHR' command and -- 'TraceRaysIndirectCommandKHR' struct -- -- - 'getRayTracingCaptureReplayShaderGroupHandlesKHR' (shader group -- capture\/replay) -- -- - 'cmdSetRayTracingPipelineStackSizeKHR' and -- 'getRayTracingShaderGroupStackSizeKHR' commands for stack size -- control -- -- - Functionality removed: -- -- - 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DEFER_COMPILE_BIT_NV' -- -- - 'Vulkan.Extensions.VK_NV_ray_tracing.compileDeferredNV' command -- (replaced with @VK_KHR_deferred_host_operations@) -- -- (3) What are the changes between the public provisional -- (VK_KHR_ray_tracing v8) release and the internal provisional -- (VK_KHR_ray_tracing v9) release? -- -- - Require Vulkan 1.1 and SPIR-V 1.4 -- -- - Added interactions with Vulkan 1.2 and @VK_KHR_vulkan_memory_model@ -- -- - added creation time capture and replay flags -- -- - added -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR' -- to -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits' -- -- - replace @VkStridedBufferRegionKHR@ with -- 'StridedDeviceAddressRegionKHR' and change 'cmdTraceRaysKHR', -- 'cmdTraceRaysIndirectKHR', to take these for the shader binding -- table and use device addresses instead of buffers. -- -- - require the shader binding table buffers to have the -- @VK_BUFFER_USAGE_RAY_TRACING_BIT_KHR@ set -- -- - make @VK_KHR_pipeline_library@ an interaction instead of required -- extension -- -- - rename the @libraries@ member of 'RayTracingPipelineCreateInfoKHR' -- to @pLibraryInfo@ and make it a pointer -- -- - make @VK_KHR_deferred_host_operations@ an interaction instead of a -- required extension (later went back on this) -- -- - added explicit stack size management for ray tracing pipelines -- -- - removed the @maxCallableSize@ member of -- 'RayTracingPipelineInterfaceCreateInfoKHR' -- -- - added the @pDynamicState@ member to -- 'RayTracingPipelineCreateInfoKHR' -- -- - added -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR' -- dynamic state for ray tracing pipelines -- -- - added 'getRayTracingShaderGroupStackSizeKHR' and -- 'cmdSetRayTracingPipelineStackSizeKHR' commands -- -- - added 'ShaderGroupShaderKHR' enum -- -- - Added @maxRayDispatchInvocationCount@ limit to -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR' -- -- - Added @shaderGroupHandleAlignment@ property to -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR' -- -- - Added @maxRayHitAttributeSize@ property to -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR' -- -- - Clarify deferred host ops for pipeline creation -- -- - 'Vulkan.Extensions.Handles.DeferredOperationKHR' is now a -- top-level parameter for 'createRayTracingPipelinesKHR' -- -- - removed @VkDeferredOperationInfoKHR@ structure -- -- - change deferred host creation\/return parameter behavior such -- that the implementation can modify such parameters until the -- deferred host operation completes -- -- - @VK_KHR_deferred_host_operations@ is required again -- -- (4) What are the changes between the internal provisional -- (VK_KHR_ray_tracing v9) release and the final -- (VK_KHR_acceleration_structure v11 \/ VK_KHR_ray_tracing_pipeline v1) -- release? -- -- - refactor VK_KHR_ray_tracing into 3 extensions, enabling -- implementation flexibility and decoupling ray query support from ray -- pipelines: -- -- - @VK_KHR_acceleration_structure@ (for acceleration structure -- operations) -- -- - @VK_KHR_ray_tracing_pipeline@ (for ray tracing pipeline and -- shader stages) -- -- - @VK_KHR_ray_query@ (for ray queries in existing shader stages) -- -- - Require @Volatile@ for the following builtins in the ray generation, -- closest hit, miss, intersection, and callable shader stages: -- -- - @SubgroupSize@, @SubgroupLocalInvocationId@, @SubgroupEqMask@, -- @SubgroupGeMask@, @SubgroupGtMask@, @SubgroupLeMask@, -- @SubgroupLtMask@ -- -- - @SMIDNV@, @WarpIDNV@ -- -- - clarify buffer usage flags for ray tracing -- -- - 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR' -- is added as an alias of -- 'Vulkan.Extensions.VK_NV_ray_tracing.BUFFER_USAGE_RAY_TRACING_BIT_NV' -- and is required on shader binding table buffers -- -- - 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_BUFFER_BIT' -- is used in @VK_KHR_acceleration_structure@ for @scratchData@ -- -- - rename @maxRecursionDepth@ to @maxRayPipelineRecursionDepth@ -- (pipeline creation) and @maxRayRecursionDepth@ (limit) to reduce -- confusion -- -- - Add queryable @maxRayHitAttributeSize@ limit and rename members of -- 'RayTracingPipelineInterfaceCreateInfoKHR' to -- @maxPipelineRayPayloadSize@ and @maxPipelineRayHitAttributeSize@ for -- clarity -- -- - Update SPIRV capabilities to use @RayTracingKHR@ -- -- - extension is no longer provisional -- -- - define synchronization requirements for indirect trace rays and -- indirect buffer -- -- (5) This extension adds gl_InstanceID for the intersection, any-hit, and -- closest hit shaders, but in KHR_vulkan_glsl, gl_InstanceID is replaced -- with gl_InstanceIndex. Which should be used for Vulkan in this -- extension? -- -- __RESOLVED__: This extension uses gl_InstanceID and maps it to -- @InstanceId@ in SPIR-V. It is acknowledged that this is different than -- other shader stages in Vulkan. There are two main reasons for the -- difference here: -- -- - symmetry with gl_PrimitiveID which is also available in these -- shaders -- -- - there is no “baseInstance” relevant for these shaders, and so ID -- makes it more obvious that this is zero-based. -- -- (6) Why is @VK_KHR_pipeline_library@ an interaction instead of a -- required dependency, particularly when the “Device Extensions” section -- says it is required to be supported anyhow? -- -- __RESOLVED__: If the @VK_KHR_pipeline_library@ extension were a required -- dependency, then every application would need to enable the extension -- whether or not they actually want to use the pipeline library -- functionality. Developers found this to be annoying and unfriendly -- behavior. We do wish to require all __implementations__ to support it -- though, and thus it is listed as a requirement in device extensions -- section. -- -- == Sample Code -- -- Example ray generation GLSL shader -- -- > #version 450 core -- > #extension GL_EXT_ray_tracing : require -- > layout(set = 0, binding = 0, rgba8) uniform image2D image; -- > layout(set = 0, binding = 1) uniform accelerationStructureEXT as; -- > layout(location = 0) rayPayloadEXT float payload; -- > -- > void main() -- > { -- > vec4 col = vec4(0, 0, 0, 1); -- > -- > vec3 origin = vec3(float(gl_LaunchIDEXT.x)/float(gl_LaunchSizeEXT.x), float(gl_LaunchIDEXT.y)/float(gl_LaunchSizeEXT.y), 1.0); -- > vec3 dir = vec3(0.0, 0.0, -1.0); -- > -- > traceRayEXT(as, 0, 0xff, 0, 1, 0, origin, 0.0, dir, 1000.0, 0); -- > -- > col.y = payload; -- > -- > imageStore(image, ivec2(gl_LaunchIDEXT.xy), col); -- > } -- -- == Version History -- -- - Revision 1, 2020-11-12 (Mathieu Robart, Daniel Koch, Eric Werness, -- Tobias Hector) -- -- - Decomposition of the specification, from VK_KHR_ray_tracing to -- VK_KHR_ray_tracing_pipeline (#1918,!3912) -- -- - require certain subgroup and sm_shader_builtin shader builtins -- to be decorated as volatile in the ray generation, closest hit, -- miss, intersection, and callable stages (#1924,!3903,!3954) -- -- - clarify buffer usage flags for ray tracing (#2181,!3939) -- -- - rename maxRecursionDepth to maxRayPipelineRecursionDepth and -- maxRayRecursionDepth (#2203,!3937) -- -- - add queryable maxRayHitAttributeSize and rename members of -- VkRayTracingPipelineInterfaceCreateInfoKHR (#2102,!3966) -- -- - update to use @RayTracingKHR@ SPIR-V capability -- -- - add VUs for matching hit group type against geometry type -- (#2245,!3994) -- -- - require @RayTMaxKHR@ be volatile in intersection shaders -- (#2268,!4030) -- -- - add numerical limits for ray parameters (#2235,!3960) -- -- - fix SBT indexing rules for device addresses (#2308,!4079) -- -- - relax formula for ray intersection candidate determination -- (#2322,!4080) -- -- - add more details on @ShaderRecordBufferKHR@ variables -- (#2230,!4083) -- -- - clarify valid bits for @InstanceCustomIndexKHR@ -- (GLSL\/GLSL#19,!4128) -- -- - allow at most one @IncomingRayPayloadKHR@, -- @IncomingCallableDataKHR@, and @HitAttributeKHR@ (!4129) -- -- - add minimum for maxShaderGroupStride (#2353,!4131) -- -- - require VK_KHR_pipeline_library extension to be supported -- (#2348,!4135) -- -- - clarify meaning of \'geometry index\' (#2272,!4137) -- -- - restrict traces to TLAS (#2239,!4141) -- -- - add note about maxPipelineRayPayloadSize (#2383,!4172) -- -- - do not require raygen shader in pipeline libraries (!4185) -- -- - define sync for indirect trace rays and indirect buffer -- (#2407,!4208) -- -- == 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_pipeline 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_pipeline ( cmdTraceRaysKHR , getRayTracingShaderGroupHandlesKHR , getRayTracingCaptureReplayShaderGroupHandlesKHR , createRayTracingPipelinesKHR , withRayTracingPipelinesKHR , cmdTraceRaysIndirectKHR , getRayTracingShaderGroupStackSizeKHR , cmdSetRayTracingPipelineStackSizeKHR , pattern PIPELINE_CREATE_2_RAY_TRACING_SKIP_BUILT_IN_PRIMITIVES_BIT_KHR , RayTracingShaderGroupCreateInfoKHR(..) , RayTracingPipelineCreateInfoKHR(..) , PhysicalDeviceRayTracingPipelineFeaturesKHR(..) , PhysicalDeviceRayTracingPipelinePropertiesKHR(..) , StridedDeviceAddressRegionKHR(..) , TraceRaysIndirectCommandKHR(..) , RayTracingPipelineInterfaceCreateInfoKHR(..) , RayTracingShaderGroupTypeKHR( RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR , RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR , RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR , .. ) , ShaderGroupShaderKHR( SHADER_GROUP_SHADER_GENERAL_KHR , SHADER_GROUP_SHADER_CLOSEST_HIT_KHR , SHADER_GROUP_SHADER_ANY_HIT_KHR , SHADER_GROUP_SHADER_INTERSECTION_KHR , .. ) , KHR_RAY_TRACING_PIPELINE_SPEC_VERSION , pattern KHR_RAY_TRACING_PIPELINE_SPEC_VERSION , KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME , pattern KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME , DeferredOperationKHR(..) , PipelineLibraryCreateInfoKHR(..) , SHADER_UNUSED_KHR , pattern SHADER_UNUSED_KHR ) where import Vulkan.Internal.Utils (enumReadPrec) import Vulkan.Internal.Utils (enumShowsPrec) import Vulkan.Internal.Utils (traceAroundEvent) import Control.Exception.Base (bracket) import Control.Monad (unless) import Control.Monad.IO.Class (liftIO) import Data.Foldable (traverse_) import Data.Typeable (eqT) import Foreign.Marshal.Alloc (allocaBytes) import Foreign.Marshal.Alloc (callocBytes) import Foreign.Marshal.Alloc (free) import Foreign.Marshal.Utils (maybePeek) import GHC.Base (when) import GHC.IO (throwIO) import GHC.Ptr (castPtr) import GHC.Ptr (nullFunPtr) import Foreign.Ptr (nullPtr) import Foreign.Ptr (plusPtr) import GHC.Show (showsPrec) import Control.Monad.Trans.Class (lift) import Control.Monad.Trans.Cont (evalContT) import Data.Vector (generateM) import qualified Data.Vector (imapM_) import qualified Data.Vector (length) import Foreign.C.Types (CSize(..)) import Vulkan.CStruct (FromCStruct) import Vulkan.CStruct (FromCStruct(..)) import Vulkan.CStruct (ToCStruct) import Vulkan.CStruct (ToCStruct(..)) import Vulkan.Zero (Zero) import Vulkan.Zero (Zero(..)) import Control.Monad.IO.Class (MonadIO) import Data.String (IsString) import Data.Type.Equality ((:~:)(Refl)) import Data.Typeable (Typeable) import Foreign.C.Types (CSize) import Foreign.C.Types (CSize(CSize)) 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 Data.Int (Int32) import Foreign.Ptr (FunPtr) import Foreign.Ptr (Ptr) import GHC.Read (Read(readPrec)) import GHC.Show (Show(showsPrec)) import Data.Word (Word32) import Data.Word (Word64) import Data.Kind (Type) import Control.Monad.Trans.Cont (ContT(..)) import Data.Vector (Vector) import Vulkan.CStruct.Utils (advancePtrBytes) import Vulkan.Core10.FundamentalTypes (bool32ToBool) import Vulkan.Core10.FundamentalTypes (boolToBool32) import Vulkan.Core10.ComputePipeline (destroyPipeline) import Vulkan.CStruct.Extends (forgetExtensions) import Vulkan.CStruct.Extends (peekSomeCStruct) import Vulkan.CStruct.Extends (pokeSomeCStruct) import Vulkan.NamedType ((:::)) import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks) import Vulkan.Core10.FundamentalTypes (Bool32) import Vulkan.CStruct.Extends (Chain) import Vulkan.Core10.Handles (CommandBuffer) import Vulkan.Core10.Handles (CommandBuffer(..)) import Vulkan.Core10.Handles (CommandBuffer(CommandBuffer)) import Vulkan.Core10.Handles (CommandBuffer_T) import Vulkan.Extensions.Handles (DeferredOperationKHR) import Vulkan.Extensions.Handles (DeferredOperationKHR(..)) import Vulkan.Core10.Handles (Device) import Vulkan.Core10.Handles (Device(..)) import Vulkan.Core10.Handles (Device(Device)) import Vulkan.Core10.FundamentalTypes (DeviceAddress) import Vulkan.Dynamic (DeviceCmds(pVkCmdSetRayTracingPipelineStackSizeKHR)) import Vulkan.Dynamic (DeviceCmds(pVkCmdTraceRaysIndirectKHR)) import Vulkan.Dynamic (DeviceCmds(pVkCmdTraceRaysKHR)) import Vulkan.Dynamic (DeviceCmds(pVkCreateRayTracingPipelinesKHR)) import Vulkan.Dynamic (DeviceCmds(pVkGetRayTracingCaptureReplayShaderGroupHandlesKHR)) import Vulkan.Dynamic (DeviceCmds(pVkGetRayTracingShaderGroupHandlesKHR)) import Vulkan.Dynamic (DeviceCmds(pVkGetRayTracingShaderGroupStackSizeKHR)) import Vulkan.Core10.FundamentalTypes (DeviceSize) import Vulkan.Core10.Handles (Device_T) import Vulkan.CStruct.Extends (Extends) import Vulkan.CStruct.Extends (Extendss) import Vulkan.CStruct.Extends (Extensible(..)) import Vulkan.CStruct.Extends (PeekChain) import Vulkan.CStruct.Extends (PeekChain(..)) import Vulkan.Core10.Handles (Pipeline) import Vulkan.Core10.Handles (Pipeline(..)) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_binary (PipelineBinaryInfoKHR) import Vulkan.Core10.Handles (PipelineCache) import Vulkan.Core10.Handles (PipelineCache(..)) import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags) import {-# SOURCE #-} Vulkan.Core14.Promoted_From_VK_KHR_maintenance5Roadmap (PipelineCreateFlags2CreateInfo) import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_pipeline_creation_feedback (PipelineCreationFeedbackCreateInfo) import Vulkan.Core10.GraphicsPipeline (PipelineDynamicStateCreateInfo) import Vulkan.Core10.Handles (PipelineLayout) import Vulkan.Extensions.VK_KHR_pipeline_library (PipelineLibraryCreateInfoKHR) import {-# SOURCE #-} Vulkan.Core14.Promoted_From_VK_EXT_pipeline_robustnessAdditionalFunctionality' (PipelineRobustnessCreateInfo) import Vulkan.Core10.ComputePipeline (PipelineShaderStageCreateInfo) import Vulkan.CStruct.Extends (PokeChain) import Vulkan.CStruct.Extends (PokeChain(..)) import Vulkan.Core10.Enums.Result (Result) import Vulkan.Core10.Enums.Result (Result(..)) import Vulkan.CStruct.Extends (SomeStruct) import Vulkan.Core10.Enums.StructureType (StructureType) import Vulkan.Exception (VulkanException(..)) import Vulkan.Core14.Enums.PipelineCreateFlags2 (PipelineCreateFlags2) import Vulkan.Core14.Enums.PipelineCreateFlags2 (PipelineCreateFlagBits2(PIPELINE_CREATE_2_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR)) import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR)) import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR)) import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR)) import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR)) import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR)) import Vulkan.Core10.Enums.Result (Result(SUCCESS)) import Vulkan.Extensions.Handles (DeferredOperationKHR(..)) import Vulkan.Extensions.VK_KHR_pipeline_library (PipelineLibraryCreateInfoKHR(..)) import Vulkan.Core10.APIConstants (SHADER_UNUSED_KHR) import Vulkan.Core10.APIConstants (pattern SHADER_UNUSED_KHR) foreign import ccall #if !defined(SAFE_FOREIGN_CALLS) unsafe #endif "dynamic" mkVkCmdTraceRaysKHR :: FunPtr (Ptr CommandBuffer_T -> Ptr StridedDeviceAddressRegionKHR -> Ptr StridedDeviceAddressRegionKHR -> Ptr StridedDeviceAddressRegionKHR -> Ptr StridedDeviceAddressRegionKHR -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Ptr StridedDeviceAddressRegionKHR -> Ptr StridedDeviceAddressRegionKHR -> Ptr StridedDeviceAddressRegionKHR -> Ptr StridedDeviceAddressRegionKHR -> Word32 -> Word32 -> Word32 -> IO () -- | vkCmdTraceRaysKHR - Initialize a ray tracing dispatch -- -- = Description -- -- When the command is executed, a ray generation group of @width@ × -- @height@ × @depth@ rays is assembled. -- -- == Valid Usage -- -- - #VUID-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-None-03429# Any shader group handle -- referenced by this call /must/ have been queried from the bound ray -- tracing pipeline -- -- - #VUID-vkCmdTraceRaysKHR-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 'cmdSetRayTracingPipelineStackSizeKHR' -- /must/ have been called in the current command buffer prior to this -- trace command -- -- - #VUID-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-commandBuffer-03635# @commandBuffer@ /must/ -- not be a protected command buffer -- -- - #VUID-vkCmdTraceRaysKHR-size-04023# The @size@ member of -- @pRayGenShaderBindingTable@ /must/ be equal to its @stride@ member -- -- - #VUID-vkCmdTraceRaysKHR-pRayGenShaderBindingTable-03681# -- @pRayGenShaderBindingTable->deviceAddress@ /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-vkCmdTraceRaysKHR-pRayGenShaderBindingTable-03682# -- @pRayGenShaderBindingTable->deviceAddress@ /must/ be a multiple of -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupBaseAlignment@ -- -- - #VUID-vkCmdTraceRaysKHR-pMissShaderBindingTable-03684# -- @pMissShaderBindingTable->deviceAddress@ /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-vkCmdTraceRaysKHR-pMissShaderBindingTable-03685# -- @pMissShaderBindingTable->deviceAddress@ /must/ be a multiple of -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupBaseAlignment@ -- -- - #VUID-vkCmdTraceRaysKHR-stride-03686# -- @pMissShaderBindingTable->stride@ /must/ be a multiple of -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupHandleAlignment@ -- -- - #VUID-vkCmdTraceRaysKHR-stride-04029# -- @pMissShaderBindingTable->stride@ /must/ be less than or equal to -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxShaderGroupStride@ -- -- - #VUID-vkCmdTraceRaysKHR-pHitShaderBindingTable-03688# -- @pHitShaderBindingTable->deviceAddress@ /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-vkCmdTraceRaysKHR-pHitShaderBindingTable-03689# -- @pHitShaderBindingTable->deviceAddress@ /must/ be a multiple of -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupBaseAlignment@ -- -- - #VUID-vkCmdTraceRaysKHR-stride-03690# -- @pHitShaderBindingTable->stride@ /must/ be a multiple of -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupHandleAlignment@ -- -- - #VUID-vkCmdTraceRaysKHR-stride-04035# -- @pHitShaderBindingTable->stride@ /must/ be less than or equal to -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxShaderGroupStride@ -- -- - #VUID-vkCmdTraceRaysKHR-pCallableShaderBindingTable-03692# -- @pCallableShaderBindingTable->deviceAddress@ /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-vkCmdTraceRaysKHR-pCallableShaderBindingTable-03693# -- @pCallableShaderBindingTable->deviceAddress@ /must/ be a multiple of -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupBaseAlignment@ -- -- - #VUID-vkCmdTraceRaysKHR-stride-03694# -- @pCallableShaderBindingTable->stride@ /must/ be a multiple of -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupHandleAlignment@ -- -- - #VUID-vkCmdTraceRaysKHR-stride-04041# -- @pCallableShaderBindingTable->stride@ /must/ be less than or equal -- to -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxShaderGroupStride@ -- -- - #VUID-vkCmdTraceRaysKHR-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 -- @pMissShaderBindingTable->deviceAddress@ accessed as a result of -- this command in order to execute a miss shader /must/ not be zero -- -- - #VUID-vkCmdTraceRaysKHR-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 -- @pHitShaderBindingTable->deviceAddress@ accessed as a result of this -- command in order to execute an any-hit shader /must/ not be zero -- -- - #VUID-vkCmdTraceRaysKHR-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 -- @pHitShaderBindingTable->deviceAddress@ accessed as a result of this -- command in order to execute a closest hit shader /must/ not be zero -- -- - #VUID-vkCmdTraceRaysKHR-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 -- @pHitShaderBindingTable->deviceAddress@ accessed as a result of this -- command in order to execute an intersection shader /must/ not be -- zero -- -- - #VUID-vkCmdTraceRaysKHR-pHitShaderBindingTable-04735# Any non-zero -- hit shader group entries in the table identified by -- @pHitShaderBindingTable->deviceAddress@ 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 -- 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' -- -- - #VUID-vkCmdTraceRaysKHR-pHitShaderBindingTable-04736# Any non-zero -- hit shader group entries in the table identified by -- @pHitShaderBindingTable->deviceAddress@ 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 -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR' -- -- - #VUID-vkCmdTraceRaysKHR-width-03638# @width@ /must/ be less than or -- equal to -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0] -- × -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupSize@[0] -- -- - #VUID-vkCmdTraceRaysKHR-height-03639# @height@ /must/ be less than -- or equal to -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1] -- × -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupSize@[1] -- -- - #VUID-vkCmdTraceRaysKHR-depth-03640# @depth@ /must/ be less than or -- equal to -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2] -- × -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupSize@[2] -- -- - #VUID-vkCmdTraceRaysKHR-width-03641# @width@ × @height@ × @depth@ -- /must/ be less than or equal to -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxRayDispatchInvocationCount@ -- -- - #VUID-vkCmdTraceRaysKHR-allowClusterAccelerationStructure-10578# If -- the traced geometry contains a cluster acceleration structure, then -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV>::@allowClusterAccelerationStructure@ -- /must/ have been set for that pipeline -- -- == Valid Usage (Implicit) -- -- - #VUID-vkCmdTraceRaysKHR-commandBuffer-parameter# @commandBuffer@ -- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle -- -- - #VUID-vkCmdTraceRaysKHR-pRaygenShaderBindingTable-parameter# -- @pRaygenShaderBindingTable@ /must/ be a valid pointer to a valid -- 'StridedDeviceAddressRegionKHR' structure -- -- - #VUID-vkCmdTraceRaysKHR-pMissShaderBindingTable-parameter# -- @pMissShaderBindingTable@ /must/ be a valid pointer to a valid -- 'StridedDeviceAddressRegionKHR' structure -- -- - #VUID-vkCmdTraceRaysKHR-pHitShaderBindingTable-parameter# -- @pHitShaderBindingTable@ /must/ be a valid pointer to a valid -- 'StridedDeviceAddressRegionKHR' structure -- -- - #VUID-vkCmdTraceRaysKHR-pCallableShaderBindingTable-parameter# -- @pCallableShaderBindingTable@ /must/ be a valid pointer to a valid -- 'StridedDeviceAddressRegionKHR' structure -- -- - #VUID-vkCmdTraceRaysKHR-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-vkCmdTraceRaysKHR-commandBuffer-cmdpool# The -- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was -- allocated from /must/ support -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT' operations -- -- - #VUID-vkCmdTraceRaysKHR-renderpass# This command /must/ only be -- called outside of a render pass instance -- -- - #VUID-vkCmdTraceRaysKHR-suspended# This command /must/ not be called -- between suspended render pass instances -- -- - #VUID-vkCmdTraceRaysKHR-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 -- -- vkCmdTraceRaysKHR 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_pipeline VK_KHR_ray_tracing_pipeline>, -- 'Vulkan.Core10.Handles.CommandBuffer', 'StridedDeviceAddressRegionKHR' cmdTraceRaysKHR :: forall io . (MonadIO io) => -- | @commandBuffer@ is the command buffer into which the command will be -- recorded. CommandBuffer -> -- | @pRaygenShaderBindingTable@ is a 'StridedDeviceAddressRegionKHR' that -- holds the shader binding table data for the ray generation shader stage. ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> -- | @pMissShaderBindingTable@ is a 'StridedDeviceAddressRegionKHR' that -- holds the shader binding table data for the miss shader stage. ("missShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> -- | @pHitShaderBindingTable@ is a 'StridedDeviceAddressRegionKHR' that holds -- the shader binding table data for the hit shader stage. ("hitShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> -- | @pCallableShaderBindingTable@ is a 'StridedDeviceAddressRegionKHR' that -- holds the shader binding table data for the callable shader stage. ("callableShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> -- | @width@ is the width of the ray trace query dimensions. ("width" ::: Word32) -> -- | @height@ is height of the ray trace query dimensions. ("height" ::: Word32) -> -- | @depth@ is depth of the ray trace query dimensions. ("depth" ::: Word32) -> io () cmdTraceRaysKHR :: forall (io :: * -> *). MonadIO io => CommandBuffer -> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("width" ::: Word32) -> ("width" ::: Word32) -> ("width" ::: Word32) -> io () cmdTraceRaysKHR CommandBuffer commandBuffer "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR raygenShaderBindingTable "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR missShaderBindingTable "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR hitShaderBindingTable "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR callableShaderBindingTable "width" ::: Word32 width "width" ::: Word32 height "width" ::: Word32 depth = IO () -> io () forall a. IO a -> io a forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO () -> io ()) -> (ContT () IO () -> IO ()) -> ContT () IO () -> io () forall b c a. (b -> c) -> (a -> b) -> a -> c . ContT () IO () -> IO () forall (m :: * -> *) r. Monad m => ContT r m r -> m r evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io () forall a b. (a -> b) -> a -> b $ do let vkCmdTraceRaysKHRPtr :: FunPtr (Ptr CommandBuffer_T -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("width" ::: Word32) -> ("width" ::: Word32) -> ("width" ::: Word32) -> IO ()) vkCmdTraceRaysKHRPtr = DeviceCmds -> FunPtr (Ptr CommandBuffer_T -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("width" ::: Word32) -> ("width" ::: Word32) -> ("width" ::: Word32) -> IO ()) pVkCmdTraceRaysKHR (case CommandBuffer commandBuffer of CommandBuffer{DeviceCmds deviceCmds :: DeviceCmds deviceCmds :: CommandBuffer -> DeviceCmds deviceCmds} -> DeviceCmds deviceCmds) IO () -> ContT () IO () forall (m :: * -> *) a. Monad m => m a -> ContT () m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO () forall a b. (a -> b) -> a -> b $ Bool -> IO () -> IO () forall (f :: * -> *). Applicative f => Bool -> f () -> f () unless (FunPtr (Ptr CommandBuffer_T -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("width" ::: Word32) -> ("width" ::: Word32) -> ("width" ::: Word32) -> IO ()) vkCmdTraceRaysKHRPtr FunPtr (Ptr CommandBuffer_T -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("width" ::: Word32) -> ("width" ::: Word32) -> ("width" ::: Word32) -> IO ()) -> FunPtr (Ptr CommandBuffer_T -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("width" ::: Word32) -> ("width" ::: Word32) -> ("width" ::: Word32) -> IO ()) -> Bool forall a. Eq a => a -> a -> Bool /= FunPtr (Ptr CommandBuffer_T -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("width" ::: Word32) -> ("width" ::: Word32) -> ("width" ::: Word32) -> 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 vkCmdTraceRaysKHR is null" Maybe CInt forall a. Maybe a Nothing Maybe String forall a. Maybe a Nothing let vkCmdTraceRaysKHR' :: Ptr CommandBuffer_T -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("width" ::: Word32) -> ("width" ::: Word32) -> ("width" ::: Word32) -> IO () vkCmdTraceRaysKHR' = FunPtr (Ptr CommandBuffer_T -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("width" ::: Word32) -> ("width" ::: Word32) -> ("width" ::: Word32) -> IO ()) -> Ptr CommandBuffer_T -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("width" ::: Word32) -> ("width" ::: Word32) -> ("width" ::: Word32) -> IO () mkVkCmdTraceRaysKHR FunPtr (Ptr CommandBuffer_T -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("width" ::: Word32) -> ("width" ::: Word32) -> ("width" ::: Word32) -> IO ()) vkCmdTraceRaysKHRPtr pRaygenShaderBindingTable <- ((Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO ()) -> IO ()) -> ContT () IO (Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)) forall {k} (r :: k) (m :: k -> *) a. ((a -> m r) -> m r) -> ContT r m a ContT (((Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO ()) -> IO ()) -> ContT () IO (Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))) -> ((Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO ()) -> IO ()) -> ContT () IO (Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)) forall a b. (a -> b) -> a -> b $ ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> (Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO ()) -> IO () forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b forall b. ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> (Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO b) -> IO b withCStruct ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR raygenShaderBindingTable) pMissShaderBindingTable <- ContT $ withCStruct (missShaderBindingTable) pHitShaderBindingTable <- ContT $ withCStruct (hitShaderBindingTable) pCallableShaderBindingTable <- ContT $ withCStruct (callableShaderBindingTable) lift $ traceAroundEvent "vkCmdTraceRaysKHR" (vkCmdTraceRaysKHR' (commandBufferHandle (commandBuffer)) pRaygenShaderBindingTable pMissShaderBindingTable pHitShaderBindingTable pCallableShaderBindingTable (width) (height) (depth)) pure $ () foreign import ccall #if !defined(SAFE_FOREIGN_CALLS) unsafe #endif "dynamic" mkVkGetRayTracingShaderGroupHandlesKHR :: FunPtr (Ptr Device_T -> Pipeline -> Word32 -> Word32 -> CSize -> Ptr () -> IO Result) -> Ptr Device_T -> Pipeline -> Word32 -> Word32 -> CSize -> Ptr () -> IO Result -- | vkGetRayTracingShaderGroupHandlesKHR - Query ray tracing pipeline shader -- group handles -- -- = Description -- -- On success, an array of @groupCount@ shader handles will be written to -- @pData@, with each element being of size -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupHandleSize@. -- -- If @pipeline@ was created with -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR' -- and the -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-pipelineLibraryGroupHandles pipelineLibraryGroupHandles> -- feature is enabled applications /can/ query group handles from that -- pipeline, even if the pipeline is a library and is never bound to a -- command buffer. These group handles remain bitwise identical for any -- @pipeline@ which references the pipeline library. Group indices are -- assigned as-if the pipeline was created without -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'. -- -- == Valid Usage -- -- - #VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-04619# -- @pipeline@ /must/ be a ray tracing pipeline -- -- - #VUID-vkGetRayTracingShaderGroupHandlesKHR-firstGroup-04050# -- @firstGroup@ /must/ be less than the number of shader groups in -- @pipeline@ -- -- - #VUID-vkGetRayTracingShaderGroupHandlesKHR-firstGroup-02419# The sum -- of @firstGroup@ and @groupCount@ /must/ be less than or equal to the -- number of shader groups in @pipeline@ -- -- - #VUID-vkGetRayTracingShaderGroupHandlesKHR-dataSize-02420# -- @dataSize@ /must/ be at least -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupHandleSize@ -- × @groupCount@ -- -- - #VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-07828# If the -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-pipelineLibraryGroupHandles pipelineLibraryGroupHandles> -- feature is not enabled, @pipeline@ /must/ not have been created with -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR' -- -- == Valid Usage (Implicit) -- -- - #VUID-vkGetRayTracingShaderGroupHandlesKHR-device-parameter# -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle -- -- - #VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-parameter# -- @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle -- -- - #VUID-vkGetRayTracingShaderGroupHandlesKHR-pData-parameter# @pData@ -- /must/ be a valid pointer to an array of @dataSize@ bytes -- -- - #VUID-vkGetRayTracingShaderGroupHandlesKHR-dataSize-arraylength# -- @dataSize@ /must/ be greater than @0@ -- -- - #VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-parent# -- @pipeline@ /must/ have been created, allocated, or retrieved from -- @device@ -- -- == Return Codes -- -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>] -- -- - 'Vulkan.Core10.Enums.Result.SUCCESS' -- -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>] -- -- - 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY' -- -- - 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY' -- -- - 'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN' -- -- - 'Vulkan.Core10.Enums.Result.ERROR_VALIDATION_FAILED' -- -- = See Also -- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_ray_tracing_pipeline VK_KHR_ray_tracing_pipeline>, -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_ray_tracing VK_NV_ray_tracing>, -- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Pipeline' getRayTracingShaderGroupHandlesKHR :: forall io . (MonadIO io) => -- | @device@ is the logical device containing the ray tracing pipeline. Device -> -- | @pipeline@ is the ray tracing pipeline object containing the shaders. Pipeline -> -- | @firstGroup@ is the index of the first group to retrieve a handle for -- from the 'RayTracingPipelineCreateInfoKHR'::@pGroups@ or -- 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV'::@pGroups@ -- array. ("firstGroup" ::: Word32) -> -- | @groupCount@ is the number of shader handles to retrieve. ("groupCount" ::: Word32) -> -- | @dataSize@ is the size in bytes of the buffer pointed to by @pData@. ("dataSize" ::: Word64) -> -- | @pData@ is a pointer to an application-allocated buffer where the -- results will be written. ("data" ::: Ptr ()) -> io () getRayTracingShaderGroupHandlesKHR :: forall (io :: * -> *). MonadIO io => Device -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> ("dataSize" ::: Word64) -> ("data" ::: Ptr ()) -> io () getRayTracingShaderGroupHandlesKHR Device device Pipeline pipeline "width" ::: Word32 firstGroup "width" ::: Word32 groupCount "dataSize" ::: Word64 dataSize "data" ::: Ptr () data' = 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 vkGetRayTracingShaderGroupHandlesKHRPtr :: FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result) vkGetRayTracingShaderGroupHandlesKHRPtr = DeviceCmds -> FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result) pVkGetRayTracingShaderGroupHandlesKHR (case Device device of Device{DeviceCmds deviceCmds :: DeviceCmds deviceCmds :: Device -> DeviceCmds deviceCmds} -> DeviceCmds deviceCmds) Bool -> IO () -> IO () forall (f :: * -> *). Applicative f => Bool -> f () -> f () unless (FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result) vkGetRayTracingShaderGroupHandlesKHRPtr FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result) -> FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result) -> Bool forall a. Eq a => a -> a -> Bool /= FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result) 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 vkGetRayTracingShaderGroupHandlesKHR is null" Maybe CInt forall a. Maybe a Nothing Maybe String forall a. Maybe a Nothing let vkGetRayTracingShaderGroupHandlesKHR' :: Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result vkGetRayTracingShaderGroupHandlesKHR' = FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result) -> Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result mkVkGetRayTracingShaderGroupHandlesKHR FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result) vkGetRayTracingShaderGroupHandlesKHRPtr r <- String -> IO Result -> IO Result forall a. String -> IO a -> IO a traceAroundEvent String "vkGetRayTracingShaderGroupHandlesKHR" (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result vkGetRayTracingShaderGroupHandlesKHR' (Device -> Ptr Device_T deviceHandle (Device device)) (Pipeline pipeline) ("width" ::: Word32 firstGroup) ("width" ::: Word32 groupCount) (("dataSize" ::: Word64) -> CSize CSize ("dataSize" ::: Word64 dataSize)) ("data" ::: Ptr () data')) when (r < SUCCESS) (throwIO (VulkanException r)) foreign import ccall #if !defined(SAFE_FOREIGN_CALLS) unsafe #endif "dynamic" mkVkGetRayTracingCaptureReplayShaderGroupHandlesKHR :: FunPtr (Ptr Device_T -> Pipeline -> Word32 -> Word32 -> CSize -> Ptr () -> IO Result) -> Ptr Device_T -> Pipeline -> Word32 -> Word32 -> CSize -> Ptr () -> IO Result -- | vkGetRayTracingCaptureReplayShaderGroupHandlesKHR - Query opaque capture -- replay data for pipeline shader group handles -- -- = Description -- -- On success, an array of @groupCount@ shader handles will be written to -- @pData@, with each element being of size -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupHandleCaptureReplaySize@. -- -- Once queried, this opaque data /can/ be provided at pipeline creation -- time (in a subsequent execution), using -- 'RayTracingShaderGroupCreateInfoKHR'::@pShaderGroupCaptureReplayHandle@, -- as described in -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#ray-tracing-capture-replay Ray Tracing Capture Replay>. -- -- If @pipeline@ was created with -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR' -- and the -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-pipelineLibraryGroupHandles pipelineLibraryGroupHandles> -- feature is enabled applications /can/ query capture replay group handles -- from that pipeline. The capture replay handle remains bitwise identical -- for any @pipeline@ which references the pipeline library. Group indices -- are assigned as-if the pipeline was created without -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'. -- -- == Valid Usage -- -- - #VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-04620# -- @pipeline@ /must/ be a ray tracing pipeline -- -- - #VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-firstGroup-04051# -- @firstGroup@ /must/ be less than the number of shader groups in -- @pipeline@ -- -- - #VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-firstGroup-03483# -- The sum of @firstGroup@ and @groupCount@ /must/ be less than or -- equal to the number of shader groups in @pipeline@ -- -- - #VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-dataSize-03484# -- @dataSize@ /must/ be at least -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupHandleCaptureReplaySize@ -- × @groupCount@ -- -- - #VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-rayTracingPipelineShaderGroupHandleCaptureReplay-03606# -- 'PhysicalDeviceRayTracingPipelineFeaturesKHR'::@rayTracingPipelineShaderGroupHandleCaptureReplay@ -- /must/ be enabled to call this function -- -- - #VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-03607# -- @pipeline@ /must/ have been created with a @flags@ that included -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR' -- -- - #VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-07829# -- If the -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-pipelineLibraryGroupHandles pipelineLibraryGroupHandles> -- feature is not enabled, @pipeline@ /must/ not have been created with -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR' -- -- == Valid Usage (Implicit) -- -- - #VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-device-parameter# -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle -- -- - #VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-parameter# -- @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle -- -- - #VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pData-parameter# -- @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes -- -- - #VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-dataSize-arraylength# -- @dataSize@ /must/ be greater than @0@ -- -- - #VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-parent# -- @pipeline@ /must/ have been created, allocated, or retrieved from -- @device@ -- -- == Return Codes -- -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>] -- -- - 'Vulkan.Core10.Enums.Result.SUCCESS' -- -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>] -- -- - 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY' -- -- - 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY' -- -- - 'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN' -- -- - 'Vulkan.Core10.Enums.Result.ERROR_VALIDATION_FAILED' -- -- = See Also -- -- <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.Device', 'Vulkan.Core10.Handles.Pipeline' getRayTracingCaptureReplayShaderGroupHandlesKHR :: forall io . (MonadIO io) => -- | @device@ is the logical device containing the ray tracing pipeline. Device -> -- | @pipeline@ is the ray tracing pipeline object containing the shaders. Pipeline -> -- | @firstGroup@ is the index of the first group to retrieve a handle for -- from the 'RayTracingPipelineCreateInfoKHR'::@pGroups@ array. ("firstGroup" ::: Word32) -> -- | @groupCount@ is the number of shader handles to retrieve. ("groupCount" ::: Word32) -> -- | @dataSize@ is the size in bytes of the buffer pointed to by @pData@. ("dataSize" ::: Word64) -> -- | @pData@ is a pointer to an application-allocated buffer where the -- results will be written. ("data" ::: Ptr ()) -> io () getRayTracingCaptureReplayShaderGroupHandlesKHR :: forall (io :: * -> *). MonadIO io => Device -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> ("dataSize" ::: Word64) -> ("data" ::: Ptr ()) -> io () getRayTracingCaptureReplayShaderGroupHandlesKHR Device device Pipeline pipeline "width" ::: Word32 firstGroup "width" ::: Word32 groupCount "dataSize" ::: Word64 dataSize "data" ::: Ptr () data' = 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 vkGetRayTracingCaptureReplayShaderGroupHandlesKHRPtr :: FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result) vkGetRayTracingCaptureReplayShaderGroupHandlesKHRPtr = DeviceCmds -> FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result) pVkGetRayTracingCaptureReplayShaderGroupHandlesKHR (case Device device of Device{DeviceCmds deviceCmds :: Device -> DeviceCmds deviceCmds :: DeviceCmds deviceCmds} -> DeviceCmds deviceCmds) Bool -> IO () -> IO () forall (f :: * -> *). Applicative f => Bool -> f () -> f () unless (FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result) vkGetRayTracingCaptureReplayShaderGroupHandlesKHRPtr FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result) -> FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result) -> Bool forall a. Eq a => a -> a -> Bool /= FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result) 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 vkGetRayTracingCaptureReplayShaderGroupHandlesKHR is null" Maybe CInt forall a. Maybe a Nothing Maybe String forall a. Maybe a Nothing let vkGetRayTracingCaptureReplayShaderGroupHandlesKHR' :: Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result vkGetRayTracingCaptureReplayShaderGroupHandlesKHR' = FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result) -> Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result mkVkGetRayTracingCaptureReplayShaderGroupHandlesKHR FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result) vkGetRayTracingCaptureReplayShaderGroupHandlesKHRPtr r <- String -> IO Result -> IO Result forall a. String -> IO a -> IO a traceAroundEvent String "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR" (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ("width" ::: Word32) -> CSize -> ("data" ::: Ptr ()) -> IO Result vkGetRayTracingCaptureReplayShaderGroupHandlesKHR' (Device -> Ptr Device_T deviceHandle (Device device)) (Pipeline pipeline) ("width" ::: Word32 firstGroup) ("width" ::: Word32 groupCount) (("dataSize" ::: Word64) -> CSize CSize ("dataSize" ::: Word64 dataSize)) ("data" ::: Ptr () data')) when (r < SUCCESS) (throwIO (VulkanException r)) foreign import ccall #if !defined(SAFE_FOREIGN_CALLS) unsafe #endif "dynamic" mkVkCreateRayTracingPipelinesKHR :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> PipelineCache -> Word32 -> Ptr (SomeStruct RayTracingPipelineCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> DeferredOperationKHR -> PipelineCache -> Word32 -> Ptr (SomeStruct RayTracingPipelineCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result -- | vkCreateRayTracingPipelinesKHR - Creates a new ray tracing pipeline -- object -- -- = Description -- -- The 'Vulkan.Core10.Enums.Result.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS' -- error is returned if the implementation is unable to reuse the shader -- group handles provided in -- 'RayTracingShaderGroupCreateInfoKHR'::@pShaderGroupCaptureReplayHandle@ -- when -- 'PhysicalDeviceRayTracingPipelineFeaturesKHR'::@rayTracingPipelineShaderGroupHandleCaptureReplay@ -- is enabled. -- -- Pipelines are created and returned as described for -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#pipelines-multiple Multiple Pipeline Creation>. -- -- == Valid Usage -- -- - #VUID-vkCreateRayTracingPipelinesKHR-device-09677# @device@ /must/ -- support at least one queue family with the -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT' capability -- -- - #VUID-vkCreateRayTracingPipelinesKHR-flags-03415# If the @flags@ -- member of any element of @pCreateInfos@ contains the -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT' -- flag, and the @basePipelineIndex@ member of that same element is not -- @-1@, @basePipelineIndex@ /must/ be less than the index into -- @pCreateInfos@ that corresponds to that element -- -- - #VUID-vkCreateRayTracingPipelinesKHR-flags-03416# If the @flags@ -- member of any element of @pCreateInfos@ contains the -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT' -- flag, the base pipeline /must/ have been created with the -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT' -- flag set -- -- - #VUID-vkCreateRayTracingPipelinesKHR-flags-03816# @flags@ /must/ not -- contain the -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DISPATCH_BASE_BIT' -- flag -- -- - #VUID-vkCreateRayTracingPipelinesKHR-pipelineCache-02903# If -- @pipelineCache@ was created with -- 'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT', -- host access to @pipelineCache@ /must/ be -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized> -- -- - #VUID-vkCreateRayTracingPipelinesKHR-deferredOperation-03678# Any -- previous deferred operation that was associated with -- @deferredOperation@ /must/ be complete -- -- - #VUID-vkCreateRayTracingPipelinesKHR-pNext-09616# If -- 'Vulkan.Extensions.VK_KHR_pipeline_binary.PipelineBinaryInfoKHR'::@binaryCount@ -- is not @0@ for any element of @pCreateInfos@, @pipelineCache@ /must/ -- be 'Vulkan.Core10.APIConstants.NULL_HANDLE' -- -- - #VUID-vkCreateRayTracingPipelinesKHR-pNext-09617# If a -- 'Vulkan.Extensions.VK_KHR_maintenance5.PipelineCreateFlags2CreateInfoKHR' -- structure with the -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR' -- flag set is included in the @pNext@ chain of any element of -- @pCreateInfos@, @pipelineCache@ /must/ be -- 'Vulkan.Core10.APIConstants.NULL_HANDLE' -- -- - #VUID-vkCreateRayTracingPipelinesKHR-binaryCount-09620# If -- 'Vulkan.Extensions.VK_KHR_pipeline_binary.PipelineBinaryInfoKHR'::@binaryCount@ -- is not @0@ for any element of @pCreateInfos@, -- 'Vulkan.Core13.Enums.PipelineCreationFeedbackFlagBits.PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT' -- /must/ not be set in the @flags@ of that element -- -- - #VUID-vkCreateRayTracingPipelinesKHR-binaryCount-09621# If -- 'Vulkan.Extensions.VK_KHR_pipeline_binary.PipelineBinaryInfoKHR'::@binaryCount@ -- is not @0@ for any element of @pCreateInfos@, -- 'Vulkan.Core13.Enums.PipelineCreationFeedbackFlagBits.PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT' -- /must/ not be set in the @flags@ of that element -- -- - #VUID-vkCreateRayTracingPipelinesKHR-binaryCount-09622# If -- 'Vulkan.Extensions.VK_KHR_pipeline_binary.PipelineBinaryInfoKHR'::@binaryCount@ -- is not @0@ for any element of @pCreateInfos@, -- 'Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT' -- /must/ not be set in the @flags@ of that element -- -- - #VUID-vkCreateRayTracingPipelinesKHR-pCreateInfos-11414# If any -- element of @pCreateInfos@ sets -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- and includes embedded sampler mappings, there /must/ be less than -- (<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxSamplerAllocationCount maxSamplerAllocationCount> -- - -- (<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-minSamplerHeapReservedRangeWithEmbedded minSamplerHeapReservedRangeWithEmbedded> -- \/ -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-samplerDescriptorSize samplerDescriptorSize>)) -- 'Vulkan.Core10.Handles.Sampler' objects currently created on the -- device -- -- - #VUID-vkCreateRayTracingPipelinesKHR-pCreateInfos-11429# If any -- element of @pCreateInfos@ sets -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- and includes embedded sampler mappings, this command /must/ not -- cause the total number of unique embedded samplers in pipelines and -- shaders on this device to exceed -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxDescriptorHeapEmbeddedSamplers maxDescriptorHeapEmbeddedSamplers> -- -- - #VUID-vkCreateRayTracingPipelinesKHR-rayTracingPipeline-03586# The -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-rayTracingPipeline rayTracingPipeline> -- feature /must/ be enabled -- -- - #VUID-vkCreateRayTracingPipelinesKHR-deferredOperation-03587# If -- @deferredOperation@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', -- the @flags@ member of elements of @pCreateInfos@ /must/ not include -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT' -- -- == Valid Usage (Implicit) -- -- - #VUID-vkCreateRayTracingPipelinesKHR-device-parameter# @device@ -- /must/ be a valid 'Vulkan.Core10.Handles.Device' handle -- -- - #VUID-vkCreateRayTracingPipelinesKHR-deferredOperation-parameter# If -- @deferredOperation@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', -- @deferredOperation@ /must/ be a valid -- 'Vulkan.Extensions.Handles.DeferredOperationKHR' handle -- -- - #VUID-vkCreateRayTracingPipelinesKHR-pipelineCache-parameter# If -- @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', -- @pipelineCache@ /must/ be a valid -- 'Vulkan.Core10.Handles.PipelineCache' handle -- -- - #VUID-vkCreateRayTracingPipelinesKHR-pCreateInfos-parameter# -- @pCreateInfos@ /must/ be a valid pointer to an array of -- @createInfoCount@ valid 'RayTracingPipelineCreateInfoKHR' structures -- -- - #VUID-vkCreateRayTracingPipelinesKHR-pAllocator-parameter# If -- @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer -- to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' -- structure -- -- - #VUID-vkCreateRayTracingPipelinesKHR-pPipelines-parameter# -- @pPipelines@ /must/ be a valid pointer to an array of -- @createInfoCount@ 'Vulkan.Core10.Handles.Pipeline' handles -- -- - #VUID-vkCreateRayTracingPipelinesKHR-createInfoCount-arraylength# -- @createInfoCount@ /must/ be greater than @0@ -- -- - #VUID-vkCreateRayTracingPipelinesKHR-deferredOperation-parent# If -- @deferredOperation@ is a valid handle, it /must/ have been created, -- allocated, or retrieved from @device@ -- -- - #VUID-vkCreateRayTracingPipelinesKHR-pipelineCache-parent# If -- @pipelineCache@ is a valid handle, it /must/ have been created, -- allocated, or retrieved from @device@ -- -- == Return Codes -- -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>] -- -- - 'Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR' -- -- - 'Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR' -- -- - 'Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control.PIPELINE_COMPILE_REQUIRED_EXT' -- -- - 'Vulkan.Core10.Enums.Result.SUCCESS' -- -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>] -- -- - 'Vulkan.Core10.Enums.Result.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS' -- -- - 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY' -- -- - 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY' -- -- - 'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN' -- -- - 'Vulkan.Core10.Enums.Result.ERROR_VALIDATION_FAILED' -- -- = See Also -- -- <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.AllocationCallbacks.AllocationCallbacks', -- 'Vulkan.Extensions.Handles.DeferredOperationKHR', -- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Pipeline', -- 'Vulkan.Core10.Handles.PipelineCache', 'RayTracingPipelineCreateInfoKHR' createRayTracingPipelinesKHR :: forall io . (MonadIO io) => -- | @device@ is the logical device that creates the ray tracing pipelines. Device -> -- | @deferredOperation@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE' or the -- handle of a valid 'Vulkan.Extensions.Handles.DeferredOperationKHR' -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#deferred-host-operations-requesting request deferral> -- object for this command. DeferredOperationKHR -> -- | @pipelineCache@ is either 'Vulkan.Core10.APIConstants.NULL_HANDLE', -- indicating that pipeline caching is disabled, or to enable caching, the -- handle of a valid 'Vulkan.Core10.Handles.PipelineCache' object. The -- implementation /must/ not access this object outside of the duration of -- this command. PipelineCache -> -- | @pCreateInfos@ is a pointer to an array of -- 'RayTracingPipelineCreateInfoKHR' structures. ("createInfos" ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR)) -> -- | @pAllocator@ controls host memory allocation as described in the -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#memory-allocation Memory Allocation> -- chapter. ("allocator" ::: Maybe AllocationCallbacks) -> io (Result, ("pipelines" ::: Vector Pipeline)) createRayTracingPipelinesKHR :: forall (io :: * -> *). MonadIO io => Device -> DeferredOperationKHR -> PipelineCache -> ("createInfos" ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR)) -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Result, "pipelines" ::: Vector Pipeline) createRayTracingPipelinesKHR Device device DeferredOperationKHR deferredOperation PipelineCache pipelineCache "createInfos" ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR) createInfos "allocator" ::: Maybe AllocationCallbacks allocator = IO (Result, "pipelines" ::: Vector Pipeline) -> io (Result, "pipelines" ::: Vector Pipeline) forall a. IO a -> io a forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO (Result, "pipelines" ::: Vector Pipeline) -> io (Result, "pipelines" ::: Vector Pipeline)) -> (ContT (Result, "pipelines" ::: Vector Pipeline) IO (Result, "pipelines" ::: Vector Pipeline) -> IO (Result, "pipelines" ::: Vector Pipeline)) -> ContT (Result, "pipelines" ::: Vector Pipeline) IO (Result, "pipelines" ::: Vector Pipeline) -> io (Result, "pipelines" ::: Vector Pipeline) forall b c a. (b -> c) -> (a -> b) -> a -> c . ContT (Result, "pipelines" ::: Vector Pipeline) IO (Result, "pipelines" ::: Vector Pipeline) -> IO (Result, "pipelines" ::: Vector Pipeline) forall (m :: * -> *) r. Monad m => ContT r m r -> m r evalContT (ContT (Result, "pipelines" ::: Vector Pipeline) IO (Result, "pipelines" ::: Vector Pipeline) -> io (Result, "pipelines" ::: Vector Pipeline)) -> ContT (Result, "pipelines" ::: Vector Pipeline) IO (Result, "pipelines" ::: Vector Pipeline) -> io (Result, "pipelines" ::: Vector Pipeline) forall a b. (a -> b) -> a -> b $ do let vkCreateRayTracingPipelinesKHRPtr :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> PipelineCache -> ("width" ::: Word32) -> Ptr (SomeStruct RayTracingPipelineCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) vkCreateRayTracingPipelinesKHRPtr = DeviceCmds -> FunPtr (Ptr Device_T -> DeferredOperationKHR -> PipelineCache -> ("width" ::: Word32) -> Ptr (SomeStruct RayTracingPipelineCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) pVkCreateRayTracingPipelinesKHR (case Device device of Device{DeviceCmds deviceCmds :: Device -> DeviceCmds deviceCmds :: DeviceCmds deviceCmds} -> DeviceCmds deviceCmds) IO () -> ContT (Result, "pipelines" ::: Vector Pipeline) IO () forall (m :: * -> *) a. Monad m => m a -> ContT (Result, "pipelines" ::: Vector Pipeline) m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (IO () -> ContT (Result, "pipelines" ::: Vector Pipeline) IO ()) -> IO () -> ContT (Result, "pipelines" ::: Vector Pipeline) IO () forall a b. (a -> b) -> a -> b $ Bool -> IO () -> IO () forall (f :: * -> *). Applicative f => Bool -> f () -> f () unless (FunPtr (Ptr Device_T -> DeferredOperationKHR -> PipelineCache -> ("width" ::: Word32) -> Ptr (SomeStruct RayTracingPipelineCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) vkCreateRayTracingPipelinesKHRPtr FunPtr (Ptr Device_T -> DeferredOperationKHR -> PipelineCache -> ("width" ::: Word32) -> Ptr (SomeStruct RayTracingPipelineCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> FunPtr (Ptr Device_T -> DeferredOperationKHR -> PipelineCache -> ("width" ::: Word32) -> Ptr (SomeStruct RayTracingPipelineCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Bool forall a. Eq a => a -> a -> Bool /= FunPtr (Ptr Device_T -> DeferredOperationKHR -> PipelineCache -> ("width" ::: Word32) -> Ptr (SomeStruct RayTracingPipelineCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) 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 vkCreateRayTracingPipelinesKHR is null" Maybe CInt forall a. Maybe a Nothing Maybe String forall a. Maybe a Nothing let vkCreateRayTracingPipelinesKHR' :: Ptr Device_T -> DeferredOperationKHR -> PipelineCache -> ("width" ::: Word32) -> Ptr (SomeStruct RayTracingPipelineCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result vkCreateRayTracingPipelinesKHR' = FunPtr (Ptr Device_T -> DeferredOperationKHR -> PipelineCache -> ("width" ::: Word32) -> Ptr (SomeStruct RayTracingPipelineCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> DeferredOperationKHR -> PipelineCache -> ("width" ::: Word32) -> Ptr (SomeStruct RayTracingPipelineCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result mkVkCreateRayTracingPipelinesKHR FunPtr (Ptr Device_T -> DeferredOperationKHR -> PipelineCache -> ("width" ::: Word32) -> Ptr (SomeStruct RayTracingPipelineCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) vkCreateRayTracingPipelinesKHRPtr pPCreateInfos <- ((Ptr (RayTracingPipelineCreateInfoKHR (ZonkAny 0)) -> IO (Result, "pipelines" ::: Vector Pipeline)) -> IO (Result, "pipelines" ::: Vector Pipeline)) -> ContT (Result, "pipelines" ::: Vector Pipeline) IO (Ptr (RayTracingPipelineCreateInfoKHR (ZonkAny 0))) forall {k} (r :: k) (m :: k -> *) a. ((a -> m r) -> m r) -> ContT r m a ContT (((Ptr (RayTracingPipelineCreateInfoKHR (ZonkAny 0)) -> IO (Result, "pipelines" ::: Vector Pipeline)) -> IO (Result, "pipelines" ::: Vector Pipeline)) -> ContT (Result, "pipelines" ::: Vector Pipeline) IO (Ptr (RayTracingPipelineCreateInfoKHR (ZonkAny 0)))) -> ((Ptr (RayTracingPipelineCreateInfoKHR (ZonkAny 0)) -> IO (Result, "pipelines" ::: Vector Pipeline)) -> IO (Result, "pipelines" ::: Vector Pipeline)) -> ContT (Result, "pipelines" ::: Vector Pipeline) IO (Ptr (RayTracingPipelineCreateInfoKHR (ZonkAny 0))) forall a b. (a -> b) -> a -> b $ forall a b. Int -> (Ptr a -> IO b) -> IO b allocaBytes @(RayTracingPipelineCreateInfoKHR _) ((("createInfos" ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR)) -> Int forall a. Vector a -> Int Data.Vector.length ("createInfos" ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR) createInfos)) Int -> Int -> Int forall a. Num a => a -> a -> a * Int 104) Data.Vector.imapM_ (\Int i SomeStruct RayTracingPipelineCreateInfoKHR e -> ((() -> IO (Result, "pipelines" ::: Vector Pipeline)) -> IO (Result, "pipelines" ::: Vector Pipeline)) -> ContT (Result, "pipelines" ::: Vector Pipeline) IO () forall {k} (r :: k) (m :: k -> *) a. ((a -> m r) -> m r) -> ContT r m a ContT (((() -> IO (Result, "pipelines" ::: Vector Pipeline)) -> IO (Result, "pipelines" ::: Vector Pipeline)) -> ContT (Result, "pipelines" ::: Vector Pipeline) IO ()) -> ((() -> IO (Result, "pipelines" ::: Vector Pipeline)) -> IO (Result, "pipelines" ::: Vector Pipeline)) -> ContT (Result, "pipelines" ::: Vector Pipeline) IO () forall a b. (a -> b) -> a -> b $ Ptr (SomeStruct RayTracingPipelineCreateInfoKHR) -> SomeStruct RayTracingPipelineCreateInfoKHR -> IO (Result, "pipelines" ::: Vector Pipeline) -> IO (Result, "pipelines" ::: Vector Pipeline) forall (a :: [*] -> *) b. (forall (es :: [*]). (Extendss a es, PokeChain es) => ToCStruct (a es)) => Ptr (SomeStruct a) -> SomeStruct a -> IO b -> IO b pokeSomeCStruct (Ptr (RayTracingPipelineCreateInfoKHR (ZonkAny 1)) -> Ptr (SomeStruct RayTracingPipelineCreateInfoKHR) forall (a :: [*] -> *) (es :: [*]). Ptr (a es) -> Ptr (SomeStruct a) forgetExtensions (Ptr (RayTracingPipelineCreateInfoKHR (ZonkAny 0)) pPCreateInfos Ptr (RayTracingPipelineCreateInfoKHR (ZonkAny 0)) -> Int -> Ptr (RayTracingPipelineCreateInfoKHR w) forall a b. Ptr a -> Int -> Ptr b `plusPtr` (Int 104 Int -> Int -> Int forall a. Num a => a -> a -> a * (Int i)) :: Ptr (RayTracingPipelineCreateInfoKHR _))) (SomeStruct RayTracingPipelineCreateInfoKHR e) (IO (Result, "pipelines" ::: Vector Pipeline) -> IO (Result, "pipelines" ::: Vector Pipeline)) -> ((() -> IO (Result, "pipelines" ::: Vector Pipeline)) -> IO (Result, "pipelines" ::: Vector Pipeline)) -> (() -> IO (Result, "pipelines" ::: Vector Pipeline)) -> IO (Result, "pipelines" ::: Vector Pipeline) forall b c a. (b -> c) -> (a -> b) -> a -> c . ((() -> IO (Result, "pipelines" ::: Vector Pipeline)) -> () -> IO (Result, "pipelines" ::: Vector Pipeline) forall a b. (a -> b) -> a -> b $ ())) (createInfos) pAllocator <- case (allocator) of "allocator" ::: Maybe AllocationCallbacks Nothing -> Ptr AllocationCallbacks -> ContT (Result, "pipelines" ::: Vector Pipeline) IO (Ptr AllocationCallbacks) forall a. a -> ContT (Result, "pipelines" ::: Vector Pipeline) IO a forall (f :: * -> *) a. Applicative f => a -> f a pure Ptr AllocationCallbacks forall a. Ptr a nullPtr Just AllocationCallbacks j -> ((Ptr AllocationCallbacks -> IO (Result, "pipelines" ::: Vector Pipeline)) -> IO (Result, "pipelines" ::: Vector Pipeline)) -> ContT (Result, "pipelines" ::: Vector Pipeline) IO (Ptr AllocationCallbacks) forall {k} (r :: k) (m :: k -> *) a. ((a -> m r) -> m r) -> ContT r m a ContT (((Ptr AllocationCallbacks -> IO (Result, "pipelines" ::: Vector Pipeline)) -> IO (Result, "pipelines" ::: Vector Pipeline)) -> ContT (Result, "pipelines" ::: Vector Pipeline) IO (Ptr AllocationCallbacks)) -> ((Ptr AllocationCallbacks -> IO (Result, "pipelines" ::: Vector Pipeline)) -> IO (Result, "pipelines" ::: Vector Pipeline)) -> ContT (Result, "pipelines" ::: Vector Pipeline) IO (Ptr AllocationCallbacks) forall a b. (a -> b) -> a -> b $ AllocationCallbacks -> (Ptr AllocationCallbacks -> IO (Result, "pipelines" ::: Vector Pipeline)) -> IO (Result, "pipelines" ::: Vector Pipeline) forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b forall b. AllocationCallbacks -> (Ptr AllocationCallbacks -> IO b) -> IO b withCStruct (AllocationCallbacks j) pPPipelines <- ContT $ bracket (callocBytes @Pipeline ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free r <- lift $ traceAroundEvent "vkCreateRayTracingPipelinesKHR" (vkCreateRayTracingPipelinesKHR' (deviceHandle (device)) (deferredOperation) (pipelineCache) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (forgetExtensions (pPCreateInfos)) pAllocator (pPPipelines)) lift $ when (r < SUCCESS) (throwIO (VulkanException r)) pPipelines <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) (\Int i -> forall a. Storable a => Ptr a -> IO a peek @Pipeline ((Ptr Pipeline pPPipelines Ptr Pipeline -> Int -> Ptr Pipeline forall a. Ptr a -> Int -> Ptr a `advancePtrBytes` (Int 8 Int -> Int -> Int forall a. Num a => a -> a -> a * (Int i)) :: Ptr Pipeline))) pure $ (r, pPipelines) -- | A convenience wrapper to make a compatible pair of calls to -- 'createRayTracingPipelinesKHR' and 'destroyPipeline' -- -- To ensure that 'destroyPipeline' is always called: pass -- 'Control.Exception.bracket' (or the allocate function from your -- favourite resource management library) as the last argument. -- To just extract the pair pass '(,)' as the last argument. -- withRayTracingPipelinesKHR :: forall io r . MonadIO io => Device -> DeferredOperationKHR -> PipelineCache -> Vector (SomeStruct RayTracingPipelineCreateInfoKHR) -> Maybe AllocationCallbacks -> (io (Result, Vector Pipeline) -> ((Result, Vector Pipeline) -> io ()) -> r) -> r withRayTracingPipelinesKHR :: forall (io :: * -> *) r. MonadIO io => Device -> DeferredOperationKHR -> PipelineCache -> ("createInfos" ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR)) -> ("allocator" ::: Maybe AllocationCallbacks) -> (io (Result, "pipelines" ::: Vector Pipeline) -> ((Result, "pipelines" ::: Vector Pipeline) -> io ()) -> r) -> r withRayTracingPipelinesKHR Device device DeferredOperationKHR deferredOperation PipelineCache pipelineCache "createInfos" ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR) pCreateInfos "allocator" ::: Maybe AllocationCallbacks pAllocator io (Result, "pipelines" ::: Vector Pipeline) -> ((Result, "pipelines" ::: Vector Pipeline) -> io ()) -> r b = io (Result, "pipelines" ::: Vector Pipeline) -> ((Result, "pipelines" ::: Vector Pipeline) -> io ()) -> r b (Device -> DeferredOperationKHR -> PipelineCache -> ("createInfos" ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR)) -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Result, "pipelines" ::: Vector Pipeline) forall (io :: * -> *). MonadIO io => Device -> DeferredOperationKHR -> PipelineCache -> ("createInfos" ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR)) -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Result, "pipelines" ::: Vector Pipeline) createRayTracingPipelinesKHR Device device DeferredOperationKHR deferredOperation PipelineCache pipelineCache "createInfos" ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR) pCreateInfos "allocator" ::: Maybe AllocationCallbacks pAllocator) (\(Result _, "pipelines" ::: Vector Pipeline o1) -> (Pipeline -> io ()) -> ("pipelines" ::: Vector Pipeline) -> io () forall (t :: * -> *) (f :: * -> *) a b. (Foldable t, Applicative f) => (a -> f b) -> t a -> f () traverse_ (\Pipeline o1Elem -> Device -> Pipeline -> ("allocator" ::: Maybe AllocationCallbacks) -> io () forall (io :: * -> *). MonadIO io => Device -> Pipeline -> ("allocator" ::: Maybe AllocationCallbacks) -> io () destroyPipeline Device device Pipeline o1Elem "allocator" ::: Maybe AllocationCallbacks pAllocator) "pipelines" ::: Vector Pipeline o1) foreign import ccall #if !defined(SAFE_FOREIGN_CALLS) unsafe #endif "dynamic" mkVkCmdTraceRaysIndirectKHR :: FunPtr (Ptr CommandBuffer_T -> Ptr StridedDeviceAddressRegionKHR -> Ptr StridedDeviceAddressRegionKHR -> Ptr StridedDeviceAddressRegionKHR -> Ptr StridedDeviceAddressRegionKHR -> DeviceAddress -> IO ()) -> Ptr CommandBuffer_T -> Ptr StridedDeviceAddressRegionKHR -> Ptr StridedDeviceAddressRegionKHR -> Ptr StridedDeviceAddressRegionKHR -> Ptr StridedDeviceAddressRegionKHR -> DeviceAddress -> IO () -- | vkCmdTraceRaysIndirectKHR - Initialize an indirect ray tracing dispatch -- -- = Description -- -- 'cmdTraceRaysIndirectKHR' behaves similarly to 'cmdTraceRaysKHR' except -- that the ray trace query dimensions are read by the device from -- @indirectDeviceAddress@ during execution. -- -- == Valid Usage -- -- - #VUID-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-None-03429# Any shader group handle -- referenced by this call /must/ have been queried from the bound ray -- tracing pipeline -- -- - #VUID-vkCmdTraceRaysIndirectKHR-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 'cmdSetRayTracingPipelineStackSizeKHR' -- /must/ have been called in the current command buffer prior to this -- trace command -- -- - #VUID-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-commandBuffer-03635# @commandBuffer@ -- /must/ not be a protected command buffer -- -- - #VUID-vkCmdTraceRaysIndirectKHR-size-04023# The @size@ member of -- @pRayGenShaderBindingTable@ /must/ be equal to its @stride@ member -- -- - #VUID-vkCmdTraceRaysIndirectKHR-pRayGenShaderBindingTable-03681# -- @pRayGenShaderBindingTable->deviceAddress@ /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-vkCmdTraceRaysIndirectKHR-pRayGenShaderBindingTable-03682# -- @pRayGenShaderBindingTable->deviceAddress@ /must/ be a multiple of -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupBaseAlignment@ -- -- - #VUID-vkCmdTraceRaysIndirectKHR-pMissShaderBindingTable-03684# -- @pMissShaderBindingTable->deviceAddress@ /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-vkCmdTraceRaysIndirectKHR-pMissShaderBindingTable-03685# -- @pMissShaderBindingTable->deviceAddress@ /must/ be a multiple of -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupBaseAlignment@ -- -- - #VUID-vkCmdTraceRaysIndirectKHR-stride-03686# -- @pMissShaderBindingTable->stride@ /must/ be a multiple of -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupHandleAlignment@ -- -- - #VUID-vkCmdTraceRaysIndirectKHR-stride-04029# -- @pMissShaderBindingTable->stride@ /must/ be less than or equal to -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxShaderGroupStride@ -- -- - #VUID-vkCmdTraceRaysIndirectKHR-pHitShaderBindingTable-03688# -- @pHitShaderBindingTable->deviceAddress@ /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-vkCmdTraceRaysIndirectKHR-pHitShaderBindingTable-03689# -- @pHitShaderBindingTable->deviceAddress@ /must/ be a multiple of -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupBaseAlignment@ -- -- - #VUID-vkCmdTraceRaysIndirectKHR-stride-03690# -- @pHitShaderBindingTable->stride@ /must/ be a multiple of -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupHandleAlignment@ -- -- - #VUID-vkCmdTraceRaysIndirectKHR-stride-04035# -- @pHitShaderBindingTable->stride@ /must/ be less than or equal to -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxShaderGroupStride@ -- -- - #VUID-vkCmdTraceRaysIndirectKHR-pCallableShaderBindingTable-03692# -- @pCallableShaderBindingTable->deviceAddress@ /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-vkCmdTraceRaysIndirectKHR-pCallableShaderBindingTable-03693# -- @pCallableShaderBindingTable->deviceAddress@ /must/ be a multiple of -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupBaseAlignment@ -- -- - #VUID-vkCmdTraceRaysIndirectKHR-stride-03694# -- @pCallableShaderBindingTable->stride@ /must/ be a multiple of -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupHandleAlignment@ -- -- - #VUID-vkCmdTraceRaysIndirectKHR-stride-04041# -- @pCallableShaderBindingTable->stride@ /must/ be less than or equal -- to -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxShaderGroupStride@ -- -- - #VUID-vkCmdTraceRaysIndirectKHR-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 -- @pMissShaderBindingTable->deviceAddress@ accessed as a result of -- this command in order to execute a miss shader /must/ not be zero -- -- - #VUID-vkCmdTraceRaysIndirectKHR-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 -- @pHitShaderBindingTable->deviceAddress@ accessed as a result of this -- command in order to execute an any-hit shader /must/ not be zero -- -- - #VUID-vkCmdTraceRaysIndirectKHR-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 -- @pHitShaderBindingTable->deviceAddress@ accessed as a result of this -- command in order to execute a closest hit shader /must/ not be zero -- -- - #VUID-vkCmdTraceRaysIndirectKHR-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 -- @pHitShaderBindingTable->deviceAddress@ accessed as a result of this -- command in order to execute an intersection shader /must/ not be -- zero -- -- - #VUID-vkCmdTraceRaysIndirectKHR-pHitShaderBindingTable-04735# Any -- non-zero hit shader group entries in the table identified by -- @pHitShaderBindingTable->deviceAddress@ 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 -- 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' -- -- - #VUID-vkCmdTraceRaysIndirectKHR-pHitShaderBindingTable-04736# Any -- non-zero hit shader group entries in the table identified by -- @pHitShaderBindingTable->deviceAddress@ 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 -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR' -- -- - #VUID-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03634# -- @indirectDeviceAddress@ /must/ be a multiple of @4@ -- -- - #VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03636# All -- device addresses between @indirectDeviceAddress@ and -- @indirectDeviceAddress@ + @sizeof@('TraceRaysIndirectCommandKHR') - -- 1 /must/ be in the buffer device address range of the same buffer -- -- - #VUID-vkCmdTraceRaysIndirectKHR-rayTracingPipelineTraceRaysIndirect-03637# -- The -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayTracingPipelineTraceRaysIndirect rayTracingPipelineTraceRaysIndirect> -- feature /must/ be enabled -- -- - #VUID-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-commandBuffer-parameter# -- @commandBuffer@ /must/ be a valid -- 'Vulkan.Core10.Handles.CommandBuffer' handle -- -- - #VUID-vkCmdTraceRaysIndirectKHR-pRaygenShaderBindingTable-parameter# -- @pRaygenShaderBindingTable@ /must/ be a valid pointer to a valid -- 'StridedDeviceAddressRegionKHR' structure -- -- - #VUID-vkCmdTraceRaysIndirectKHR-pMissShaderBindingTable-parameter# -- @pMissShaderBindingTable@ /must/ be a valid pointer to a valid -- 'StridedDeviceAddressRegionKHR' structure -- -- - #VUID-vkCmdTraceRaysIndirectKHR-pHitShaderBindingTable-parameter# -- @pHitShaderBindingTable@ /must/ be a valid pointer to a valid -- 'StridedDeviceAddressRegionKHR' structure -- -- - #VUID-vkCmdTraceRaysIndirectKHR-pCallableShaderBindingTable-parameter# -- @pCallableShaderBindingTable@ /must/ be a valid pointer to a valid -- 'StridedDeviceAddressRegionKHR' structure -- -- - #VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-parameter# -- @indirectDeviceAddress@ /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' value -- -- - #VUID-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-commandBuffer-cmdpool# The -- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was -- allocated from /must/ support -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT' operations -- -- - #VUID-vkCmdTraceRaysIndirectKHR-renderpass# This command /must/ only -- be called outside of a render pass instance -- -- - #VUID-vkCmdTraceRaysIndirectKHR-suspended# This command /must/ not -- be called between suspended render pass instances -- -- - #VUID-vkCmdTraceRaysIndirectKHR-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 -- -- vkCmdTraceRaysIndirectKHR 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_pipeline VK_KHR_ray_tracing_pipeline>, -- 'Vulkan.Core10.Handles.CommandBuffer', -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress', -- 'StridedDeviceAddressRegionKHR' cmdTraceRaysIndirectKHR :: forall io . (MonadIO io) => -- | @commandBuffer@ is the command buffer into which the command will be -- recorded. CommandBuffer -> -- | @pRaygenShaderBindingTable@ is a 'StridedDeviceAddressRegionKHR' that -- holds the shader binding table data for the ray generation shader stage. ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> -- | @pMissShaderBindingTable@ is a 'StridedDeviceAddressRegionKHR' that -- holds the shader binding table data for the miss shader stage. ("missShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> -- | @pHitShaderBindingTable@ is a 'StridedDeviceAddressRegionKHR' that holds -- the shader binding table data for the hit shader stage. ("hitShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> -- | @pCallableShaderBindingTable@ is a 'StridedDeviceAddressRegionKHR' that -- holds the shader binding table data for the callable shader stage. ("callableShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> -- | @indirectDeviceAddress@ is a buffer device address which is a pointer to -- a 'TraceRaysIndirectCommandKHR' structure containing the trace ray -- parameters. ("indirectDeviceAddress" ::: DeviceAddress) -> io () cmdTraceRaysIndirectKHR :: forall (io :: * -> *). MonadIO io => CommandBuffer -> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("dataSize" ::: Word64) -> io () cmdTraceRaysIndirectKHR CommandBuffer commandBuffer "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR raygenShaderBindingTable "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR missShaderBindingTable "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR hitShaderBindingTable "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR callableShaderBindingTable "dataSize" ::: Word64 indirectDeviceAddress = IO () -> io () forall a. IO a -> io a forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO () -> io ()) -> (ContT () IO () -> IO ()) -> ContT () IO () -> io () forall b c a. (b -> c) -> (a -> b) -> a -> c . ContT () IO () -> IO () forall (m :: * -> *) r. Monad m => ContT r m r -> m r evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io () forall a b. (a -> b) -> a -> b $ do let vkCmdTraceRaysIndirectKHRPtr :: FunPtr (Ptr CommandBuffer_T -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("dataSize" ::: Word64) -> IO ()) vkCmdTraceRaysIndirectKHRPtr = DeviceCmds -> FunPtr (Ptr CommandBuffer_T -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("dataSize" ::: Word64) -> IO ()) pVkCmdTraceRaysIndirectKHR (case CommandBuffer commandBuffer of CommandBuffer{DeviceCmds deviceCmds :: CommandBuffer -> DeviceCmds deviceCmds :: DeviceCmds deviceCmds} -> DeviceCmds deviceCmds) IO () -> ContT () IO () forall (m :: * -> *) a. Monad m => m a -> ContT () m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO () forall a b. (a -> b) -> a -> b $ Bool -> IO () -> IO () forall (f :: * -> *). Applicative f => Bool -> f () -> f () unless (FunPtr (Ptr CommandBuffer_T -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("dataSize" ::: Word64) -> IO ()) vkCmdTraceRaysIndirectKHRPtr FunPtr (Ptr CommandBuffer_T -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("dataSize" ::: Word64) -> IO ()) -> FunPtr (Ptr CommandBuffer_T -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("dataSize" ::: Word64) -> IO ()) -> Bool forall a. Eq a => a -> a -> Bool /= FunPtr (Ptr CommandBuffer_T -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("dataSize" ::: Word64) -> 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 vkCmdTraceRaysIndirectKHR is null" Maybe CInt forall a. Maybe a Nothing Maybe String forall a. Maybe a Nothing let vkCmdTraceRaysIndirectKHR' :: Ptr CommandBuffer_T -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("dataSize" ::: Word64) -> IO () vkCmdTraceRaysIndirectKHR' = FunPtr (Ptr CommandBuffer_T -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("dataSize" ::: Word64) -> IO ()) -> Ptr CommandBuffer_T -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("dataSize" ::: Word64) -> IO () mkVkCmdTraceRaysIndirectKHR FunPtr (Ptr CommandBuffer_T -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("dataSize" ::: Word64) -> IO ()) vkCmdTraceRaysIndirectKHRPtr pRaygenShaderBindingTable <- ((Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO ()) -> IO ()) -> ContT () IO (Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)) forall {k} (r :: k) (m :: k -> *) a. ((a -> m r) -> m r) -> ContT r m a ContT (((Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO ()) -> IO ()) -> ContT () IO (Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))) -> ((Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO ()) -> IO ()) -> ContT () IO (Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)) forall a b. (a -> b) -> a -> b $ ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> (Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO ()) -> IO () forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b forall b. ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> (Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO b) -> IO b withCStruct ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR raygenShaderBindingTable) pMissShaderBindingTable <- ContT $ withCStruct (missShaderBindingTable) pHitShaderBindingTable <- ContT $ withCStruct (hitShaderBindingTable) pCallableShaderBindingTable <- ContT $ withCStruct (callableShaderBindingTable) lift $ traceAroundEvent "vkCmdTraceRaysIndirectKHR" (vkCmdTraceRaysIndirectKHR' (commandBufferHandle (commandBuffer)) pRaygenShaderBindingTable pMissShaderBindingTable pHitShaderBindingTable pCallableShaderBindingTable (indirectDeviceAddress)) pure $ () foreign import ccall #if !defined(SAFE_FOREIGN_CALLS) unsafe #endif "dynamic" mkVkGetRayTracingShaderGroupStackSizeKHR :: FunPtr (Ptr Device_T -> Pipeline -> Word32 -> ShaderGroupShaderKHR -> IO DeviceSize) -> Ptr Device_T -> Pipeline -> Word32 -> ShaderGroupShaderKHR -> IO DeviceSize -- | vkGetRayTracingShaderGroupStackSizeKHR - Query ray tracing pipeline -- shader group shader stack size -- -- = Description -- -- The return value is the ray tracing pipeline stack size in bytes for the -- specified shader as called from the specified shader group. -- -- == Valid Usage -- -- - #VUID-vkGetRayTracingShaderGroupStackSizeKHR-pipeline-04622# -- @pipeline@ /must/ be a ray tracing pipeline -- -- - #VUID-vkGetRayTracingShaderGroupStackSizeKHR-group-03608# The value -- of @group@ /must/ be less than the number of shader groups in -- @pipeline@ -- -- - #VUID-vkGetRayTracingShaderGroupStackSizeKHR-groupShader-03609# The -- shader identified by @groupShader@ in @group@ /must/ not be -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' -- -- == Valid Usage (Implicit) -- -- - #VUID-vkGetRayTracingShaderGroupStackSizeKHR-device-parameter# -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle -- -- - #VUID-vkGetRayTracingShaderGroupStackSizeKHR-pipeline-parameter# -- @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle -- -- - #VUID-vkGetRayTracingShaderGroupStackSizeKHR-groupShader-parameter# -- @groupShader@ /must/ be a valid 'ShaderGroupShaderKHR' value -- -- - #VUID-vkGetRayTracingShaderGroupStackSizeKHR-pipeline-parent# -- @pipeline@ /must/ have been created, allocated, or retrieved from -- @device@ -- -- = See Also -- -- <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.Device', 'Vulkan.Core10.Handles.Pipeline', -- 'ShaderGroupShaderKHR' getRayTracingShaderGroupStackSizeKHR :: forall io . (MonadIO io) => -- | @device@ is the logical device containing the ray tracing pipeline. Device -> -- | @pipeline@ is the ray tracing pipeline object containing the shaders -- groups. Pipeline -> -- | @group@ is the index of the shader group to query. ("group" ::: Word32) -> -- | @groupShader@ is the type of shader from the group to query. ShaderGroupShaderKHR -> io (DeviceSize) getRayTracingShaderGroupStackSizeKHR :: forall (io :: * -> *). MonadIO io => Device -> Pipeline -> ("width" ::: Word32) -> ShaderGroupShaderKHR -> io ("dataSize" ::: Word64) getRayTracingShaderGroupStackSizeKHR Device device Pipeline pipeline "width" ::: Word32 group ShaderGroupShaderKHR groupShader = IO ("dataSize" ::: Word64) -> io ("dataSize" ::: Word64) forall a. IO a -> io a forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO ("dataSize" ::: Word64) -> io ("dataSize" ::: Word64)) -> IO ("dataSize" ::: Word64) -> io ("dataSize" ::: Word64) forall a b. (a -> b) -> a -> b $ do let vkGetRayTracingShaderGroupStackSizeKHRPtr :: FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ShaderGroupShaderKHR -> IO ("dataSize" ::: Word64)) vkGetRayTracingShaderGroupStackSizeKHRPtr = DeviceCmds -> FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ShaderGroupShaderKHR -> IO ("dataSize" ::: Word64)) pVkGetRayTracingShaderGroupStackSizeKHR (case Device device of Device{DeviceCmds deviceCmds :: Device -> DeviceCmds deviceCmds :: DeviceCmds deviceCmds} -> DeviceCmds deviceCmds) Bool -> IO () -> IO () forall (f :: * -> *). Applicative f => Bool -> f () -> f () unless (FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ShaderGroupShaderKHR -> IO ("dataSize" ::: Word64)) vkGetRayTracingShaderGroupStackSizeKHRPtr FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ShaderGroupShaderKHR -> IO ("dataSize" ::: Word64)) -> FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ShaderGroupShaderKHR -> IO ("dataSize" ::: Word64)) -> Bool forall a. Eq a => a -> a -> Bool /= FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ShaderGroupShaderKHR -> IO ("dataSize" ::: Word64)) 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 vkGetRayTracingShaderGroupStackSizeKHR is null" Maybe CInt forall a. Maybe a Nothing Maybe String forall a. Maybe a Nothing let vkGetRayTracingShaderGroupStackSizeKHR' :: Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ShaderGroupShaderKHR -> IO ("dataSize" ::: Word64) vkGetRayTracingShaderGroupStackSizeKHR' = FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ShaderGroupShaderKHR -> IO ("dataSize" ::: Word64)) -> Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ShaderGroupShaderKHR -> IO ("dataSize" ::: Word64) mkVkGetRayTracingShaderGroupStackSizeKHR FunPtr (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ShaderGroupShaderKHR -> IO ("dataSize" ::: Word64)) vkGetRayTracingShaderGroupStackSizeKHRPtr r <- String -> IO ("dataSize" ::: Word64) -> IO ("dataSize" ::: Word64) forall a. String -> IO a -> IO a traceAroundEvent String "vkGetRayTracingShaderGroupStackSizeKHR" (Ptr Device_T -> Pipeline -> ("width" ::: Word32) -> ShaderGroupShaderKHR -> IO ("dataSize" ::: Word64) vkGetRayTracingShaderGroupStackSizeKHR' (Device -> Ptr Device_T deviceHandle (Device device)) (Pipeline pipeline) ("width" ::: Word32 group) (ShaderGroupShaderKHR groupShader)) pure $ (r) foreign import ccall #if !defined(SAFE_FOREIGN_CALLS) unsafe #endif "dynamic" mkVkCmdSetRayTracingPipelineStackSizeKHR :: FunPtr (Ptr CommandBuffer_T -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> IO () -- | vkCmdSetRayTracingPipelineStackSizeKHR - Set the stack size dynamically -- for a ray tracing pipeline -- -- = Description -- -- This command sets the stack size for subsequent ray tracing commands -- when the ray tracing pipeline is created with -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR' -- set in -- 'Vulkan.Core10.GraphicsPipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@. -- Otherwise, the stack size is computed as described in -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#ray-tracing-pipeline-stack Ray Tracing Pipeline Stack>. -- -- == Valid Usage -- -- - #VUID-vkCmdSetRayTracingPipelineStackSizeKHR-pipelineStackSize-03610# -- @pipelineStackSize@ /must/ be large enough for any dynamic execution -- through the shaders in the ray tracing pipeline used by a subsequent -- trace call -- -- == Valid Usage (Implicit) -- -- - #VUID-vkCmdSetRayTracingPipelineStackSizeKHR-commandBuffer-parameter# -- @commandBuffer@ /must/ be a valid -- 'Vulkan.Core10.Handles.CommandBuffer' handle -- -- - #VUID-vkCmdSetRayTracingPipelineStackSizeKHR-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-vkCmdSetRayTracingPipelineStackSizeKHR-commandBuffer-cmdpool# -- The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was -- allocated from /must/ support -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT' operations -- -- - #VUID-vkCmdSetRayTracingPipelineStackSizeKHR-renderpass# This -- command /must/ only be called outside of a render pass instance -- -- - #VUID-vkCmdSetRayTracingPipelineStackSizeKHR-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 | State | -- | Secondary | | | | | -- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+ -- -- == Conditional Rendering -- -- vkCmdSetRayTracingPipelineStackSizeKHR 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_pipeline VK_KHR_ray_tracing_pipeline>, -- 'Vulkan.Core10.Handles.CommandBuffer' cmdSetRayTracingPipelineStackSizeKHR :: forall io . (MonadIO io) => -- | @commandBuffer@ is the command buffer into which the command will be -- recorded. CommandBuffer -> -- | @pipelineStackSize@ is the stack size to use for subsequent ray tracing -- trace commands. ("pipelineStackSize" ::: Word32) -> io () cmdSetRayTracingPipelineStackSizeKHR :: forall (io :: * -> *). MonadIO io => CommandBuffer -> ("width" ::: Word32) -> io () cmdSetRayTracingPipelineStackSizeKHR CommandBuffer commandBuffer "width" ::: Word32 pipelineStackSize = 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 vkCmdSetRayTracingPipelineStackSizeKHRPtr :: FunPtr (Ptr CommandBuffer_T -> ("width" ::: Word32) -> IO ()) vkCmdSetRayTracingPipelineStackSizeKHRPtr = DeviceCmds -> FunPtr (Ptr CommandBuffer_T -> ("width" ::: Word32) -> IO ()) pVkCmdSetRayTracingPipelineStackSizeKHR (case CommandBuffer commandBuffer of CommandBuffer{DeviceCmds deviceCmds :: CommandBuffer -> DeviceCmds deviceCmds :: DeviceCmds deviceCmds} -> DeviceCmds deviceCmds) Bool -> IO () -> IO () forall (f :: * -> *). Applicative f => Bool -> f () -> f () unless (FunPtr (Ptr CommandBuffer_T -> ("width" ::: Word32) -> IO ()) vkCmdSetRayTracingPipelineStackSizeKHRPtr FunPtr (Ptr CommandBuffer_T -> ("width" ::: Word32) -> IO ()) -> FunPtr (Ptr CommandBuffer_T -> ("width" ::: Word32) -> IO ()) -> Bool forall a. Eq a => a -> a -> Bool /= FunPtr (Ptr CommandBuffer_T -> ("width" ::: Word32) -> 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 vkCmdSetRayTracingPipelineStackSizeKHR is null" Maybe CInt forall a. Maybe a Nothing Maybe String forall a. Maybe a Nothing let vkCmdSetRayTracingPipelineStackSizeKHR' :: Ptr CommandBuffer_T -> ("width" ::: Word32) -> IO () vkCmdSetRayTracingPipelineStackSizeKHR' = FunPtr (Ptr CommandBuffer_T -> ("width" ::: Word32) -> IO ()) -> Ptr CommandBuffer_T -> ("width" ::: Word32) -> IO () mkVkCmdSetRayTracingPipelineStackSizeKHR FunPtr (Ptr CommandBuffer_T -> ("width" ::: Word32) -> IO ()) vkCmdSetRayTracingPipelineStackSizeKHRPtr String -> IO () -> IO () forall a. String -> IO a -> IO a traceAroundEvent String "vkCmdSetRayTracingPipelineStackSizeKHR" (Ptr CommandBuffer_T -> ("width" ::: Word32) -> IO () vkCmdSetRayTracingPipelineStackSizeKHR' (CommandBuffer -> Ptr CommandBuffer_T commandBufferHandle (CommandBuffer commandBuffer)) ("width" ::: Word32 pipelineStackSize)) () -> IO () forall a. a -> IO a forall (f :: * -> *) a. Applicative f => a -> f a pure (() -> IO ()) -> () -> IO () forall a b. (a -> b) -> a -> b $ () -- No documentation found for TopLevel "VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_BUILT_IN_PRIMITIVES_BIT_KHR" pattern $mPIPELINE_CREATE_2_RAY_TRACING_SKIP_BUILT_IN_PRIMITIVES_BIT_KHR :: forall {r}. PipelineCreateFlagBits2 -> ((# #) -> r) -> ((# #) -> r) -> r $bPIPELINE_CREATE_2_RAY_TRACING_SKIP_BUILT_IN_PRIMITIVES_BIT_KHR :: PipelineCreateFlagBits2 PIPELINE_CREATE_2_RAY_TRACING_SKIP_BUILT_IN_PRIMITIVES_BIT_KHR = PIPELINE_CREATE_2_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR -- | VkRayTracingShaderGroupCreateInfoKHR - Structure specifying shaders in a -- shader group -- -- = Description -- -- If the pipeline is created with -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR' -- and the -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-pipelineLibraryGroupHandles pipelineLibraryGroupHandles> -- feature is enabled, @pShaderGroupCaptureReplayHandle@ is inherited by -- all pipelines which link against this pipeline and remains bitwise -- identical for any pipeline which references this pipeline library. -- -- == Valid Usage -- -- - #VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03474# If @type@ is -- 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR' then @generalShader@ -- /must/ be a valid index into the list of shaders, formed by shaders -- in 'RayTracingPipelineCreateInfoKHR'::@pStages@ and the shaders -- imported from pipeline libraries, referring to a shader of -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_RAYGEN_BIT_KHR', -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MISS_BIT_KHR', -- or -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_CALLABLE_BIT_KHR' -- -- - #VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03475# If @type@ is -- 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR' then @closestHitShader@, -- @anyHitShader@, and @intersectionShader@ /must/ be -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' -- -- - #VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03476# If @type@ is -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR' then -- @intersectionShader@ /must/ be a valid index into the list of -- shaders, formed by shaders in -- 'RayTracingPipelineCreateInfoKHR'::@pStages@ and the shaders -- imported from pipeline libraries, referring to a shader of -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_INTERSECTION_BIT_KHR' -- -- - #VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03477# If @type@ is -- 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' then -- @intersectionShader@ /must/ be -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' -- -- - #VUID-VkRayTracingShaderGroupCreateInfoKHR-closestHitShader-03478# -- @closestHitShader@ /must/ be either -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' or a valid index into -- the list of shaders, formed by shaders in -- 'RayTracingPipelineCreateInfoKHR'::@pStages@ and the shaders -- imported from pipeline libraries, referring to a shader of -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_CLOSEST_HIT_BIT_KHR' -- -- - #VUID-VkRayTracingShaderGroupCreateInfoKHR-anyHitShader-03479# -- @anyHitShader@ /must/ be either -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' or a valid index into -- the list of shaders, formed by shaders in -- 'RayTracingPipelineCreateInfoKHR'::@pStages@ and the shaders -- imported from pipeline libraries, referring to a shader of -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_ANY_HIT_BIT_KHR' -- -- - #VUID-VkRayTracingShaderGroupCreateInfoKHR-rayTracingPipelineShaderGroupHandleCaptureReplayMixed-03603# -- If -- 'PhysicalDeviceRayTracingPipelineFeaturesKHR'::@rayTracingPipelineShaderGroupHandleCaptureReplayMixed@ -- is 'Vulkan.Core10.FundamentalTypes.FALSE' then -- @pShaderGroupCaptureReplayHandle@ /must/ not be provided if it has -- not been provided on a previous call to ray tracing pipeline -- creation -- -- - #VUID-VkRayTracingShaderGroupCreateInfoKHR-rayTracingPipelineShaderGroupHandleCaptureReplayMixed-03604# -- If -- 'PhysicalDeviceRayTracingPipelineFeaturesKHR'::@rayTracingPipelineShaderGroupHandleCaptureReplayMixed@ -- is 'Vulkan.Core10.FundamentalTypes.FALSE' then the caller /must/ -- guarantee that no ray tracing pipeline creation commands with -- @pShaderGroupCaptureReplayHandle@ provided execute simultaneously -- with ray tracing pipeline creation commands without -- @pShaderGroupCaptureReplayHandle@ provided -- -- == Valid Usage (Implicit) -- -- - #VUID-VkRayTracingShaderGroupCreateInfoKHR-sType-sType# @sType@ -- /must/ be -- 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR' -- -- - #VUID-VkRayTracingShaderGroupCreateInfoKHR-pNext-pNext# @pNext@ -- /must/ be @NULL@ -- -- - #VUID-VkRayTracingShaderGroupCreateInfoKHR-type-parameter# @type@ -- /must/ be a valid 'RayTracingShaderGroupTypeKHR' value -- -- = See Also -- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_ray_tracing_pipeline VK_KHR_ray_tracing_pipeline>, -- 'RayTracingPipelineCreateInfoKHR', 'RayTracingShaderGroupTypeKHR', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data RayTracingShaderGroupCreateInfoKHR = RayTracingShaderGroupCreateInfoKHR { -- | @type@ is the type of hit group specified in this structure. RayTracingShaderGroupCreateInfoKHR -> RayTracingShaderGroupTypeKHR type' :: RayTracingShaderGroupTypeKHR , -- | @generalShader@ is the index of the ray generation, miss, or callable -- shader from 'RayTracingPipelineCreateInfoKHR'::@pStages@ in the group if -- the shader group has @type@ of -- 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR', and -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' otherwise. RayTracingShaderGroupCreateInfoKHR -> "width" ::: Word32 generalShader :: Word32 , -- | @closestHitShader@ is the optional index of the closest hit shader from -- 'RayTracingPipelineCreateInfoKHR'::@pStages@ in the group if the shader -- group has @type@ of -- 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' or -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', and -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' otherwise. RayTracingShaderGroupCreateInfoKHR -> "width" ::: Word32 closestHitShader :: Word32 , -- | @anyHitShader@ is the optional index of the any-hit shader from -- 'RayTracingPipelineCreateInfoKHR'::@pStages@ in the group if the shader -- group has @type@ of -- 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' or -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', and -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' otherwise. RayTracingShaderGroupCreateInfoKHR -> "width" ::: Word32 anyHitShader :: Word32 , -- | @intersectionShader@ is the index of the intersection shader from -- 'RayTracingPipelineCreateInfoKHR'::@pStages@ in the group if the shader -- group has @type@ of -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', and -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' otherwise. RayTracingShaderGroupCreateInfoKHR -> "width" ::: Word32 intersectionShader :: Word32 , -- | @pShaderGroupCaptureReplayHandle@ is @NULL@ or a pointer to replay -- information for this shader group queried from -- 'getRayTracingCaptureReplayShaderGroupHandlesKHR', as described in -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#ray-tracing-capture-replay Ray Tracing Capture Replay>. -- Ignored if -- 'PhysicalDeviceRayTracingPipelineFeaturesKHR'::@rayTracingPipelineShaderGroupHandleCaptureReplay@ -- is 'Vulkan.Core10.FundamentalTypes.FALSE'. RayTracingShaderGroupCreateInfoKHR -> "data" ::: Ptr () shaderGroupCaptureReplayHandle :: Ptr () } deriving (Typeable) #if defined(GENERIC_INSTANCES) deriving instance Generic (RayTracingShaderGroupCreateInfoKHR) #endif deriving instance Show RayTracingShaderGroupCreateInfoKHR instance ToCStruct RayTracingShaderGroupCreateInfoKHR where withCStruct :: forall b. RayTracingShaderGroupCreateInfoKHR -> (Ptr RayTracingShaderGroupCreateInfoKHR -> IO b) -> IO b withCStruct RayTracingShaderGroupCreateInfoKHR x Ptr RayTracingShaderGroupCreateInfoKHR -> IO b f = Int -> (Ptr RayTracingShaderGroupCreateInfoKHR -> IO b) -> IO b forall a b. Int -> (Ptr a -> IO b) -> IO b allocaBytes Int 48 ((Ptr RayTracingShaderGroupCreateInfoKHR -> IO b) -> IO b) -> (Ptr RayTracingShaderGroupCreateInfoKHR -> IO b) -> IO b forall a b. (a -> b) -> a -> b $ \Ptr RayTracingShaderGroupCreateInfoKHR p -> Ptr RayTracingShaderGroupCreateInfoKHR -> RayTracingShaderGroupCreateInfoKHR -> IO b -> IO b forall b. Ptr RayTracingShaderGroupCreateInfoKHR -> RayTracingShaderGroupCreateInfoKHR -> IO b -> IO b forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b pokeCStruct Ptr RayTracingShaderGroupCreateInfoKHR p RayTracingShaderGroupCreateInfoKHR x (Ptr RayTracingShaderGroupCreateInfoKHR -> IO b f Ptr RayTracingShaderGroupCreateInfoKHR p) pokeCStruct :: forall b. Ptr RayTracingShaderGroupCreateInfoKHR -> RayTracingShaderGroupCreateInfoKHR -> IO b -> IO b pokeCStruct Ptr RayTracingShaderGroupCreateInfoKHR p RayTracingShaderGroupCreateInfoKHR{"width" ::: Word32 "data" ::: Ptr () RayTracingShaderGroupTypeKHR type' :: RayTracingShaderGroupCreateInfoKHR -> RayTracingShaderGroupTypeKHR generalShader :: RayTracingShaderGroupCreateInfoKHR -> "width" ::: Word32 closestHitShader :: RayTracingShaderGroupCreateInfoKHR -> "width" ::: Word32 anyHitShader :: RayTracingShaderGroupCreateInfoKHR -> "width" ::: Word32 intersectionShader :: RayTracingShaderGroupCreateInfoKHR -> "width" ::: Word32 shaderGroupCaptureReplayHandle :: RayTracingShaderGroupCreateInfoKHR -> "data" ::: Ptr () type' :: RayTracingShaderGroupTypeKHR generalShader :: "width" ::: Word32 closestHitShader :: "width" ::: Word32 anyHitShader :: "width" ::: Word32 intersectionShader :: "width" ::: Word32 shaderGroupCaptureReplayHandle :: "data" ::: Ptr () ..} IO b f = do Ptr StructureType -> StructureType -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingShaderGroupCreateInfoKHR p Ptr RayTracingShaderGroupCreateInfoKHR -> Int -> Ptr StructureType forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr StructureType)) (StructureType STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR) Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingShaderGroupCreateInfoKHR p Ptr RayTracingShaderGroupCreateInfoKHR -> Int -> Ptr ("data" ::: Ptr ()) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr (Ptr ()))) ("data" ::: Ptr () forall a. Ptr a nullPtr) Ptr RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingShaderGroupCreateInfoKHR p Ptr RayTracingShaderGroupCreateInfoKHR -> Int -> Ptr RayTracingShaderGroupTypeKHR forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr RayTracingShaderGroupTypeKHR)) (RayTracingShaderGroupTypeKHR type') Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingShaderGroupCreateInfoKHR p Ptr RayTracingShaderGroupCreateInfoKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 20 :: Ptr Word32)) ("width" ::: Word32 generalShader) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingShaderGroupCreateInfoKHR p Ptr RayTracingShaderGroupCreateInfoKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 24 :: Ptr Word32)) ("width" ::: Word32 closestHitShader) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingShaderGroupCreateInfoKHR p Ptr RayTracingShaderGroupCreateInfoKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 28 :: Ptr Word32)) ("width" ::: Word32 anyHitShader) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingShaderGroupCreateInfoKHR p Ptr RayTracingShaderGroupCreateInfoKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 32 :: Ptr Word32)) ("width" ::: Word32 intersectionShader) Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingShaderGroupCreateInfoKHR p Ptr RayTracingShaderGroupCreateInfoKHR -> Int -> Ptr ("data" ::: Ptr ()) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 40 :: Ptr (Ptr ()))) ("data" ::: Ptr () shaderGroupCaptureReplayHandle) IO b f cStructSize :: Int cStructSize = Int 48 cStructAlignment :: Int cStructAlignment = Int 8 pokeZeroCStruct :: forall b. Ptr RayTracingShaderGroupCreateInfoKHR -> IO b -> IO b pokeZeroCStruct Ptr RayTracingShaderGroupCreateInfoKHR p IO b f = do Ptr StructureType -> StructureType -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingShaderGroupCreateInfoKHR p Ptr RayTracingShaderGroupCreateInfoKHR -> Int -> Ptr StructureType forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr StructureType)) (StructureType STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR) Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingShaderGroupCreateInfoKHR p Ptr RayTracingShaderGroupCreateInfoKHR -> Int -> Ptr ("data" ::: Ptr ()) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr (Ptr ()))) ("data" ::: Ptr () forall a. Ptr a nullPtr) Ptr RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingShaderGroupCreateInfoKHR p Ptr RayTracingShaderGroupCreateInfoKHR -> Int -> Ptr RayTracingShaderGroupTypeKHR forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr RayTracingShaderGroupTypeKHR)) (RayTracingShaderGroupTypeKHR forall a. Zero a => a zero) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingShaderGroupCreateInfoKHR p Ptr RayTracingShaderGroupCreateInfoKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 20 :: Ptr Word32)) ("width" ::: Word32 forall a. Zero a => a zero) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingShaderGroupCreateInfoKHR p Ptr RayTracingShaderGroupCreateInfoKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 24 :: Ptr Word32)) ("width" ::: Word32 forall a. Zero a => a zero) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingShaderGroupCreateInfoKHR p Ptr RayTracingShaderGroupCreateInfoKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 28 :: Ptr Word32)) ("width" ::: Word32 forall a. Zero a => a zero) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingShaderGroupCreateInfoKHR p Ptr RayTracingShaderGroupCreateInfoKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 32 :: Ptr Word32)) ("width" ::: Word32 forall a. Zero a => a zero) IO b f instance FromCStruct RayTracingShaderGroupCreateInfoKHR where peekCStruct :: Ptr RayTracingShaderGroupCreateInfoKHR -> IO RayTracingShaderGroupCreateInfoKHR peekCStruct Ptr RayTracingShaderGroupCreateInfoKHR p = do type' <- forall a. Storable a => Ptr a -> IO a peek @RayTracingShaderGroupTypeKHR ((Ptr RayTracingShaderGroupCreateInfoKHR p Ptr RayTracingShaderGroupCreateInfoKHR -> Int -> Ptr RayTracingShaderGroupTypeKHR forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr RayTracingShaderGroupTypeKHR)) generalShader <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32)) closestHitShader <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32)) anyHitShader <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32)) intersectionShader <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32)) pShaderGroupCaptureReplayHandle <- peek @(Ptr ()) ((p `plusPtr` 40 :: Ptr (Ptr ()))) pure $ RayTracingShaderGroupCreateInfoKHR type' generalShader closestHitShader anyHitShader intersectionShader pShaderGroupCaptureReplayHandle instance Storable RayTracingShaderGroupCreateInfoKHR where sizeOf :: RayTracingShaderGroupCreateInfoKHR -> Int sizeOf ~RayTracingShaderGroupCreateInfoKHR _ = Int 48 alignment :: RayTracingShaderGroupCreateInfoKHR -> Int alignment ~RayTracingShaderGroupCreateInfoKHR _ = Int 8 peek :: Ptr RayTracingShaderGroupCreateInfoKHR -> IO RayTracingShaderGroupCreateInfoKHR peek = Ptr RayTracingShaderGroupCreateInfoKHR -> IO RayTracingShaderGroupCreateInfoKHR forall a. FromCStruct a => Ptr a -> IO a peekCStruct poke :: Ptr RayTracingShaderGroupCreateInfoKHR -> RayTracingShaderGroupCreateInfoKHR -> IO () poke Ptr RayTracingShaderGroupCreateInfoKHR ptr RayTracingShaderGroupCreateInfoKHR poked = Ptr RayTracingShaderGroupCreateInfoKHR -> RayTracingShaderGroupCreateInfoKHR -> IO () -> IO () forall b. Ptr RayTracingShaderGroupCreateInfoKHR -> RayTracingShaderGroupCreateInfoKHR -> IO b -> IO b forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b pokeCStruct Ptr RayTracingShaderGroupCreateInfoKHR ptr RayTracingShaderGroupCreateInfoKHR poked (() -> IO () forall a. a -> IO a forall (f :: * -> *) a. Applicative f => a -> f a pure ()) instance Zero RayTracingShaderGroupCreateInfoKHR where zero :: RayTracingShaderGroupCreateInfoKHR zero = RayTracingShaderGroupTypeKHR -> ("width" ::: Word32) -> ("width" ::: Word32) -> ("width" ::: Word32) -> ("width" ::: Word32) -> ("data" ::: Ptr ()) -> RayTracingShaderGroupCreateInfoKHR RayTracingShaderGroupCreateInfoKHR RayTracingShaderGroupTypeKHR forall a. Zero a => a zero "width" ::: Word32 forall a. Zero a => a zero "width" ::: Word32 forall a. Zero a => a zero "width" ::: Word32 forall a. Zero a => a zero "width" ::: Word32 forall a. Zero a => a zero "data" ::: Ptr () forall a. Zero a => a zero -- | VkRayTracingPipelineCreateInfoKHR - Structure specifying parameters of a -- newly created ray tracing pipeline -- -- = Description -- -- The parameters @basePipelineHandle@ and @basePipelineIndex@ are -- described in more detail in -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>. -- -- When -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR' -- is specified, this pipeline defines a /pipeline library/ which /cannot/ -- be bound as a ray tracing pipeline directly. Instead, pipeline libraries -- define common shaders and shader groups which /can/ be included in -- future pipeline creation. -- -- If pipeline libraries are included in @pLibraryInfo@, shaders defined in -- those libraries are treated as if they were defined as additional -- entries in @pStages@, appended in the order they appear in the -- @pLibraries@ array and in the @pStages@ array when those libraries were -- defined. -- -- When referencing shader groups in order to obtain a shader group handle, -- groups defined in those libraries are treated as if they were defined as -- additional entries in @pGroups@, appended in the order they appear in -- the @pLibraries@ array and in the @pGroups@ array when those libraries -- were defined. The shaders these groups reference are set when the -- pipeline library is created, referencing those specified in the pipeline -- library, not in the pipeline that includes it. -- -- The default stack size for a pipeline if -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR' -- is not provided is computed as described in -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#ray-tracing-pipeline-stack Ray Tracing Pipeline Stack>. -- -- If the @pNext@ chain includes a -- 'Vulkan.Core14.Promoted_From_VK_KHR_maintenance5Roadmap.PipelineCreateFlags2CreateInfo' -- structure, -- 'Vulkan.Core14.Promoted_From_VK_KHR_maintenance5Roadmap.PipelineCreateFlags2CreateInfo'::@flags@ -- from that structure is used instead of @flags@ from this structure. -- -- If the @pNext@ chain includes a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV> -- structure, then that structure controls whether cluster acceleration -- structures are allowed in this ray tracing pipeline. -- -- == Valid Usage -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-None-09497# If the @pNext@ -- chain does not include a -- 'Vulkan.Core14.Promoted_From_VK_KHR_maintenance5Roadmap.PipelineCreateFlags2CreateInfo' -- structure, @flags@ /must/ be a valid combination of -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits' -- values -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-07984# If @flags@ -- contains the -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT' -- flag, and @basePipelineIndex@ is -1, @basePipelineHandle@ /must/ be -- a valid ray tracing 'Vulkan.Core10.Handles.Pipeline' handle -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-07985# If @flags@ -- contains the -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT' -- flag, and @basePipelineHandle@ is -- 'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/ -- be a valid index into the calling command’s @pCreateInfos@ parameter -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-07986# If @flags@ -- contains the -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT' -- flag, @basePipelineIndex@ /must/ be -1 or @basePipelineHandle@ -- /must/ be 'Vulkan.Core10.APIConstants.NULL_HANDLE' -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-layout-07987# If a push -- constant block is declared in a shader and @layout@ is not -- 'Vulkan.Core10.APIConstants.NULL_HANDLE', a push constant range in -- @layout@ /must/ match the shader stage -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-layout-10069# If a push -- constant block is declared in a shader and @layout@ is not -- 'Vulkan.Core10.APIConstants.NULL_HANDLE', the block must be -- contained inside the push constant range in @layout@ that matches -- the stage -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-layout-07988# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-resources resource variable> -- is declared in a shader and @layout@ is not -- 'Vulkan.Core10.APIConstants.NULL_HANDLE', the corresponding -- descriptor set in @layout@ /must/ match the shader stage -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-layout-07990# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-resources resource variable> -- is declared in a shader, @layout@ is not -- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the descriptor type is -- not -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_MUTABLE_EXT', -- the corresponding descriptor set in @layout@ /must/ match the -- descriptor type -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-layout-07991# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-resources resource variable> -- is declared in a shader as an array and @layout@ is not -- 'Vulkan.Core10.APIConstants.NULL_HANDLE', the corresponding -- descriptor binding used to create @layout@ /must/ have a -- @descriptorCount@ that is greater than or equal to the length of the -- array -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-None-10391# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-resources resource variables> -- is declared in a shader as an array of descriptors, then the -- descriptor type of that variable /must/ not be -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK' -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-11798# If -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shader64BitIndexing shader64BitIndexing> -- feature is not enabled, @flags@ /must/ not contain -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_64_BIT_INDEXING_BIT_EXT' -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-pipelineCreationCacheControl-02878# -- If the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl> -- feature is not enabled, @flags@ /must/ not include -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT' -- nor -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT' -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-pipelineProtectedAccess-07368# -- If the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineProtectedAccess pipelineProtectedAccess> -- feature is not enabled, @flags@ /must/ not include -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT' -- nor -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT' -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-07369# @flags@ /must/ -- not include both -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT' -- and -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT' -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-11311# If -- 'Vulkan.Extensions.VK_KHR_maintenance5.PipelineCreateFlags2CreateInfoKHR'::@flags@ -- includes -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT', -- @layout@ /must/ be 'Vulkan.Core10.APIConstants.NULL_HANDLE' -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-11312# If -- 'Vulkan.Extensions.VK_KHR_maintenance5.PipelineCreateFlags2CreateInfoKHR'::@flags@ -- includes -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT', -- all shader variables in the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-resources shader resource interface> -- with a 'Vulkan.Core10.Handles.DescriptorSet' and @Binding@ -- decoration /must/ have a mapping declared in -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.ShaderDescriptorSetAndBindingMappingInfoEXT'::pMappings -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-pStages-03426# The shader -- code for the entry points identified by @pStages@, and the rest of -- the state identified by this structure /must/ adhere to the pipeline -- linking rules described in the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces Shader Interfaces> -- chapter -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-layout-03428# The number of -- resources in @layout@ accessible to each shader stage that is used -- by the pipeline /must/ be less than or equal to -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageResources@ -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-02904# @flags@ /must/ -- not include -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV' -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-12341# @flags@ /must/ -- not include -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT' -- nor -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT' -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-stage-03425# If @flags@ does -- not include -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR', -- the @stage@ member of at least one element of @pStages@, including -- those implicitly added by @pLibraryInfo@, /must/ be -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_RAYGEN_BIT_KHR' -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-maxPipelineRayRecursionDepth-03589# -- @maxPipelineRayRecursionDepth@ /must/ be less than or equal to -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxRayRecursionDepth@ -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-03465# If @flags@ -- includes -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR', -- @pLibraryInterface@ /must/ not be @NULL@ -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03590# If -- @pLibraryInfo@ is not @NULL@ and its @libraryCount@ member is -- greater than @0@, @pLibraryInterface@ /must/ not be @NULL@ -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-pLibraries-03591# Each -- element of @pLibraryInfo->pLibraries@ /must/ have been created with -- the value of @maxPipelineRayRecursionDepth@ equal to that in this -- pipeline -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03592# If -- @pLibraryInfo@ is not @NULL@ and @layout@ is not -- 'Vulkan.Core10.APIConstants.NULL_HANDLE', each element of -- @pLibraryInfo->pLibraries@ /must/ have been created with a @layout@ -- that is compatible with the @layout@ in this pipeline -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03593# If -- @pLibraryInfo@ is not @NULL@, each element of its @pLibraries@ -- member /must/ have been created with values of the -- @maxPipelineRayPayloadSize@ and @maxPipelineRayHitAttributeSize@ -- members of @pLibraryInterface@ equal to those in this pipeline -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-03594# If @flags@ -- includes -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR', -- each element of @pLibraryInfo->pLibraries@ /must/ have been created -- with the -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR' -- bit set -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-04718# If @flags@ -- includes -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR', -- each element of @pLibraryInfo->pLibraries@ /must/ have been created -- with the -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR' -- bit set -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-04719# If @flags@ -- includes -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR', -- each element of @pLibraryInfo->pLibraries@ /must/ have been created -- with the -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR' -- bit set -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-04720# If @flags@ -- includes -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR', -- each element of @pLibraryInfo->pLibraries@ /must/ have been created -- with the -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR' -- bit set -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-04721# If @flags@ -- includes -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR', -- each element of @pLibraryInfo->pLibraries@ /must/ have been created -- with the -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR' -- bit set -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-04722# If @flags@ -- includes -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR', -- each element of @pLibraryInfo->pLibraries@ /must/ have been created -- with the -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR' -- bit set -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-04723# If @flags@ -- includes -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR', -- each element of @pLibraryInfo->pLibraries@ /must/ have been created -- with the -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR' -- bit set -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03595# If the -- @VK_KHR_pipeline_library@ extension is not enabled, @pLibraryInfo@ -- and @pLibraryInterface@ /must/ be @NULL@ -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-03470# If @flags@ -- includes -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR', -- for each element of @pGroups@ with a @type@ of -- 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' or -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', the -- @anyHitShader@ of that element /must/ not be -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-03471# If @flags@ -- includes -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR', -- for each element of @pGroups@ with a @type@ of -- 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' or -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', the -- @closestHitShader@ of that element /must/ not be -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-rayTraversalPrimitiveCulling-03596# -- If the -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-rayTraversalPrimitiveCulling rayTraversalPrimitiveCulling> -- feature is not enabled, @flags@ /must/ not include -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR' -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-rayTraversalPrimitiveCulling-03597# -- If the -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-rayTraversalPrimitiveCulling rayTraversalPrimitiveCulling> -- feature is not enabled, @flags@ /must/ not include -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR' -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-06546# @flags@ /must/ -- not include both -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR' -- and -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR' -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-03598# If @flags@ -- includes -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR', -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-rayTracingPipelineShaderGroupHandleCaptureReplay rayTracingPipelineShaderGroupHandleCaptureReplay> -- /must/ be enabled -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-rayTracingPipelineShaderGroupHandleCaptureReplay-03599# -- If -- 'PhysicalDeviceRayTracingPipelineFeaturesKHR'::@rayTracingPipelineShaderGroupHandleCaptureReplay@ -- is 'Vulkan.Core10.FundamentalTypes.TRUE' and the -- @pShaderGroupCaptureReplayHandle@ member of any element of @pGroups@ -- is not @NULL@, @flags@ /must/ include -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR' -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-07999# If -- @pLibraryInfo@ is @NULL@ or its @libraryCount@ is @0@, @stageCount@ -- /must/ not be @0@ -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-08700# If @flags@ does -- not include -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR' -- and either @pLibraryInfo@ is @NULL@ or its @libraryCount@ is @0@, -- @groupCount@ /must/ not be @0@ -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-pDynamicStates-03602# Any -- element of the @pDynamicStates@ member of @pDynamicState@ /must/ be -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR' -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-pipelineStageCreationFeedbackCount-06652# -- If -- 'Vulkan.Core13.Promoted_From_VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfo'::@pipelineStageCreationFeedbackCount@ -- is not @0@, it /must/ be equal to @stageCount@ -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-stage-06899# The @stage@ -- value in all @pStages@ elements /must/ be one of -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_RAYGEN_BIT_KHR', -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_ANY_HIT_BIT_KHR', -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_CLOSEST_HIT_BIT_KHR', -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MISS_BIT_KHR', -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_INTERSECTION_BIT_KHR', -- or -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_CALLABLE_BIT_KHR' -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-07403# If @flags@ -- includes -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT', -- each element of @pLibraryInfo->pLibraries@ /must/ have been created -- with the -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT' -- bit set -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-08701# If @flags@ -- includes -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV', -- each element of @pLibraryInfo->pLibraries@ /must/ have been created -- with the -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV' -- bit set -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-10392# If the @pNext@ -- chain includes a -- 'Vulkan.Core14.Promoted_From_VK_KHR_maintenance5Roadmap.PipelineCreateFlags2CreateInfo' -- structure, @flags@ /must/ not include both -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT' -- and -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DISALLOW_OPACITY_MICROMAP_BIT_ARM' -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-11275# If -- 'Vulkan.Extensions.VK_KHR_maintenance5.PipelineCreateFlags2CreateInfoKHR'::@flags@ -- includes -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT', -- all libraries linked to this pipeline /must/ also have that flag set -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-11276# If -- 'Vulkan.Extensions.VK_KHR_maintenance5.PipelineCreateFlags2CreateInfoKHR'::@flags@ -- does not include -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT', -- all libraries linked to this pipeline /must/ also not have that flag -- set -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-12361# If @flags@ -- includes -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT', -- all libraries linked to this pipeline /must/ also have that flag set -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-flags-12362# If @flags@ does -- not include -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT', -- all libraries linked to this pipeline /must/ also not have that flag -- set -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-None-11369# If -- 'Vulkan.Extensions.VK_KHR_maintenance5.PipelineCreateFlags2CreateInfoKHR'::@flags@ -- does not include -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT', -- @layout@ /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE' -- -- == Valid Usage (Implicit) -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-sType-sType# @sType@ /must/ -- be -- 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR' -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-pNext-pNext# Each @pNext@ -- member of any structure (including this one) in the @pNext@ chain -- /must/ be either @NULL@ or a pointer to a valid instance of -- 'Vulkan.Extensions.VK_KHR_pipeline_binary.PipelineBinaryInfoKHR', -- 'Vulkan.Core14.Promoted_From_VK_KHR_maintenance5Roadmap.PipelineCreateFlags2CreateInfo', -- 'Vulkan.Core13.Promoted_From_VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfo', -- 'Vulkan.Core14.Promoted_From_VK_EXT_pipeline_robustnessAdditionalFunctionality'.PipelineRobustnessCreateInfo', -- or -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV> -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-sType-unique# The @sType@ -- value of each structure in the @pNext@ chain /must/ be unique -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-pStages-parameter# If -- @stageCount@ is not @0@, @pStages@ /must/ be a valid pointer to an -- array of @stageCount@ valid -- 'Vulkan.Core10.ComputePipeline.PipelineShaderStageCreateInfo' -- structures -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-pGroups-parameter# If -- @groupCount@ is not @0@, @pGroups@ /must/ be a valid pointer to an -- array of @groupCount@ valid 'RayTracingShaderGroupCreateInfoKHR' -- structures -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-parameter# If -- @pLibraryInfo@ is not @NULL@, @pLibraryInfo@ /must/ be a valid -- pointer to a valid -- 'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR' -- structure -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInterface-parameter# -- If @pLibraryInterface@ is not @NULL@, @pLibraryInterface@ /must/ be -- a valid pointer to a valid -- 'RayTracingPipelineInterfaceCreateInfoKHR' structure -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-pDynamicState-parameter# If -- @pDynamicState@ is not @NULL@, @pDynamicState@ /must/ be a valid -- pointer to a valid -- 'Vulkan.Core10.GraphicsPipeline.PipelineDynamicStateCreateInfo' -- structure -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-layout-parameter# If -- @layout@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @layout@ -- /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout' handle -- -- - #VUID-VkRayTracingPipelineCreateInfoKHR-commonparent# Both of -- @basePipelineHandle@, and @layout@ that are valid handles of -- non-ignored parameters /must/ have been created, allocated, or -- retrieved from the same 'Vulkan.Core10.Handles.Device' -- -- = See Also -- -- <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.Pipeline', -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlags', -- 'Vulkan.Core10.GraphicsPipeline.PipelineDynamicStateCreateInfo', -- 'Vulkan.Core10.Handles.PipelineLayout', -- 'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR', -- 'Vulkan.Core10.ComputePipeline.PipelineShaderStageCreateInfo', -- 'RayTracingPipelineInterfaceCreateInfoKHR', -- 'RayTracingShaderGroupCreateInfoKHR', -- 'Vulkan.Core10.Enums.StructureType.StructureType', -- 'createRayTracingPipelinesKHR' data RayTracingPipelineCreateInfoKHR (es :: [Type]) = RayTracingPipelineCreateInfoKHR { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure. forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Chain es next :: Chain es , -- | @flags@ is a bitmask of -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits' -- specifying how the pipeline will be generated. forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> PipelineCreateFlags flags :: PipelineCreateFlags , -- | @pStages@ is a pointer to an array of @stageCount@ -- 'Vulkan.Core10.ComputePipeline.PipelineShaderStageCreateInfo' structures -- describing the set of the shader stages to be included in the ray -- tracing pipeline. forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Vector (SomeStruct PipelineShaderStageCreateInfo) stages :: Vector (SomeStruct PipelineShaderStageCreateInfo) , -- | @pGroups@ is a pointer to an array of @groupCount@ -- 'RayTracingShaderGroupCreateInfoKHR' structures describing the set of -- the shader stages to be included in each shader group in the ray tracing -- pipeline. forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Vector RayTracingShaderGroupCreateInfoKHR groups :: Vector RayTracingShaderGroupCreateInfoKHR , -- | @maxPipelineRayRecursionDepth@ is the -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#ray-tracing-recursion-depth maximum recursion depth> -- of shaders executed by this pipeline. forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> "width" ::: Word32 maxPipelineRayRecursionDepth :: Word32 , -- | @pLibraryInfo@ is a pointer to a -- 'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR' -- structure defining pipeline libraries to include. forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Maybe PipelineLibraryCreateInfoKHR libraryInfo :: Maybe PipelineLibraryCreateInfoKHR , -- | @pLibraryInterface@ is a pointer to a -- 'RayTracingPipelineInterfaceCreateInfoKHR' structure defining additional -- information when using pipeline libraries. forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Maybe RayTracingPipelineInterfaceCreateInfoKHR libraryInterface :: Maybe RayTracingPipelineInterfaceCreateInfoKHR , -- | @pDynamicState@ is a pointer to a -- 'Vulkan.Core10.GraphicsPipeline.PipelineDynamicStateCreateInfo' -- structure, and is used to indicate which properties of the pipeline -- state object are dynamic and /can/ be changed independently of the -- pipeline state. This /can/ be @NULL@, which means no state in the -- pipeline is considered dynamic. forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Maybe PipelineDynamicStateCreateInfo dynamicState :: Maybe PipelineDynamicStateCreateInfo , -- | @layout@ is the description of binding locations used by both the -- pipeline and descriptor sets used with the pipeline. If -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceProperties'::@apiVersion@ -- is greater than or equal to Vulkan 1.3 or -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_maintenance4 VK_KHR_maintenance4> -- is enabled @layout@ /must/ not be accessed by the implementation outside -- of the duration of the command this structure is passed to. forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> PipelineLayout layout :: PipelineLayout , -- | @basePipelineHandle@ is a pipeline to derive from. forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Pipeline basePipelineHandle :: Pipeline , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use -- as a pipeline to derive from. forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Int32 basePipelineIndex :: Int32 } deriving (Typeable) #if defined(GENERIC_INSTANCES) deriving instance Generic (RayTracingPipelineCreateInfoKHR (es :: [Type])) #endif deriving instance Show (Chain es) => Show (RayTracingPipelineCreateInfoKHR es) instance Extensible RayTracingPipelineCreateInfoKHR where extensibleTypeName :: String extensibleTypeName = String "RayTracingPipelineCreateInfoKHR" setNext :: forall (ds :: [*]) (es :: [*]). RayTracingPipelineCreateInfoKHR ds -> Chain es -> RayTracingPipelineCreateInfoKHR es setNext RayTracingPipelineCreateInfoKHR{Int32 Maybe PipelineLibraryCreateInfoKHR Maybe PipelineDynamicStateCreateInfo Maybe RayTracingPipelineInterfaceCreateInfoKHR "width" ::: Word32 Vector RayTracingShaderGroupCreateInfoKHR Vector (SomeStruct PipelineShaderStageCreateInfo) PipelineCreateFlags PipelineLayout Pipeline Chain ds next :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Chain es flags :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> PipelineCreateFlags stages :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Vector (SomeStruct PipelineShaderStageCreateInfo) groups :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Vector RayTracingShaderGroupCreateInfoKHR maxPipelineRayRecursionDepth :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> "width" ::: Word32 libraryInfo :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Maybe PipelineLibraryCreateInfoKHR libraryInterface :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Maybe RayTracingPipelineInterfaceCreateInfoKHR dynamicState :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Maybe PipelineDynamicStateCreateInfo layout :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> PipelineLayout basePipelineHandle :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Pipeline basePipelineIndex :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Int32 next :: Chain ds flags :: PipelineCreateFlags stages :: Vector (SomeStruct PipelineShaderStageCreateInfo) groups :: Vector RayTracingShaderGroupCreateInfoKHR maxPipelineRayRecursionDepth :: "width" ::: Word32 libraryInfo :: Maybe PipelineLibraryCreateInfoKHR libraryInterface :: Maybe RayTracingPipelineInterfaceCreateInfoKHR dynamicState :: Maybe PipelineDynamicStateCreateInfo layout :: PipelineLayout basePipelineHandle :: Pipeline basePipelineIndex :: Int32 ..} Chain es next' = RayTracingPipelineCreateInfoKHR{next :: Chain es next = Chain es next', Int32 Maybe PipelineLibraryCreateInfoKHR Maybe PipelineDynamicStateCreateInfo Maybe RayTracingPipelineInterfaceCreateInfoKHR "width" ::: Word32 Vector RayTracingShaderGroupCreateInfoKHR Vector (SomeStruct PipelineShaderStageCreateInfo) PipelineCreateFlags PipelineLayout Pipeline flags :: PipelineCreateFlags stages :: Vector (SomeStruct PipelineShaderStageCreateInfo) groups :: Vector RayTracingShaderGroupCreateInfoKHR maxPipelineRayRecursionDepth :: "width" ::: Word32 libraryInfo :: Maybe PipelineLibraryCreateInfoKHR libraryInterface :: Maybe RayTracingPipelineInterfaceCreateInfoKHR dynamicState :: Maybe PipelineDynamicStateCreateInfo layout :: PipelineLayout basePipelineHandle :: Pipeline basePipelineIndex :: Int32 flags :: PipelineCreateFlags stages :: Vector (SomeStruct PipelineShaderStageCreateInfo) groups :: Vector RayTracingShaderGroupCreateInfoKHR maxPipelineRayRecursionDepth :: "width" ::: Word32 libraryInfo :: Maybe PipelineLibraryCreateInfoKHR libraryInterface :: Maybe RayTracingPipelineInterfaceCreateInfoKHR dynamicState :: Maybe PipelineDynamicStateCreateInfo layout :: PipelineLayout basePipelineHandle :: Pipeline basePipelineIndex :: Int32 ..} getNext :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Chain es getNext RayTracingPipelineCreateInfoKHR{Int32 Maybe PipelineLibraryCreateInfoKHR Maybe PipelineDynamicStateCreateInfo Maybe RayTracingPipelineInterfaceCreateInfoKHR "width" ::: Word32 Vector RayTracingShaderGroupCreateInfoKHR Vector (SomeStruct PipelineShaderStageCreateInfo) PipelineCreateFlags PipelineLayout Pipeline Chain es next :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Chain es flags :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> PipelineCreateFlags stages :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Vector (SomeStruct PipelineShaderStageCreateInfo) groups :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Vector RayTracingShaderGroupCreateInfoKHR maxPipelineRayRecursionDepth :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> "width" ::: Word32 libraryInfo :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Maybe PipelineLibraryCreateInfoKHR libraryInterface :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Maybe RayTracingPipelineInterfaceCreateInfoKHR dynamicState :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Maybe PipelineDynamicStateCreateInfo layout :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> PipelineLayout basePipelineHandle :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Pipeline basePipelineIndex :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Int32 next :: Chain es flags :: PipelineCreateFlags stages :: Vector (SomeStruct PipelineShaderStageCreateInfo) groups :: Vector RayTracingShaderGroupCreateInfoKHR maxPipelineRayRecursionDepth :: "width" ::: Word32 libraryInfo :: Maybe PipelineLibraryCreateInfoKHR libraryInterface :: Maybe RayTracingPipelineInterfaceCreateInfoKHR dynamicState :: Maybe PipelineDynamicStateCreateInfo layout :: PipelineLayout basePipelineHandle :: Pipeline basePipelineIndex :: Int32 ..} = Chain es next extends :: forall e b proxy. Typeable e => proxy e -> (Extends RayTracingPipelineCreateInfoKHR e => b) -> Maybe b extends :: forall e b (proxy :: * -> *). Typeable e => proxy e -> (Extends RayTracingPipelineCreateInfoKHR e => b) -> Maybe b extends proxy e _ Extends RayTracingPipelineCreateInfoKHR e => b f | Just e :~: PipelineRobustnessCreateInfo Refl <- forall {k} (a :: k) (b :: k). (Typeable a, Typeable b) => Maybe (a :~: b) forall a b. (Typeable a, Typeable b) => Maybe (a :~: b) eqT @e @PipelineRobustnessCreateInfo = b -> Maybe b forall a. a -> Maybe a Just b Extends RayTracingPipelineCreateInfoKHR e => b f | Just e :~: PipelineCreationFeedbackCreateInfo Refl <- forall {k} (a :: k) (b :: k). (Typeable a, Typeable b) => Maybe (a :~: b) forall a b. (Typeable a, Typeable b) => Maybe (a :~: b) eqT @e @PipelineCreationFeedbackCreateInfo = b -> Maybe b forall a. a -> Maybe a Just b Extends RayTracingPipelineCreateInfoKHR e => b f | Just e :~: PipelineBinaryInfoKHR Refl <- forall {k} (a :: k) (b :: k). (Typeable a, Typeable b) => Maybe (a :~: b) forall a b. (Typeable a, Typeable b) => Maybe (a :~: b) eqT @e @PipelineBinaryInfoKHR = b -> Maybe b forall a. a -> Maybe a Just b Extends RayTracingPipelineCreateInfoKHR e => b f | Just e :~: PipelineCreateFlags2CreateInfo Refl <- forall {k} (a :: k) (b :: k). (Typeable a, Typeable b) => Maybe (a :~: b) forall a b. (Typeable a, Typeable b) => Maybe (a :~: b) eqT @e @PipelineCreateFlags2CreateInfo = b -> Maybe b forall a. a -> Maybe a Just b Extends RayTracingPipelineCreateInfoKHR e => b f | Bool otherwise = Maybe b forall a. Maybe a Nothing instance ( Extendss RayTracingPipelineCreateInfoKHR es , PokeChain es ) => ToCStruct (RayTracingPipelineCreateInfoKHR es) where withCStruct :: forall b. RayTracingPipelineCreateInfoKHR es -> (Ptr (RayTracingPipelineCreateInfoKHR es) -> IO b) -> IO b withCStruct RayTracingPipelineCreateInfoKHR es x Ptr (RayTracingPipelineCreateInfoKHR es) -> IO b f = Int -> (Ptr (RayTracingPipelineCreateInfoKHR es) -> IO b) -> IO b forall a b. Int -> (Ptr a -> IO b) -> IO b allocaBytes Int 104 ((Ptr (RayTracingPipelineCreateInfoKHR es) -> IO b) -> IO b) -> (Ptr (RayTracingPipelineCreateInfoKHR es) -> IO b) -> IO b forall a b. (a -> b) -> a -> b $ \Ptr (RayTracingPipelineCreateInfoKHR es) p -> Ptr (RayTracingPipelineCreateInfoKHR es) -> RayTracingPipelineCreateInfoKHR es -> IO b -> IO b forall b. Ptr (RayTracingPipelineCreateInfoKHR es) -> RayTracingPipelineCreateInfoKHR es -> IO b -> IO b forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b pokeCStruct Ptr (RayTracingPipelineCreateInfoKHR es) p RayTracingPipelineCreateInfoKHR es x (Ptr (RayTracingPipelineCreateInfoKHR es) -> IO b f Ptr (RayTracingPipelineCreateInfoKHR es) p) pokeCStruct :: forall b. Ptr (RayTracingPipelineCreateInfoKHR es) -> RayTracingPipelineCreateInfoKHR es -> IO b -> IO b pokeCStruct Ptr (RayTracingPipelineCreateInfoKHR es) p RayTracingPipelineCreateInfoKHR{Int32 Maybe PipelineLibraryCreateInfoKHR Maybe PipelineDynamicStateCreateInfo Maybe RayTracingPipelineInterfaceCreateInfoKHR "width" ::: Word32 Vector RayTracingShaderGroupCreateInfoKHR Vector (SomeStruct PipelineShaderStageCreateInfo) PipelineCreateFlags PipelineLayout Pipeline Chain es next :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Chain es flags :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> PipelineCreateFlags stages :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Vector (SomeStruct PipelineShaderStageCreateInfo) groups :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Vector RayTracingShaderGroupCreateInfoKHR maxPipelineRayRecursionDepth :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> "width" ::: Word32 libraryInfo :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Maybe PipelineLibraryCreateInfoKHR libraryInterface :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Maybe RayTracingPipelineInterfaceCreateInfoKHR dynamicState :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Maybe PipelineDynamicStateCreateInfo layout :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> PipelineLayout basePipelineHandle :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Pipeline basePipelineIndex :: forall (es :: [*]). RayTracingPipelineCreateInfoKHR es -> Int32 next :: Chain es flags :: PipelineCreateFlags stages :: Vector (SomeStruct PipelineShaderStageCreateInfo) groups :: Vector RayTracingShaderGroupCreateInfoKHR maxPipelineRayRecursionDepth :: "width" ::: Word32 libraryInfo :: Maybe PipelineLibraryCreateInfoKHR libraryInterface :: Maybe RayTracingPipelineInterfaceCreateInfoKHR dynamicState :: Maybe PipelineDynamicStateCreateInfo layout :: PipelineLayout basePipelineHandle :: Pipeline basePipelineIndex :: Int32 ..} IO b f = ContT b IO b -> IO b forall (m :: * -> *) r. Monad m => ContT r m r -> m r evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b forall a b. (a -> b) -> a -> b $ do IO () -> ContT b IO () forall (m :: * -> *) a. Monad m => m a -> ContT b m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO () forall a b. (a -> b) -> a -> b $ Ptr StructureType -> StructureType -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr (RayTracingPipelineCreateInfoKHR es) p Ptr (RayTracingPipelineCreateInfoKHR es) -> Int -> Ptr StructureType forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr StructureType)) (StructureType STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR) pNext'' <- (Ptr (Chain es) -> "data" ::: Ptr ()) -> ContT b IO (Ptr (Chain es)) -> ContT b IO ("data" ::: Ptr ()) forall a b. (a -> b) -> ContT b IO a -> ContT b IO b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap Ptr (Chain es) -> "data" ::: Ptr () forall a b. Ptr a -> Ptr b castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO ("data" ::: Ptr ())) -> (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))) -> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO ("data" ::: Ptr ()) forall b c a. (b -> c) -> (a -> b) -> a -> c . ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es)) forall {k} (r :: k) (m :: k -> *) a. ((a -> m r) -> m r) -> ContT r m a ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO ("data" ::: Ptr ())) -> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO ("data" ::: Ptr ()) forall a b. (a -> b) -> a -> b $ Chain es -> (Ptr (Chain es) -> IO b) -> IO b forall (es :: [*]) a. PokeChain es => Chain es -> (Ptr (Chain es) -> IO a) -> IO a forall a. Chain es -> (Ptr (Chain es) -> IO a) -> IO a withChain (Chain es next) lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'' lift $ poke ((p `plusPtr` 16 :: Ptr PipelineCreateFlags)) (flags) lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (stages)) :: Word32)) pPStages' <- ContT $ allocaBytes @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (stages)) * 48) Data.Vector.imapM_ (\Int i SomeStruct PipelineShaderStageCreateInfo e -> ((() -> IO b) -> IO b) -> ContT b IO () forall {k} (r :: k) (m :: k -> *) a. ((a -> m r) -> m r) -> ContT r m a ContT (((() -> IO b) -> IO b) -> ContT b IO ()) -> ((() -> IO b) -> IO b) -> ContT b IO () forall a b. (a -> b) -> a -> b $ Ptr (SomeStruct PipelineShaderStageCreateInfo) -> SomeStruct PipelineShaderStageCreateInfo -> IO b -> IO b forall (a :: [*] -> *) b. (forall (es :: [*]). (Extendss a es, PokeChain es) => ToCStruct (a es)) => Ptr (SomeStruct a) -> SomeStruct a -> IO b -> IO b pokeSomeCStruct (Ptr (PipelineShaderStageCreateInfo (ZonkAny 3)) -> Ptr (SomeStruct PipelineShaderStageCreateInfo) forall (a :: [*] -> *) (es :: [*]). Ptr (a es) -> Ptr (SomeStruct a) forgetExtensions (Ptr (PipelineShaderStageCreateInfo (ZonkAny 2)) pPStages' Ptr (PipelineShaderStageCreateInfo (ZonkAny 2)) -> Int -> Ptr (PipelineShaderStageCreateInfo w) forall a b. Ptr a -> Int -> Ptr b `plusPtr` (Int 48 Int -> Int -> Int forall a. Num a => a -> a -> a * (Int i)) :: Ptr (PipelineShaderStageCreateInfo _))) (SomeStruct PipelineShaderStageCreateInfo e) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b forall b c a. (b -> c) -> (a -> b) -> a -> c . ((() -> IO b) -> () -> IO b forall a b. (a -> b) -> a -> b $ ())) (stages) lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages') lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (groups)) :: Word32)) pPGroups' <- ContT $ allocaBytes @RayTracingShaderGroupCreateInfoKHR ((Data.Vector.length (groups)) * 48) lift $ Data.Vector.imapM_ (\Int i RayTracingShaderGroupCreateInfoKHR e -> Ptr RayTracingShaderGroupCreateInfoKHR -> RayTracingShaderGroupCreateInfoKHR -> IO () forall a. Storable a => Ptr a -> a -> IO () poke (Ptr RayTracingShaderGroupCreateInfoKHR pPGroups' Ptr RayTracingShaderGroupCreateInfoKHR -> Int -> Ptr RayTracingShaderGroupCreateInfoKHR forall a b. Ptr a -> Int -> Ptr b `plusPtr` (Int 48 Int -> Int -> Int forall a. Num a => a -> a -> a * (Int i)) :: Ptr RayTracingShaderGroupCreateInfoKHR) (RayTracingShaderGroupCreateInfoKHR e)) (groups) lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoKHR))) (pPGroups') lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (maxPipelineRayRecursionDepth) pLibraryInfo'' <- case (libraryInfo) of Maybe PipelineLibraryCreateInfoKHR Nothing -> Ptr PipelineLibraryCreateInfoKHR -> ContT b IO (Ptr PipelineLibraryCreateInfoKHR) forall a. a -> ContT b IO a forall (f :: * -> *) a. Applicative f => a -> f a pure Ptr PipelineLibraryCreateInfoKHR forall a. Ptr a nullPtr Just PipelineLibraryCreateInfoKHR j -> ((Ptr PipelineLibraryCreateInfoKHR -> IO b) -> IO b) -> ContT b IO (Ptr PipelineLibraryCreateInfoKHR) forall {k} (r :: k) (m :: k -> *) a. ((a -> m r) -> m r) -> ContT r m a ContT (((Ptr PipelineLibraryCreateInfoKHR -> IO b) -> IO b) -> ContT b IO (Ptr PipelineLibraryCreateInfoKHR)) -> ((Ptr PipelineLibraryCreateInfoKHR -> IO b) -> IO b) -> ContT b IO (Ptr PipelineLibraryCreateInfoKHR) forall a b. (a -> b) -> a -> b $ PipelineLibraryCreateInfoKHR -> (Ptr PipelineLibraryCreateInfoKHR -> IO b) -> IO b forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b forall b. PipelineLibraryCreateInfoKHR -> (Ptr PipelineLibraryCreateInfoKHR -> IO b) -> IO b withCStruct (PipelineLibraryCreateInfoKHR j) lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr PipelineLibraryCreateInfoKHR))) pLibraryInfo'' pLibraryInterface'' <- case (libraryInterface) of Maybe RayTracingPipelineInterfaceCreateInfoKHR Nothing -> Ptr RayTracingPipelineInterfaceCreateInfoKHR -> ContT b IO (Ptr RayTracingPipelineInterfaceCreateInfoKHR) forall a. a -> ContT b IO a forall (f :: * -> *) a. Applicative f => a -> f a pure Ptr RayTracingPipelineInterfaceCreateInfoKHR forall a. Ptr a nullPtr Just RayTracingPipelineInterfaceCreateInfoKHR j -> ((Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO b) -> IO b) -> ContT b IO (Ptr RayTracingPipelineInterfaceCreateInfoKHR) forall {k} (r :: k) (m :: k -> *) a. ((a -> m r) -> m r) -> ContT r m a ContT (((Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO b) -> IO b) -> ContT b IO (Ptr RayTracingPipelineInterfaceCreateInfoKHR)) -> ((Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO b) -> IO b) -> ContT b IO (Ptr RayTracingPipelineInterfaceCreateInfoKHR) forall a b. (a -> b) -> a -> b $ RayTracingPipelineInterfaceCreateInfoKHR -> (Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO b) -> IO b forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b forall b. RayTracingPipelineInterfaceCreateInfoKHR -> (Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO b) -> IO b withCStruct (RayTracingPipelineInterfaceCreateInfoKHR j) lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr RayTracingPipelineInterfaceCreateInfoKHR))) pLibraryInterface'' pDynamicState'' <- case (dynamicState) of Maybe PipelineDynamicStateCreateInfo Nothing -> Ptr PipelineDynamicStateCreateInfo -> ContT b IO (Ptr PipelineDynamicStateCreateInfo) forall a. a -> ContT b IO a forall (f :: * -> *) a. Applicative f => a -> f a pure Ptr PipelineDynamicStateCreateInfo forall a. Ptr a nullPtr Just PipelineDynamicStateCreateInfo j -> ((Ptr PipelineDynamicStateCreateInfo -> IO b) -> IO b) -> ContT b IO (Ptr PipelineDynamicStateCreateInfo) forall {k} (r :: k) (m :: k -> *) a. ((a -> m r) -> m r) -> ContT r m a ContT (((Ptr PipelineDynamicStateCreateInfo -> IO b) -> IO b) -> ContT b IO (Ptr PipelineDynamicStateCreateInfo)) -> ((Ptr PipelineDynamicStateCreateInfo -> IO b) -> IO b) -> ContT b IO (Ptr PipelineDynamicStateCreateInfo) forall a b. (a -> b) -> a -> b $ PipelineDynamicStateCreateInfo -> (Ptr PipelineDynamicStateCreateInfo -> IO b) -> IO b forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b forall b. PipelineDynamicStateCreateInfo -> (Ptr PipelineDynamicStateCreateInfo -> IO b) -> IO b withCStruct (PipelineDynamicStateCreateInfo j) lift $ poke ((p `plusPtr` 72 :: Ptr (Ptr PipelineDynamicStateCreateInfo))) pDynamicState'' lift $ poke ((p `plusPtr` 80 :: Ptr PipelineLayout)) (layout) lift $ poke ((p `plusPtr` 88 :: Ptr Pipeline)) (basePipelineHandle) lift $ poke ((p `plusPtr` 96 :: Ptr Int32)) (basePipelineIndex) lift $ f cStructSize :: Int cStructSize = Int 104 cStructAlignment :: Int cStructAlignment = Int 8 pokeZeroCStruct :: forall b. Ptr (RayTracingPipelineCreateInfoKHR es) -> IO b -> IO b pokeZeroCStruct Ptr (RayTracingPipelineCreateInfoKHR es) p IO b f = ContT b IO b -> IO b forall (m :: * -> *) r. Monad m => ContT r m r -> m r evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b forall a b. (a -> b) -> a -> b $ do IO () -> ContT b IO () forall (m :: * -> *) a. Monad m => m a -> ContT b m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO () forall a b. (a -> b) -> a -> b $ Ptr StructureType -> StructureType -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr (RayTracingPipelineCreateInfoKHR es) p Ptr (RayTracingPipelineCreateInfoKHR es) -> Int -> Ptr StructureType forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr StructureType)) (StructureType STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR) pNext' <- (Ptr (Chain es) -> "data" ::: Ptr ()) -> ContT b IO (Ptr (Chain es)) -> ContT b IO ("data" ::: Ptr ()) forall a b. (a -> b) -> ContT b IO a -> ContT b IO b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap Ptr (Chain es) -> "data" ::: Ptr () forall a b. Ptr a -> Ptr b castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO ("data" ::: Ptr ())) -> (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))) -> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO ("data" ::: Ptr ()) forall b c a. (b -> c) -> (a -> b) -> a -> c . ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es)) forall {k} (r :: k) (m :: k -> *) a. ((a -> m r) -> m r) -> ContT r m a ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO ("data" ::: Ptr ())) -> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO ("data" ::: Ptr ()) forall a b. (a -> b) -> a -> b $ forall (es :: [*]) a. PokeChain es => (Ptr (Chain es) -> IO a) -> IO a withZeroChain @es lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext' lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (zero) lift $ poke ((p `plusPtr` 96 :: Ptr Int32)) (zero) lift $ f instance ( Extendss RayTracingPipelineCreateInfoKHR es , PeekChain es ) => FromCStruct (RayTracingPipelineCreateInfoKHR es) where peekCStruct :: Ptr (RayTracingPipelineCreateInfoKHR es) -> IO (RayTracingPipelineCreateInfoKHR es) peekCStruct Ptr (RayTracingPipelineCreateInfoKHR es) p = do pNext <- forall a. Storable a => Ptr a -> IO a peek @(Ptr ()) ((Ptr (RayTracingPipelineCreateInfoKHR es) p Ptr (RayTracingPipelineCreateInfoKHR es) -> Int -> Ptr ("data" ::: Ptr ()) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr (Ptr ()))) next <- peekChain (castPtr pNext) flags <- peek @PipelineCreateFlags ((p `plusPtr` 16 :: Ptr PipelineCreateFlags)) stageCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32)) pStages <- peek @(Ptr (PipelineShaderStageCreateInfo _)) ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) pStages' <- generateM (fromIntegral stageCount) (\Int i -> Ptr (SomeStruct PipelineShaderStageCreateInfo) -> IO (SomeStruct PipelineShaderStageCreateInfo) forall (a :: [*] -> *). (Extensible a, forall (es :: [*]). (Extendss a es, PeekChain es) => FromCStruct (a es)) => Ptr (SomeStruct a) -> IO (SomeStruct a) peekSomeCStruct (Ptr (PipelineShaderStageCreateInfo (ZonkAny 4)) -> Ptr (SomeStruct PipelineShaderStageCreateInfo) forall (a :: [*] -> *) (es :: [*]). Ptr (a es) -> Ptr (SomeStruct a) forgetExtensions ((Ptr (PipelineShaderStageCreateInfo (ZonkAny 4)) pStages Ptr (PipelineShaderStageCreateInfo (ZonkAny 4)) -> Int -> Ptr (PipelineShaderStageCreateInfo (ZonkAny 4)) forall a. Ptr a -> Int -> Ptr a `advancePtrBytes` (Int 48 Int -> Int -> Int forall a. Num a => a -> a -> a * (Int i)) :: Ptr (PipelineShaderStageCreateInfo _))))) groupCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32)) pGroups <- peek @(Ptr RayTracingShaderGroupCreateInfoKHR) ((p `plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoKHR))) pGroups' <- generateM (fromIntegral groupCount) (\Int i -> forall a. FromCStruct a => Ptr a -> IO a peekCStruct @RayTracingShaderGroupCreateInfoKHR ((Ptr RayTracingShaderGroupCreateInfoKHR pGroups Ptr RayTracingShaderGroupCreateInfoKHR -> Int -> Ptr RayTracingShaderGroupCreateInfoKHR forall a. Ptr a -> Int -> Ptr a `advancePtrBytes` (Int 48 Int -> Int -> Int forall a. Num a => a -> a -> a * (Int i)) :: Ptr RayTracingShaderGroupCreateInfoKHR))) maxPipelineRayRecursionDepth <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32)) pLibraryInfo <- peek @(Ptr PipelineLibraryCreateInfoKHR) ((p `plusPtr` 56 :: Ptr (Ptr PipelineLibraryCreateInfoKHR))) pLibraryInfo' <- maybePeek (\Ptr PipelineLibraryCreateInfoKHR j -> forall a. FromCStruct a => Ptr a -> IO a peekCStruct @PipelineLibraryCreateInfoKHR (Ptr PipelineLibraryCreateInfoKHR j)) pLibraryInfo pLibraryInterface <- peek @(Ptr RayTracingPipelineInterfaceCreateInfoKHR) ((p `plusPtr` 64 :: Ptr (Ptr RayTracingPipelineInterfaceCreateInfoKHR))) pLibraryInterface' <- maybePeek (\Ptr RayTracingPipelineInterfaceCreateInfoKHR j -> forall a. FromCStruct a => Ptr a -> IO a peekCStruct @RayTracingPipelineInterfaceCreateInfoKHR (Ptr RayTracingPipelineInterfaceCreateInfoKHR j)) pLibraryInterface pDynamicState <- peek @(Ptr PipelineDynamicStateCreateInfo) ((p `plusPtr` 72 :: Ptr (Ptr PipelineDynamicStateCreateInfo))) pDynamicState' <- maybePeek (\Ptr PipelineDynamicStateCreateInfo j -> forall a. FromCStruct a => Ptr a -> IO a peekCStruct @PipelineDynamicStateCreateInfo (Ptr PipelineDynamicStateCreateInfo j)) pDynamicState layout <- peek @PipelineLayout ((p `plusPtr` 80 :: Ptr PipelineLayout)) basePipelineHandle <- peek @Pipeline ((p `plusPtr` 88 :: Ptr Pipeline)) basePipelineIndex <- peek @Int32 ((p `plusPtr` 96 :: Ptr Int32)) pure $ RayTracingPipelineCreateInfoKHR next flags pStages' pGroups' maxPipelineRayRecursionDepth pLibraryInfo' pLibraryInterface' pDynamicState' layout basePipelineHandle basePipelineIndex instance es ~ '[] => Zero (RayTracingPipelineCreateInfoKHR es) where zero :: RayTracingPipelineCreateInfoKHR es zero = Chain es -> PipelineCreateFlags -> Vector (SomeStruct PipelineShaderStageCreateInfo) -> Vector RayTracingShaderGroupCreateInfoKHR -> ("width" ::: Word32) -> Maybe PipelineLibraryCreateInfoKHR -> Maybe RayTracingPipelineInterfaceCreateInfoKHR -> Maybe PipelineDynamicStateCreateInfo -> PipelineLayout -> Pipeline -> Int32 -> RayTracingPipelineCreateInfoKHR es forall (es :: [*]). Chain es -> PipelineCreateFlags -> Vector (SomeStruct PipelineShaderStageCreateInfo) -> Vector RayTracingShaderGroupCreateInfoKHR -> ("width" ::: Word32) -> Maybe PipelineLibraryCreateInfoKHR -> Maybe RayTracingPipelineInterfaceCreateInfoKHR -> Maybe PipelineDynamicStateCreateInfo -> PipelineLayout -> Pipeline -> Int32 -> RayTracingPipelineCreateInfoKHR es RayTracingPipelineCreateInfoKHR () PipelineCreateFlags forall a. Zero a => a zero Vector (SomeStruct PipelineShaderStageCreateInfo) forall a. Monoid a => a mempty Vector RayTracingShaderGroupCreateInfoKHR forall a. Monoid a => a mempty "width" ::: Word32 forall a. Zero a => a zero Maybe PipelineLibraryCreateInfoKHR forall a. Maybe a Nothing Maybe RayTracingPipelineInterfaceCreateInfoKHR forall a. Maybe a Nothing Maybe PipelineDynamicStateCreateInfo forall a. Maybe a Nothing PipelineLayout forall a. Zero a => a zero Pipeline forall a. Zero a => a zero Int32 forall a. Zero a => a zero -- | VkPhysicalDeviceRayTracingPipelineFeaturesKHR - Structure describing the -- ray tracing features that can be supported by an implementation -- -- = Members -- -- This structure describes the following features: -- -- = Description -- -- If the 'PhysicalDeviceRayTracingPipelineFeaturesKHR' 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 -- 'PhysicalDeviceRayTracingPipelineFeaturesKHR', 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 -- -- - #VUID-VkPhysicalDeviceRayTracingPipelineFeaturesKHR-rayTracingPipelineShaderGroupHandleCaptureReplayMixed-03575# -- If @rayTracingPipelineShaderGroupHandleCaptureReplayMixed@ is -- 'Vulkan.Core10.FundamentalTypes.TRUE', -- @rayTracingPipelineShaderGroupHandleCaptureReplay@ /must/ also be -- 'Vulkan.Core10.FundamentalTypes.TRUE' -- -- == Valid Usage (Implicit) -- -- - #VUID-VkPhysicalDeviceRayTracingPipelineFeaturesKHR-sType-sType# -- @sType@ /must/ be -- 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR' -- -- = See Also -- -- <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.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceRayTracingPipelineFeaturesKHR = PhysicalDeviceRayTracingPipelineFeaturesKHR { -- | #features-rayTracingPipeline# @rayTracingPipeline@ indicates whether the -- implementation supports the ray tracing pipeline functionality. See -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#ray-tracing Ray Tracing>. PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool rayTracingPipeline :: Bool , -- | #features-rayTracingPipelineShaderGroupHandleCaptureReplay# -- @rayTracingPipelineShaderGroupHandleCaptureReplay@ indicates whether the -- implementation supports saving and reusing shader group handles, e.g. -- for trace capture and replay. PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool rayTracingPipelineShaderGroupHandleCaptureReplay :: Bool , -- | #features-rayTracingPipelineShaderGroupHandleCaptureReplayMixed# -- @rayTracingPipelineShaderGroupHandleCaptureReplayMixed@ indicates -- whether the implementation supports reuse of shader group handles being -- arbitrarily mixed with creation of non-reused shader group handles. If -- this is 'Vulkan.Core10.FundamentalTypes.FALSE', all reused shader group -- handles /must/ be specified before any non-reused handles /may/ be -- created. PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool rayTracingPipelineShaderGroupHandleCaptureReplayMixed :: Bool , -- | #features-rayTracingPipelineTraceRaysIndirect# -- @rayTracingPipelineTraceRaysIndirect@ indicates whether the -- implementation supports indirect ray tracing commands, e.g. -- 'cmdTraceRaysIndirectKHR'. PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool rayTracingPipelineTraceRaysIndirect :: Bool , -- | #features-rayTraversalPrimitiveCulling# @rayTraversalPrimitiveCulling@ -- indicates whether the implementation supports -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#ray-traversal-culling-primitive primitive culling during ray traversal>. PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool rayTraversalPrimitiveCulling :: Bool } deriving (Typeable, PhysicalDeviceRayTracingPipelineFeaturesKHR -> PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool (PhysicalDeviceRayTracingPipelineFeaturesKHR -> PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool) -> (PhysicalDeviceRayTracingPipelineFeaturesKHR -> PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool) -> Eq PhysicalDeviceRayTracingPipelineFeaturesKHR forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: PhysicalDeviceRayTracingPipelineFeaturesKHR -> PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool == :: PhysicalDeviceRayTracingPipelineFeaturesKHR -> PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool $c/= :: PhysicalDeviceRayTracingPipelineFeaturesKHR -> PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool /= :: PhysicalDeviceRayTracingPipelineFeaturesKHR -> PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool Eq) #if defined(GENERIC_INSTANCES) deriving instance Generic (PhysicalDeviceRayTracingPipelineFeaturesKHR) #endif deriving instance Show PhysicalDeviceRayTracingPipelineFeaturesKHR instance ToCStruct PhysicalDeviceRayTracingPipelineFeaturesKHR where withCStruct :: forall b. PhysicalDeviceRayTracingPipelineFeaturesKHR -> (Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO b) -> IO b withCStruct PhysicalDeviceRayTracingPipelineFeaturesKHR x Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO b f = Int -> (Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO b) -> IO b forall a b. Int -> (Ptr a -> IO b) -> IO b allocaBytes Int 40 ((Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO b) -> IO b) -> (Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO b) -> IO b forall a b. (a -> b) -> a -> b $ \Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR p -> Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO b -> IO b forall b. Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO b -> IO b forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b pokeCStruct Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR p PhysicalDeviceRayTracingPipelineFeaturesKHR x (Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO b f Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR p) pokeCStruct :: forall b. Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO b -> IO b pokeCStruct Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR p PhysicalDeviceRayTracingPipelineFeaturesKHR{Bool rayTracingPipeline :: PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool rayTracingPipelineShaderGroupHandleCaptureReplay :: PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool rayTracingPipelineShaderGroupHandleCaptureReplayMixed :: PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool rayTracingPipelineTraceRaysIndirect :: PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool rayTraversalPrimitiveCulling :: PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool rayTracingPipeline :: Bool rayTracingPipelineShaderGroupHandleCaptureReplay :: Bool rayTracingPipelineShaderGroupHandleCaptureReplayMixed :: Bool rayTracingPipelineTraceRaysIndirect :: Bool rayTraversalPrimitiveCulling :: Bool ..} IO b f = do Ptr StructureType -> StructureType -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR p Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> Int -> Ptr StructureType forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr StructureType)) (StructureType STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR) Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR p Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> Int -> Ptr ("data" ::: Ptr ()) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr (Ptr ()))) ("data" ::: Ptr () forall a. Ptr a nullPtr) Ptr Bool32 -> Bool32 -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR p Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> Int -> Ptr Bool32 forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr Bool32)) (Bool -> Bool32 boolToBool32 (Bool rayTracingPipeline)) Ptr Bool32 -> Bool32 -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR p Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> Int -> Ptr Bool32 forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 20 :: Ptr Bool32)) (Bool -> Bool32 boolToBool32 (Bool rayTracingPipelineShaderGroupHandleCaptureReplay)) Ptr Bool32 -> Bool32 -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR p Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> Int -> Ptr Bool32 forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 24 :: Ptr Bool32)) (Bool -> Bool32 boolToBool32 (Bool rayTracingPipelineShaderGroupHandleCaptureReplayMixed)) Ptr Bool32 -> Bool32 -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR p Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> Int -> Ptr Bool32 forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 28 :: Ptr Bool32)) (Bool -> Bool32 boolToBool32 (Bool rayTracingPipelineTraceRaysIndirect)) Ptr Bool32 -> Bool32 -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR p Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> Int -> Ptr Bool32 forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 32 :: Ptr Bool32)) (Bool -> Bool32 boolToBool32 (Bool rayTraversalPrimitiveCulling)) IO b f cStructSize :: Int cStructSize = Int 40 cStructAlignment :: Int cStructAlignment = Int 8 pokeZeroCStruct :: forall b. Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO b -> IO b pokeZeroCStruct Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR p IO b f = do Ptr StructureType -> StructureType -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR p Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> Int -> Ptr StructureType forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr StructureType)) (StructureType STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR) Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR p Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> Int -> Ptr ("data" ::: Ptr ()) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr (Ptr ()))) ("data" ::: Ptr () forall a. Ptr a nullPtr) Ptr Bool32 -> Bool32 -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR p Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> 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 PhysicalDeviceRayTracingPipelineFeaturesKHR p Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> 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)) Ptr Bool32 -> Bool32 -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR p Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> Int -> Ptr Bool32 forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 24 :: 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 PhysicalDeviceRayTracingPipelineFeaturesKHR p Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> Int -> Ptr Bool32 forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 28 :: 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 PhysicalDeviceRayTracingPipelineFeaturesKHR p Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> Int -> Ptr Bool32 forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 32 :: Ptr Bool32)) (Bool -> Bool32 boolToBool32 (Bool forall a. Zero a => a zero)) IO b f instance FromCStruct PhysicalDeviceRayTracingPipelineFeaturesKHR where peekCStruct :: Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO PhysicalDeviceRayTracingPipelineFeaturesKHR peekCStruct Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR p = do rayTracingPipeline <- forall a. Storable a => Ptr a -> IO a peek @Bool32 ((Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR p Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> Int -> Ptr Bool32 forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr Bool32)) rayTracingPipelineShaderGroupHandleCaptureReplay <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32)) rayTracingPipelineShaderGroupHandleCaptureReplayMixed <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32)) rayTracingPipelineTraceRaysIndirect <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32)) rayTraversalPrimitiveCulling <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32)) pure $ PhysicalDeviceRayTracingPipelineFeaturesKHR (bool32ToBool rayTracingPipeline) (bool32ToBool rayTracingPipelineShaderGroupHandleCaptureReplay) (bool32ToBool rayTracingPipelineShaderGroupHandleCaptureReplayMixed) (bool32ToBool rayTracingPipelineTraceRaysIndirect) (bool32ToBool rayTraversalPrimitiveCulling) instance Storable PhysicalDeviceRayTracingPipelineFeaturesKHR where sizeOf :: PhysicalDeviceRayTracingPipelineFeaturesKHR -> Int sizeOf ~PhysicalDeviceRayTracingPipelineFeaturesKHR _ = Int 40 alignment :: PhysicalDeviceRayTracingPipelineFeaturesKHR -> Int alignment ~PhysicalDeviceRayTracingPipelineFeaturesKHR _ = Int 8 peek :: Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO PhysicalDeviceRayTracingPipelineFeaturesKHR peek = Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO PhysicalDeviceRayTracingPipelineFeaturesKHR forall a. FromCStruct a => Ptr a -> IO a peekCStruct poke :: Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO () poke Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR ptr PhysicalDeviceRayTracingPipelineFeaturesKHR poked = Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO () -> IO () forall b. Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO b -> IO b forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b pokeCStruct Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR ptr PhysicalDeviceRayTracingPipelineFeaturesKHR poked (() -> IO () forall a. a -> IO a forall (f :: * -> *) a. Applicative f => a -> f a pure ()) instance Zero PhysicalDeviceRayTracingPipelineFeaturesKHR where zero :: PhysicalDeviceRayTracingPipelineFeaturesKHR zero = Bool -> Bool -> Bool -> Bool -> Bool -> PhysicalDeviceRayTracingPipelineFeaturesKHR PhysicalDeviceRayTracingPipelineFeaturesKHR Bool forall a. Zero a => a zero Bool forall a. Zero a => a zero Bool forall a. Zero a => a zero Bool forall a. Zero a => a zero Bool forall a. Zero a => a zero -- | VkPhysicalDeviceRayTracingPipelinePropertiesKHR - Properties of the -- physical device for ray tracing -- -- = Description -- -- If the 'PhysicalDeviceRayTracingPipelinePropertiesKHR' structure is -- included in the @pNext@ chain of the -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2' -- structure passed to -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceProperties2', -- it is filled in with each corresponding implementation-dependent -- property. -- -- Limits specified by this structure /must/ match those specified with the -- same name in -- 'Vulkan.Extensions.VK_NV_ray_tracing.PhysicalDeviceRayTracingPropertiesNV'. -- -- == Valid Usage (Implicit) -- -- = See Also -- -- <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.Enums.StructureType.StructureType' data PhysicalDeviceRayTracingPipelinePropertiesKHR = PhysicalDeviceRayTracingPipelinePropertiesKHR { -- | @shaderGroupHandleSize@ is the size in bytes of the shader header. PhysicalDeviceRayTracingPipelinePropertiesKHR -> "width" ::: Word32 shaderGroupHandleSize :: Word32 , -- | #limits-maxRayRecursionDepth# @maxRayRecursionDepth@ is the maximum -- number of levels of ray recursion allowed in a trace command. PhysicalDeviceRayTracingPipelinePropertiesKHR -> "width" ::: Word32 maxRayRecursionDepth :: Word32 , -- | #limits-maxShaderGroupStride# @maxShaderGroupStride@ is the maximum -- stride in bytes allowed between shader groups in the shader binding -- table. PhysicalDeviceRayTracingPipelinePropertiesKHR -> "width" ::: Word32 maxShaderGroupStride :: Word32 , -- | @shaderGroupBaseAlignment@ is the /required/ alignment in bytes for the -- base of the shader binding table. PhysicalDeviceRayTracingPipelinePropertiesKHR -> "width" ::: Word32 shaderGroupBaseAlignment :: Word32 , -- | @shaderGroupHandleCaptureReplaySize@ is the number of bytes for the -- information required to do capture and replay for shader group handles. PhysicalDeviceRayTracingPipelinePropertiesKHR -> "width" ::: Word32 shaderGroupHandleCaptureReplaySize :: Word32 , -- | @maxRayDispatchInvocationCount@ is the maximum number of ray generation -- shader invocations which /may/ be produced by a single -- 'cmdTraceRaysIndirectKHR' or 'cmdTraceRaysKHR' command. PhysicalDeviceRayTracingPipelinePropertiesKHR -> "width" ::: Word32 maxRayDispatchInvocationCount :: Word32 , -- | @shaderGroupHandleAlignment@ is the /required/ alignment in bytes for -- each entry in a shader binding table. The value /must/ be a power of -- two. PhysicalDeviceRayTracingPipelinePropertiesKHR -> "width" ::: Word32 shaderGroupHandleAlignment :: Word32 , -- | @maxRayHitAttributeSize@ is the maximum size in bytes for a ray -- attribute structure PhysicalDeviceRayTracingPipelinePropertiesKHR -> "width" ::: Word32 maxRayHitAttributeSize :: Word32 } deriving (Typeable, PhysicalDeviceRayTracingPipelinePropertiesKHR -> PhysicalDeviceRayTracingPipelinePropertiesKHR -> Bool (PhysicalDeviceRayTracingPipelinePropertiesKHR -> PhysicalDeviceRayTracingPipelinePropertiesKHR -> Bool) -> (PhysicalDeviceRayTracingPipelinePropertiesKHR -> PhysicalDeviceRayTracingPipelinePropertiesKHR -> Bool) -> Eq PhysicalDeviceRayTracingPipelinePropertiesKHR forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: PhysicalDeviceRayTracingPipelinePropertiesKHR -> PhysicalDeviceRayTracingPipelinePropertiesKHR -> Bool == :: PhysicalDeviceRayTracingPipelinePropertiesKHR -> PhysicalDeviceRayTracingPipelinePropertiesKHR -> Bool $c/= :: PhysicalDeviceRayTracingPipelinePropertiesKHR -> PhysicalDeviceRayTracingPipelinePropertiesKHR -> Bool /= :: PhysicalDeviceRayTracingPipelinePropertiesKHR -> PhysicalDeviceRayTracingPipelinePropertiesKHR -> Bool Eq) #if defined(GENERIC_INSTANCES) deriving instance Generic (PhysicalDeviceRayTracingPipelinePropertiesKHR) #endif deriving instance Show PhysicalDeviceRayTracingPipelinePropertiesKHR instance ToCStruct PhysicalDeviceRayTracingPipelinePropertiesKHR where withCStruct :: forall b. PhysicalDeviceRayTracingPipelinePropertiesKHR -> (Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO b) -> IO b withCStruct PhysicalDeviceRayTracingPipelinePropertiesKHR x Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO b f = Int -> (Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO b) -> IO b forall a b. Int -> (Ptr a -> IO b) -> IO b allocaBytes Int 48 ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO b) -> IO b) -> (Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO b) -> IO b forall a b. (a -> b) -> a -> b $ \Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p -> Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO b -> IO b forall b. Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO b -> IO b forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b pokeCStruct Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p PhysicalDeviceRayTracingPipelinePropertiesKHR x (Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO b f Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p) pokeCStruct :: forall b. Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO b -> IO b pokeCStruct Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p PhysicalDeviceRayTracingPipelinePropertiesKHR{"width" ::: Word32 shaderGroupHandleSize :: PhysicalDeviceRayTracingPipelinePropertiesKHR -> "width" ::: Word32 maxRayRecursionDepth :: PhysicalDeviceRayTracingPipelinePropertiesKHR -> "width" ::: Word32 maxShaderGroupStride :: PhysicalDeviceRayTracingPipelinePropertiesKHR -> "width" ::: Word32 shaderGroupBaseAlignment :: PhysicalDeviceRayTracingPipelinePropertiesKHR -> "width" ::: Word32 shaderGroupHandleCaptureReplaySize :: PhysicalDeviceRayTracingPipelinePropertiesKHR -> "width" ::: Word32 maxRayDispatchInvocationCount :: PhysicalDeviceRayTracingPipelinePropertiesKHR -> "width" ::: Word32 shaderGroupHandleAlignment :: PhysicalDeviceRayTracingPipelinePropertiesKHR -> "width" ::: Word32 maxRayHitAttributeSize :: PhysicalDeviceRayTracingPipelinePropertiesKHR -> "width" ::: Word32 shaderGroupHandleSize :: "width" ::: Word32 maxRayRecursionDepth :: "width" ::: Word32 maxShaderGroupStride :: "width" ::: Word32 shaderGroupBaseAlignment :: "width" ::: Word32 shaderGroupHandleCaptureReplaySize :: "width" ::: Word32 maxRayDispatchInvocationCount :: "width" ::: Word32 shaderGroupHandleAlignment :: "width" ::: Word32 maxRayHitAttributeSize :: "width" ::: Word32 ..} IO b f = do Ptr StructureType -> StructureType -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int -> Ptr StructureType forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr StructureType)) (StructureType STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR) Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int -> Ptr ("data" ::: Ptr ()) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr (Ptr ()))) ("data" ::: Ptr () forall a. Ptr a nullPtr) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr Word32)) ("width" ::: Word32 shaderGroupHandleSize) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 20 :: Ptr Word32)) ("width" ::: Word32 maxRayRecursionDepth) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 24 :: Ptr Word32)) ("width" ::: Word32 maxShaderGroupStride) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 28 :: Ptr Word32)) ("width" ::: Word32 shaderGroupBaseAlignment) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 32 :: Ptr Word32)) ("width" ::: Word32 shaderGroupHandleCaptureReplaySize) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 36 :: Ptr Word32)) ("width" ::: Word32 maxRayDispatchInvocationCount) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 40 :: Ptr Word32)) ("width" ::: Word32 shaderGroupHandleAlignment) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 44 :: Ptr Word32)) ("width" ::: Word32 maxRayHitAttributeSize) IO b f cStructSize :: Int cStructSize = Int 48 cStructAlignment :: Int cStructAlignment = Int 8 pokeZeroCStruct :: forall b. Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO b -> IO b pokeZeroCStruct Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p IO b f = do Ptr StructureType -> StructureType -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int -> Ptr StructureType forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr StructureType)) (StructureType STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR) Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int -> Ptr ("data" ::: Ptr ()) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr (Ptr ()))) ("data" ::: Ptr () forall a. Ptr a nullPtr) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr Word32)) ("width" ::: Word32 forall a. Zero a => a zero) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 20 :: Ptr Word32)) ("width" ::: Word32 forall a. Zero a => a zero) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 24 :: Ptr Word32)) ("width" ::: Word32 forall a. Zero a => a zero) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 28 :: Ptr Word32)) ("width" ::: Word32 forall a. Zero a => a zero) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 32 :: Ptr Word32)) ("width" ::: Word32 forall a. Zero a => a zero) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 36 :: Ptr Word32)) ("width" ::: Word32 forall a. Zero a => a zero) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 40 :: Ptr Word32)) ("width" ::: Word32 forall a. Zero a => a zero) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 44 :: Ptr Word32)) ("width" ::: Word32 forall a. Zero a => a zero) IO b f instance FromCStruct PhysicalDeviceRayTracingPipelinePropertiesKHR where peekCStruct :: Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO PhysicalDeviceRayTracingPipelinePropertiesKHR peekCStruct Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p = do shaderGroupHandleSize <- forall a. Storable a => Ptr a -> IO a peek @Word32 ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR p Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr Word32)) maxRayRecursionDepth <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32)) maxShaderGroupStride <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32)) shaderGroupBaseAlignment <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32)) shaderGroupHandleCaptureReplaySize <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32)) maxRayDispatchInvocationCount <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32)) shaderGroupHandleAlignment <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32)) maxRayHitAttributeSize <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32)) pure $ PhysicalDeviceRayTracingPipelinePropertiesKHR shaderGroupHandleSize maxRayRecursionDepth maxShaderGroupStride shaderGroupBaseAlignment shaderGroupHandleCaptureReplaySize maxRayDispatchInvocationCount shaderGroupHandleAlignment maxRayHitAttributeSize instance Storable PhysicalDeviceRayTracingPipelinePropertiesKHR where sizeOf :: PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int sizeOf ~PhysicalDeviceRayTracingPipelinePropertiesKHR _ = Int 48 alignment :: PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int alignment ~PhysicalDeviceRayTracingPipelinePropertiesKHR _ = Int 8 peek :: Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO PhysicalDeviceRayTracingPipelinePropertiesKHR peek = Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO PhysicalDeviceRayTracingPipelinePropertiesKHR forall a. FromCStruct a => Ptr a -> IO a peekCStruct poke :: Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO () poke Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR ptr PhysicalDeviceRayTracingPipelinePropertiesKHR poked = Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO () -> IO () forall b. Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO b -> IO b forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b pokeCStruct Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR ptr PhysicalDeviceRayTracingPipelinePropertiesKHR poked (() -> IO () forall a. a -> IO a forall (f :: * -> *) a. Applicative f => a -> f a pure ()) instance Zero PhysicalDeviceRayTracingPipelinePropertiesKHR where zero :: PhysicalDeviceRayTracingPipelinePropertiesKHR zero = ("width" ::: Word32) -> ("width" ::: Word32) -> ("width" ::: Word32) -> ("width" ::: Word32) -> ("width" ::: Word32) -> ("width" ::: Word32) -> ("width" ::: Word32) -> ("width" ::: Word32) -> PhysicalDeviceRayTracingPipelinePropertiesKHR PhysicalDeviceRayTracingPipelinePropertiesKHR "width" ::: Word32 forall a. Zero a => a zero "width" ::: Word32 forall a. Zero a => a zero "width" ::: Word32 forall a. Zero a => a zero "width" ::: Word32 forall a. Zero a => a zero "width" ::: Word32 forall a. Zero a => a zero "width" ::: Word32 forall a. Zero a => a zero "width" ::: Word32 forall a. Zero a => a zero "width" ::: Word32 forall a. Zero a => a zero -- | VkStridedDeviceAddressRegionKHR - Structure specifying a region of -- device addresses with a stride -- -- == Valid Usage -- -- - #VUID-VkStridedDeviceAddressRegionKHR-size-04631# If @size@ is not -- zero, all addresses between @deviceAddress@ and @deviceAddress@ + -- @size@ - 1 /must/ be in the buffer device address range of the same -- buffer -- -- - #VUID-VkStridedDeviceAddressRegionKHR-size-04632# If @size@ is not -- zero, @stride@ /must/ be less than or equal to the size of the -- buffer from which @deviceAddress@ was queried -- -- == Valid Usage (Implicit) -- -- - #VUID-VkStridedDeviceAddressRegionKHR-deviceAddress-parameter# If -- @deviceAddress@ is not @0@, @deviceAddress@ /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_pipeline VK_KHR_ray_tracing_pipeline>, -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkClusterAccelerationStructureCommandsInfoNV VkClusterAccelerationStructureCommandsInfoNV>, -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress', -- 'Vulkan.Core10.FundamentalTypes.DeviceSize', 'cmdTraceRaysIndirectKHR', -- 'cmdTraceRaysKHR' data StridedDeviceAddressRegionKHR = StridedDeviceAddressRegionKHR { -- | @deviceAddress@ is the device address (as returned by the -- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress' -- command) at which the region starts, or zero if the region is unused. ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> "dataSize" ::: Word64 deviceAddress :: DeviceAddress , -- | @stride@ is the byte stride between consecutive elements. ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> "dataSize" ::: Word64 stride :: DeviceSize , -- | @size@ is the size in bytes of the region starting at @deviceAddress@. ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> "dataSize" ::: Word64 size :: DeviceSize } deriving (Typeable, ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Bool (("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Bool) -> (("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Bool) -> Eq ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Bool == :: ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Bool $c/= :: ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Bool /= :: ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Bool Eq) #if defined(GENERIC_INSTANCES) deriving instance Generic (StridedDeviceAddressRegionKHR) #endif deriving instance Show StridedDeviceAddressRegionKHR instance ToCStruct StridedDeviceAddressRegionKHR where withCStruct :: forall b. ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> (Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO b) -> IO b withCStruct "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR x Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO b f = Int -> (Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO b) -> IO b forall a b. Int -> (Ptr a -> IO b) -> IO b allocaBytes Int 24 ((Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO b) -> IO b) -> (Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO b) -> IO b forall a b. (a -> b) -> a -> b $ \Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) p -> Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO b -> IO b forall b. Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO b -> IO b forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b pokeCStruct Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) p "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR x (Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO b f Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) p) pokeCStruct :: forall b. Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO b -> IO b pokeCStruct Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) p StridedDeviceAddressRegionKHR{"dataSize" ::: Word64 deviceAddress :: ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> "dataSize" ::: Word64 stride :: ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> "dataSize" ::: Word64 size :: ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> "dataSize" ::: Word64 deviceAddress :: "dataSize" ::: Word64 stride :: "dataSize" ::: Word64 size :: "dataSize" ::: Word64 ..} IO b f = do Ptr ("dataSize" ::: Word64) -> ("dataSize" ::: Word64) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) p Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Int -> Ptr ("dataSize" ::: Word64) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr DeviceAddress)) ("dataSize" ::: Word64 deviceAddress) Ptr ("dataSize" ::: Word64) -> ("dataSize" ::: Word64) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) p Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Int -> Ptr ("dataSize" ::: Word64) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr DeviceSize)) ("dataSize" ::: Word64 stride) Ptr ("dataSize" ::: Word64) -> ("dataSize" ::: Word64) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) p Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Int -> Ptr ("dataSize" ::: Word64) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr DeviceSize)) ("dataSize" ::: Word64 size) IO b f cStructSize :: Int cStructSize = Int 24 cStructAlignment :: Int cStructAlignment = Int 8 pokeZeroCStruct :: forall b. Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO b -> IO b pokeZeroCStruct Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) p IO b f = do Ptr ("dataSize" ::: Word64) -> ("dataSize" ::: Word64) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) p Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Int -> Ptr ("dataSize" ::: Word64) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr DeviceSize)) ("dataSize" ::: Word64 forall a. Zero a => a zero) Ptr ("dataSize" ::: Word64) -> ("dataSize" ::: Word64) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) p Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Int -> Ptr ("dataSize" ::: Word64) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr DeviceSize)) ("dataSize" ::: Word64 forall a. Zero a => a zero) IO b f instance FromCStruct StridedDeviceAddressRegionKHR where peekCStruct :: Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) peekCStruct Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) p = do deviceAddress <- forall a. Storable a => Ptr a -> IO a peek @DeviceAddress ((Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) p Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Int -> Ptr ("dataSize" ::: Word64) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr DeviceAddress)) stride <- peek @DeviceSize ((p `plusPtr` 8 :: Ptr DeviceSize)) size <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize)) pure $ StridedDeviceAddressRegionKHR deviceAddress stride size instance Storable StridedDeviceAddressRegionKHR where sizeOf :: ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Int sizeOf ~"raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR _ = Int 24 alignment :: ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> Int alignment ~"raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR _ = Int 8 peek :: Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) peek = Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) forall a. FromCStruct a => Ptr a -> IO a peekCStruct poke :: Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO () poke Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) ptr "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR poked = Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO () -> IO () forall b. Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) -> IO b -> IO b forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b pokeCStruct Ptr ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR) ptr "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR poked (() -> IO () forall a. a -> IO a forall (f :: * -> *) a. Applicative f => a -> f a pure ()) instance Zero StridedDeviceAddressRegionKHR where zero :: "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR zero = ("dataSize" ::: Word64) -> ("dataSize" ::: Word64) -> ("dataSize" ::: Word64) -> "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR StridedDeviceAddressRegionKHR "dataSize" ::: Word64 forall a. Zero a => a zero "dataSize" ::: Word64 forall a. Zero a => a zero "dataSize" ::: Word64 forall a. Zero a => a zero -- | VkTraceRaysIndirectCommandKHR - Structure specifying the parameters of -- an indirect ray tracing command -- -- = Description -- -- The members of 'TraceRaysIndirectCommandKHR' have the same meaning as -- the similarly named parameters of 'cmdTraceRaysKHR'. -- -- == Valid Usage -- -- - #VUID-VkTraceRaysIndirectCommandKHR-width-03638# @width@ /must/ be -- less than or equal to -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0] -- × -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupSize@[0] -- -- - #VUID-VkTraceRaysIndirectCommandKHR-height-03639# @height@ /must/ be -- less than or equal to -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1] -- × -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupSize@[1] -- -- - #VUID-VkTraceRaysIndirectCommandKHR-depth-03640# @depth@ /must/ be -- less than or equal to -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2] -- × -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupSize@[2] -- -- - #VUID-VkTraceRaysIndirectCommandKHR-width-03641# @width@ × @height@ -- × @depth@ /must/ be less than or equal to -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxRayDispatchInvocationCount@ -- -- = See Also -- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_ray_tracing_pipeline VK_KHR_ray_tracing_pipeline> data TraceRaysIndirectCommandKHR = TraceRaysIndirectCommandKHR { -- | @width@ is the width of the ray trace query dimensions. TraceRaysIndirectCommandKHR -> "width" ::: Word32 width :: Word32 , -- | @height@ is height of the ray trace query dimensions. TraceRaysIndirectCommandKHR -> "width" ::: Word32 height :: Word32 , -- | @depth@ is depth of the ray trace query dimensions. TraceRaysIndirectCommandKHR -> "width" ::: Word32 depth :: Word32 } deriving (Typeable, TraceRaysIndirectCommandKHR -> TraceRaysIndirectCommandKHR -> Bool (TraceRaysIndirectCommandKHR -> TraceRaysIndirectCommandKHR -> Bool) -> (TraceRaysIndirectCommandKHR -> TraceRaysIndirectCommandKHR -> Bool) -> Eq TraceRaysIndirectCommandKHR forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: TraceRaysIndirectCommandKHR -> TraceRaysIndirectCommandKHR -> Bool == :: TraceRaysIndirectCommandKHR -> TraceRaysIndirectCommandKHR -> Bool $c/= :: TraceRaysIndirectCommandKHR -> TraceRaysIndirectCommandKHR -> Bool /= :: TraceRaysIndirectCommandKHR -> TraceRaysIndirectCommandKHR -> Bool Eq) #if defined(GENERIC_INSTANCES) deriving instance Generic (TraceRaysIndirectCommandKHR) #endif deriving instance Show TraceRaysIndirectCommandKHR instance ToCStruct TraceRaysIndirectCommandKHR where withCStruct :: forall b. TraceRaysIndirectCommandKHR -> (Ptr TraceRaysIndirectCommandKHR -> IO b) -> IO b withCStruct TraceRaysIndirectCommandKHR x Ptr TraceRaysIndirectCommandKHR -> IO b f = Int -> (Ptr TraceRaysIndirectCommandKHR -> IO b) -> IO b forall a b. Int -> (Ptr a -> IO b) -> IO b allocaBytes Int 12 ((Ptr TraceRaysIndirectCommandKHR -> IO b) -> IO b) -> (Ptr TraceRaysIndirectCommandKHR -> IO b) -> IO b forall a b. (a -> b) -> a -> b $ \Ptr TraceRaysIndirectCommandKHR p -> Ptr TraceRaysIndirectCommandKHR -> TraceRaysIndirectCommandKHR -> IO b -> IO b forall b. Ptr TraceRaysIndirectCommandKHR -> TraceRaysIndirectCommandKHR -> IO b -> IO b forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b pokeCStruct Ptr TraceRaysIndirectCommandKHR p TraceRaysIndirectCommandKHR x (Ptr TraceRaysIndirectCommandKHR -> IO b f Ptr TraceRaysIndirectCommandKHR p) pokeCStruct :: forall b. Ptr TraceRaysIndirectCommandKHR -> TraceRaysIndirectCommandKHR -> IO b -> IO b pokeCStruct Ptr TraceRaysIndirectCommandKHR p TraceRaysIndirectCommandKHR{"width" ::: Word32 width :: TraceRaysIndirectCommandKHR -> "width" ::: Word32 height :: TraceRaysIndirectCommandKHR -> "width" ::: Word32 depth :: TraceRaysIndirectCommandKHR -> "width" ::: Word32 width :: "width" ::: Word32 height :: "width" ::: Word32 depth :: "width" ::: Word32 ..} IO b f = do Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommandKHR p Ptr TraceRaysIndirectCommandKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr Word32)) ("width" ::: Word32 width) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommandKHR p Ptr TraceRaysIndirectCommandKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 4 :: Ptr Word32)) ("width" ::: Word32 height) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommandKHR p Ptr TraceRaysIndirectCommandKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr Word32)) ("width" ::: Word32 depth) IO b f cStructSize :: Int cStructSize = Int 12 cStructAlignment :: Int cStructAlignment = Int 4 pokeZeroCStruct :: forall b. Ptr TraceRaysIndirectCommandKHR -> IO b -> IO b pokeZeroCStruct Ptr TraceRaysIndirectCommandKHR p IO b f = do Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommandKHR p Ptr TraceRaysIndirectCommandKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr Word32)) ("width" ::: Word32 forall a. Zero a => a zero) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommandKHR p Ptr TraceRaysIndirectCommandKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 4 :: Ptr Word32)) ("width" ::: Word32 forall a. Zero a => a zero) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr TraceRaysIndirectCommandKHR p Ptr TraceRaysIndirectCommandKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr Word32)) ("width" ::: Word32 forall a. Zero a => a zero) IO b f instance FromCStruct TraceRaysIndirectCommandKHR where peekCStruct :: Ptr TraceRaysIndirectCommandKHR -> IO TraceRaysIndirectCommandKHR peekCStruct Ptr TraceRaysIndirectCommandKHR p = do width <- forall a. Storable a => Ptr a -> IO a peek @Word32 ((Ptr TraceRaysIndirectCommandKHR p Ptr TraceRaysIndirectCommandKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr Word32)) height <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32)) depth <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32)) pure $ TraceRaysIndirectCommandKHR width height depth instance Storable TraceRaysIndirectCommandKHR where sizeOf :: TraceRaysIndirectCommandKHR -> Int sizeOf ~TraceRaysIndirectCommandKHR _ = Int 12 alignment :: TraceRaysIndirectCommandKHR -> Int alignment ~TraceRaysIndirectCommandKHR _ = Int 4 peek :: Ptr TraceRaysIndirectCommandKHR -> IO TraceRaysIndirectCommandKHR peek = Ptr TraceRaysIndirectCommandKHR -> IO TraceRaysIndirectCommandKHR forall a. FromCStruct a => Ptr a -> IO a peekCStruct poke :: Ptr TraceRaysIndirectCommandKHR -> TraceRaysIndirectCommandKHR -> IO () poke Ptr TraceRaysIndirectCommandKHR ptr TraceRaysIndirectCommandKHR poked = Ptr TraceRaysIndirectCommandKHR -> TraceRaysIndirectCommandKHR -> IO () -> IO () forall b. Ptr TraceRaysIndirectCommandKHR -> TraceRaysIndirectCommandKHR -> IO b -> IO b forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b pokeCStruct Ptr TraceRaysIndirectCommandKHR ptr TraceRaysIndirectCommandKHR poked (() -> IO () forall a. a -> IO a forall (f :: * -> *) a. Applicative f => a -> f a pure ()) instance Zero TraceRaysIndirectCommandKHR where zero :: TraceRaysIndirectCommandKHR zero = ("width" ::: Word32) -> ("width" ::: Word32) -> ("width" ::: Word32) -> TraceRaysIndirectCommandKHR TraceRaysIndirectCommandKHR "width" ::: Word32 forall a. Zero a => a zero "width" ::: Word32 forall a. Zero a => a zero "width" ::: Word32 forall a. Zero a => a zero -- | VkRayTracingPipelineInterfaceCreateInfoKHR - Structure specifying -- additional interface information when using libraries -- -- = Description -- -- @maxPipelineRayPayloadSize@ is calculated as the maximum size of the -- block (in bytes) declared in the @RayPayloadKHR@ or -- @IncomingRayPayloadKHR@ storage classes. -- @maxPipelineRayHitAttributeSize@ is calculated as the maximum size of -- any block (in bytes) declared in the @HitAttributeKHR@ or -- @HitObjectAttributeEXT@ storage class. As variables in these storage -- classes do not have explicit offsets, the size should be calculated as -- if each variable has a -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#interfaces-alignment-requirements scalar alignment> -- equal to the largest scalar alignment of any of the block’s members. -- -- There is no explicit upper limit for @maxPipelineRayPayloadSize@, but in -- practice it should be kept as small as possible. Similar to invocation -- local memory, it must be allocated for each shader invocation and for -- devices which support many simultaneous invocations, this storage can -- rapidly be exhausted, resulting in failure. -- -- == Valid Usage (Implicit) -- -- = See Also -- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_ray_tracing_pipeline VK_KHR_ray_tracing_pipeline>, -- 'RayTracingPipelineCreateInfoKHR', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data RayTracingPipelineInterfaceCreateInfoKHR = RayTracingPipelineInterfaceCreateInfoKHR { -- | @maxPipelineRayPayloadSize@ is the maximum payload size in bytes used by -- any shader in the pipeline. RayTracingPipelineInterfaceCreateInfoKHR -> "width" ::: Word32 maxPipelineRayPayloadSize :: Word32 , -- | @maxPipelineRayHitAttributeSize@ is the maximum attribute structure size -- in bytes used by any shader in the pipeline. -- -- #VUID-VkRayTracingPipelineInterfaceCreateInfoKHR-maxPipelineRayHitAttributeSize-03605# -- @maxPipelineRayHitAttributeSize@ /must/ be less than or equal to -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxRayHitAttributeSize@ RayTracingPipelineInterfaceCreateInfoKHR -> "width" ::: Word32 maxPipelineRayHitAttributeSize :: Word32 } deriving (Typeable, RayTracingPipelineInterfaceCreateInfoKHR -> RayTracingPipelineInterfaceCreateInfoKHR -> Bool (RayTracingPipelineInterfaceCreateInfoKHR -> RayTracingPipelineInterfaceCreateInfoKHR -> Bool) -> (RayTracingPipelineInterfaceCreateInfoKHR -> RayTracingPipelineInterfaceCreateInfoKHR -> Bool) -> Eq RayTracingPipelineInterfaceCreateInfoKHR forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: RayTracingPipelineInterfaceCreateInfoKHR -> RayTracingPipelineInterfaceCreateInfoKHR -> Bool == :: RayTracingPipelineInterfaceCreateInfoKHR -> RayTracingPipelineInterfaceCreateInfoKHR -> Bool $c/= :: RayTracingPipelineInterfaceCreateInfoKHR -> RayTracingPipelineInterfaceCreateInfoKHR -> Bool /= :: RayTracingPipelineInterfaceCreateInfoKHR -> RayTracingPipelineInterfaceCreateInfoKHR -> Bool Eq) #if defined(GENERIC_INSTANCES) deriving instance Generic (RayTracingPipelineInterfaceCreateInfoKHR) #endif deriving instance Show RayTracingPipelineInterfaceCreateInfoKHR instance ToCStruct RayTracingPipelineInterfaceCreateInfoKHR where withCStruct :: forall b. RayTracingPipelineInterfaceCreateInfoKHR -> (Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO b) -> IO b withCStruct RayTracingPipelineInterfaceCreateInfoKHR x Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO b f = Int -> (Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO b) -> IO b forall a b. Int -> (Ptr a -> IO b) -> IO b allocaBytes Int 24 ((Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO b) -> IO b) -> (Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO b) -> IO b forall a b. (a -> b) -> a -> b $ \Ptr RayTracingPipelineInterfaceCreateInfoKHR p -> Ptr RayTracingPipelineInterfaceCreateInfoKHR -> RayTracingPipelineInterfaceCreateInfoKHR -> IO b -> IO b forall b. Ptr RayTracingPipelineInterfaceCreateInfoKHR -> RayTracingPipelineInterfaceCreateInfoKHR -> IO b -> IO b forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b pokeCStruct Ptr RayTracingPipelineInterfaceCreateInfoKHR p RayTracingPipelineInterfaceCreateInfoKHR x (Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO b f Ptr RayTracingPipelineInterfaceCreateInfoKHR p) pokeCStruct :: forall b. Ptr RayTracingPipelineInterfaceCreateInfoKHR -> RayTracingPipelineInterfaceCreateInfoKHR -> IO b -> IO b pokeCStruct Ptr RayTracingPipelineInterfaceCreateInfoKHR p RayTracingPipelineInterfaceCreateInfoKHR{"width" ::: Word32 maxPipelineRayPayloadSize :: RayTracingPipelineInterfaceCreateInfoKHR -> "width" ::: Word32 maxPipelineRayHitAttributeSize :: RayTracingPipelineInterfaceCreateInfoKHR -> "width" ::: Word32 maxPipelineRayPayloadSize :: "width" ::: Word32 maxPipelineRayHitAttributeSize :: "width" ::: Word32 ..} IO b f = do Ptr StructureType -> StructureType -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingPipelineInterfaceCreateInfoKHR p Ptr RayTracingPipelineInterfaceCreateInfoKHR -> Int -> Ptr StructureType forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr StructureType)) (StructureType STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR) Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingPipelineInterfaceCreateInfoKHR p Ptr RayTracingPipelineInterfaceCreateInfoKHR -> Int -> Ptr ("data" ::: Ptr ()) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr (Ptr ()))) ("data" ::: Ptr () forall a. Ptr a nullPtr) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingPipelineInterfaceCreateInfoKHR p Ptr RayTracingPipelineInterfaceCreateInfoKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr Word32)) ("width" ::: Word32 maxPipelineRayPayloadSize) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingPipelineInterfaceCreateInfoKHR p Ptr RayTracingPipelineInterfaceCreateInfoKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 20 :: Ptr Word32)) ("width" ::: Word32 maxPipelineRayHitAttributeSize) IO b f cStructSize :: Int cStructSize = Int 24 cStructAlignment :: Int cStructAlignment = Int 8 pokeZeroCStruct :: forall b. Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO b -> IO b pokeZeroCStruct Ptr RayTracingPipelineInterfaceCreateInfoKHR p IO b f = do Ptr StructureType -> StructureType -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingPipelineInterfaceCreateInfoKHR p Ptr RayTracingPipelineInterfaceCreateInfoKHR -> Int -> Ptr StructureType forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 0 :: Ptr StructureType)) (StructureType STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR) Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingPipelineInterfaceCreateInfoKHR p Ptr RayTracingPipelineInterfaceCreateInfoKHR -> Int -> Ptr ("data" ::: Ptr ()) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr (Ptr ()))) ("data" ::: Ptr () forall a. Ptr a nullPtr) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingPipelineInterfaceCreateInfoKHR p Ptr RayTracingPipelineInterfaceCreateInfoKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr Word32)) ("width" ::: Word32 forall a. Zero a => a zero) Ptr ("width" ::: Word32) -> ("width" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr RayTracingPipelineInterfaceCreateInfoKHR p Ptr RayTracingPipelineInterfaceCreateInfoKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 20 :: Ptr Word32)) ("width" ::: Word32 forall a. Zero a => a zero) IO b f instance FromCStruct RayTracingPipelineInterfaceCreateInfoKHR where peekCStruct :: Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO RayTracingPipelineInterfaceCreateInfoKHR peekCStruct Ptr RayTracingPipelineInterfaceCreateInfoKHR p = do maxPipelineRayPayloadSize <- forall a. Storable a => Ptr a -> IO a peek @Word32 ((Ptr RayTracingPipelineInterfaceCreateInfoKHR p Ptr RayTracingPipelineInterfaceCreateInfoKHR -> Int -> Ptr ("width" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr Word32)) maxPipelineRayHitAttributeSize <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32)) pure $ RayTracingPipelineInterfaceCreateInfoKHR maxPipelineRayPayloadSize maxPipelineRayHitAttributeSize instance Storable RayTracingPipelineInterfaceCreateInfoKHR where sizeOf :: RayTracingPipelineInterfaceCreateInfoKHR -> Int sizeOf ~RayTracingPipelineInterfaceCreateInfoKHR _ = Int 24 alignment :: RayTracingPipelineInterfaceCreateInfoKHR -> Int alignment ~RayTracingPipelineInterfaceCreateInfoKHR _ = Int 8 peek :: Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO RayTracingPipelineInterfaceCreateInfoKHR peek = Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO RayTracingPipelineInterfaceCreateInfoKHR forall a. FromCStruct a => Ptr a -> IO a peekCStruct poke :: Ptr RayTracingPipelineInterfaceCreateInfoKHR -> RayTracingPipelineInterfaceCreateInfoKHR -> IO () poke Ptr RayTracingPipelineInterfaceCreateInfoKHR ptr RayTracingPipelineInterfaceCreateInfoKHR poked = Ptr RayTracingPipelineInterfaceCreateInfoKHR -> RayTracingPipelineInterfaceCreateInfoKHR -> IO () -> IO () forall b. Ptr RayTracingPipelineInterfaceCreateInfoKHR -> RayTracingPipelineInterfaceCreateInfoKHR -> IO b -> IO b forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b pokeCStruct Ptr RayTracingPipelineInterfaceCreateInfoKHR ptr RayTracingPipelineInterfaceCreateInfoKHR poked (() -> IO () forall a. a -> IO a forall (f :: * -> *) a. Applicative f => a -> f a pure ()) instance Zero RayTracingPipelineInterfaceCreateInfoKHR where zero :: RayTracingPipelineInterfaceCreateInfoKHR zero = ("width" ::: Word32) -> ("width" ::: Word32) -> RayTracingPipelineInterfaceCreateInfoKHR RayTracingPipelineInterfaceCreateInfoKHR "width" ::: Word32 forall a. Zero a => a zero "width" ::: Word32 forall a. Zero a => a zero -- | VkRayTracingShaderGroupTypeKHR - Shader group types -- -- = Description -- -- - 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR' specifies that a shader -- group with a single -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_RAYGEN_BIT_KHR', -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MISS_BIT_KHR', -- or -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_CALLABLE_BIT_KHR' -- shader in it. -- -- - 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' specifies -- that a shader group that only hits triangles and /must/ not contain -- an intersection shader, only closest hit and any-hit shaders. -- -- - 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR' specifies -- that a shader group that only intersects with custom geometry and -- /must/ contain an intersection shader and /may/ contain closest hit -- and any-hit shaders. -- -- For current group types, the hit group type could be inferred from the -- presence or absence of the intersection shader, but we provide the type -- explicitly for future hit groups that do not have that property. -- -- = See Also -- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_ray_tracing_pipeline VK_KHR_ray_tracing_pipeline>, -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_ray_tracing VK_NV_ray_tracing>, -- 'RayTracingShaderGroupCreateInfoKHR', -- 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingShaderGroupCreateInfoNV' newtype RayTracingShaderGroupTypeKHR = RayTracingShaderGroupTypeKHR Int32 deriving newtype (RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Bool (RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Bool) -> (RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Bool) -> Eq RayTracingShaderGroupTypeKHR forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Bool == :: RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Bool $c/= :: RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Bool /= :: RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Bool Eq, Eq RayTracingShaderGroupTypeKHR Eq RayTracingShaderGroupTypeKHR => (RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Ordering) -> (RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Bool) -> (RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Bool) -> (RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Bool) -> (RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Bool) -> (RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR) -> (RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR) -> Ord RayTracingShaderGroupTypeKHR RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Bool RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Ordering RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a $ccompare :: RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Ordering compare :: RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Ordering $c< :: RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Bool < :: RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Bool $c<= :: RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Bool <= :: RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Bool $c> :: RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Bool > :: RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Bool $c>= :: RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Bool >= :: RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> Bool $cmax :: RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR max :: RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR $cmin :: RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR min :: RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR Ord, Ptr RayTracingShaderGroupTypeKHR -> IO RayTracingShaderGroupTypeKHR Ptr RayTracingShaderGroupTypeKHR -> Int -> IO RayTracingShaderGroupTypeKHR Ptr RayTracingShaderGroupTypeKHR -> Int -> RayTracingShaderGroupTypeKHR -> IO () Ptr RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> IO () RayTracingShaderGroupTypeKHR -> Int (RayTracingShaderGroupTypeKHR -> Int) -> (RayTracingShaderGroupTypeKHR -> Int) -> (Ptr RayTracingShaderGroupTypeKHR -> Int -> IO RayTracingShaderGroupTypeKHR) -> (Ptr RayTracingShaderGroupTypeKHR -> Int -> RayTracingShaderGroupTypeKHR -> IO ()) -> (forall b. Ptr b -> Int -> IO RayTracingShaderGroupTypeKHR) -> (forall b. Ptr b -> Int -> RayTracingShaderGroupTypeKHR -> IO ()) -> (Ptr RayTracingShaderGroupTypeKHR -> IO RayTracingShaderGroupTypeKHR) -> (Ptr RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> IO ()) -> Storable RayTracingShaderGroupTypeKHR forall b. Ptr b -> Int -> IO RayTracingShaderGroupTypeKHR forall b. Ptr b -> Int -> RayTracingShaderGroupTypeKHR -> IO () forall a. (a -> Int) -> (a -> Int) -> (Ptr a -> Int -> IO a) -> (Ptr a -> Int -> a -> IO ()) -> (forall b. Ptr b -> Int -> IO a) -> (forall b. Ptr b -> Int -> a -> IO ()) -> (Ptr a -> IO a) -> (Ptr a -> a -> IO ()) -> Storable a $csizeOf :: RayTracingShaderGroupTypeKHR -> Int sizeOf :: RayTracingShaderGroupTypeKHR -> Int $calignment :: RayTracingShaderGroupTypeKHR -> Int alignment :: RayTracingShaderGroupTypeKHR -> Int $cpeekElemOff :: Ptr RayTracingShaderGroupTypeKHR -> Int -> IO RayTracingShaderGroupTypeKHR peekElemOff :: Ptr RayTracingShaderGroupTypeKHR -> Int -> IO RayTracingShaderGroupTypeKHR $cpokeElemOff :: Ptr RayTracingShaderGroupTypeKHR -> Int -> RayTracingShaderGroupTypeKHR -> IO () pokeElemOff :: Ptr RayTracingShaderGroupTypeKHR -> Int -> RayTracingShaderGroupTypeKHR -> IO () $cpeekByteOff :: forall b. Ptr b -> Int -> IO RayTracingShaderGroupTypeKHR peekByteOff :: forall b. Ptr b -> Int -> IO RayTracingShaderGroupTypeKHR $cpokeByteOff :: forall b. Ptr b -> Int -> RayTracingShaderGroupTypeKHR -> IO () pokeByteOff :: forall b. Ptr b -> Int -> RayTracingShaderGroupTypeKHR -> IO () $cpeek :: Ptr RayTracingShaderGroupTypeKHR -> IO RayTracingShaderGroupTypeKHR peek :: Ptr RayTracingShaderGroupTypeKHR -> IO RayTracingShaderGroupTypeKHR $cpoke :: Ptr RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> IO () poke :: Ptr RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR -> IO () Storable, RayTracingShaderGroupTypeKHR RayTracingShaderGroupTypeKHR -> Zero RayTracingShaderGroupTypeKHR forall a. a -> Zero a $czero :: RayTracingShaderGroupTypeKHR zero :: RayTracingShaderGroupTypeKHR Zero) -- No documentation found for Nested "VkRayTracingShaderGroupTypeKHR" "VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR" pattern $mRAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR :: forall {r}. RayTracingShaderGroupTypeKHR -> ((# #) -> r) -> ((# #) -> r) -> r $bRAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR :: RayTracingShaderGroupTypeKHR RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR = RayTracingShaderGroupTypeKHR 0 -- No documentation found for Nested "VkRayTracingShaderGroupTypeKHR" "VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR" pattern $mRAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR :: forall {r}. RayTracingShaderGroupTypeKHR -> ((# #) -> r) -> ((# #) -> r) -> r $bRAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR :: RayTracingShaderGroupTypeKHR RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR = RayTracingShaderGroupTypeKHR 1 -- No documentation found for Nested "VkRayTracingShaderGroupTypeKHR" "VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR" pattern $mRAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR :: forall {r}. RayTracingShaderGroupTypeKHR -> ((# #) -> r) -> ((# #) -> r) -> r $bRAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR :: RayTracingShaderGroupTypeKHR RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR = RayTracingShaderGroupTypeKHR 2 {-# COMPLETE RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR , RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR , RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR :: RayTracingShaderGroupTypeKHR #-} conNameRayTracingShaderGroupTypeKHR :: String conNameRayTracingShaderGroupTypeKHR :: String conNameRayTracingShaderGroupTypeKHR = String "RayTracingShaderGroupTypeKHR" enumPrefixRayTracingShaderGroupTypeKHR :: String enumPrefixRayTracingShaderGroupTypeKHR :: String enumPrefixRayTracingShaderGroupTypeKHR = String "RAY_TRACING_SHADER_GROUP_TYPE_" showTableRayTracingShaderGroupTypeKHR :: [(RayTracingShaderGroupTypeKHR, String)] showTableRayTracingShaderGroupTypeKHR :: [(RayTracingShaderGroupTypeKHR, String)] showTableRayTracingShaderGroupTypeKHR = [ ( RayTracingShaderGroupTypeKHR RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR , String "GENERAL_KHR" ) , ( RayTracingShaderGroupTypeKHR RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR , String "TRIANGLES_HIT_GROUP_KHR" ) , ( RayTracingShaderGroupTypeKHR RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR , String "PROCEDURAL_HIT_GROUP_KHR" ) ] instance Show RayTracingShaderGroupTypeKHR where showsPrec :: Int -> RayTracingShaderGroupTypeKHR -> ShowS showsPrec = String -> [(RayTracingShaderGroupTypeKHR, String)] -> String -> (RayTracingShaderGroupTypeKHR -> Int32) -> (Int32 -> ShowS) -> Int -> RayTracingShaderGroupTypeKHR -> ShowS forall a i. Eq a => String -> [(a, String)] -> String -> (a -> i) -> (i -> ShowS) -> Int -> a -> ShowS enumShowsPrec String enumPrefixRayTracingShaderGroupTypeKHR [(RayTracingShaderGroupTypeKHR, String)] showTableRayTracingShaderGroupTypeKHR String conNameRayTracingShaderGroupTypeKHR (\(RayTracingShaderGroupTypeKHR Int32 x) -> Int32 x) (Int -> Int32 -> ShowS forall a. Show a => Int -> a -> ShowS showsPrec Int 11) instance Read RayTracingShaderGroupTypeKHR where readPrec :: ReadPrec RayTracingShaderGroupTypeKHR readPrec = String -> [(RayTracingShaderGroupTypeKHR, String)] -> String -> (Int32 -> RayTracingShaderGroupTypeKHR) -> ReadPrec RayTracingShaderGroupTypeKHR forall i a. Read i => String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a enumReadPrec String enumPrefixRayTracingShaderGroupTypeKHR [(RayTracingShaderGroupTypeKHR, String)] showTableRayTracingShaderGroupTypeKHR String conNameRayTracingShaderGroupTypeKHR Int32 -> RayTracingShaderGroupTypeKHR RayTracingShaderGroupTypeKHR -- | VkShaderGroupShaderKHR - Shader group shaders -- -- = Description -- -- - 'SHADER_GROUP_SHADER_GENERAL_KHR' uses the shader specified in the -- group with 'RayTracingShaderGroupCreateInfoKHR'::@generalShader@ -- -- - 'SHADER_GROUP_SHADER_CLOSEST_HIT_KHR' uses the shader specified in -- the group with -- 'RayTracingShaderGroupCreateInfoKHR'::@closestHitShader@ -- -- - 'SHADER_GROUP_SHADER_ANY_HIT_KHR' uses the shader specified in the -- group with 'RayTracingShaderGroupCreateInfoKHR'::@anyHitShader@ -- -- - 'SHADER_GROUP_SHADER_INTERSECTION_KHR' uses the shader specified in -- the group with -- 'RayTracingShaderGroupCreateInfoKHR'::@intersectionShader@ -- -- = See Also -- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_ray_tracing_pipeline VK_KHR_ray_tracing_pipeline>, -- 'getRayTracingShaderGroupStackSizeKHR' newtype ShaderGroupShaderKHR = ShaderGroupShaderKHR Int32 deriving newtype (ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool (ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool) -> (ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool) -> Eq ShaderGroupShaderKHR forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool == :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool $c/= :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool /= :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool Eq, Eq ShaderGroupShaderKHR Eq ShaderGroupShaderKHR => (ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Ordering) -> (ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool) -> (ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool) -> (ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool) -> (ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool) -> (ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> ShaderGroupShaderKHR) -> (ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> ShaderGroupShaderKHR) -> Ord ShaderGroupShaderKHR ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Ordering ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> ShaderGroupShaderKHR forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a $ccompare :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Ordering compare :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Ordering $c< :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool < :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool $c<= :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool <= :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool $c> :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool > :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool $c>= :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool >= :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool $cmax :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> ShaderGroupShaderKHR max :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> ShaderGroupShaderKHR $cmin :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> ShaderGroupShaderKHR min :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> ShaderGroupShaderKHR Ord, Ptr ShaderGroupShaderKHR -> IO ShaderGroupShaderKHR Ptr ShaderGroupShaderKHR -> Int -> IO ShaderGroupShaderKHR Ptr ShaderGroupShaderKHR -> Int -> ShaderGroupShaderKHR -> IO () Ptr ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> IO () ShaderGroupShaderKHR -> Int (ShaderGroupShaderKHR -> Int) -> (ShaderGroupShaderKHR -> Int) -> (Ptr ShaderGroupShaderKHR -> Int -> IO ShaderGroupShaderKHR) -> (Ptr ShaderGroupShaderKHR -> Int -> ShaderGroupShaderKHR -> IO ()) -> (forall b. Ptr b -> Int -> IO ShaderGroupShaderKHR) -> (forall b. Ptr b -> Int -> ShaderGroupShaderKHR -> IO ()) -> (Ptr ShaderGroupShaderKHR -> IO ShaderGroupShaderKHR) -> (Ptr ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> IO ()) -> Storable ShaderGroupShaderKHR forall b. Ptr b -> Int -> IO ShaderGroupShaderKHR forall b. Ptr b -> Int -> ShaderGroupShaderKHR -> IO () forall a. (a -> Int) -> (a -> Int) -> (Ptr a -> Int -> IO a) -> (Ptr a -> Int -> a -> IO ()) -> (forall b. Ptr b -> Int -> IO a) -> (forall b. Ptr b -> Int -> a -> IO ()) -> (Ptr a -> IO a) -> (Ptr a -> a -> IO ()) -> Storable a $csizeOf :: ShaderGroupShaderKHR -> Int sizeOf :: ShaderGroupShaderKHR -> Int $calignment :: ShaderGroupShaderKHR -> Int alignment :: ShaderGroupShaderKHR -> Int $cpeekElemOff :: Ptr ShaderGroupShaderKHR -> Int -> IO ShaderGroupShaderKHR peekElemOff :: Ptr ShaderGroupShaderKHR -> Int -> IO ShaderGroupShaderKHR $cpokeElemOff :: Ptr ShaderGroupShaderKHR -> Int -> ShaderGroupShaderKHR -> IO () pokeElemOff :: Ptr ShaderGroupShaderKHR -> Int -> ShaderGroupShaderKHR -> IO () $cpeekByteOff :: forall b. Ptr b -> Int -> IO ShaderGroupShaderKHR peekByteOff :: forall b. Ptr b -> Int -> IO ShaderGroupShaderKHR $cpokeByteOff :: forall b. Ptr b -> Int -> ShaderGroupShaderKHR -> IO () pokeByteOff :: forall b. Ptr b -> Int -> ShaderGroupShaderKHR -> IO () $cpeek :: Ptr ShaderGroupShaderKHR -> IO ShaderGroupShaderKHR peek :: Ptr ShaderGroupShaderKHR -> IO ShaderGroupShaderKHR $cpoke :: Ptr ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> IO () poke :: Ptr ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> IO () Storable, ShaderGroupShaderKHR ShaderGroupShaderKHR -> Zero ShaderGroupShaderKHR forall a. a -> Zero a $czero :: ShaderGroupShaderKHR zero :: ShaderGroupShaderKHR Zero) -- No documentation found for Nested "VkShaderGroupShaderKHR" "VK_SHADER_GROUP_SHADER_GENERAL_KHR" pattern $mSHADER_GROUP_SHADER_GENERAL_KHR :: forall {r}. ShaderGroupShaderKHR -> ((# #) -> r) -> ((# #) -> r) -> r $bSHADER_GROUP_SHADER_GENERAL_KHR :: ShaderGroupShaderKHR SHADER_GROUP_SHADER_GENERAL_KHR = ShaderGroupShaderKHR 0 -- No documentation found for Nested "VkShaderGroupShaderKHR" "VK_SHADER_GROUP_SHADER_CLOSEST_HIT_KHR" pattern $mSHADER_GROUP_SHADER_CLOSEST_HIT_KHR :: forall {r}. ShaderGroupShaderKHR -> ((# #) -> r) -> ((# #) -> r) -> r $bSHADER_GROUP_SHADER_CLOSEST_HIT_KHR :: ShaderGroupShaderKHR SHADER_GROUP_SHADER_CLOSEST_HIT_KHR = ShaderGroupShaderKHR 1 -- No documentation found for Nested "VkShaderGroupShaderKHR" "VK_SHADER_GROUP_SHADER_ANY_HIT_KHR" pattern $mSHADER_GROUP_SHADER_ANY_HIT_KHR :: forall {r}. ShaderGroupShaderKHR -> ((# #) -> r) -> ((# #) -> r) -> r $bSHADER_GROUP_SHADER_ANY_HIT_KHR :: ShaderGroupShaderKHR SHADER_GROUP_SHADER_ANY_HIT_KHR = ShaderGroupShaderKHR 2 -- No documentation found for Nested "VkShaderGroupShaderKHR" "VK_SHADER_GROUP_SHADER_INTERSECTION_KHR" pattern $mSHADER_GROUP_SHADER_INTERSECTION_KHR :: forall {r}. ShaderGroupShaderKHR -> ((# #) -> r) -> ((# #) -> r) -> r $bSHADER_GROUP_SHADER_INTERSECTION_KHR :: ShaderGroupShaderKHR SHADER_GROUP_SHADER_INTERSECTION_KHR = ShaderGroupShaderKHR 3 {-# COMPLETE SHADER_GROUP_SHADER_GENERAL_KHR , SHADER_GROUP_SHADER_CLOSEST_HIT_KHR , SHADER_GROUP_SHADER_ANY_HIT_KHR , SHADER_GROUP_SHADER_INTERSECTION_KHR :: ShaderGroupShaderKHR #-} conNameShaderGroupShaderKHR :: String conNameShaderGroupShaderKHR :: String conNameShaderGroupShaderKHR = String "ShaderGroupShaderKHR" enumPrefixShaderGroupShaderKHR :: String enumPrefixShaderGroupShaderKHR :: String enumPrefixShaderGroupShaderKHR = String "SHADER_GROUP_SHADER_" showTableShaderGroupShaderKHR :: [(ShaderGroupShaderKHR, String)] showTableShaderGroupShaderKHR :: [(ShaderGroupShaderKHR, String)] showTableShaderGroupShaderKHR = [ ( ShaderGroupShaderKHR SHADER_GROUP_SHADER_GENERAL_KHR , String "GENERAL_KHR" ) , ( ShaderGroupShaderKHR SHADER_GROUP_SHADER_CLOSEST_HIT_KHR , String "CLOSEST_HIT_KHR" ) , ( ShaderGroupShaderKHR SHADER_GROUP_SHADER_ANY_HIT_KHR , String "ANY_HIT_KHR" ) , ( ShaderGroupShaderKHR SHADER_GROUP_SHADER_INTERSECTION_KHR , String "INTERSECTION_KHR" ) ] instance Show ShaderGroupShaderKHR where showsPrec :: Int -> ShaderGroupShaderKHR -> ShowS showsPrec = String -> [(ShaderGroupShaderKHR, String)] -> String -> (ShaderGroupShaderKHR -> Int32) -> (Int32 -> ShowS) -> Int -> ShaderGroupShaderKHR -> ShowS forall a i. Eq a => String -> [(a, String)] -> String -> (a -> i) -> (i -> ShowS) -> Int -> a -> ShowS enumShowsPrec String enumPrefixShaderGroupShaderKHR [(ShaderGroupShaderKHR, String)] showTableShaderGroupShaderKHR String conNameShaderGroupShaderKHR (\(ShaderGroupShaderKHR Int32 x) -> Int32 x) (Int -> Int32 -> ShowS forall a. Show a => Int -> a -> ShowS showsPrec Int 11) instance Read ShaderGroupShaderKHR where readPrec :: ReadPrec ShaderGroupShaderKHR readPrec = String -> [(ShaderGroupShaderKHR, String)] -> String -> (Int32 -> ShaderGroupShaderKHR) -> ReadPrec ShaderGroupShaderKHR forall i a. Read i => String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a enumReadPrec String enumPrefixShaderGroupShaderKHR [(ShaderGroupShaderKHR, String)] showTableShaderGroupShaderKHR String conNameShaderGroupShaderKHR Int32 -> ShaderGroupShaderKHR ShaderGroupShaderKHR type KHR_RAY_TRACING_PIPELINE_SPEC_VERSION = 1 -- No documentation found for TopLevel "VK_KHR_RAY_TRACING_PIPELINE_SPEC_VERSION" pattern KHR_RAY_TRACING_PIPELINE_SPEC_VERSION :: forall a . Integral a => a pattern $mKHR_RAY_TRACING_PIPELINE_SPEC_VERSION :: forall {r} {a}. Integral a => a -> ((# #) -> r) -> ((# #) -> r) -> r $bKHR_RAY_TRACING_PIPELINE_SPEC_VERSION :: forall a. Integral a => a KHR_RAY_TRACING_PIPELINE_SPEC_VERSION = 1 type KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME = "VK_KHR_ray_tracing_pipeline" -- No documentation found for TopLevel "VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME" pattern KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a pattern $mKHR_RAY_TRACING_PIPELINE_EXTENSION_NAME :: forall {r} {a}. (Eq a, IsString a) => a -> ((# #) -> r) -> ((# #) -> r) -> r $bKHR_RAY_TRACING_PIPELINE_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME = "VK_KHR_ray_tracing_pipeline"