{-# 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
--
-- [__Extension and Version Dependencies__]
--
--     -   Requires Vulkan 1.1
--
--     -   Requires @VK_KHR_spirv_1_4@
--
--     -   Requires @VK_KHR_acceleration_structure@
--
-- [__Contact__]
--
--     -   Daniel Koch
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title=VK_KHR_ray_tracing_pipeline:%20&body=@dgkoch%20 >
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2020-11-12
--
-- [__Interactions and External Dependencies__]
--
--     -   This extension requires
--         <https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/KHR/SPV_KHR_ray_tracing.html SPV_KHR_ray_tracing>
--
--     -   This extension provides API support for
--         <https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_ray_tracing.txt GLSL_EXT_ray_tracing>
--
--     -   This extension interacts with
--         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#version-1.2 Vulkan 1.2>
--         and
--         <VK_KHR_vulkan_memory_model.html VK_KHR_vulkan_memory_model>,
--         adding the
--         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shader-call-related shader-call-related>
--         relation of invocations,
--         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shader-call-order shader-call-order>
--         partial order of dynamic instances of instructions, and the
--         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shader-scope-shadercall ShaderCallKHR>
--         scope.
--
--     -   This extension interacts with
--         <VK_KHR_pipeline_library.html 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
--
-- -   Trace ray commands which initiates 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.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://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-builtin-variables-launchid LaunchIdKHR>
--
-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-builtin-variables-launchsize LaunchSizeKHR>
--
-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-builtin-variables-worldrayorigin WorldRayOriginKHR>
--
-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-builtin-variables-worldraydirection WorldRayDirectionKHR>
--
-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-builtin-variables-objectrayorigin ObjectRayOriginKHR>
--
-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-builtin-variables-objectraydirection ObjectRayDirectionKHR>
--
-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-builtin-variables-raytmin RayTminKHR>
--
-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-builtin-variables-raytmax RayTmaxKHR>
--
-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-builtin-variables-instancecustomindex InstanceCustomIndexKHR>
--
-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-builtin-variables-instanceid InstanceId>
--
-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-builtin-variables-objecttoworld ObjectToWorldKHR>
--
-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-builtin-variables-worldtoobject WorldToObjectKHR>
--
-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-builtin-variables-hitkind HitKindKHR>
--
-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-builtin-variables-incomingrayflags IncomingRayFlagsKHR>
--
-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-builtin-variables-raygeometryindex RayGeometryIndexKHR>
--
-- -   (modified)@PrimitiveId@
--
-- == New SPIR-V Capabilities
--
-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-khr-raytracing RayTracingKHR>
--
-- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-khr-raytracing 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://www.khronos.org/registry/vulkan/specs/1.2-extensions/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://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-library pipeline library>
--     support for ray tracing
--
-- -   added
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/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://www.khronos.org/registry/vulkan/specs/1.2-extensions/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 comparision of differences and
-- similarities between VK_NV_ray_tracing and VK_KHR_ray_tracing_pipeline?
--
-- __DISCUSSION__:
--
-- The following is a more detailed comparision 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'
--         → VkPhysicalDeviceRayTracingPropertiesKHR (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.html 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.html 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.html 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.html 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.html 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.html VK_KHR_acceleration_structure>
--         (for acceleration structure operations)
--
--     -   <VK_KHR_ray_tracing_pipeline.html VK_KHR_ray_tracing_pipeline>
--         (for ray tracing pipeline and shader stages)
--
--     -   <VK_KHR_ray_query.html 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.html 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.
--
-- == 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 queriable 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
--
-- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR',
-- 'PhysicalDeviceRayTracingPipelineFeaturesKHR',
-- 'PhysicalDeviceRayTracingPipelinePropertiesKHR',
-- 'RayTracingPipelineCreateInfoKHR',
-- 'RayTracingPipelineInterfaceCreateInfoKHR',
-- 'RayTracingShaderGroupCreateInfoKHR', 'RayTracingShaderGroupTypeKHR',
-- 'ShaderGroupShaderKHR', 'StridedDeviceAddressRegionKHR',
-- 'TraceRaysIndirectCommandKHR', 'cmdSetRayTracingPipelineStackSizeKHR',
-- 'cmdTraceRaysIndirectKHR', 'cmdTraceRaysKHR',
-- 'createRayTracingPipelinesKHR',
-- 'getRayTracingCaptureReplayShaderGroupHandlesKHR',
-- 'getRayTracingShaderGroupHandlesKHR',
-- 'getRayTracingShaderGroupStackSizeKHR'
--
-- = Document Notes
--
-- For more information, see the
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/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
                                                      , 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 (allocaBytesAligned)
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.Pipeline (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_T)
import Vulkan.Extensions.Handles (DeferredOperationKHR)
import Vulkan.Extensions.Handles (DeferredOperationKHR(..))
import Vulkan.Core10.Handles (Device)
import Vulkan.Core10.Handles (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 Vulkan.Core10.Handles (PipelineCache)
import Vulkan.Core10.Handles (PipelineCache(..))
import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_pipeline_creation_feedback (PipelineCreationFeedbackCreateInfoEXT)
import Vulkan.Core10.Pipeline (PipelineDynamicStateCreateInfo)
import Vulkan.Core10.Handles (PipelineLayout)
import Vulkan.Extensions.VK_KHR_pipeline_library (PipelineLibraryCreateInfoKHR)
import Vulkan.Core10.Pipeline (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.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' 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-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-02692# If a
--     'Vulkan.Core10.Handles.ImageView' is sampled with
--     'Vulkan.Extensions.VK_EXT_filter_cubic.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.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
--
-- -   #VUID-vkCmdTraceRaysKHR-filterCubic-02694# Any
--     'Vulkan.Core10.Handles.ImageView' being sampled with
--     'Vulkan.Extensions.VK_EXT_filter_cubic.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.Extensions.VK_EXT_filter_cubic.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-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-None-02697# For each set /n/ that is
--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the
--     pipeline bind point used by this command, 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', as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
--
-- -   #VUID-vkCmdTraceRaysKHR-None-02698# For each push constant that is
--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the
--     pipeline bind point used by this command, a push constant value
--     /must/ have been set for the same pipeline bind point, with a
--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push
--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to
--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
--
-- -   #VUID-vkCmdTraceRaysKHR-None-02699# Descriptors in each bound
--     descriptor set, specified via
--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/
--     be valid if they are statically used by the
--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
--     used by this command
--
-- -   #VUID-vkCmdTraceRaysKHR-None-02700# A valid pipeline /must/ be bound
--     to the pipeline bind point used by this command
--
-- -   #VUID-vkCmdTraceRaysKHR-commandBuffer-02701# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command requires any dynamic state, that state
--     /must/ have been set for @commandBuffer@, and done so after any
--     previously bound pipeline with the corresponding state not specified
--     as dynamic
--
-- -   #VUID-vkCmdTraceRaysKHR-None-02859# There /must/ not have been any
--     calls to dynamic state setting commands for any state not specified
--     as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object bound to
--     the pipeline bind point used by this command, since that pipeline
--     was bound
--
-- -   #VUID-vkCmdTraceRaysKHR-None-02702# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command accesses a
--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
--     coordinates, that sampler /must/ not be used to sample from any
--     'Vulkan.Core10.Handles.Image' with a
--     'Vulkan.Core10.Handles.ImageView' of the type
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
--     any shader stage
--
-- -   #VUID-vkCmdTraceRaysKHR-None-02703# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command accesses a
--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
--     coordinates, that sampler /must/ not be used with any of the SPIR-V
--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
--
-- -   #VUID-vkCmdTraceRaysKHR-None-02704# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command accesses a
--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
--     coordinates, that sampler /must/ not be used with any of the SPIR-V
--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
--     includes a LOD bias or any offset values, in any shader stage
--
-- -   #VUID-vkCmdTraceRaysKHR-None-02705# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
--     object bound 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-None-02706# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
--     object bound 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, any resource accessed by the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command /must/ not be a protected resource
--
-- -   #VUID-vkCmdTraceRaysKHR-None-04115# If a
--     'Vulkan.Core10.Handles.ImageView' 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-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
--     image 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 channel 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 channel 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 channel 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 channel 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-None-03429# Any shader group handle
--     referenced by this call /must/ have been queried from the currently
--     bound ray tracing shader pipeline
--
-- -   #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-pRayGenShaderBindingTable-03680# If the
--     buffer from which @pRayGenShaderBindingTable->deviceAddress@ was
--     queried is non-sparse then it /must/ be bound completely and
--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdTraceRaysKHR-pRayGenShaderBindingTable-03681# The buffer
--     from which the @pRayGenShaderBindingTable->deviceAddress@ is queried
--     /must/ have been created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR'
--     usage flag
--
-- -   #VUID-vkCmdTraceRaysKHR-pRayGenShaderBindingTable-03682#
--     @pRayGenShaderBindingTable->deviceAddress@ /must/ be a multiple of
--     'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupBaseAlignment@
--
-- -   #VUID-vkCmdTraceRaysKHR-size-04023# The @size@ member of
--     @pRayGenShaderBindingTable@ /must/ be equal to its @stride@ member
--
-- -   #VUID-vkCmdTraceRaysKHR-pMissShaderBindingTable-03683# If the buffer
--     from which @pMissShaderBindingTable->deviceAddress@ was queried is
--     non-sparse then it /must/ be bound completely and contiguously to a
--     single 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdTraceRaysKHR-pMissShaderBindingTable-03684# The buffer
--     from which the @pMissShaderBindingTable->deviceAddress@ is queried
--     /must/ have been created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR'
--     usage flag
--
-- -   #VUID-vkCmdTraceRaysKHR-pMissShaderBindingTable-03685#
--     @pMissShaderBindingTable->deviceAddress@ /must/ be a multiple of
--     'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupBaseAlignment@
--
-- -   #VUID-vkCmdTraceRaysKHR-stride-03686# The @stride@ member of
--     @pMissShaderBindingTable@ /must/ be a multiple of
--     'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupHandleAlignment@
--
-- -   #VUID-vkCmdTraceRaysKHR-stride-04029# The @stride@ member of
--     @pMissShaderBindingTable@ /must/ be less than or equal to
--     'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxShaderGroupStride@
--
-- -   #VUID-vkCmdTraceRaysKHR-pHitShaderBindingTable-03687# If the buffer
--     from which @pHitShaderBindingTable->deviceAddress@ was queried is
--     non-sparse then it /must/ be bound completely and contiguously to a
--     single 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdTraceRaysKHR-pHitShaderBindingTable-03688# The buffer
--     from which the @pHitShaderBindingTable->deviceAddress@ is queried
--     /must/ have been created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR'
--     usage flag
--
-- -   #VUID-vkCmdTraceRaysKHR-pHitShaderBindingTable-03689#
--     @pHitShaderBindingTable->deviceAddress@ /must/ be a multiple of
--     'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupBaseAlignment@
--
-- -   #VUID-vkCmdTraceRaysKHR-stride-03690# The @stride@ member of
--     @pHitShaderBindingTable@ /must/ be a multiple of
--     'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupHandleAlignment@
--
-- -   #VUID-vkCmdTraceRaysKHR-stride-04035# The @stride@ member of
--     @pHitShaderBindingTable@ /must/ be less than or equal to
--     'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxShaderGroupStride@
--
-- -   #VUID-vkCmdTraceRaysKHR-pCallableShaderBindingTable-03691# If the
--     buffer from which @pCallableShaderBindingTable->deviceAddress@ was
--     queried is non-sparse then it /must/ be bound completely and
--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdTraceRaysKHR-pCallableShaderBindingTable-03692# The
--     buffer from which the @pCallableShaderBindingTable->deviceAddress@
--     is queried /must/ have been created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR'
--     usage flag
--
-- -   #VUID-vkCmdTraceRaysKHR-pCallableShaderBindingTable-03693#
--     @pCallableShaderBindingTable->deviceAddress@ /must/ be a multiple of
--     'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupBaseAlignment@
--
-- -   #VUID-vkCmdTraceRaysKHR-stride-03694# The @stride@ member of
--     @pCallableShaderBindingTable@ /must/ be a multiple of
--     'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupHandleAlignment@
--
-- -   #VUID-vkCmdTraceRaysKHR-stride-04041# The @stride@ member of
--     @pCallableShaderBindingTable@ /must/ be less than or equal to
--     'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxShaderGroupStride@
--
-- -   #VUID-vkCmdTraceRaysKHR-flags-03695# If the currently 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',
--     the @deviceAddress@ member of @pHitShaderBindingTable@ /must/ not be
--     zero
--
-- -   #VUID-vkCmdTraceRaysKHR-flags-03696# If the currently 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',
--     the @deviceAddress@ member of @pHitShaderBindingTable@ /must/ not be
--     zero
--
-- -   #VUID-vkCmdTraceRaysKHR-flags-03697# If the currently bound ray
--     tracing pipeline was created with @flags@ that included
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR',
--     the @deviceAddress@ member of @pHitShaderBindingTable@ /must/ not be
--     zero
--
-- -   #VUID-vkCmdTraceRaysKHR-flags-03511# If the currently 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 shader group handle identified by @pMissShaderBindingTable@
--     /must/ contain a valid miss shader
--
-- -   #VUID-vkCmdTraceRaysKHR-flags-03512# If the currently 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 @pHitShaderBindingTable@ accessed as a result of this
--     command in order to execute an any-hit shader /must/ not be set to
--     zero
--
-- -   #VUID-vkCmdTraceRaysKHR-flags-03513# If the currently 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 @pHitShaderBindingTable@ accessed as a result of this
--     command in order to execute a closest hit shader /must/ not be set
--     to zero
--
-- -   #VUID-vkCmdTraceRaysKHR-flags-03514# If the currently 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 @pHitShaderBindingTable@ accessed as a result of this
--     command in order to execute an intersection shader /must/ not be set
--     to zero
--
-- -   #VUID-vkCmdTraceRaysKHR-pHitShaderBindingTable-03720# Any hit group
--     entries in @pHitShaderBindingTable@ 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-03721# Any hit group
--     entries in @pHitShaderBindingTable@ 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-commandBuffer-04625# @commandBuffer@ /must/
--     not be a protected command buffer
--
-- -   #VUID-vkCmdTraceRaysKHR-width-03626# @width@ /must/ be less than or
--     equal to
--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]
--     ×
--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupSize@[0]
--
-- -   #VUID-vkCmdTraceRaysKHR-height-03627# @height@ /must/ be less than
--     or equal to
--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]
--     ×
--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupSize@[1]
--
-- -   #VUID-vkCmdTraceRaysKHR-depth-03628# @depth@ /must/ be less than or
--     equal to
--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]
--     ×
--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupSize@[2]
--
-- -   #VUID-vkCmdTraceRaysKHR-width-03629# @width@ × @height@ × @depth@
--     /must/ be less than or equal to
--     'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxRayDispatchInvocationCount@
--
-- == 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 compute operations
--
-- -   #VUID-vkCmdTraceRaysKHR-renderpass# This command /must/ only be
--     called outside of a render pass instance
--
-- == 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#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- '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 :: CommandBuffer
-> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> io ()
cmdTraceRaysKHR commandBuffer :: CommandBuffer
commandBuffer raygenShaderBindingTable :: "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
raygenShaderBindingTable missShaderBindingTable :: "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
missShaderBindingTable hitShaderBindingTable :: "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
hitShaderBindingTable callableShaderBindingTable :: "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
callableShaderBindingTable width :: "width" ::: Word32
width height :: "width" ::: Word32
height depth :: "width" ::: Word32
depth = IO () -> io ()
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
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("width" ::: Word32)
   -> ("width" ::: Word32)
   -> ("width" ::: Word32)
   -> IO ())
vkCmdTraceRaysKHRPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("pRaygenShaderBindingTable"
          ::: Ptr
                ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
      -> ("pRaygenShaderBindingTable"
          ::: Ptr
                ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
      -> ("pRaygenShaderBindingTable"
          ::: Ptr
                ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
      -> ("pRaygenShaderBindingTable"
          ::: Ptr
                ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
      -> ("width" ::: Word32)
      -> ("width" ::: Word32)
      -> ("width" ::: Word32)
      -> IO ())
pVkCmdTraceRaysKHR (CommandBuffer -> DeviceCmds
deviceCmds (CommandBuffer
commandBuffer :: CommandBuffer))
  IO () -> ContT () IO ()
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
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("width" ::: Word32)
   -> ("width" ::: Word32)
   -> ("width" ::: Word32)
   -> IO ())
vkCmdTraceRaysKHRPtr FunPtr
  (Ptr CommandBuffer_T
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("width" ::: Word32)
   -> ("width" ::: Word32)
   -> ("width" ::: Word32)
   -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("pRaygenShaderBindingTable"
          ::: Ptr
                ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
      -> ("pRaygenShaderBindingTable"
          ::: Ptr
                ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
      -> ("pRaygenShaderBindingTable"
          ::: Ptr
                ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
      -> ("pRaygenShaderBindingTable"
          ::: Ptr
                ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
      -> ("width" ::: Word32)
      -> ("width" ::: Word32)
      -> ("width" ::: Word32)
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: 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. 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 "" "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
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> IO ()
vkCmdTraceRaysKHR' = FunPtr
  (Ptr CommandBuffer_T
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("width" ::: Word32)
   -> ("width" ::: Word32)
   -> ("width" ::: Word32)
   -> IO ())
-> Ptr CommandBuffer_T
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> IO ()
mkVkCmdTraceRaysKHR FunPtr
  (Ptr CommandBuffer_T
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("width" ::: Word32)
   -> ("width" ::: Word32)
   -> ("width" ::: Word32)
   -> IO ())
vkCmdTraceRaysKHRPtr
  "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
pRaygenShaderBindingTable <- ((("pRaygenShaderBindingTable"
   ::: Ptr
         ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
  -> IO ())
 -> IO ())
-> ContT
     ()
     IO
     ("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> IO ())
  -> IO ())
 -> ContT
      ()
      IO
      ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)))
-> ((("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
     -> IO ())
    -> IO ())
-> ContT
     ()
     IO
     ("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
forall a b. (a -> b) -> a -> b
$ ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> (("pRaygenShaderBindingTable"
     ::: Ptr
           ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
    -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
raygenShaderBindingTable)
  "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
pMissShaderBindingTable <- ((("pRaygenShaderBindingTable"
   ::: Ptr
         ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
  -> IO ())
 -> IO ())
-> ContT
     ()
     IO
     ("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> IO ())
  -> IO ())
 -> ContT
      ()
      IO
      ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)))
-> ((("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
     -> IO ())
    -> IO ())
-> ContT
     ()
     IO
     ("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
forall a b. (a -> b) -> a -> b
$ ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> (("pRaygenShaderBindingTable"
     ::: Ptr
           ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
    -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
missShaderBindingTable)
  "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
pHitShaderBindingTable <- ((("pRaygenShaderBindingTable"
   ::: Ptr
         ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
  -> IO ())
 -> IO ())
-> ContT
     ()
     IO
     ("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> IO ())
  -> IO ())
 -> ContT
      ()
      IO
      ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)))
-> ((("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
     -> IO ())
    -> IO ())
-> ContT
     ()
     IO
     ("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
forall a b. (a -> b) -> a -> b
$ ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> (("pRaygenShaderBindingTable"
     ::: Ptr
           ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
    -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
hitShaderBindingTable)
  "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
pCallableShaderBindingTable <- ((("pRaygenShaderBindingTable"
   ::: Ptr
         ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
  -> IO ())
 -> IO ())
-> ContT
     ()
     IO
     ("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> IO ())
  -> IO ())
 -> ContT
      ()
      IO
      ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)))
-> ((("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
     -> IO ())
    -> IO ())
-> ContT
     ()
     IO
     ("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
forall a b. (a -> b) -> a -> b
$ ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> (("pRaygenShaderBindingTable"
     ::: Ptr
           ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
    -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
callableShaderBindingTable)
  IO () -> ContT () IO ()
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
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent "vkCmdTraceRaysKHR" (Ptr CommandBuffer_T
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> IO ()
vkCmdTraceRaysKHR' (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer)) "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
pRaygenShaderBindingTable "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
pMissShaderBindingTable "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
pHitShaderBindingTable "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
pCallableShaderBindingTable ("width" ::: Word32
width) ("width" ::: Word32
height) ("width" ::: Word32
depth))
  () -> ContT () IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()


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
--
-- == 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-03482#
--     @pipeline@ /must/ have not 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_HOST_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
--
-- = See Also
--
-- '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 a user-allocated buffer where the results will
                                      -- be written.
                                      ("data" ::: Ptr ())
                                   -> io ()
getRayTracingShaderGroupHandlesKHR :: Device
-> Pipeline
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> ("dataSize" ::: Word64)
-> ("data" ::: Ptr ())
-> io ()
getRayTracingShaderGroupHandlesKHR device :: Device
device pipeline :: Pipeline
pipeline firstGroup :: "width" ::: Word32
firstGroup groupCount :: "width" ::: Word32
groupCount dataSize :: "dataSize" ::: Word64
dataSize data' :: "data" ::: Ptr ()
data' = IO () -> io ()
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)
   -> ("dataSize" ::: CSize)
   -> ("data" ::: Ptr ())
   -> IO Result)
vkGetRayTracingShaderGroupHandlesKHRPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> Pipeline
      -> ("width" ::: Word32)
      -> ("width" ::: Word32)
      -> ("dataSize" ::: CSize)
      -> ("data" ::: Ptr ())
      -> IO Result)
pVkGetRayTracingShaderGroupHandlesKHR (Device -> DeviceCmds
deviceCmds (Device
device :: Device))
  Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> Pipeline
   -> ("width" ::: Word32)
   -> ("width" ::: Word32)
   -> ("dataSize" ::: CSize)
   -> ("data" ::: Ptr ())
   -> IO Result)
vkGetRayTracingShaderGroupHandlesKHRPtr FunPtr
  (Ptr Device_T
   -> Pipeline
   -> ("width" ::: Word32)
   -> ("width" ::: Word32)
   -> ("dataSize" ::: CSize)
   -> ("data" ::: Ptr ())
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> Pipeline
      -> ("width" ::: Word32)
      -> ("width" ::: Word32)
      -> ("dataSize" ::: CSize)
      -> ("data" ::: Ptr ())
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> Pipeline
   -> ("width" ::: Word32)
   -> ("width" ::: Word32)
   -> ("dataSize" ::: 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. 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 "" "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)
-> ("dataSize" ::: CSize)
-> ("data" ::: Ptr ())
-> IO Result
vkGetRayTracingShaderGroupHandlesKHR' = FunPtr
  (Ptr Device_T
   -> Pipeline
   -> ("width" ::: Word32)
   -> ("width" ::: Word32)
   -> ("dataSize" ::: CSize)
   -> ("data" ::: Ptr ())
   -> IO Result)
-> Ptr Device_T
-> Pipeline
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> ("dataSize" ::: CSize)
-> ("data" ::: Ptr ())
-> IO Result
mkVkGetRayTracingShaderGroupHandlesKHR FunPtr
  (Ptr Device_T
   -> Pipeline
   -> ("width" ::: Word32)
   -> ("width" ::: Word32)
   -> ("dataSize" ::: CSize)
   -> ("data" ::: Ptr ())
   -> IO Result)
vkGetRayTracingShaderGroupHandlesKHRPtr
  Result
r <- String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent "vkGetRayTracingShaderGroupHandlesKHR" (Ptr Device_T
-> Pipeline
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> ("dataSize" ::: CSize)
-> ("data" ::: Ptr ())
-> IO Result
vkGetRayTracingShaderGroupHandlesKHR' (Device -> Ptr Device_T
deviceHandle (Device
device)) (Pipeline
pipeline) ("width" ::: Word32
firstGroup) ("width" ::: Word32
groupCount) (("dataSize" ::: Word64) -> "dataSize" ::: CSize
CSize ("dataSize" ::: Word64
dataSize)) ("data" ::: Ptr ()
data'))
  Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Result
r Result -> Result -> Bool
forall a. Ord a => a -> a -> Bool
< Result
SUCCESS) (VulkanException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (Result -> VulkanException
VulkanException Result
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 ray tracing
-- capture replay pipeline shader group handles
--
-- == 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'
--
-- == 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_HOST_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
--
-- = See Also
--
-- '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 a user-allocated buffer where the results will
                                                   -- be written.
                                                   ("data" ::: Ptr ())
                                                -> io ()
getRayTracingCaptureReplayShaderGroupHandlesKHR :: Device
-> Pipeline
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> ("dataSize" ::: Word64)
-> ("data" ::: Ptr ())
-> io ()
getRayTracingCaptureReplayShaderGroupHandlesKHR device :: Device
device pipeline :: Pipeline
pipeline firstGroup :: "width" ::: Word32
firstGroup groupCount :: "width" ::: Word32
groupCount dataSize :: "dataSize" ::: Word64
dataSize data' :: "data" ::: Ptr ()
data' = IO () -> io ()
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)
   -> ("dataSize" ::: CSize)
   -> ("data" ::: Ptr ())
   -> IO Result)
vkGetRayTracingCaptureReplayShaderGroupHandlesKHRPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> Pipeline
      -> ("width" ::: Word32)
      -> ("width" ::: Word32)
      -> ("dataSize" ::: CSize)
      -> ("data" ::: Ptr ())
      -> IO Result)
pVkGetRayTracingCaptureReplayShaderGroupHandlesKHR (Device -> DeviceCmds
deviceCmds (Device
device :: Device))
  Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> Pipeline
   -> ("width" ::: Word32)
   -> ("width" ::: Word32)
   -> ("dataSize" ::: CSize)
   -> ("data" ::: Ptr ())
   -> IO Result)
vkGetRayTracingCaptureReplayShaderGroupHandlesKHRPtr FunPtr
  (Ptr Device_T
   -> Pipeline
   -> ("width" ::: Word32)
   -> ("width" ::: Word32)
   -> ("dataSize" ::: CSize)
   -> ("data" ::: Ptr ())
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> Pipeline
      -> ("width" ::: Word32)
      -> ("width" ::: Word32)
      -> ("dataSize" ::: CSize)
      -> ("data" ::: Ptr ())
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> Pipeline
   -> ("width" ::: Word32)
   -> ("width" ::: Word32)
   -> ("dataSize" ::: 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. 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 "" "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)
-> ("dataSize" ::: CSize)
-> ("data" ::: Ptr ())
-> IO Result
vkGetRayTracingCaptureReplayShaderGroupHandlesKHR' = FunPtr
  (Ptr Device_T
   -> Pipeline
   -> ("width" ::: Word32)
   -> ("width" ::: Word32)
   -> ("dataSize" ::: CSize)
   -> ("data" ::: Ptr ())
   -> IO Result)
-> Ptr Device_T
-> Pipeline
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> ("dataSize" ::: CSize)
-> ("data" ::: Ptr ())
-> IO Result
mkVkGetRayTracingCaptureReplayShaderGroupHandlesKHR FunPtr
  (Ptr Device_T
   -> Pipeline
   -> ("width" ::: Word32)
   -> ("width" ::: Word32)
   -> ("dataSize" ::: CSize)
   -> ("data" ::: Ptr ())
   -> IO Result)
vkGetRayTracingCaptureReplayShaderGroupHandlesKHRPtr
  Result
r <- String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR" (Ptr Device_T
-> Pipeline
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> ("dataSize" ::: CSize)
-> ("data" ::: Ptr ())
-> IO Result
vkGetRayTracingCaptureReplayShaderGroupHandlesKHR' (Device -> Ptr Device_T
deviceHandle (Device
device)) (Pipeline
pipeline) ("width" ::: Word32
firstGroup) ("width" ::: Word32
groupCount) (("dataSize" ::: Word64) -> "dataSize" ::: CSize
CSize ("dataSize" ::: Word64
dataSize)) ("data" ::: Ptr ()
data'))
  Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Result
r Result -> Result -> Bool
forall a. Ord a => a -> a -> Bool
< Result
SUCCESS) (VulkanException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (Result -> VulkanException
VulkanException Result
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 re-use the shader
-- group handles provided in
-- 'RayTracingShaderGroupCreateInfoKHR'::@pShaderGroupCaptureReplayHandle@
-- when
-- 'PhysicalDeviceRayTracingPipelineFeaturesKHR'::@rayTracingPipelineShaderGroupHandleCaptureReplay@
-- is enabled.
--
-- == Valid Usage
--
-- -   #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.Core11.Promoted_From_VK_KHR_device_group.PIPELINE_CREATE_DISPATCH_BASE'
--     flag
--
-- -   #VUID-vkCreateRayTracingPipelinesKHR-pipelineCache-02903# If
--     @pipelineCache@ was created with
--     'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT',
--     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-03677# If
--     @deferredOperation@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
--     it /must/ be a valid
--     'Vulkan.Extensions.Handles.DeferredOperationKHR' object
--
-- -   #VUID-vkCreateRayTracingPipelinesKHR-deferredOperation-03678# Any
--     previous deferred operation that was associated with
--     @deferredOperation@ /must/ be complete
--
-- -   #VUID-vkCreateRayTracingPipelinesKHR-rayTracingPipeline-03586# The
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/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_EXT'
--
-- == 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.SUCCESS'
--
--     -   'Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR'
--
--     -   'Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR'
--
--     -   'Vulkan.Core10.Enums.Result.PIPELINE_COMPILE_REQUIRED_EXT'
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS'
--
-- = See Also
--
-- '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 an optional
                                -- 'Vulkan.Extensions.Handles.DeferredOperationKHR' to
                                -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#deferred-host-operations-requesting request deferral>
                                -- for this command.
                                DeferredOperationKHR
                             -> -- | @pipelineCache@ is either 'Vulkan.Core10.APIConstants.NULL_HANDLE',
                                -- indicating that pipeline caching is disabled, or the handle of a valid
                                -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-cache pipeline cache>
                                -- object, in which case use of that cache is enabled for the duration of
                                -- the 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://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
                                -- chapter.
                                ("allocator" ::: Maybe AllocationCallbacks)
                             -> io (Result, ("pipelines" ::: Vector Pipeline))
createRayTracingPipelinesKHR :: Device
-> DeferredOperationKHR
-> PipelineCache
-> ("createInfos"
    ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR))
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io (Result, "pipelines" ::: Vector Pipeline)
createRayTracingPipelinesKHR device :: Device
device deferredOperation :: DeferredOperationKHR
deferredOperation pipelineCache :: PipelineCache
pipelineCache createInfos :: "createInfos"
::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR)
createInfos allocator :: "allocator" ::: Maybe AllocationCallbacks
allocator = IO (Result, "pipelines" ::: Vector Pipeline)
-> io (Result, "pipelines" ::: Vector Pipeline)
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)
   -> ("pCreateInfos"
       ::: Ptr (SomeStruct RayTracingPipelineCreateInfoKHR))
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pPipelines" ::: Ptr Pipeline)
   -> IO Result)
vkCreateRayTracingPipelinesKHRPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> DeferredOperationKHR
      -> PipelineCache
      -> ("width" ::: Word32)
      -> ("pCreateInfos"
          ::: Ptr (SomeStruct RayTracingPipelineCreateInfoKHR))
      -> ("pAllocator" ::: Ptr AllocationCallbacks)
      -> ("pPipelines" ::: Ptr Pipeline)
      -> IO Result)
pVkCreateRayTracingPipelinesKHR (Device -> DeviceCmds
deviceCmds (Device
device :: Device))
  IO () -> ContT (Result, "pipelines" ::: Vector Pipeline) IO ()
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)
   -> ("pCreateInfos"
       ::: Ptr (SomeStruct RayTracingPipelineCreateInfoKHR))
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pPipelines" ::: Ptr Pipeline)
   -> IO Result)
vkCreateRayTracingPipelinesKHRPtr FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> PipelineCache
   -> ("width" ::: Word32)
   -> ("pCreateInfos"
       ::: Ptr (SomeStruct RayTracingPipelineCreateInfoKHR))
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pPipelines" ::: Ptr Pipeline)
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> DeferredOperationKHR
      -> PipelineCache
      -> ("width" ::: Word32)
      -> ("pCreateInfos"
          ::: Ptr (SomeStruct RayTracingPipelineCreateInfoKHR))
      -> ("pAllocator" ::: Ptr AllocationCallbacks)
      -> ("pPipelines" ::: Ptr Pipeline)
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> PipelineCache
   -> ("width" ::: Word32)
   -> ("pCreateInfos"
       ::: Ptr (SomeStruct RayTracingPipelineCreateInfoKHR))
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pPipelines" ::: 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. 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 "" "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)
-> ("pCreateInfos"
    ::: Ptr (SomeStruct RayTracingPipelineCreateInfoKHR))
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ("pPipelines" ::: Ptr Pipeline)
-> IO Result
vkCreateRayTracingPipelinesKHR' = FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> PipelineCache
   -> ("width" ::: Word32)
   -> ("pCreateInfos"
       ::: Ptr (SomeStruct RayTracingPipelineCreateInfoKHR))
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pPipelines" ::: Ptr Pipeline)
   -> IO Result)
-> Ptr Device_T
-> DeferredOperationKHR
-> PipelineCache
-> ("width" ::: Word32)
-> ("pCreateInfos"
    ::: Ptr (SomeStruct RayTracingPipelineCreateInfoKHR))
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ("pPipelines" ::: Ptr Pipeline)
-> IO Result
mkVkCreateRayTracingPipelinesKHR FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> PipelineCache
   -> ("width" ::: Word32)
   -> ("pCreateInfos"
       ::: Ptr (SomeStruct RayTracingPipelineCreateInfoKHR))
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pPipelines" ::: Ptr Pipeline)
   -> IO Result)
vkCreateRayTracingPipelinesKHRPtr
  Ptr (RayTracingPipelineCreateInfoKHR Any)
pPCreateInfos <- ((Ptr (RayTracingPipelineCreateInfoKHR Any)
  -> IO (Result, "pipelines" ::: Vector Pipeline))
 -> IO (Result, "pipelines" ::: Vector Pipeline))
-> ContT
     (Result, "pipelines" ::: Vector Pipeline)
     IO
     (Ptr (RayTracingPipelineCreateInfoKHR Any))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (RayTracingPipelineCreateInfoKHR Any)
   -> IO (Result, "pipelines" ::: Vector Pipeline))
  -> IO (Result, "pipelines" ::: Vector Pipeline))
 -> ContT
      (Result, "pipelines" ::: Vector Pipeline)
      IO
      (Ptr (RayTracingPipelineCreateInfoKHR Any)))
-> ((Ptr (RayTracingPipelineCreateInfoKHR Any)
     -> IO (Result, "pipelines" ::: Vector Pipeline))
    -> IO (Result, "pipelines" ::: Vector Pipeline))
-> ContT
     (Result, "pipelines" ::: Vector Pipeline)
     IO
     (Ptr (RayTracingPipelineCreateInfoKHR Any))
forall a b. (a -> b) -> a -> b
$ Int
-> Int
-> (Ptr (RayTracingPipelineCreateInfoKHR Any)
    -> IO (Result, "pipelines" ::: Vector Pipeline))
-> IO (Result, "pipelines" ::: Vector Pipeline)
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned @(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
* 104) 8
  (Int
 -> SomeStruct RayTracingPipelineCreateInfoKHR
 -> ContT (Result, "pipelines" ::: Vector Pipeline) IO ())
-> ("createInfos"
    ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR))
-> ContT (Result, "pipelines" ::: Vector Pipeline) IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\i :: Int
i e :: 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
$ ("pCreateInfos"
 ::: 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 Any)
-> "pCreateInfos"
   ::: Ptr (SomeStruct RayTracingPipelineCreateInfoKHR)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (RayTracingPipelineCreateInfoKHR Any)
pPCreateInfos Ptr (RayTracingPipelineCreateInfoKHR Any)
-> Int -> Ptr (RayTracingPipelineCreateInfoKHR _)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (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"
::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR)
createInfos)
  "pAllocator" ::: Ptr AllocationCallbacks
pAllocator <- case ("allocator" ::: Maybe AllocationCallbacks
allocator) of
    Nothing -> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ContT
     (Result, "pipelines" ::: Vector Pipeline)
     IO
     ("pAllocator" ::: Ptr AllocationCallbacks)
forall (f :: * -> *) a. Applicative f => a -> f a
pure "pAllocator" ::: Ptr AllocationCallbacks
forall a. Ptr a
nullPtr
    Just j :: AllocationCallbacks
j -> ((("pAllocator" ::: Ptr AllocationCallbacks)
  -> IO (Result, "pipelines" ::: Vector Pipeline))
 -> IO (Result, "pipelines" ::: Vector Pipeline))
-> ContT
     (Result, "pipelines" ::: Vector Pipeline)
     IO
     ("pAllocator" ::: Ptr AllocationCallbacks)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO (Result, "pipelines" ::: Vector Pipeline))
  -> IO (Result, "pipelines" ::: Vector Pipeline))
 -> ContT
      (Result, "pipelines" ::: Vector Pipeline)
      IO
      ("pAllocator" ::: Ptr AllocationCallbacks))
-> ((("pAllocator" ::: Ptr AllocationCallbacks)
     -> IO (Result, "pipelines" ::: Vector Pipeline))
    -> IO (Result, "pipelines" ::: Vector Pipeline))
-> ContT
     (Result, "pipelines" ::: Vector Pipeline)
     IO
     ("pAllocator" ::: Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks
-> (("pAllocator" ::: Ptr AllocationCallbacks)
    -> IO (Result, "pipelines" ::: Vector Pipeline))
-> IO (Result, "pipelines" ::: Vector Pipeline)
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
  "pPipelines" ::: Ptr Pipeline
pPPipelines <- ((("pPipelines" ::: Ptr Pipeline)
  -> IO (Result, "pipelines" ::: Vector Pipeline))
 -> IO (Result, "pipelines" ::: Vector Pipeline))
-> ContT
     (Result, "pipelines" ::: Vector Pipeline)
     IO
     ("pPipelines" ::: Ptr Pipeline)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pPipelines" ::: Ptr Pipeline)
   -> IO (Result, "pipelines" ::: Vector Pipeline))
  -> IO (Result, "pipelines" ::: Vector Pipeline))
 -> ContT
      (Result, "pipelines" ::: Vector Pipeline)
      IO
      ("pPipelines" ::: Ptr Pipeline))
-> ((("pPipelines" ::: Ptr Pipeline)
     -> IO (Result, "pipelines" ::: Vector Pipeline))
    -> IO (Result, "pipelines" ::: Vector Pipeline))
-> ContT
     (Result, "pipelines" ::: Vector Pipeline)
     IO
     ("pPipelines" ::: Ptr Pipeline)
forall a b. (a -> b) -> a -> b
$ IO ("pPipelines" ::: Ptr Pipeline)
-> (("pPipelines" ::: Ptr Pipeline) -> IO ())
-> (("pPipelines" ::: Ptr Pipeline)
    -> IO (Result, "pipelines" ::: Vector Pipeline))
-> IO (Result, "pipelines" ::: Vector Pipeline)
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (Int -> IO ("pPipelines" ::: Ptr Pipeline)
forall a. Int -> IO (Ptr a)
callocBytes @Pipeline ((("width" ::: Word32) -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Int -> "width" ::: Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (("createInfos"
 ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR))
-> Int
forall a. Vector a -> Int
Data.Vector.length (("createInfos"
  ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR))
 -> Int)
-> ("createInfos"
    ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR))
-> Int
forall a b. (a -> b) -> a -> b
$ ("createInfos"
::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR)
createInfos)) :: Word32))) Int -> Int -> Int
forall a. Num a => a -> a -> a
* 8)) ("pPipelines" ::: Ptr Pipeline) -> IO ()
forall a. Ptr a -> IO ()
free
  Result
r <- IO Result
-> ContT (Result, "pipelines" ::: Vector Pipeline) IO Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result
 -> ContT (Result, "pipelines" ::: Vector Pipeline) IO Result)
-> IO Result
-> ContT (Result, "pipelines" ::: Vector Pipeline) IO Result
forall a b. (a -> b) -> a -> b
$ String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent "vkCreateRayTracingPipelinesKHR" (Ptr Device_T
-> DeferredOperationKHR
-> PipelineCache
-> ("width" ::: Word32)
-> ("pCreateInfos"
    ::: Ptr (SomeStruct RayTracingPipelineCreateInfoKHR))
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ("pPipelines" ::: Ptr Pipeline)
-> IO Result
vkCreateRayTracingPipelinesKHR' (Device -> Ptr Device_T
deviceHandle (Device
device)) (DeferredOperationKHR
deferredOperation) (PipelineCache
pipelineCache) ((Int -> "width" ::: Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (("createInfos"
 ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR))
-> Int
forall a. Vector a -> Int
Data.Vector.length (("createInfos"
  ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR))
 -> Int)
-> ("createInfos"
    ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR))
-> Int
forall a b. (a -> b) -> a -> b
$ ("createInfos"
::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR)
createInfos)) :: Word32)) (Ptr (RayTracingPipelineCreateInfoKHR Any)
-> "pCreateInfos"
   ::: Ptr (SomeStruct RayTracingPipelineCreateInfoKHR)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (RayTracingPipelineCreateInfoKHR Any)
pPCreateInfos)) "pAllocator" ::: Ptr AllocationCallbacks
pAllocator ("pPipelines" ::: Ptr Pipeline
pPPipelines))
  IO () -> ContT (Result, "pipelines" ::: Vector Pipeline) IO ()
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 ()
when (Result
r Result -> Result -> Bool
forall a. Ord a => a -> a -> Bool
< Result
SUCCESS) (VulkanException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (Result -> VulkanException
VulkanException Result
r))
  "pipelines" ::: Vector Pipeline
pPipelines <- IO ("pipelines" ::: Vector Pipeline)
-> ContT
     (Result, "pipelines" ::: Vector Pipeline)
     IO
     ("pipelines" ::: Vector Pipeline)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ("pipelines" ::: Vector Pipeline)
 -> ContT
      (Result, "pipelines" ::: Vector Pipeline)
      IO
      ("pipelines" ::: Vector Pipeline))
-> IO ("pipelines" ::: Vector Pipeline)
-> ContT
     (Result, "pipelines" ::: Vector Pipeline)
     IO
     ("pipelines" ::: Vector Pipeline)
forall a b. (a -> b) -> a -> b
$ Int -> (Int -> IO Pipeline) -> IO ("pipelines" ::: Vector Pipeline)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (("width" ::: Word32) -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Int -> "width" ::: Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (("createInfos"
 ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR))
-> Int
forall a. Vector a -> Int
Data.Vector.length (("createInfos"
  ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR))
 -> Int)
-> ("createInfos"
    ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR))
-> Int
forall a b. (a -> b) -> a -> b
$ ("createInfos"
::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR)
createInfos)) :: Word32))) (\i :: Int
i -> ("pPipelines" ::: Ptr Pipeline) -> IO Pipeline
forall a. Storable a => Ptr a -> IO a
peek @Pipeline (("pPipelines" ::: Ptr Pipeline
pPPipelines ("pPipelines" ::: Ptr Pipeline)
-> Int -> "pPipelines" ::: Ptr Pipeline
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Pipeline)))
  (Result, "pipelines" ::: Vector Pipeline)
-> ContT
     (Result, "pipelines" ::: Vector Pipeline)
     IO
     (Result, "pipelines" ::: Vector Pipeline)
forall (f :: * -> *) a. Applicative f => a -> f a
pure ((Result, "pipelines" ::: Vector Pipeline)
 -> ContT
      (Result, "pipelines" ::: Vector Pipeline)
      IO
      (Result, "pipelines" ::: Vector Pipeline))
-> (Result, "pipelines" ::: Vector Pipeline)
-> ContT
     (Result, "pipelines" ::: Vector Pipeline)
     IO
     (Result, "pipelines" ::: Vector Pipeline)
forall a b. (a -> b) -> a -> b
$ (Result
r, "pipelines" ::: Vector Pipeline
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 :: 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
device deferredOperation :: DeferredOperationKHR
deferredOperation pipelineCache :: PipelineCache
pipelineCache pCreateInfos :: "createInfos"
::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR)
pCreateInfos pAllocator :: "allocator" ::: Maybe AllocationCallbacks
pAllocator b :: 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)
    (\(_, o1 :: "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_ (\o1Elem :: 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' 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-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-02692# If a
--     'Vulkan.Core10.Handles.ImageView' is sampled with
--     'Vulkan.Extensions.VK_EXT_filter_cubic.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.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-filterCubic-02694# Any
--     'Vulkan.Core10.Handles.ImageView' being sampled with
--     'Vulkan.Extensions.VK_EXT_filter_cubic.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.Extensions.VK_EXT_filter_cubic.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-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-None-02697# For each set /n/ that is
--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the
--     pipeline bind point used by this command, 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', as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-02698# For each push constant
--     that is statically used by the 'Vulkan.Core10.Handles.Pipeline'
--     bound to the pipeline bind point used by this command, a push
--     constant value /must/ have been set for the same pipeline bind
--     point, with a 'Vulkan.Core10.Handles.PipelineLayout' that is
--     compatible for push constants, with the
--     'Vulkan.Core10.Handles.PipelineLayout' used to create the current
--     'Vulkan.Core10.Handles.Pipeline', as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-02699# Descriptors in each
--     bound descriptor set, specified via
--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/
--     be valid if they are statically used by the
--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
--     used by this command
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-02700# A valid pipeline /must/
--     be bound to the pipeline bind point used by this command
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02701# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command requires any dynamic state, that state
--     /must/ have been set for @commandBuffer@, and done so after any
--     previously bound pipeline with the corresponding state not specified
--     as dynamic
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-02859# There /must/ not have
--     been any calls to dynamic state setting commands for any state not
--     specified as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object
--     bound to the pipeline bind point used by this command, since that
--     pipeline was bound
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-02702# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command accesses a
--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
--     coordinates, that sampler /must/ not be used to sample from any
--     'Vulkan.Core10.Handles.Image' with a
--     'Vulkan.Core10.Handles.ImageView' of the type
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
--     any shader stage
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-02703# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command accesses a
--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
--     coordinates, that sampler /must/ not be used with any of the SPIR-V
--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-02704# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command accesses a
--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
--     coordinates, that sampler /must/ not be used with any of the SPIR-V
--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
--     includes a LOD bias or any offset values, in any shader stage
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-02705# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
--     object bound 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-None-02706# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>
--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'
--     object bound 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, any resource
--     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the
--     pipeline bind point used by this command /must/ not be a protected
--     resource
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-04115# If a
--     'Vulkan.Core10.Handles.ImageView' 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-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
--     image 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 channel 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 channel 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 channel 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 channel 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-None-03429# Any shader group handle
--     referenced by this call /must/ have been queried from the currently
--     bound ray tracing shader pipeline
--
-- -   #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-pRayGenShaderBindingTable-03680# If
--     the buffer from which @pRayGenShaderBindingTable->deviceAddress@ was
--     queried is non-sparse then it /must/ be bound completely and
--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-pRayGenShaderBindingTable-03681# The
--     buffer from which the @pRayGenShaderBindingTable->deviceAddress@ is
--     queried /must/ have been created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR'
--     usage flag
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-pRayGenShaderBindingTable-03682#
--     @pRayGenShaderBindingTable->deviceAddress@ /must/ be a multiple of
--     'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupBaseAlignment@
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-size-04023# The @size@ member of
--     @pRayGenShaderBindingTable@ /must/ be equal to its @stride@ member
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-pMissShaderBindingTable-03683# If
--     the buffer from which @pMissShaderBindingTable->deviceAddress@ was
--     queried is non-sparse then it /must/ be bound completely and
--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-pMissShaderBindingTable-03684# The
--     buffer from which the @pMissShaderBindingTable->deviceAddress@ is
--     queried /must/ have been created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR'
--     usage flag
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-pMissShaderBindingTable-03685#
--     @pMissShaderBindingTable->deviceAddress@ /must/ be a multiple of
--     'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupBaseAlignment@
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-stride-03686# The @stride@ member of
--     @pMissShaderBindingTable@ /must/ be a multiple of
--     'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupHandleAlignment@
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-stride-04029# The @stride@ member of
--     @pMissShaderBindingTable@ /must/ be less than or equal to
--     'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxShaderGroupStride@
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-pHitShaderBindingTable-03687# If the
--     buffer from which @pHitShaderBindingTable->deviceAddress@ was
--     queried is non-sparse then it /must/ be bound completely and
--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-pHitShaderBindingTable-03688# The
--     buffer from which the @pHitShaderBindingTable->deviceAddress@ is
--     queried /must/ have been created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR'
--     usage flag
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-pHitShaderBindingTable-03689#
--     @pHitShaderBindingTable->deviceAddress@ /must/ be a multiple of
--     'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupBaseAlignment@
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-stride-03690# The @stride@ member of
--     @pHitShaderBindingTable@ /must/ be a multiple of
--     'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupHandleAlignment@
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-stride-04035# The @stride@ member of
--     @pHitShaderBindingTable@ /must/ be less than or equal to
--     'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxShaderGroupStride@
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-pCallableShaderBindingTable-03691#
--     If the buffer from which
--     @pCallableShaderBindingTable->deviceAddress@ was queried is
--     non-sparse then it /must/ be bound completely and contiguously to a
--     single 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-pCallableShaderBindingTable-03692#
--     The buffer from which the
--     @pCallableShaderBindingTable->deviceAddress@ is queried /must/ have
--     been created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR'
--     usage flag
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-pCallableShaderBindingTable-03693#
--     @pCallableShaderBindingTable->deviceAddress@ /must/ be a multiple of
--     'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupBaseAlignment@
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-stride-03694# The @stride@ member of
--     @pCallableShaderBindingTable@ /must/ be a multiple of
--     'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@shaderGroupHandleAlignment@
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-stride-04041# The @stride@ member of
--     @pCallableShaderBindingTable@ /must/ be less than or equal to
--     'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxShaderGroupStride@
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-flags-03695# If the currently 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',
--     the @deviceAddress@ member of @pHitShaderBindingTable@ /must/ not be
--     zero
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-flags-03696# If the currently 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',
--     the @deviceAddress@ member of @pHitShaderBindingTable@ /must/ not be
--     zero
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-flags-03697# If the currently bound
--     ray tracing pipeline was created with @flags@ that included
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR',
--     the @deviceAddress@ member of @pHitShaderBindingTable@ /must/ not be
--     zero
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-flags-03511# If the currently 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 shader group handle identified by @pMissShaderBindingTable@
--     /must/ contain a valid miss shader
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-flags-03512# If the currently 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 @pHitShaderBindingTable@ accessed as a result of this
--     command in order to execute an any-hit shader /must/ not be set to
--     zero
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-flags-03513# If the currently 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 @pHitShaderBindingTable@ accessed as a result of this
--     command in order to execute a closest hit shader /must/ not be set
--     to zero
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-flags-03514# If the currently 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 @pHitShaderBindingTable@ accessed as a result of this
--     command in order to execute an intersection shader /must/ not be set
--     to zero
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-pHitShaderBindingTable-03720# Any
--     hit group entries in @pHitShaderBindingTable@ 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-03721# Any
--     hit group entries in @pHitShaderBindingTable@ 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-03632# If the
--     buffer from which @indirectDeviceAddress@ was queried is non-sparse
--     then it /must/ be bound completely and contiguously to a single
--     'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03633# The
--     buffer from which @indirectDeviceAddress@ was queried /must/ have
--     been created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
--     bit set
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03634#
--     @indirectDeviceAddress@ /must/ be a multiple of @4@
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-03635# @commandBuffer@
--     /must/ not be a protected command buffer
--
-- -   #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
--
-- == 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-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 compute operations
--
-- -   #VUID-vkCmdTraceRaysIndirectKHR-renderpass# This command /must/ only
--     be called outside of a render pass instance
--
-- == 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#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- '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 points to a
                           -- 'TraceRaysIndirectCommandKHR' structure which contains the trace ray
                           -- parameters.
                           ("indirectDeviceAddress" ::: DeviceAddress)
                        -> io ()
cmdTraceRaysIndirectKHR :: CommandBuffer
-> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> ("dataSize" ::: Word64)
-> io ()
cmdTraceRaysIndirectKHR commandBuffer :: CommandBuffer
commandBuffer raygenShaderBindingTable :: "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
raygenShaderBindingTable missShaderBindingTable :: "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
missShaderBindingTable hitShaderBindingTable :: "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
hitShaderBindingTable callableShaderBindingTable :: "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
callableShaderBindingTable indirectDeviceAddress :: "dataSize" ::: Word64
indirectDeviceAddress = IO () -> io ()
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
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("dataSize" ::: Word64)
   -> IO ())
vkCmdTraceRaysIndirectKHRPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("pRaygenShaderBindingTable"
          ::: Ptr
                ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
      -> ("pRaygenShaderBindingTable"
          ::: Ptr
                ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
      -> ("pRaygenShaderBindingTable"
          ::: Ptr
                ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
      -> ("pRaygenShaderBindingTable"
          ::: Ptr
                ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
      -> ("dataSize" ::: Word64)
      -> IO ())
pVkCmdTraceRaysIndirectKHR (CommandBuffer -> DeviceCmds
deviceCmds (CommandBuffer
commandBuffer :: CommandBuffer))
  IO () -> ContT () IO ()
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
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("dataSize" ::: Word64)
   -> IO ())
vkCmdTraceRaysIndirectKHRPtr FunPtr
  (Ptr CommandBuffer_T
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("dataSize" ::: Word64)
   -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("pRaygenShaderBindingTable"
          ::: Ptr
                ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
      -> ("pRaygenShaderBindingTable"
          ::: Ptr
                ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
      -> ("pRaygenShaderBindingTable"
          ::: Ptr
                ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
      -> ("pRaygenShaderBindingTable"
          ::: Ptr
                ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
      -> ("dataSize" ::: Word64)
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: 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. 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 "" "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
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("dataSize" ::: Word64)
-> IO ()
vkCmdTraceRaysIndirectKHR' = FunPtr
  (Ptr CommandBuffer_T
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("dataSize" ::: Word64)
   -> IO ())
-> Ptr CommandBuffer_T
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("dataSize" ::: Word64)
-> IO ()
mkVkCmdTraceRaysIndirectKHR FunPtr
  (Ptr CommandBuffer_T
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> ("dataSize" ::: Word64)
   -> IO ())
vkCmdTraceRaysIndirectKHRPtr
  "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
pRaygenShaderBindingTable <- ((("pRaygenShaderBindingTable"
   ::: Ptr
         ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
  -> IO ())
 -> IO ())
-> ContT
     ()
     IO
     ("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> IO ())
  -> IO ())
 -> ContT
      ()
      IO
      ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)))
-> ((("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
     -> IO ())
    -> IO ())
-> ContT
     ()
     IO
     ("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
forall a b. (a -> b) -> a -> b
$ ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> (("pRaygenShaderBindingTable"
     ::: Ptr
           ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
    -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
raygenShaderBindingTable)
  "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
pMissShaderBindingTable <- ((("pRaygenShaderBindingTable"
   ::: Ptr
         ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
  -> IO ())
 -> IO ())
-> ContT
     ()
     IO
     ("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> IO ())
  -> IO ())
 -> ContT
      ()
      IO
      ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)))
-> ((("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
     -> IO ())
    -> IO ())
-> ContT
     ()
     IO
     ("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
forall a b. (a -> b) -> a -> b
$ ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> (("pRaygenShaderBindingTable"
     ::: Ptr
           ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
    -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
missShaderBindingTable)
  "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
pHitShaderBindingTable <- ((("pRaygenShaderBindingTable"
   ::: Ptr
         ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
  -> IO ())
 -> IO ())
-> ContT
     ()
     IO
     ("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> IO ())
  -> IO ())
 -> ContT
      ()
      IO
      ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)))
-> ((("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
     -> IO ())
    -> IO ())
-> ContT
     ()
     IO
     ("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
forall a b. (a -> b) -> a -> b
$ ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> (("pRaygenShaderBindingTable"
     ::: Ptr
           ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
    -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
hitShaderBindingTable)
  "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
pCallableShaderBindingTable <- ((("pRaygenShaderBindingTable"
   ::: Ptr
         ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
  -> IO ())
 -> IO ())
-> ContT
     ()
     IO
     ("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
   -> IO ())
  -> IO ())
 -> ContT
      ()
      IO
      ("pRaygenShaderBindingTable"
       ::: Ptr
             ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)))
-> ((("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
     -> IO ())
    -> IO ())
-> ContT
     ()
     IO
     ("pRaygenShaderBindingTable"
      ::: Ptr
            ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
forall a b. (a -> b) -> a -> b
$ ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> (("pRaygenShaderBindingTable"
     ::: Ptr
           ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
    -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
callableShaderBindingTable)
  IO () -> ContT () IO ()
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
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent "vkCmdTraceRaysIndirectKHR" (Ptr CommandBuffer_T
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("pRaygenShaderBindingTable"
    ::: Ptr
          ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("dataSize" ::: Word64)
-> IO ()
vkCmdTraceRaysIndirectKHR' (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer)) "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
pRaygenShaderBindingTable "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
pMissShaderBindingTable "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
pHitShaderBindingTable "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
pCallableShaderBindingTable ("dataSize" ::: Word64
indirectDeviceAddress))
  () -> ContT () IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()


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
--
-- '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 :: Device
-> Pipeline
-> ("width" ::: Word32)
-> ShaderGroupShaderKHR
-> io ("dataSize" ::: Word64)
getRayTracingShaderGroupStackSizeKHR device :: Device
device pipeline :: Pipeline
pipeline group :: "width" ::: Word32
group groupShader :: ShaderGroupShaderKHR
groupShader = IO ("dataSize" ::: Word64) -> io ("dataSize" ::: Word64)
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 (Device -> DeviceCmds
deviceCmds (Device
device :: Device))
  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. 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 "" "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
  "dataSize" ::: Word64
r <- String -> IO ("dataSize" ::: Word64) -> IO ("dataSize" ::: Word64)
forall a. String -> IO a -> IO a
traceAroundEvent "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))
  ("dataSize" ::: Word64) -> IO ("dataSize" ::: Word64)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (("dataSize" ::: Word64) -> IO ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ("dataSize" ::: Word64)
forall a b. (a -> b) -> a -> b
$ ("dataSize" ::: Word64
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 dynamic stack size for
-- a ray tracing pipeline
--
-- = Description
--
-- See
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing-pipeline-stack Ray Tracing Pipeline Stack>
-- for more on computing @pipelineStackSize@.
--
-- == 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 compute operations
--
-- -   #VUID-vkCmdSetRayTracingPipelineStackSizeKHR-renderpass# This
--     command /must/ only be called outside of a render pass instance
--
-- == 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#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |
-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- '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 :: CommandBuffer -> ("width" ::: Word32) -> io ()
cmdSetRayTracingPipelineStackSizeKHR commandBuffer :: CommandBuffer
commandBuffer pipelineStackSize :: "width" ::: Word32
pipelineStackSize = IO () -> io ()
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 (CommandBuffer -> DeviceCmds
deviceCmds (CommandBuffer
commandBuffer :: CommandBuffer))
  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. 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 "" "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 "vkCmdSetRayTracingPipelineStackSizeKHR" (Ptr CommandBuffer_T -> ("width" ::: Word32) -> IO ()
vkCmdSetRayTracingPipelineStackSizeKHR' (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer)) ("width" ::: Word32
pipelineStackSize))
  () -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> IO ()) -> () -> IO ()
forall a b. (a -> b) -> a -> b
$ ()


-- | VkRayTracingShaderGroupCreateInfoKHR - Structure specifying shaders in a
-- shader group
--
-- == Valid Usage
--
-- -   #VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03474# If @type@ is
--     'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR' then @generalShader@
--     /must/ be a valid index into
--     'RayTracingPipelineCreateInfoKHR'::@pStages@ 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
--     'RayTracingPipelineCreateInfoKHR'::@pStages@ 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
--     'RayTracingPipelineCreateInfoKHR'::@pStages@ 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
--     'RayTracingPipelineCreateInfoKHR'::@pStages@ 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
--
-- '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 an optional pointer to replay
    -- information for this shader group. 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 :: RayTracingShaderGroupCreateInfoKHR
-> (Ptr RayTracingShaderGroupCreateInfoKHR -> IO b) -> IO b
withCStruct x :: RayTracingShaderGroupCreateInfoKHR
x f :: Ptr RayTracingShaderGroupCreateInfoKHR -> IO b
f = Int
-> Int -> (Ptr RayTracingShaderGroupCreateInfoKHR -> IO b) -> IO b
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned 48 8 ((Ptr RayTracingShaderGroupCreateInfoKHR -> IO b) -> IO b)
-> (Ptr RayTracingShaderGroupCreateInfoKHR -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \p :: Ptr RayTracingShaderGroupCreateInfoKHR
p -> 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 :: Ptr RayTracingShaderGroupCreateInfoKHR
-> RayTracingShaderGroupCreateInfoKHR -> IO b -> IO b
pokeCStruct p :: Ptr RayTracingShaderGroupCreateInfoKHR
p RayTracingShaderGroupCreateInfoKHR{..} f :: 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` 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` 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` 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` 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` 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` 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` 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` 40 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
shaderGroupCaptureReplayHandle)
    IO b
f
  cStructSize :: Int
cStructSize = 48
  cStructAlignment :: Int
cStructAlignment = 8
  pokeZeroCStruct :: Ptr RayTracingShaderGroupCreateInfoKHR -> IO b -> IO b
pokeZeroCStruct p :: Ptr RayTracingShaderGroupCreateInfoKHR
p f :: 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` 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` 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` 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` 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` 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` 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` 32 :: Ptr Word32)) ("width" ::: Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct RayTracingShaderGroupCreateInfoKHR where
  peekCStruct :: Ptr RayTracingShaderGroupCreateInfoKHR
-> IO RayTracingShaderGroupCreateInfoKHR
peekCStruct p :: Ptr RayTracingShaderGroupCreateInfoKHR
p = do
    RayTracingShaderGroupTypeKHR
type' <- Ptr RayTracingShaderGroupTypeKHR -> IO RayTracingShaderGroupTypeKHR
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` 16 :: Ptr RayTracingShaderGroupTypeKHR))
    "width" ::: Word32
generalShader <- Ptr ("width" ::: Word32) -> IO ("width" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr RayTracingShaderGroupCreateInfoKHR
p Ptr RayTracingShaderGroupCreateInfoKHR
-> Int -> Ptr ("width" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 20 :: Ptr Word32))
    "width" ::: Word32
closestHitShader <- Ptr ("width" ::: Word32) -> IO ("width" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr RayTracingShaderGroupCreateInfoKHR
p Ptr RayTracingShaderGroupCreateInfoKHR
-> Int -> Ptr ("width" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 24 :: Ptr Word32))
    "width" ::: Word32
anyHitShader <- Ptr ("width" ::: Word32) -> IO ("width" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr RayTracingShaderGroupCreateInfoKHR
p Ptr RayTracingShaderGroupCreateInfoKHR
-> Int -> Ptr ("width" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 28 :: Ptr Word32))
    "width" ::: Word32
intersectionShader <- Ptr ("width" ::: Word32) -> IO ("width" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr RayTracingShaderGroupCreateInfoKHR
p Ptr RayTracingShaderGroupCreateInfoKHR
-> Int -> Ptr ("width" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 32 :: Ptr Word32))
    "data" ::: Ptr ()
pShaderGroupCaptureReplayHandle <- Ptr ("data" ::: Ptr ()) -> IO ("data" ::: Ptr ())
forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr RayTracingShaderGroupCreateInfoKHR
p Ptr RayTracingShaderGroupCreateInfoKHR
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 40 :: Ptr (Ptr ())))
    RayTracingShaderGroupCreateInfoKHR
-> IO RayTracingShaderGroupCreateInfoKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (RayTracingShaderGroupCreateInfoKHR
 -> IO RayTracingShaderGroupCreateInfoKHR)
-> RayTracingShaderGroupCreateInfoKHR
-> IO RayTracingShaderGroupCreateInfoKHR
forall a b. (a -> b) -> a -> b
$ RayTracingShaderGroupTypeKHR
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> ("data" ::: Ptr ())
-> RayTracingShaderGroupCreateInfoKHR
RayTracingShaderGroupCreateInfoKHR
             RayTracingShaderGroupTypeKHR
type' "width" ::: Word32
generalShader "width" ::: Word32
closestHitShader "width" ::: Word32
anyHitShader "width" ::: Word32
intersectionShader "data" ::: Ptr ()
pShaderGroupCaptureReplayHandle

instance Storable RayTracingShaderGroupCreateInfoKHR where
  sizeOf :: RayTracingShaderGroupCreateInfoKHR -> Int
sizeOf ~RayTracingShaderGroupCreateInfoKHR
_ = 48
  alignment :: RayTracingShaderGroupCreateInfoKHR -> Int
alignment ~RayTracingShaderGroupCreateInfoKHR
_ = 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 :: Ptr RayTracingShaderGroupCreateInfoKHR
ptr poked :: RayTracingShaderGroupCreateInfoKHR
poked = Ptr RayTracingShaderGroupCreateInfoKHR
-> RayTracingShaderGroupCreateInfoKHR -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr RayTracingShaderGroupCreateInfoKHR
ptr RayTracingShaderGroupCreateInfoKHR
poked (() -> IO ()
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://www.khronos.org/registry/vulkan/specs/1.2-extensions/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://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing-pipeline-stack Ray Tracing Pipeline Stack>.
--
-- == Valid Usage
--
-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-flags-03421# If @flags@
--     contains the
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
--     flag, and @basePipelineIndex@ is @-1@, @basePipelineHandle@ /must/
--     be a valid handle to a ray tracing 'Vulkan.Core10.Handles.Pipeline'
--
-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-flags-03422# 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-03423# If @flags@
--     contains the
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
--     flag, and @basePipelineIndex@ is not @-1@, @basePipelineHandle@
--     /must/ be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
--
-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-flags-03424# If @flags@
--     contains the
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
--     flag, and @basePipelineHandle@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/
--     be @-1@
--
-- -   #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-03427# @layout@
--     /must/ be
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency consistent>
--     with all shaders specified in @pStages@
--
-- -   #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-pipelineCreationCacheControl-02905#
--     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_EXT'
--     or
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT'
--
-- -   #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@, its @pLibraryInterface@ member /must/ not be
--     @NULL@
--
-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-pLibraries-03591# Each
--     element of the @pLibraries@ member of @pLibraryInfo@ /must/ have
--     been created with the value of @maxPipelineRayRecursionDepth@ equal
--     to that in this pipeline
--
-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03592# If
--     @pLibraryInfo@ is not @NULL@, each element of its @pLibraries@
--     member /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 the @pLibraries@ member of @libraries@ /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-pLibraryInfo-03595# If the
--     <VK_KHR_pipeline_library.html 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 any 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 any 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://www.khronos.org/registry/vulkan/specs/1.2-extensions/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://www.khronos.org/registry/vulkan/specs/1.2-extensions/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-03598# If @flags@
--     includes
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR',
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/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-03600# If
--     @pLibraryInfo@ is not @NULL@ and its @libraryCount@ is @0@,
--     @stageCount@ /must/ not be @0@
--
-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03601# If
--     @pLibraryInfo@ is not @NULL@ and 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'
--
-- == 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# @pNext@ /must/
--     be @NULL@ or a pointer to a valid instance of
--     'Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT'
--
-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-sType-unique# The @sType@
--     value of each struct in the @pNext@ chain /must/ be unique
--
-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-flags-parameter# @flags@
--     /must/ be a valid combination of
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
--     values
--
-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-pStages-parameter# If
--     @stageCount@ is not @0@, @pStages@ /must/ be a valid pointer to an
--     array of @stageCount@ valid
--     'Vulkan.Core10.Pipeline.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.Pipeline.PipelineDynamicStateCreateInfo' structure
--
-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-layout-parameter# @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
--
-- 'Vulkan.Core10.Handles.Pipeline',
-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlags',
-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo',
-- 'Vulkan.Core10.Handles.PipelineLayout',
-- 'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR',
-- 'Vulkan.Core10.Pipeline.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.
    RayTracingPipelineCreateInfoKHR es -> Chain es
next :: Chain es
  , -- | @flags@ is a bitmask of
    -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
    -- specifying how the pipeline will be generated.
    RayTracingPipelineCreateInfoKHR es -> PipelineCreateFlags
flags :: PipelineCreateFlags
  , -- | @pStages@ is a pointer to an array of @stageCount@
    -- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo' structures
    -- describing the set of the shader stages to be included in the ray
    -- tracing pipeline.
    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.
    RayTracingPipelineCreateInfoKHR es
-> Vector RayTracingShaderGroupCreateInfoKHR
groups :: Vector RayTracingShaderGroupCreateInfoKHR
  , -- | @maxPipelineRayRecursionDepth@ is the
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing-recursion-depth maximum recursion depth>
    -- of shaders executed by this pipeline.
    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.
    RayTracingPipelineCreateInfoKHR es
-> Maybe PipelineLibraryCreateInfoKHR
libraryInfo :: Maybe PipelineLibraryCreateInfoKHR
  , -- | @pLibraryInterface@ is a pointer to a
    -- 'RayTracingPipelineInterfaceCreateInfoKHR' structure defining additional
    -- information when using pipeline libraries.
    RayTracingPipelineCreateInfoKHR es
-> Maybe RayTracingPipelineInterfaceCreateInfoKHR
libraryInterface :: Maybe RayTracingPipelineInterfaceCreateInfoKHR
  , -- | @pDynamicState@ is a pointer to a
    -- 'Vulkan.Core10.Pipeline.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.
    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.
    RayTracingPipelineCreateInfoKHR es -> PipelineLayout
layout :: PipelineLayout
  , -- | @basePipelineHandle@ is a pipeline to derive from.
    RayTracingPipelineCreateInfoKHR es -> Pipeline
basePipelineHandle :: Pipeline
  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use
    -- as a pipeline to derive from.
    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 = "RayTracingPipelineCreateInfoKHR"
  setNext :: RayTracingPipelineCreateInfoKHR ds
-> Chain es -> RayTracingPipelineCreateInfoKHR es
setNext x :: RayTracingPipelineCreateInfoKHR ds
x next :: Chain es
next = RayTracingPipelineCreateInfoKHR ds
x{$sel:next:RayTracingPipelineCreateInfoKHR :: Chain es
next = Chain es
next}
  getNext :: RayTracingPipelineCreateInfoKHR es -> Chain es
getNext RayTracingPipelineCreateInfoKHR{..} = Chain es
next
  extends :: forall e b proxy. Typeable e => proxy e -> (Extends RayTracingPipelineCreateInfoKHR e => b) -> Maybe b
  extends :: proxy e
-> (Extends RayTracingPipelineCreateInfoKHR e => b) -> Maybe b
extends _ f :: Extends RayTracingPipelineCreateInfoKHR e => b
f
    | Just Refl <- (Typeable e, Typeable PipelineCreationFeedbackCreateInfoEXT) =>
Maybe (e :~: PipelineCreationFeedbackCreateInfoEXT)
forall k (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
eqT @e @PipelineCreationFeedbackCreateInfoEXT = 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 :: RayTracingPipelineCreateInfoKHR es
-> (Ptr (RayTracingPipelineCreateInfoKHR es) -> IO b) -> IO b
withCStruct x :: RayTracingPipelineCreateInfoKHR es
x f :: Ptr (RayTracingPipelineCreateInfoKHR es) -> IO b
f = Int
-> Int
-> (Ptr (RayTracingPipelineCreateInfoKHR es) -> IO b)
-> IO b
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned 104 8 ((Ptr (RayTracingPipelineCreateInfoKHR es) -> IO b) -> IO b)
-> (Ptr (RayTracingPipelineCreateInfoKHR es) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \p :: Ptr (RayTracingPipelineCreateInfoKHR es)
p -> 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 :: Ptr (RayTracingPipelineCreateInfoKHR es)
-> RayTracingPipelineCreateInfoKHR es -> IO b -> IO b
pokeCStruct p :: Ptr (RayTracingPipelineCreateInfoKHR es)
p RayTracingPipelineCreateInfoKHR{..} f :: 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 (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` 0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR)
    "data" ::: Ptr ()
pNext'' <- (Ptr (Chain es) -> "data" ::: Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO ("data" ::: Ptr ())
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
withChain (Chain es
next)
    IO () -> ContT b IO ()
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 ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 8 :: Ptr (Ptr ()))) "data" ::: Ptr ()
pNext''
    IO () -> ContT b IO ()
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 PipelineCreateFlags -> PipelineCreateFlags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr PipelineCreateFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr PipelineCreateFlags)) (PipelineCreateFlags
flags)
    IO () -> ContT b IO ()
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 ("width" ::: Word32) -> ("width" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr ("width" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 20 :: Ptr Word32)) ((Int -> "width" ::: Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector (SomeStruct PipelineShaderStageCreateInfo) -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector (SomeStruct PipelineShaderStageCreateInfo) -> Int)
-> Vector (SomeStruct PipelineShaderStageCreateInfo) -> Int
forall a b. (a -> b) -> a -> b
$ (Vector (SomeStruct PipelineShaderStageCreateInfo)
stages)) :: Word32))
    Ptr (PipelineShaderStageCreateInfo Any)
pPStages' <- ((Ptr (PipelineShaderStageCreateInfo Any) -> IO b) -> IO b)
-> ContT b IO (Ptr (PipelineShaderStageCreateInfo Any))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (PipelineShaderStageCreateInfo Any) -> IO b) -> IO b)
 -> ContT b IO (Ptr (PipelineShaderStageCreateInfo Any)))
-> ((Ptr (PipelineShaderStageCreateInfo Any) -> IO b) -> IO b)
-> ContT b IO (Ptr (PipelineShaderStageCreateInfo Any))
forall a b. (a -> b) -> a -> b
$ Int
-> Int -> (Ptr (PipelineShaderStageCreateInfo Any) -> IO b) -> IO b
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Vector (SomeStruct PipelineShaderStageCreateInfo) -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector (SomeStruct PipelineShaderStageCreateInfo)
stages)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* 48) 8
    (Int -> SomeStruct PipelineShaderStageCreateInfo -> ContT b IO ())
-> Vector (SomeStruct PipelineShaderStageCreateInfo)
-> ContT b IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\i :: Int
i e :: 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 Any)
-> Ptr (SomeStruct PipelineShaderStageCreateInfo)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (PipelineShaderStageCreateInfo Any)
pPStages' Ptr (PipelineShaderStageCreateInfo Any)
-> Int -> Ptr (PipelineShaderStageCreateInfo _)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (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
$ ())) (Vector (SomeStruct PipelineShaderStageCreateInfo)
stages)
    IO () -> ContT b IO ()
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 (Ptr (PipelineShaderStageCreateInfo Any))
-> Ptr (PipelineShaderStageCreateInfo Any) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr (Ptr (PipelineShaderStageCreateInfo _))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (Ptr (PipelineShaderStageCreateInfo Any)
pPStages')
    IO () -> ContT b IO ()
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 ("width" ::: Word32) -> ("width" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr ("width" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 32 :: Ptr Word32)) ((Int -> "width" ::: Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector RayTracingShaderGroupCreateInfoKHR -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector RayTracingShaderGroupCreateInfoKHR -> Int)
-> Vector RayTracingShaderGroupCreateInfoKHR -> Int
forall a b. (a -> b) -> a -> b
$ (Vector RayTracingShaderGroupCreateInfoKHR
groups)) :: Word32))
    Ptr RayTracingShaderGroupCreateInfoKHR
pPGroups' <- ((Ptr RayTracingShaderGroupCreateInfoKHR -> IO b) -> IO b)
-> ContT b IO (Ptr RayTracingShaderGroupCreateInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr RayTracingShaderGroupCreateInfoKHR -> IO b) -> IO b)
 -> ContT b IO (Ptr RayTracingShaderGroupCreateInfoKHR))
-> ((Ptr RayTracingShaderGroupCreateInfoKHR -> IO b) -> IO b)
-> ContT b IO (Ptr RayTracingShaderGroupCreateInfoKHR)
forall a b. (a -> b) -> a -> b
$ Int
-> Int -> (Ptr RayTracingShaderGroupCreateInfoKHR -> IO b) -> IO b
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned @RayTracingShaderGroupCreateInfoKHR ((Vector RayTracingShaderGroupCreateInfoKHR -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector RayTracingShaderGroupCreateInfoKHR
groups)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* 48) 8
    IO () -> ContT b IO ()
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
$ (Int -> RayTracingShaderGroupCreateInfoKHR -> IO ())
-> Vector RayTracingShaderGroupCreateInfoKHR -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\i :: Int
i e :: 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` (48 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr RayTracingShaderGroupCreateInfoKHR) (RayTracingShaderGroupCreateInfoKHR
e)) (Vector RayTracingShaderGroupCreateInfoKHR
groups)
    IO () -> ContT b IO ()
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 (Ptr RayTracingShaderGroupCreateInfoKHR)
-> Ptr RayTracingShaderGroupCreateInfoKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr (Ptr RayTracingShaderGroupCreateInfoKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoKHR))) (Ptr RayTracingShaderGroupCreateInfoKHR
pPGroups')
    IO () -> ContT b IO ()
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 ("width" ::: Word32) -> ("width" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr ("width" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 48 :: Ptr Word32)) ("width" ::: Word32
maxPipelineRayRecursionDepth)
    Ptr PipelineLibraryCreateInfoKHR
pLibraryInfo'' <- case (Maybe PipelineLibraryCreateInfoKHR
libraryInfo) of
      Nothing -> Ptr PipelineLibraryCreateInfoKHR
-> ContT b IO (Ptr PipelineLibraryCreateInfoKHR)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr PipelineLibraryCreateInfoKHR
forall a. Ptr a
nullPtr
      Just j :: 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
withCStruct (PipelineLibraryCreateInfoKHR
j)
    IO () -> ContT b IO ()
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 (Ptr PipelineLibraryCreateInfoKHR)
-> Ptr PipelineLibraryCreateInfoKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr (Ptr PipelineLibraryCreateInfoKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 56 :: Ptr (Ptr PipelineLibraryCreateInfoKHR))) Ptr PipelineLibraryCreateInfoKHR
pLibraryInfo''
    Ptr RayTracingPipelineInterfaceCreateInfoKHR
pLibraryInterface'' <- case (Maybe RayTracingPipelineInterfaceCreateInfoKHR
libraryInterface) of
      Nothing -> Ptr RayTracingPipelineInterfaceCreateInfoKHR
-> ContT b IO (Ptr RayTracingPipelineInterfaceCreateInfoKHR)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr RayTracingPipelineInterfaceCreateInfoKHR
forall a. Ptr a
nullPtr
      Just j :: 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
withCStruct (RayTracingPipelineInterfaceCreateInfoKHR
j)
    IO () -> ContT b IO ()
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 (Ptr RayTracingPipelineInterfaceCreateInfoKHR)
-> Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr (Ptr RayTracingPipelineInterfaceCreateInfoKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 64 :: Ptr (Ptr RayTracingPipelineInterfaceCreateInfoKHR))) Ptr RayTracingPipelineInterfaceCreateInfoKHR
pLibraryInterface''
    Ptr PipelineDynamicStateCreateInfo
pDynamicState'' <- case (Maybe PipelineDynamicStateCreateInfo
dynamicState) of
      Nothing -> Ptr PipelineDynamicStateCreateInfo
-> ContT b IO (Ptr PipelineDynamicStateCreateInfo)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr PipelineDynamicStateCreateInfo
forall a. Ptr a
nullPtr
      Just j :: 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
withCStruct (PipelineDynamicStateCreateInfo
j)
    IO () -> ContT b IO ()
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 (Ptr PipelineDynamicStateCreateInfo)
-> Ptr PipelineDynamicStateCreateInfo -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr (Ptr PipelineDynamicStateCreateInfo)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 72 :: Ptr (Ptr PipelineDynamicStateCreateInfo))) Ptr PipelineDynamicStateCreateInfo
pDynamicState''
    IO () -> ContT b IO ()
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 PipelineLayout -> PipelineLayout -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr PipelineLayout
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 80 :: Ptr PipelineLayout)) (PipelineLayout
layout)
    IO () -> ContT b IO ()
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
$ ("pPipelines" ::: Ptr Pipeline) -> Pipeline -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> "pPipelines" ::: Ptr Pipeline
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 88 :: Ptr Pipeline)) (Pipeline
basePipelineHandle)
    IO () -> ContT b IO ()
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 Int32 -> Int32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es) -> Int -> Ptr Int32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 96 :: Ptr Int32)) (Int32
basePipelineIndex)
    IO b -> ContT b IO b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = 104
  cStructAlignment :: Int
cStructAlignment = 8
  pokeZeroCStruct :: Ptr (RayTracingPipelineCreateInfoKHR es) -> IO b -> IO b
pokeZeroCStruct p :: Ptr (RayTracingPipelineCreateInfoKHR es)
p f :: 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 (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` 0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR)
    "data" ::: Ptr ()
pNext' <- (Ptr (Chain es) -> "data" ::: Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO ("data" ::: Ptr ())
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 a. PokeChain es => (Ptr (Chain es) -> IO a) -> IO a
forall (es :: [*]) a.
PokeChain es =>
(Ptr (Chain es) -> IO a) -> IO a
withZeroChain @es
    IO () -> ContT b IO ()
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 ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 8 :: Ptr (Ptr ()))) "data" ::: Ptr ()
pNext'
    Ptr (PipelineShaderStageCreateInfo Any)
pPStages' <- ((Ptr (PipelineShaderStageCreateInfo Any) -> IO b) -> IO b)
-> ContT b IO (Ptr (PipelineShaderStageCreateInfo Any))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (PipelineShaderStageCreateInfo Any) -> IO b) -> IO b)
 -> ContT b IO (Ptr (PipelineShaderStageCreateInfo Any)))
-> ((Ptr (PipelineShaderStageCreateInfo Any) -> IO b) -> IO b)
-> ContT b IO (Ptr (PipelineShaderStageCreateInfo Any))
forall a b. (a -> b) -> a -> b
$ Int
-> Int -> (Ptr (PipelineShaderStageCreateInfo Any) -> IO b) -> IO b
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Vector Any -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector Any
forall a. Monoid a => a
mempty)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* 48) 8
    (Int -> SomeStruct PipelineShaderStageCreateInfo -> ContT b IO ())
-> Vector (SomeStruct PipelineShaderStageCreateInfo)
-> ContT b IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\i :: Int
i e :: 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 Any)
-> Ptr (SomeStruct PipelineShaderStageCreateInfo)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (PipelineShaderStageCreateInfo Any)
pPStages' Ptr (PipelineShaderStageCreateInfo Any)
-> Int -> Ptr (PipelineShaderStageCreateInfo _)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (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
$ ())) (Vector (SomeStruct PipelineShaderStageCreateInfo)
forall a. Monoid a => a
mempty)
    IO () -> ContT b IO ()
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 (Ptr (PipelineShaderStageCreateInfo Any))
-> Ptr (PipelineShaderStageCreateInfo Any) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr (Ptr (PipelineShaderStageCreateInfo _))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (Ptr (PipelineShaderStageCreateInfo Any)
pPStages')
    Ptr RayTracingShaderGroupCreateInfoKHR
pPGroups' <- ((Ptr RayTracingShaderGroupCreateInfoKHR -> IO b) -> IO b)
-> ContT b IO (Ptr RayTracingShaderGroupCreateInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr RayTracingShaderGroupCreateInfoKHR -> IO b) -> IO b)
 -> ContT b IO (Ptr RayTracingShaderGroupCreateInfoKHR))
-> ((Ptr RayTracingShaderGroupCreateInfoKHR -> IO b) -> IO b)
-> ContT b IO (Ptr RayTracingShaderGroupCreateInfoKHR)
forall a b. (a -> b) -> a -> b
$ Int
-> Int -> (Ptr RayTracingShaderGroupCreateInfoKHR -> IO b) -> IO b
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned @RayTracingShaderGroupCreateInfoKHR ((Vector Any -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector Any
forall a. Monoid a => a
mempty)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* 48) 8
    IO () -> ContT b IO ()
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
$ (Int -> RayTracingShaderGroupCreateInfoKHR -> IO ())
-> Vector RayTracingShaderGroupCreateInfoKHR -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\i :: Int
i e :: 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` (48 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr RayTracingShaderGroupCreateInfoKHR) (RayTracingShaderGroupCreateInfoKHR
e)) (Vector RayTracingShaderGroupCreateInfoKHR
forall a. Monoid a => a
mempty)
    IO () -> ContT b IO ()
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 (Ptr RayTracingShaderGroupCreateInfoKHR)
-> Ptr RayTracingShaderGroupCreateInfoKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr (Ptr RayTracingShaderGroupCreateInfoKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoKHR))) (Ptr RayTracingShaderGroupCreateInfoKHR
pPGroups')
    IO () -> ContT b IO ()
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 ("width" ::: Word32) -> ("width" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr ("width" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 48 :: Ptr Word32)) ("width" ::: Word32
forall a. Zero a => a
zero)
    IO () -> ContT b IO ()
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 PipelineLayout -> PipelineLayout -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr PipelineLayout
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 80 :: Ptr PipelineLayout)) (PipelineLayout
forall a. Zero a => a
zero)
    IO () -> ContT b IO ()
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 Int32 -> Int32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es) -> Int -> Ptr Int32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 96 :: Ptr Int32)) (Int32
forall a. Zero a => a
zero)
    IO b -> ContT b IO b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f

instance (Extendss RayTracingPipelineCreateInfoKHR es, PeekChain es) => FromCStruct (RayTracingPipelineCreateInfoKHR es) where
  peekCStruct :: Ptr (RayTracingPipelineCreateInfoKHR es)
-> IO (RayTracingPipelineCreateInfoKHR es)
peekCStruct p :: Ptr (RayTracingPipelineCreateInfoKHR es)
p = do
    "data" ::: Ptr ()
pNext <- Ptr ("data" ::: Ptr ()) -> IO ("data" ::: Ptr ())
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` 8 :: Ptr (Ptr ())))
    Chain es
next <- Ptr (Chain es) -> IO (Chain es)
forall (es :: [*]). PeekChain es => Ptr (Chain es) -> IO (Chain es)
peekChain (("data" ::: Ptr ()) -> Ptr (Chain es)
forall a b. Ptr a -> Ptr b
castPtr "data" ::: Ptr ()
pNext)
    PipelineCreateFlags
flags <- Ptr PipelineCreateFlags -> IO PipelineCreateFlags
forall a. Storable a => Ptr a -> IO a
peek @PipelineCreateFlags ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr PipelineCreateFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr PipelineCreateFlags))
    "width" ::: Word32
stageCount <- Ptr ("width" ::: Word32) -> IO ("width" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr ("width" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 20 :: Ptr Word32))
    Ptr (PipelineShaderStageCreateInfo Any)
pStages <- Ptr (Ptr (PipelineShaderStageCreateInfo Any))
-> IO (Ptr (PipelineShaderStageCreateInfo Any))
forall a. Storable a => Ptr a -> IO a
peek @(Ptr (PipelineShaderStageCreateInfo _)) ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr (Ptr (PipelineShaderStageCreateInfo _))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _))))
    Vector (SomeStruct PipelineShaderStageCreateInfo)
pStages' <- Int
-> (Int -> IO (SomeStruct PipelineShaderStageCreateInfo))
-> IO (Vector (SomeStruct PipelineShaderStageCreateInfo))
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (("width" ::: Word32) -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral "width" ::: Word32
stageCount) (\i :: 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 Any)
-> Ptr (SomeStruct PipelineShaderStageCreateInfo)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions ((Ptr (PipelineShaderStageCreateInfo Any)
pStages Ptr (PipelineShaderStageCreateInfo Any)
-> Int -> Ptr (PipelineShaderStageCreateInfo Any)
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (48 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (PipelineShaderStageCreateInfo _)))))
    "width" ::: Word32
groupCount <- Ptr ("width" ::: Word32) -> IO ("width" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr ("width" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 32 :: Ptr Word32))
    Ptr RayTracingShaderGroupCreateInfoKHR
pGroups <- Ptr (Ptr RayTracingShaderGroupCreateInfoKHR)
-> IO (Ptr RayTracingShaderGroupCreateInfoKHR)
forall a. Storable a => Ptr a -> IO a
peek @(Ptr RayTracingShaderGroupCreateInfoKHR) ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr (Ptr RayTracingShaderGroupCreateInfoKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoKHR)))
    Vector RayTracingShaderGroupCreateInfoKHR
pGroups' <- Int
-> (Int -> IO RayTracingShaderGroupCreateInfoKHR)
-> IO (Vector RayTracingShaderGroupCreateInfoKHR)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (("width" ::: Word32) -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral "width" ::: Word32
groupCount) (\i :: Int
i -> Ptr RayTracingShaderGroupCreateInfoKHR
-> IO RayTracingShaderGroupCreateInfoKHR
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` (48 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr RayTracingShaderGroupCreateInfoKHR)))
    "width" ::: Word32
maxPipelineRayRecursionDepth <- Ptr ("width" ::: Word32) -> IO ("width" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr ("width" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 48 :: Ptr Word32))
    Ptr PipelineLibraryCreateInfoKHR
pLibraryInfo <- Ptr (Ptr PipelineLibraryCreateInfoKHR)
-> IO (Ptr PipelineLibraryCreateInfoKHR)
forall a. Storable a => Ptr a -> IO a
peek @(Ptr PipelineLibraryCreateInfoKHR) ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr (Ptr PipelineLibraryCreateInfoKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 56 :: Ptr (Ptr PipelineLibraryCreateInfoKHR)))
    Maybe PipelineLibraryCreateInfoKHR
pLibraryInfo' <- (Ptr PipelineLibraryCreateInfoKHR
 -> IO PipelineLibraryCreateInfoKHR)
-> Ptr PipelineLibraryCreateInfoKHR
-> IO (Maybe PipelineLibraryCreateInfoKHR)
forall a b. (Ptr a -> IO b) -> Ptr a -> IO (Maybe b)
maybePeek (\j :: Ptr PipelineLibraryCreateInfoKHR
j -> Ptr PipelineLibraryCreateInfoKHR -> IO PipelineLibraryCreateInfoKHR
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @PipelineLibraryCreateInfoKHR (Ptr PipelineLibraryCreateInfoKHR
j)) Ptr PipelineLibraryCreateInfoKHR
pLibraryInfo
    Ptr RayTracingPipelineInterfaceCreateInfoKHR
pLibraryInterface <- Ptr (Ptr RayTracingPipelineInterfaceCreateInfoKHR)
-> IO (Ptr RayTracingPipelineInterfaceCreateInfoKHR)
forall a. Storable a => Ptr a -> IO a
peek @(Ptr RayTracingPipelineInterfaceCreateInfoKHR) ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr (Ptr RayTracingPipelineInterfaceCreateInfoKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 64 :: Ptr (Ptr RayTracingPipelineInterfaceCreateInfoKHR)))
    Maybe RayTracingPipelineInterfaceCreateInfoKHR
pLibraryInterface' <- (Ptr RayTracingPipelineInterfaceCreateInfoKHR
 -> IO RayTracingPipelineInterfaceCreateInfoKHR)
-> Ptr RayTracingPipelineInterfaceCreateInfoKHR
-> IO (Maybe RayTracingPipelineInterfaceCreateInfoKHR)
forall a b. (Ptr a -> IO b) -> Ptr a -> IO (Maybe b)
maybePeek (\j :: Ptr RayTracingPipelineInterfaceCreateInfoKHR
j -> Ptr RayTracingPipelineInterfaceCreateInfoKHR
-> IO RayTracingPipelineInterfaceCreateInfoKHR
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @RayTracingPipelineInterfaceCreateInfoKHR (Ptr RayTracingPipelineInterfaceCreateInfoKHR
j)) Ptr RayTracingPipelineInterfaceCreateInfoKHR
pLibraryInterface
    Ptr PipelineDynamicStateCreateInfo
pDynamicState <- Ptr (Ptr PipelineDynamicStateCreateInfo)
-> IO (Ptr PipelineDynamicStateCreateInfo)
forall a. Storable a => Ptr a -> IO a
peek @(Ptr PipelineDynamicStateCreateInfo) ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr (Ptr PipelineDynamicStateCreateInfo)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 72 :: Ptr (Ptr PipelineDynamicStateCreateInfo)))
    Maybe PipelineDynamicStateCreateInfo
pDynamicState' <- (Ptr PipelineDynamicStateCreateInfo
 -> IO PipelineDynamicStateCreateInfo)
-> Ptr PipelineDynamicStateCreateInfo
-> IO (Maybe PipelineDynamicStateCreateInfo)
forall a b. (Ptr a -> IO b) -> Ptr a -> IO (Maybe b)
maybePeek (\j :: Ptr PipelineDynamicStateCreateInfo
j -> Ptr PipelineDynamicStateCreateInfo
-> IO PipelineDynamicStateCreateInfo
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @PipelineDynamicStateCreateInfo (Ptr PipelineDynamicStateCreateInfo
j)) Ptr PipelineDynamicStateCreateInfo
pDynamicState
    PipelineLayout
layout <- Ptr PipelineLayout -> IO PipelineLayout
forall a. Storable a => Ptr a -> IO a
peek @PipelineLayout ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> Ptr PipelineLayout
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 80 :: Ptr PipelineLayout))
    Pipeline
basePipelineHandle <- ("pPipelines" ::: Ptr Pipeline) -> IO Pipeline
forall a. Storable a => Ptr a -> IO a
peek @Pipeline ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es)
-> Int -> "pPipelines" ::: Ptr Pipeline
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 88 :: Ptr Pipeline))
    Int32
basePipelineIndex <- Ptr Int32 -> IO Int32
forall a. Storable a => Ptr a -> IO a
peek @Int32 ((Ptr (RayTracingPipelineCreateInfoKHR es)
p Ptr (RayTracingPipelineCreateInfoKHR es) -> Int -> Ptr Int32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 96 :: Ptr Int32))
    RayTracingPipelineCreateInfoKHR es
-> IO (RayTracingPipelineCreateInfoKHR es)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (RayTracingPipelineCreateInfoKHR es
 -> IO (RayTracingPipelineCreateInfoKHR es))
-> RayTracingPipelineCreateInfoKHR es
-> IO (RayTracingPipelineCreateInfoKHR es)
forall a b. (a -> b) -> a -> b
$ 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
             Chain es
next PipelineCreateFlags
flags Vector (SomeStruct PipelineShaderStageCreateInfo)
pStages' Vector RayTracingShaderGroupCreateInfoKHR
pGroups' "width" ::: Word32
maxPipelineRayRecursionDepth Maybe PipelineLibraryCreateInfoKHR
pLibraryInfo' Maybe RayTracingPipelineInterfaceCreateInfoKHR
pLibraryInterface' Maybe PipelineDynamicStateCreateInfo
pDynamicState' PipelineLayout
layout Pipeline
basePipelineHandle Int32
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
--
-- The members of the 'PhysicalDeviceRayTracingPipelineFeaturesKHR'
-- structure describe the following features:
--
-- = Description
--
-- -   #features-rayTracingPipeline# @rayTracingPipeline@ indicates whether
--     the implementation supports the ray tracing pipeline functionality.
--     See
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing Ray Tracing>.
--
-- -   #features-rayTracingPipelineShaderGroupHandleCaptureReplay#
--     @rayTracingPipelineShaderGroupHandleCaptureReplay@ indicates whether
--     the implementation supports saving and reusing shader group handles,
--     e.g. for trace capture and replay.
--
-- -   #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.
--
-- -   #features-rayTracingPipelineTraceRaysIndirect#
--     @rayTracingPipelineTraceRaysIndirect@ indicates whether the
--     implementation supports indirect trace ray commands, e.g.
--     'cmdTraceRaysIndirectKHR'.
--
-- -   #features-rayTraversalPrimitiveCulling#
--     @rayTraversalPrimitiveCulling@ indicates whether the implementation
--     supports
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-traversal-culling-primitive primitive culling during ray traversal>.
--
-- If the 'PhysicalDeviceRayTracingPipelineFeaturesKHR' structure is
-- included in the @pNext@ chain of
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
-- it is filled with values indicating whether the feature is supported.
-- 'PhysicalDeviceRayTracingPipelineFeaturesKHR' /can/ also be used in the
-- @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable the
-- features.
--
-- == 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
--
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceRayTracingPipelineFeaturesKHR = PhysicalDeviceRayTracingPipelineFeaturesKHR
  { -- No documentation found for Nested "VkPhysicalDeviceRayTracingPipelineFeaturesKHR" "rayTracingPipeline"
    PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool
rayTracingPipeline :: Bool
  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingPipelineFeaturesKHR" "rayTracingPipelineShaderGroupHandleCaptureReplay"
    PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool
rayTracingPipelineShaderGroupHandleCaptureReplay :: Bool
  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingPipelineFeaturesKHR" "rayTracingPipelineShaderGroupHandleCaptureReplayMixed"
    PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool
rayTracingPipelineShaderGroupHandleCaptureReplayMixed :: Bool
  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingPipelineFeaturesKHR" "rayTracingPipelineTraceRaysIndirect"
    PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool
rayTracingPipelineTraceRaysIndirect :: Bool
  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingPipelineFeaturesKHR" "rayTraversalPrimitiveCulling"
    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
/= :: PhysicalDeviceRayTracingPipelineFeaturesKHR
-> PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool
$c/= :: PhysicalDeviceRayTracingPipelineFeaturesKHR
-> PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool
== :: PhysicalDeviceRayTracingPipelineFeaturesKHR
-> PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool
$c== :: PhysicalDeviceRayTracingPipelineFeaturesKHR
-> PhysicalDeviceRayTracingPipelineFeaturesKHR -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceRayTracingPipelineFeaturesKHR)
#endif
deriving instance Show PhysicalDeviceRayTracingPipelineFeaturesKHR

instance ToCStruct PhysicalDeviceRayTracingPipelineFeaturesKHR where
  withCStruct :: PhysicalDeviceRayTracingPipelineFeaturesKHR
-> (Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO b)
-> IO b
withCStruct x :: PhysicalDeviceRayTracingPipelineFeaturesKHR
x f :: Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO b
f = Int
-> Int
-> (Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO b)
-> IO b
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned 40 8 ((Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO b) -> IO b)
-> (Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \p :: Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR
p -> 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 :: Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR
-> PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO b -> IO b
pokeCStruct p :: Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR
p PhysicalDeviceRayTracingPipelineFeaturesKHR{..} f :: 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` 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` 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` 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` 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` 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` 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` 32 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
rayTraversalPrimitiveCulling))
    IO b
f
  cStructSize :: Int
cStructSize = 40
  cStructAlignment :: Int
cStructAlignment = 8
  pokeZeroCStruct :: Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO b -> IO b
pokeZeroCStruct p :: Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR
p f :: 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` 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` 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` 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` 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` 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` 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` 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 p :: Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR
p = do
    Bool32
rayTracingPipeline <- Ptr Bool32 -> IO Bool32
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` 16 :: Ptr Bool32))
    Bool32
rayTracingPipelineShaderGroupHandleCaptureReplay <- Ptr Bool32 -> IO Bool32
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` 20 :: Ptr Bool32))
    Bool32
rayTracingPipelineShaderGroupHandleCaptureReplayMixed <- Ptr Bool32 -> IO Bool32
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` 24 :: Ptr Bool32))
    Bool32
rayTracingPipelineTraceRaysIndirect <- Ptr Bool32 -> IO Bool32
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` 28 :: Ptr Bool32))
    Bool32
rayTraversalPrimitiveCulling <- Ptr Bool32 -> IO Bool32
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` 32 :: Ptr Bool32))
    PhysicalDeviceRayTracingPipelineFeaturesKHR
-> IO PhysicalDeviceRayTracingPipelineFeaturesKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PhysicalDeviceRayTracingPipelineFeaturesKHR
 -> IO PhysicalDeviceRayTracingPipelineFeaturesKHR)
-> PhysicalDeviceRayTracingPipelineFeaturesKHR
-> IO PhysicalDeviceRayTracingPipelineFeaturesKHR
forall a b. (a -> b) -> a -> b
$ Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> PhysicalDeviceRayTracingPipelineFeaturesKHR
PhysicalDeviceRayTracingPipelineFeaturesKHR
             (Bool32 -> Bool
bool32ToBool Bool32
rayTracingPipeline) (Bool32 -> Bool
bool32ToBool Bool32
rayTracingPipelineShaderGroupHandleCaptureReplay) (Bool32 -> Bool
bool32ToBool Bool32
rayTracingPipelineShaderGroupHandleCaptureReplayMixed) (Bool32 -> Bool
bool32ToBool Bool32
rayTracingPipelineTraceRaysIndirect) (Bool32 -> Bool
bool32ToBool Bool32
rayTraversalPrimitiveCulling)

instance Storable PhysicalDeviceRayTracingPipelineFeaturesKHR where
  sizeOf :: PhysicalDeviceRayTracingPipelineFeaturesKHR -> Int
sizeOf ~PhysicalDeviceRayTracingPipelineFeaturesKHR
_ = 40
  alignment :: PhysicalDeviceRayTracingPipelineFeaturesKHR -> Int
alignment ~PhysicalDeviceRayTracingPipelineFeaturesKHR
_ = 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 :: Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR
ptr poked :: PhysicalDeviceRayTracingPipelineFeaturesKHR
poked = Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR
-> PhysicalDeviceRayTracingPipelineFeaturesKHR -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceRayTracingPipelineFeaturesKHR
ptr PhysicalDeviceRayTracingPipelineFeaturesKHR
poked (() -> IO ()
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
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
-- it is filled with the implementation-dependent limits.
--
-- 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
--
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceRayTracingPipelinePropertiesKHR = PhysicalDeviceRayTracingPipelinePropertiesKHR
  { -- | @shaderGroupHandleSize@ 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
  , -- | @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 shader binding table entry.
    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
/= :: PhysicalDeviceRayTracingPipelinePropertiesKHR
-> PhysicalDeviceRayTracingPipelinePropertiesKHR -> Bool
$c/= :: PhysicalDeviceRayTracingPipelinePropertiesKHR
-> PhysicalDeviceRayTracingPipelinePropertiesKHR -> Bool
== :: PhysicalDeviceRayTracingPipelinePropertiesKHR
-> PhysicalDeviceRayTracingPipelinePropertiesKHR -> Bool
$c== :: PhysicalDeviceRayTracingPipelinePropertiesKHR
-> PhysicalDeviceRayTracingPipelinePropertiesKHR -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceRayTracingPipelinePropertiesKHR)
#endif
deriving instance Show PhysicalDeviceRayTracingPipelinePropertiesKHR

instance ToCStruct PhysicalDeviceRayTracingPipelinePropertiesKHR where
  withCStruct :: PhysicalDeviceRayTracingPipelinePropertiesKHR
-> (Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO b)
-> IO b
withCStruct x :: PhysicalDeviceRayTracingPipelinePropertiesKHR
x f :: Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO b
f = Int
-> Int
-> (Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO b)
-> IO b
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned 48 8 ((Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO b)
 -> IO b)
-> (Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \p :: Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR
p -> 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 :: Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR
-> PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO b -> IO b
pokeCStruct p :: Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR
p PhysicalDeviceRayTracingPipelinePropertiesKHR{..} f :: 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` 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` 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` 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` 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` 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` 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` 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` 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` 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` 44 :: Ptr Word32)) ("width" ::: Word32
maxRayHitAttributeSize)
    IO b
f
  cStructSize :: Int
cStructSize = 48
  cStructAlignment :: Int
cStructAlignment = 8
  pokeZeroCStruct :: Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO b -> IO b
pokeZeroCStruct p :: Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR
p f :: 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` 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` 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` 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` 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` 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` 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` 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` 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` 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` 44 :: Ptr Word32)) ("width" ::: Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct PhysicalDeviceRayTracingPipelinePropertiesKHR where
  peekCStruct :: Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR
-> IO PhysicalDeviceRayTracingPipelinePropertiesKHR
peekCStruct p :: Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR
p = do
    "width" ::: Word32
shaderGroupHandleSize <- Ptr ("width" ::: Word32) -> IO ("width" ::: Word32)
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` 16 :: Ptr Word32))
    "width" ::: Word32
maxRayRecursionDepth <- Ptr ("width" ::: Word32) -> IO ("width" ::: Word32)
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` 20 :: Ptr Word32))
    "width" ::: Word32
maxShaderGroupStride <- Ptr ("width" ::: Word32) -> IO ("width" ::: Word32)
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` 24 :: Ptr Word32))
    "width" ::: Word32
shaderGroupBaseAlignment <- Ptr ("width" ::: Word32) -> IO ("width" ::: Word32)
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` 28 :: Ptr Word32))
    "width" ::: Word32
shaderGroupHandleCaptureReplaySize <- Ptr ("width" ::: Word32) -> IO ("width" ::: Word32)
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` 32 :: Ptr Word32))
    "width" ::: Word32
maxRayDispatchInvocationCount <- Ptr ("width" ::: Word32) -> IO ("width" ::: Word32)
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` 36 :: Ptr Word32))
    "width" ::: Word32
shaderGroupHandleAlignment <- Ptr ("width" ::: Word32) -> IO ("width" ::: Word32)
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` 40 :: Ptr Word32))
    "width" ::: Word32
maxRayHitAttributeSize <- Ptr ("width" ::: Word32) -> IO ("width" ::: Word32)
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` 44 :: Ptr Word32))
    PhysicalDeviceRayTracingPipelinePropertiesKHR
-> IO PhysicalDeviceRayTracingPipelinePropertiesKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PhysicalDeviceRayTracingPipelinePropertiesKHR
 -> IO PhysicalDeviceRayTracingPipelinePropertiesKHR)
-> PhysicalDeviceRayTracingPipelinePropertiesKHR
-> IO PhysicalDeviceRayTracingPipelinePropertiesKHR
forall a b. (a -> b) -> a -> b
$ ("width" ::: Word32)
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> PhysicalDeviceRayTracingPipelinePropertiesKHR
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

instance Storable PhysicalDeviceRayTracingPipelinePropertiesKHR where
  sizeOf :: PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int
sizeOf ~PhysicalDeviceRayTracingPipelinePropertiesKHR
_ = 48
  alignment :: PhysicalDeviceRayTracingPipelinePropertiesKHR -> Int
alignment ~PhysicalDeviceRayTracingPipelinePropertiesKHR
_ = 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 :: Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR
ptr poked :: PhysicalDeviceRayTracingPipelinePropertiesKHR
poked = Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR
-> PhysicalDeviceRayTracingPipelinePropertiesKHR -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceRayTracingPipelinePropertiesKHR
ptr PhysicalDeviceRayTracingPipelinePropertiesKHR
poked (() -> IO ()
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-deviceAddress-03630# If
--     @deviceAddress@ 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-deviceAddress-03631# If
--     @deviceAddress@ is not zero, @stride@ /must/ be less than the size
--     of the buffer from which @deviceAddress@ was queried
--
-- = See Also
--
-- '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.
    ("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
/= :: ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> Bool
$c/= :: ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> Bool
== :: ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> Bool
$c== :: ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (StridedDeviceAddressRegionKHR)
#endif
deriving instance Show StridedDeviceAddressRegionKHR

instance ToCStruct StridedDeviceAddressRegionKHR where
  withCStruct :: ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> (("pRaygenShaderBindingTable"
     ::: Ptr
           ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
    -> IO b)
-> IO b
withCStruct x :: "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
x f :: ("pRaygenShaderBindingTable"
 ::: Ptr
       ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> IO b
f = Int
-> Int
-> (("pRaygenShaderBindingTable"
     ::: Ptr
           ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
    -> IO b)
-> IO b
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned 24 8 ((("pRaygenShaderBindingTable"
   ::: Ptr
         ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
  -> IO b)
 -> IO b)
-> (("pRaygenShaderBindingTable"
     ::: Ptr
           ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
    -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \p :: "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
p -> ("pRaygenShaderBindingTable"
 ::: Ptr
       ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> IO b
-> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
p "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
x (("pRaygenShaderBindingTable"
 ::: Ptr
       ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> IO b
f "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
p)
  pokeCStruct :: ("pRaygenShaderBindingTable"
 ::: Ptr
       ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> IO b
-> IO b
pokeCStruct p :: "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
p StridedDeviceAddressRegionKHR{..} f :: IO b
f = do
    Ptr ("dataSize" ::: Word64) -> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
p ("pRaygenShaderBindingTable"
 ::: Ptr
       ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> Int -> Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 0 :: Ptr DeviceAddress)) ("dataSize" ::: Word64
deviceAddress)
    Ptr ("dataSize" ::: Word64) -> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
p ("pRaygenShaderBindingTable"
 ::: Ptr
       ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> Int -> Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 8 :: Ptr DeviceSize)) ("dataSize" ::: Word64
stride)
    Ptr ("dataSize" ::: Word64) -> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
p ("pRaygenShaderBindingTable"
 ::: Ptr
       ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> Int -> Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr DeviceSize)) ("dataSize" ::: Word64
size)
    IO b
f
  cStructSize :: Int
cStructSize = 24
  cStructAlignment :: Int
cStructAlignment = 8
  pokeZeroCStruct :: ("pRaygenShaderBindingTable"
 ::: Ptr
       ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> IO b -> IO b
pokeZeroCStruct p :: "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
p f :: IO b
f = do
    Ptr ("dataSize" ::: Word64) -> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
p ("pRaygenShaderBindingTable"
 ::: Ptr
       ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> Int -> Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 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 (("pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
p ("pRaygenShaderBindingTable"
 ::: Ptr
       ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> Int -> Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr DeviceSize)) ("dataSize" ::: Word64
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct StridedDeviceAddressRegionKHR where
  peekCStruct :: ("pRaygenShaderBindingTable"
 ::: Ptr
       ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> IO
     ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
peekCStruct p :: "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
p = do
    "dataSize" ::: Word64
deviceAddress <- Ptr ("dataSize" ::: Word64) -> IO ("dataSize" ::: Word64)
forall a. Storable a => Ptr a -> IO a
peek @DeviceAddress (("pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
p ("pRaygenShaderBindingTable"
 ::: Ptr
       ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> Int -> Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 0 :: Ptr DeviceAddress))
    "dataSize" ::: Word64
stride <- Ptr ("dataSize" ::: Word64) -> IO ("dataSize" ::: Word64)
forall a. Storable a => Ptr a -> IO a
peek @DeviceSize (("pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
p ("pRaygenShaderBindingTable"
 ::: Ptr
       ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> Int -> Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 8 :: Ptr DeviceSize))
    "dataSize" ::: Word64
size <- Ptr ("dataSize" ::: Word64) -> IO ("dataSize" ::: Word64)
forall a. Storable a => Ptr a -> IO a
peek @DeviceSize (("pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
p ("pRaygenShaderBindingTable"
 ::: Ptr
       ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> Int -> Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr DeviceSize))
    ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> IO
     ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
 -> IO
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> IO
     ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
forall a b. (a -> b) -> a -> b
$ ("dataSize" ::: Word64)
-> ("dataSize" ::: Word64)
-> ("dataSize" ::: Word64)
-> "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
StridedDeviceAddressRegionKHR
             "dataSize" ::: Word64
deviceAddress "dataSize" ::: Word64
stride "dataSize" ::: Word64
size

instance Storable StridedDeviceAddressRegionKHR where
  sizeOf :: ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> Int
sizeOf ~"raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
_ = 24
  alignment :: ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> Int
alignment ~"raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
_ = 8
  peek :: ("pRaygenShaderBindingTable"
 ::: Ptr
       ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> IO
     ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
peek = ("pRaygenShaderBindingTable"
 ::: Ptr
       ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> IO
     ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: ("pRaygenShaderBindingTable"
 ::: Ptr
       ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> IO ()
poke ptr :: "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
ptr poked :: "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
poked = ("pRaygenShaderBindingTable"
 ::: Ptr
       ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR))
-> ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
-> IO ()
-> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pRaygenShaderBindingTable"
::: Ptr
      ("raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR)
ptr "raygenShaderBindingTable" ::: StridedDeviceAddressRegionKHR
poked (() -> IO ()
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 trace ray command
--
-- = Description
--
-- The members of 'TraceRaysIndirectCommandKHR' have the same meaning as
-- the similarly named parameters of 'cmdTraceRaysKHR'.
--
-- == Valid Usage
--
-- = See Also
--
-- No cross-references are available
data TraceRaysIndirectCommandKHR = TraceRaysIndirectCommandKHR
  { -- | @width@ is the width of the ray trace query dimensions.
    --
    -- #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-width-03641# @width@ × @height@ ×
    -- @depth@ /must/ be less than or equal to
    -- 'PhysicalDeviceRayTracingPipelinePropertiesKHR'::@maxRayDispatchInvocationCount@
    TraceRaysIndirectCommandKHR -> "width" ::: Word32
width :: Word32
  , -- | @height@ is height of the ray trace query dimensions.
    --
    -- #VUID-VkTraceRaysIndirectCommandKHR-height-03639# @height@ /must/ be
    -- less than or equal to
    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]
    -- ×
    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupSize@[1]
    TraceRaysIndirectCommandKHR -> "width" ::: Word32
height :: Word32
  , -- | @depth@ is depth of the ray trace query dimensions.
    --
    -- #VUID-VkTraceRaysIndirectCommandKHR-depth-03640# @depth@ /must/ be less
    -- than or equal to
    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]
    -- ×
    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupSize@[2]
    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
/= :: TraceRaysIndirectCommandKHR -> TraceRaysIndirectCommandKHR -> Bool
$c/= :: TraceRaysIndirectCommandKHR -> TraceRaysIndirectCommandKHR -> Bool
== :: TraceRaysIndirectCommandKHR -> TraceRaysIndirectCommandKHR -> Bool
$c== :: TraceRaysIndirectCommandKHR -> TraceRaysIndirectCommandKHR -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (TraceRaysIndirectCommandKHR)
#endif
deriving instance Show TraceRaysIndirectCommandKHR

instance ToCStruct TraceRaysIndirectCommandKHR where
  withCStruct :: TraceRaysIndirectCommandKHR
-> (Ptr TraceRaysIndirectCommandKHR -> IO b) -> IO b
withCStruct x :: TraceRaysIndirectCommandKHR
x f :: Ptr TraceRaysIndirectCommandKHR -> IO b
f = Int -> Int -> (Ptr TraceRaysIndirectCommandKHR -> IO b) -> IO b
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned 12 4 ((Ptr TraceRaysIndirectCommandKHR -> IO b) -> IO b)
-> (Ptr TraceRaysIndirectCommandKHR -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \p :: Ptr TraceRaysIndirectCommandKHR
p -> 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 :: Ptr TraceRaysIndirectCommandKHR
-> TraceRaysIndirectCommandKHR -> IO b -> IO b
pokeCStruct p :: Ptr TraceRaysIndirectCommandKHR
p TraceRaysIndirectCommandKHR{..} f :: 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` 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` 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` 8 :: Ptr Word32)) ("width" ::: Word32
depth)
    IO b
f
  cStructSize :: Int
cStructSize = 12
  cStructAlignment :: Int
cStructAlignment = 4
  pokeZeroCStruct :: Ptr TraceRaysIndirectCommandKHR -> IO b -> IO b
pokeZeroCStruct p :: Ptr TraceRaysIndirectCommandKHR
p f :: 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` 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` 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` 8 :: Ptr Word32)) ("width" ::: Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct TraceRaysIndirectCommandKHR where
  peekCStruct :: Ptr TraceRaysIndirectCommandKHR -> IO TraceRaysIndirectCommandKHR
peekCStruct p :: Ptr TraceRaysIndirectCommandKHR
p = do
    "width" ::: Word32
width <- Ptr ("width" ::: Word32) -> IO ("width" ::: Word32)
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` 0 :: Ptr Word32))
    "width" ::: Word32
height <- Ptr ("width" ::: Word32) -> IO ("width" ::: Word32)
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` 4 :: Ptr Word32))
    "width" ::: Word32
depth <- Ptr ("width" ::: Word32) -> IO ("width" ::: Word32)
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` 8 :: Ptr Word32))
    TraceRaysIndirectCommandKHR -> IO TraceRaysIndirectCommandKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (TraceRaysIndirectCommandKHR -> IO TraceRaysIndirectCommandKHR)
-> TraceRaysIndirectCommandKHR -> IO TraceRaysIndirectCommandKHR
forall a b. (a -> b) -> a -> b
$ ("width" ::: Word32)
-> ("width" ::: Word32)
-> ("width" ::: Word32)
-> TraceRaysIndirectCommandKHR
TraceRaysIndirectCommandKHR
             "width" ::: Word32
width "width" ::: Word32
height "width" ::: Word32
depth

instance Storable TraceRaysIndirectCommandKHR where
  sizeOf :: TraceRaysIndirectCommandKHR -> Int
sizeOf ~TraceRaysIndirectCommandKHR
_ = 12
  alignment :: TraceRaysIndirectCommandKHR -> Int
alignment ~TraceRaysIndirectCommandKHR
_ = 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 :: Ptr TraceRaysIndirectCommandKHR
ptr poked :: TraceRaysIndirectCommandKHR
poked = Ptr TraceRaysIndirectCommandKHR
-> TraceRaysIndirectCommandKHR -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr TraceRaysIndirectCommandKHR
ptr TraceRaysIndirectCommandKHR
poked (() -> IO ()
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 number of bytes
-- used by any block declared in the @RayPayloadKHR@ or
-- @IncomingRayPayloadKHR@ storage classes.
-- @maxPipelineRayHitAttributeSize@ is calculated as the maximum number of
-- bytes used by any block declared in the @HitAttributeKHR@ 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://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-alignment-requirements scalar alignment>
-- equal to the largest scalar alignment of any of the block’s members.
--
-- Note
--
-- 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
--
-- '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
/= :: RayTracingPipelineInterfaceCreateInfoKHR
-> RayTracingPipelineInterfaceCreateInfoKHR -> Bool
$c/= :: RayTracingPipelineInterfaceCreateInfoKHR
-> RayTracingPipelineInterfaceCreateInfoKHR -> Bool
== :: RayTracingPipelineInterfaceCreateInfoKHR
-> RayTracingPipelineInterfaceCreateInfoKHR -> Bool
$c== :: RayTracingPipelineInterfaceCreateInfoKHR
-> RayTracingPipelineInterfaceCreateInfoKHR -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (RayTracingPipelineInterfaceCreateInfoKHR)
#endif
deriving instance Show RayTracingPipelineInterfaceCreateInfoKHR

instance ToCStruct RayTracingPipelineInterfaceCreateInfoKHR where
  withCStruct :: RayTracingPipelineInterfaceCreateInfoKHR
-> (Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO b) -> IO b
withCStruct x :: RayTracingPipelineInterfaceCreateInfoKHR
x f :: Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO b
f = Int
-> Int
-> (Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO b)
-> IO b
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned 24 8 ((Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO b) -> IO b)
-> (Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \p :: Ptr RayTracingPipelineInterfaceCreateInfoKHR
p -> 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 :: Ptr RayTracingPipelineInterfaceCreateInfoKHR
-> RayTracingPipelineInterfaceCreateInfoKHR -> IO b -> IO b
pokeCStruct p :: Ptr RayTracingPipelineInterfaceCreateInfoKHR
p RayTracingPipelineInterfaceCreateInfoKHR{..} f :: 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` 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` 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` 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` 20 :: Ptr Word32)) ("width" ::: Word32
maxPipelineRayHitAttributeSize)
    IO b
f
  cStructSize :: Int
cStructSize = 24
  cStructAlignment :: Int
cStructAlignment = 8
  pokeZeroCStruct :: Ptr RayTracingPipelineInterfaceCreateInfoKHR -> IO b -> IO b
pokeZeroCStruct p :: Ptr RayTracingPipelineInterfaceCreateInfoKHR
p f :: 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` 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` 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` 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` 20 :: Ptr Word32)) ("width" ::: Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct RayTracingPipelineInterfaceCreateInfoKHR where
  peekCStruct :: Ptr RayTracingPipelineInterfaceCreateInfoKHR
-> IO RayTracingPipelineInterfaceCreateInfoKHR
peekCStruct p :: Ptr RayTracingPipelineInterfaceCreateInfoKHR
p = do
    "width" ::: Word32
maxPipelineRayPayloadSize <- Ptr ("width" ::: Word32) -> IO ("width" ::: Word32)
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` 16 :: Ptr Word32))
    "width" ::: Word32
maxPipelineRayHitAttributeSize <- Ptr ("width" ::: Word32) -> IO ("width" ::: Word32)
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` 20 :: Ptr Word32))
    RayTracingPipelineInterfaceCreateInfoKHR
-> IO RayTracingPipelineInterfaceCreateInfoKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (RayTracingPipelineInterfaceCreateInfoKHR
 -> IO RayTracingPipelineInterfaceCreateInfoKHR)
-> RayTracingPipelineInterfaceCreateInfoKHR
-> IO RayTracingPipelineInterfaceCreateInfoKHR
forall a b. (a -> b) -> a -> b
$ ("width" ::: Word32)
-> ("width" ::: Word32) -> RayTracingPipelineInterfaceCreateInfoKHR
RayTracingPipelineInterfaceCreateInfoKHR
             "width" ::: Word32
maxPipelineRayPayloadSize "width" ::: Word32
maxPipelineRayHitAttributeSize

instance Storable RayTracingPipelineInterfaceCreateInfoKHR where
  sizeOf :: RayTracingPipelineInterfaceCreateInfoKHR -> Int
sizeOf ~RayTracingPipelineInterfaceCreateInfoKHR
_ = 24
  alignment :: RayTracingPipelineInterfaceCreateInfoKHR -> Int
alignment ~RayTracingPipelineInterfaceCreateInfoKHR
_ = 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 :: Ptr RayTracingPipelineInterfaceCreateInfoKHR
ptr poked :: RayTracingPipelineInterfaceCreateInfoKHR
poked = Ptr RayTracingPipelineInterfaceCreateInfoKHR
-> RayTracingPipelineInterfaceCreateInfoKHR -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr RayTracingPipelineInterfaceCreateInfoKHR
ptr RayTracingPipelineInterfaceCreateInfoKHR
poked (() -> IO ()
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
--
-- Note
--
-- 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
--
-- '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
/= :: RayTracingShaderGroupTypeKHR
-> RayTracingShaderGroupTypeKHR -> Bool
$c/= :: RayTracingShaderGroupTypeKHR
-> RayTracingShaderGroupTypeKHR -> Bool
== :: RayTracingShaderGroupTypeKHR
-> RayTracingShaderGroupTypeKHR -> Bool
$c== :: 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
min :: RayTracingShaderGroupTypeKHR
-> RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR
$cmin :: RayTracingShaderGroupTypeKHR
-> RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR
max :: RayTracingShaderGroupTypeKHR
-> RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR
$cmax :: RayTracingShaderGroupTypeKHR
-> RayTracingShaderGroupTypeKHR -> RayTracingShaderGroupTypeKHR
>= :: RayTracingShaderGroupTypeKHR
-> RayTracingShaderGroupTypeKHR -> Bool
$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
compare :: RayTracingShaderGroupTypeKHR
-> RayTracingShaderGroupTypeKHR -> Ordering
$ccompare :: RayTracingShaderGroupTypeKHR
-> RayTracingShaderGroupTypeKHR -> Ordering
$cp1Ord :: Eq RayTracingShaderGroupTypeKHR
Ord, Ptr b -> Int -> IO RayTracingShaderGroupTypeKHR
Ptr b -> Int -> RayTracingShaderGroupTypeKHR -> IO ()
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
poke :: Ptr RayTracingShaderGroupTypeKHR
-> RayTracingShaderGroupTypeKHR -> IO ()
$cpoke :: Ptr RayTracingShaderGroupTypeKHR
-> RayTracingShaderGroupTypeKHR -> IO ()
peek :: Ptr RayTracingShaderGroupTypeKHR -> IO RayTracingShaderGroupTypeKHR
$cpeek :: Ptr RayTracingShaderGroupTypeKHR -> IO RayTracingShaderGroupTypeKHR
pokeByteOff :: Ptr b -> Int -> RayTracingShaderGroupTypeKHR -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> RayTracingShaderGroupTypeKHR -> IO ()
peekByteOff :: Ptr b -> Int -> IO RayTracingShaderGroupTypeKHR
$cpeekByteOff :: forall b. Ptr b -> Int -> IO RayTracingShaderGroupTypeKHR
pokeElemOff :: Ptr RayTracingShaderGroupTypeKHR
-> Int -> RayTracingShaderGroupTypeKHR -> IO ()
$cpokeElemOff :: Ptr RayTracingShaderGroupTypeKHR
-> Int -> RayTracingShaderGroupTypeKHR -> IO ()
peekElemOff :: Ptr RayTracingShaderGroupTypeKHR
-> Int -> IO RayTracingShaderGroupTypeKHR
$cpeekElemOff :: Ptr RayTracingShaderGroupTypeKHR
-> Int -> IO RayTracingShaderGroupTypeKHR
alignment :: RayTracingShaderGroupTypeKHR -> Int
$calignment :: RayTracingShaderGroupTypeKHR -> Int
sizeOf :: RayTracingShaderGroupTypeKHR -> Int
$csizeOf :: RayTracingShaderGroupTypeKHR -> Int
Storable, RayTracingShaderGroupTypeKHR
RayTracingShaderGroupTypeKHR -> Zero RayTracingShaderGroupTypeKHR
forall a. a -> Zero a
zero :: RayTracingShaderGroupTypeKHR
$czero :: RayTracingShaderGroupTypeKHR
Zero)

-- | 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR' indicates 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.
pattern $bRAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR :: RayTracingShaderGroupTypeKHR
$mRAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR :: forall r.
RayTracingShaderGroupTypeKHR -> (Void# -> r) -> (Void# -> r) -> r
RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR              = RayTracingShaderGroupTypeKHR 0
-- | 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' specifies a
-- shader group that only hits triangles and /must/ not contain an
-- intersection shader, only closest hit and any-hit shaders.
pattern $bRAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR :: RayTracingShaderGroupTypeKHR
$mRAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR :: forall r.
RayTracingShaderGroupTypeKHR -> (Void# -> r) -> (Void# -> r) -> r
RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR  = RayTracingShaderGroupTypeKHR 1
-- | 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR' specifies a
-- shader group that only intersects with custom geometry and /must/
-- contain an intersection shader and /may/ contain closest hit and any-hit
-- shaders.
pattern $bRAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR :: RayTracingShaderGroupTypeKHR
$mRAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR :: forall r.
RayTracingShaderGroupTypeKHR -> (Void# -> r) -> (Void# -> r) -> r
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 = "RayTracingShaderGroupTypeKHR"

enumPrefixRayTracingShaderGroupTypeKHR :: String
enumPrefixRayTracingShaderGroupTypeKHR :: String
enumPrefixRayTracingShaderGroupTypeKHR = "RAY_TRACING_SHADER_GROUP_TYPE_"

showTableRayTracingShaderGroupTypeKHR :: [(RayTracingShaderGroupTypeKHR, String)]
showTableRayTracingShaderGroupTypeKHR :: [(RayTracingShaderGroupTypeKHR, String)]
showTableRayTracingShaderGroupTypeKHR =
  [ (RayTracingShaderGroupTypeKHR
RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR             , "GENERAL_KHR")
  , (RayTracingShaderGroupTypeKHR
RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR , "TRIANGLES_HIT_GROUP_KHR")
  , (RayTracingShaderGroupTypeKHR
RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, "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 x :: Int32
x) -> Int32
x)
                            (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec 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
--
-- = See Also
--
-- '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
/= :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool
$c/= :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool
== :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool
$c== :: 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
min :: ShaderGroupShaderKHR
-> ShaderGroupShaderKHR -> ShaderGroupShaderKHR
$cmin :: ShaderGroupShaderKHR
-> ShaderGroupShaderKHR -> ShaderGroupShaderKHR
max :: ShaderGroupShaderKHR
-> ShaderGroupShaderKHR -> ShaderGroupShaderKHR
$cmax :: ShaderGroupShaderKHR
-> ShaderGroupShaderKHR -> ShaderGroupShaderKHR
>= :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Bool
$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
compare :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Ordering
$ccompare :: ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> Ordering
$cp1Ord :: Eq ShaderGroupShaderKHR
Ord, Ptr b -> Int -> IO ShaderGroupShaderKHR
Ptr b -> Int -> ShaderGroupShaderKHR -> IO ()
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
poke :: Ptr ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> IO ()
$cpoke :: Ptr ShaderGroupShaderKHR -> ShaderGroupShaderKHR -> IO ()
peek :: Ptr ShaderGroupShaderKHR -> IO ShaderGroupShaderKHR
$cpeek :: Ptr ShaderGroupShaderKHR -> IO ShaderGroupShaderKHR
pokeByteOff :: Ptr b -> Int -> ShaderGroupShaderKHR -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> ShaderGroupShaderKHR -> IO ()
peekByteOff :: Ptr b -> Int -> IO ShaderGroupShaderKHR
$cpeekByteOff :: forall b. Ptr b -> Int -> IO ShaderGroupShaderKHR
pokeElemOff :: Ptr ShaderGroupShaderKHR -> Int -> ShaderGroupShaderKHR -> IO ()
$cpokeElemOff :: Ptr ShaderGroupShaderKHR -> Int -> ShaderGroupShaderKHR -> IO ()
peekElemOff :: Ptr ShaderGroupShaderKHR -> Int -> IO ShaderGroupShaderKHR
$cpeekElemOff :: Ptr ShaderGroupShaderKHR -> Int -> IO ShaderGroupShaderKHR
alignment :: ShaderGroupShaderKHR -> Int
$calignment :: ShaderGroupShaderKHR -> Int
sizeOf :: ShaderGroupShaderKHR -> Int
$csizeOf :: ShaderGroupShaderKHR -> Int
Storable, ShaderGroupShaderKHR
ShaderGroupShaderKHR -> Zero ShaderGroupShaderKHR
forall a. a -> Zero a
zero :: ShaderGroupShaderKHR
$czero :: ShaderGroupShaderKHR
Zero)

-- | 'SHADER_GROUP_SHADER_GENERAL_KHR' uses the shader specified in the group
-- with 'RayTracingShaderGroupCreateInfoKHR'::@generalShader@
pattern $bSHADER_GROUP_SHADER_GENERAL_KHR :: ShaderGroupShaderKHR
$mSHADER_GROUP_SHADER_GENERAL_KHR :: forall r. ShaderGroupShaderKHR -> (Void# -> r) -> (Void# -> r) -> r
SHADER_GROUP_SHADER_GENERAL_KHR      = ShaderGroupShaderKHR 0
-- | 'SHADER_GROUP_SHADER_CLOSEST_HIT_KHR' uses the shader specified in the
-- group with 'RayTracingShaderGroupCreateInfoKHR'::@closestHitShader@
pattern $bSHADER_GROUP_SHADER_CLOSEST_HIT_KHR :: ShaderGroupShaderKHR
$mSHADER_GROUP_SHADER_CLOSEST_HIT_KHR :: forall r. ShaderGroupShaderKHR -> (Void# -> r) -> (Void# -> r) -> r
SHADER_GROUP_SHADER_CLOSEST_HIT_KHR  = ShaderGroupShaderKHR 1
-- | 'SHADER_GROUP_SHADER_ANY_HIT_KHR' uses the shader specified in the group
-- with 'RayTracingShaderGroupCreateInfoKHR'::@anyHitShader@
pattern $bSHADER_GROUP_SHADER_ANY_HIT_KHR :: ShaderGroupShaderKHR
$mSHADER_GROUP_SHADER_ANY_HIT_KHR :: forall r. ShaderGroupShaderKHR -> (Void# -> r) -> (Void# -> r) -> r
SHADER_GROUP_SHADER_ANY_HIT_KHR      = ShaderGroupShaderKHR 2
-- | 'SHADER_GROUP_SHADER_INTERSECTION_KHR' uses the shader specified in the
-- group with 'RayTracingShaderGroupCreateInfoKHR'::@intersectionShader@
pattern $bSHADER_GROUP_SHADER_INTERSECTION_KHR :: ShaderGroupShaderKHR
$mSHADER_GROUP_SHADER_INTERSECTION_KHR :: forall r. ShaderGroupShaderKHR -> (Void# -> r) -> (Void# -> r) -> r
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 = "ShaderGroupShaderKHR"

enumPrefixShaderGroupShaderKHR :: String
enumPrefixShaderGroupShaderKHR :: String
enumPrefixShaderGroupShaderKHR = "SHADER_GROUP_SHADER_"

showTableShaderGroupShaderKHR :: [(ShaderGroupShaderKHR, String)]
showTableShaderGroupShaderKHR :: [(ShaderGroupShaderKHR, String)]
showTableShaderGroupShaderKHR =
  [ (ShaderGroupShaderKHR
SHADER_GROUP_SHADER_GENERAL_KHR     , "GENERAL_KHR")
  , (ShaderGroupShaderKHR
SHADER_GROUP_SHADER_CLOSEST_HIT_KHR , "CLOSEST_HIT_KHR")
  , (ShaderGroupShaderKHR
SHADER_GROUP_SHADER_ANY_HIT_KHR     , "ANY_HIT_KHR")
  , (ShaderGroupShaderKHR
SHADER_GROUP_SHADER_INTERSECTION_KHR, "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 x :: Int32
x) -> Int32
x)
                            (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec 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 $bKHR_RAY_TRACING_PIPELINE_SPEC_VERSION :: a
$mKHR_RAY_TRACING_PIPELINE_SPEC_VERSION :: forall r a. Integral a => a -> (Void# -> r) -> (Void# -> r) -> r
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 $bKHR_RAY_TRACING_PIPELINE_EXTENSION_NAME :: a
$mKHR_RAY_TRACING_PIPELINE_EXTENSION_NAME :: forall r a.
(Eq a, IsString a) =>
a -> (Void# -> r) -> (Void# -> r) -> r
KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME = "VK_KHR_ray_tracing_pipeline"