{-# language CPP #-}
-- | = Name
--
-- VK_KHR_acceleration_structure - device extension
--
-- == VK_KHR_acceleration_structure
--
-- [__Name String__]
--     @VK_KHR_acceleration_structure@
--
-- [__Extension Type__]
--     Device extension
--
-- [__Registered Extension Number__]
--     151
--
-- [__Revision__]
--     13
--
-- [__Extension and Version Dependencies__]
--
--     -   Requires Vulkan 1.1
--
--     -   Requires @VK_EXT_descriptor_indexing@
--
--     -   Requires @VK_KHR_buffer_device_address@
--
--     -   Requires @VK_KHR_deferred_host_operations@
--
-- [__Contact__]
--
--     -   Daniel Koch
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_KHR_acceleration_structure] @dgkoch%0A<<Here describe the issue or question you have about the VK_KHR_acceleration_structure extension>> >
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2021-09-30
--
-- [__Contributors__]
--
--     -   Samuel Bourasseau, Adobe
--
--     -   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
--
--     -   Ricardo Garcia, Igalia
--
--     -   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
--
--     -   Lewis Gordon, Samsung
--
--     -   Ralph Potter, Samsung
--
--     -   Jasper Bekkers, Traverse Research
--
--     -   Jesse Barker, Unity
--
--     -   Baldur Karlsson, Valve
--
-- == Description
--
-- In order to be efficient, rendering techniques such as ray tracing need
-- a quick way to identify which primitives may be intersected by a ray
-- traversing the geometries. Acceleration structures are the most common
-- way to represent the geometry spatially sorted, in order to quickly
-- identify such potential intersections.
--
-- This extension adds new functionalities:
--
-- -   Acceleration structure objects and build commands
--
-- -   Structures to describe geometry inputs to acceleration structure
--     builds
--
-- -   Acceleration structure copy commands
--
-- == New Object Types
--
-- -   'Vulkan.Extensions.Handles.AccelerationStructureKHR'
--
-- == New Commands
--
-- -   'buildAccelerationStructuresKHR'
--
-- -   'cmdBuildAccelerationStructuresIndirectKHR'
--
-- -   'cmdBuildAccelerationStructuresKHR'
--
-- -   'cmdCopyAccelerationStructureKHR'
--
-- -   'cmdCopyAccelerationStructureToMemoryKHR'
--
-- -   'cmdCopyMemoryToAccelerationStructureKHR'
--
-- -   'cmdWriteAccelerationStructuresPropertiesKHR'
--
-- -   'copyAccelerationStructureKHR'
--
-- -   'copyAccelerationStructureToMemoryKHR'
--
-- -   'copyMemoryToAccelerationStructureKHR'
--
-- -   'createAccelerationStructureKHR'
--
-- -   'destroyAccelerationStructureKHR'
--
-- -   'getAccelerationStructureBuildSizesKHR'
--
-- -   'getAccelerationStructureDeviceAddressKHR'
--
-- -   'getDeviceAccelerationStructureCompatibilityKHR'
--
-- -   'writeAccelerationStructuresPropertiesKHR'
--
-- == New Structures
--
-- -   'AabbPositionsKHR'
--
-- -   'AccelerationStructureBuildGeometryInfoKHR'
--
-- -   'AccelerationStructureBuildRangeInfoKHR'
--
-- -   'AccelerationStructureBuildSizesInfoKHR'
--
-- -   'AccelerationStructureCreateInfoKHR'
--
-- -   'AccelerationStructureDeviceAddressInfoKHR'
--
-- -   'AccelerationStructureGeometryAabbsDataKHR'
--
-- -   'AccelerationStructureGeometryInstancesDataKHR'
--
-- -   'AccelerationStructureGeometryKHR'
--
-- -   'AccelerationStructureGeometryTrianglesDataKHR'
--
-- -   'AccelerationStructureInstanceKHR'
--
-- -   'AccelerationStructureVersionInfoKHR'
--
-- -   'CopyAccelerationStructureInfoKHR'
--
-- -   'CopyAccelerationStructureToMemoryInfoKHR'
--
-- -   'CopyMemoryToAccelerationStructureInfoKHR'
--
-- -   'TransformMatrixKHR'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--     'Vulkan.Core10.Device.DeviceCreateInfo':
--
--     -   'PhysicalDeviceAccelerationStructureFeaturesKHR'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2':
--
--     -   'PhysicalDeviceAccelerationStructurePropertiesKHR'
--
-- -   Extending 'Vulkan.Core10.DescriptorSet.WriteDescriptorSet':
--
--     -   'WriteDescriptorSetAccelerationStructureKHR'
--
-- == New Unions
--
-- -   'AccelerationStructureGeometryDataKHR'
--
-- -   'DeviceOrHostAddressConstKHR'
--
-- -   'DeviceOrHostAddressKHR'
--
-- == New Enums
--
-- -   'AccelerationStructureBuildTypeKHR'
--
-- -   'AccelerationStructureCompatibilityKHR'
--
-- -   'AccelerationStructureCreateFlagBitsKHR'
--
-- -   'AccelerationStructureTypeKHR'
--
-- -   'BuildAccelerationStructureFlagBitsKHR'
--
-- -   'BuildAccelerationStructureModeKHR'
--
-- -   'CopyAccelerationStructureModeKHR'
--
-- -   'GeometryFlagBitsKHR'
--
-- -   'GeometryInstanceFlagBitsKHR'
--
-- -   'GeometryTypeKHR'
--
-- == New Bitmasks
--
-- -   'AccelerationStructureCreateFlagsKHR'
--
-- -   'BuildAccelerationStructureFlagsKHR'
--
-- -   'GeometryFlagsKHR'
--
-- -   'GeometryInstanceFlagsKHR'
--
-- == New Enum Constants
--
-- -   'KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME'
--
-- -   'KHR_ACCELERATION_STRUCTURE_SPEC_VERSION'
--
-- -   Extending 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits':
--
--     -   'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR'
--
--     -   'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR'
--
-- -   Extending
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BufferUsageFlagBits':
--
--     -   'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR'
--
--     -   'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR'
--
-- -   Extending
--     'Vulkan.Extensions.VK_EXT_debug_report.DebugReportObjectTypeEXT':
--
--     -   'Vulkan.Extensions.VK_EXT_debug_report.DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT'
--
-- -   Extending 'Vulkan.Core10.Enums.DescriptorType.DescriptorType':
--
--     -   'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR'
--
-- -   Extending
--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlagBits':
--
--     -   'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR'
--
-- -   Extending 'Vulkan.Core10.Enums.IndexType.IndexType':
--
--     -   'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR'
--
-- -   Extending 'Vulkan.Core10.Enums.ObjectType.ObjectType':
--
--     -   'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR'
--
-- -   Extending
--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits':
--
--     -   'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'
--
-- -   Extending 'Vulkan.Core10.Enums.QueryType.QueryType':
--
--     -   'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'
--
--     -   'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_format_feature_flags2 VK_KHR_format_feature_flags2>
-- is supported:
--
-- -   Extending 'FormatFeatureFlagBits2KHR':
--
--     -   'FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR'
--
-- == 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_acceleration_structure and VK_NV_ray_tracing:
--
-- -   added acceleration structure serialization \/ deserialization
--     ('COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR',
--     'COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR',
--     'cmdCopyAccelerationStructureToMemoryKHR',
--     'cmdCopyMemoryToAccelerationStructureKHR')
--
-- -   document
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims inactive primitives and instances>
--
-- -   added 'PhysicalDeviceAccelerationStructureFeaturesKHR' structure
--
-- -   added indirect and batched acceleration structure builds
--     ('cmdBuildAccelerationStructuresIndirectKHR')
--
-- -   added
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#host-acceleration-structure host acceleration structure>
--     commands
--
-- -   reworked geometry structures so they could be better shared between
--     device, host, and indirect builds
--
-- -   explicitly made 'Vulkan.Extensions.Handles.AccelerationStructureKHR'
--     use device addresses
--
-- -   added acceleration structure compatibility check function
--     ('getDeviceAccelerationStructureCompatibilityKHR')
--
-- -   add parameter for requesting memory requirements for host and\/or
--     device build
--
-- -   added format feature for acceleration structure build vertex formats
--     ('Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR')
--
-- (2) Can you give a more detailed comparision of differences and
-- similarities between VK_NV_ray_tracing and
-- VK_KHR_acceleration_structure?
--
-- __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.GeometryTypeNV' ↔
--         'GeometryTypeKHR'
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.AccelerationStructureTypeNV'
--         ↔ 'AccelerationStructureTypeKHR'
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.CopyAccelerationStructureModeNV'
--         ↔ 'CopyAccelerationStructureModeKHR'
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.GeometryFlagsNV' ↔
--         'GeometryFlagsKHR'
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.GeometryFlagBitsNV' ↔
--         'GeometryFlagBitsKHR'
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.GeometryInstanceFlagsNV' ↔
--         'GeometryInstanceFlagsKHR'
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.GeometryInstanceFlagBitsNV'
--         ↔ 'GeometryInstanceFlagBitsKHR'
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.BuildAccelerationStructureFlagsNV'
--         ↔ 'BuildAccelerationStructureFlagsKHR'
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.BuildAccelerationStructureFlagBitsNV'
--         ↔ 'BuildAccelerationStructureFlagBitsKHR'
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.TransformMatrixNV' ↔
--         'TransformMatrixKHR' (added to VK_NV_ray_tracing for descriptive
--         purposes)
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.AabbPositionsNV' ↔
--         'AabbPositionsKHR' (added to VK_NV_ray_tracing for descriptive
--         purposes)
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.AccelerationStructureInstanceNV'
--         ↔ 'AccelerationStructureInstanceKHR' (added to VK_NV_ray_tracing
--         for descriptive purposes)
--
-- -   Changed enums, structures, and commands:
--
--     -   renamed
--         'Vulkan.Extensions.VK_NV_ray_tracing.GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV'
--         → 'GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR' in
--         'GeometryInstanceFlagBitsKHR'
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.GeometryTrianglesNV' →
--         'AccelerationStructureGeometryTrianglesDataKHR' (device or host
--         address instead of buffer+offset)
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.GeometryAABBNV' →
--         'AccelerationStructureGeometryAabbsDataKHR' (device or host
--         address instead of buffer+offset)
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.GeometryDataNV' →
--         'AccelerationStructureGeometryDataKHR' (union of
--         triangle\/aabbs\/instances)
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.GeometryNV' →
--         'AccelerationStructureGeometryKHR' (changed type of geometry)
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.AccelerationStructureCreateInfoNV'
--         → 'AccelerationStructureCreateInfoKHR' (reshuffle geometry
--         layout\/information)
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.PhysicalDeviceRayTracingPropertiesNV'
--         → 'PhysicalDeviceAccelerationStructurePropertiesKHR' (for
--         acceleration structure properties, renamed @maxTriangleCount@ to
--         @maxPrimitiveCount@, added per stage and update after bind
--         limits) and
--         'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelinePropertiesKHR'
--         (for ray tracing pipeline properties)
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.AccelerationStructureMemoryRequirementsInfoNV'
--         (deleted - replaced by allocating on top of
--         'Vulkan.Core10.Handles.Buffer')
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.WriteDescriptorSetAccelerationStructureNV'
--         → 'WriteDescriptorSetAccelerationStructureKHR' (different
--         acceleration structure type)
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.createAccelerationStructureNV'
--         → 'createAccelerationStructureKHR' (device address, different
--         geometry layout\/information)
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureMemoryRequirementsNV'
--         (deleted - replaced by allocating on top of
--         'Vulkan.Core10.Handles.Buffer')
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.cmdBuildAccelerationStructureNV'
--         → 'cmdBuildAccelerationStructuresKHR' (params moved to structs,
--         layout differences)
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.cmdCopyAccelerationStructureNV'
--         → 'cmdCopyAccelerationStructureKHR' (params to struct,
--         extendable)
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV'
--         → 'getAccelerationStructureDeviceAddressKHR' (device address
--         instead of handle)
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.AccelerationStructureMemoryRequirementsTypeNV'
--         → size queries for scratch space moved to
--         'getAccelerationStructureBuildSizesKHR'
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.destroyAccelerationStructureNV'
--         → 'destroyAccelerationStructureKHR' (different acceleration
--         structure types)
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.cmdWriteAccelerationStructuresPropertiesNV'
--         → 'cmdWriteAccelerationStructuresPropertiesKHR' (different
--         acceleration structure types)
--
-- -   Added enums, structures and commands:
--
--     -   'GEOMETRY_TYPE_INSTANCES_KHR' to 'GeometryTypeKHR' enum
--
--     -   'COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR',
--         'COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR' to
--         'CopyAccelerationStructureModeKHR' enum
--
--     -   'PhysicalDeviceAccelerationStructureFeaturesKHR' structure
--
--     -   'AccelerationStructureBuildTypeKHR' enum
--
--     -   'BuildAccelerationStructureModeKHR' enum
--
--     -   'DeviceOrHostAddressKHR' and 'DeviceOrHostAddressConstKHR'
--         unions
--
--     -   'AccelerationStructureBuildRangeInfoKHR' struct
--
--     -   'AccelerationStructureGeometryInstancesDataKHR' struct
--
--     -   'AccelerationStructureDeviceAddressInfoKHR' struct
--
--     -   'AccelerationStructureVersionInfoKHR' struct
--
--     -   'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.StridedDeviceAddressRegionKHR'
--         struct
--
--     -   'CopyAccelerationStructureToMemoryInfoKHR' struct
--
--     -   'CopyMemoryToAccelerationStructureInfoKHR' struct
--
--     -   'CopyAccelerationStructureInfoKHR' struct
--
--     -   'buildAccelerationStructuresKHR' command (host build)
--
--     -   'copyAccelerationStructureKHR' command (host copy)
--
--     -   'copyAccelerationStructureToMemoryKHR' (host serialize)
--
--     -   'copyMemoryToAccelerationStructureKHR' (host deserialize)
--
--     -   'writeAccelerationStructuresPropertiesKHR' (host properties)
--
--     -   'cmdCopyAccelerationStructureToMemoryKHR' (device serialize)
--
--     -   'cmdCopyMemoryToAccelerationStructureKHR' (device deserialize)
--
--     -   'getDeviceAccelerationStructureCompatibilityKHR' (serialization)
--
-- (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?
--
-- -   added @geometryFlags@ to
--     @VkAccelerationStructureCreateGeometryTypeInfoKHR@ (later reworked
--     to obsolete this)
--
-- -   added @minAccelerationStructureScratchOffsetAlignment@ property to
--     VkPhysicalDeviceRayTracingPropertiesKHR
--
-- -   fix naming and return enum from
--     'getDeviceAccelerationStructureCompatibilityKHR'
--
--     -   renamed @VkAccelerationStructureVersionKHR@ to
--         'AccelerationStructureVersionInfoKHR'
--
--     -   renamed @VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR@
--         to
--         'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR'
--
--     -   removed @VK_ERROR_INCOMPATIBLE_VERSION_KHR@
--
--     -   added 'AccelerationStructureCompatibilityKHR' enum
--
--     -   remove return value from
--         'getDeviceAccelerationStructureCompatibilityKHR' and added
--         return enum parameter
--
-- -   Require Vulkan 1.1
--
-- -   added creation time capture and replay flags
--
--     -   added 'AccelerationStructureCreateFlagBitsKHR' and
--         'AccelerationStructureCreateFlagsKHR'
--
--     -   renamed the @flags@ member of
--         'AccelerationStructureCreateInfoKHR' to @buildFlags@ (later
--         removed) and added the @createFlags@ member
--
-- -   change 'cmdBuildAccelerationStructuresIndirectKHR' to use buffer
--     device address for indirect parameter
--
-- -   make @VK_KHR_deferred_host_operations@ an interaction instead of a
--     required extension (later went back on this)
--
-- -   renamed @VkAccelerationStructureBuildOffsetInfoKHR@ to
--     'AccelerationStructureBuildRangeInfoKHR'
--
--     -   renamed the @ppOffsetInfos@ parameter of
--         'cmdBuildAccelerationStructuresKHR' to @ppBuildRangeInfos@
--
-- -   Re-unify geometry description between build and create
--
--     -   remove @VkAccelerationStructureCreateGeometryTypeInfoKHR@ and
--         @VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR@
--
--     -   added @VkAccelerationStructureCreateSizeInfoKHR@ structure
--         (later removed)
--
--     -   change type of the @pGeometryInfos@ member of
--         'AccelerationStructureCreateInfoKHR' from
--         @VkAccelerationStructureCreateGeometryTypeInfoKHR@ to
--         'AccelerationStructureGeometryKHR' (later removed)
--
--     -   added @pCreateSizeInfos@ member to
--         'AccelerationStructureCreateInfoKHR' (later removed)
--
-- -   Fix ppGeometries ambiguity, add pGeometries
--
--     -   remove @geometryArrayOfPointers@ member of
--         VkAccelerationStructureBuildGeometryInfoKHR
--
--     -   disambiguate two meanings of @ppGeometries@ by explicitly adding
--         @pGeometries@ to the 'AccelerationStructureBuildGeometryInfoKHR'
--         structure and require one of them be @NULL@
--
-- -   added
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
--     support for acceleration structures
--
-- -   changed the @update@ member of
--     'AccelerationStructureBuildGeometryInfoKHR' from a bool to the
--     @mode@ 'BuildAccelerationStructureModeKHR' enum which allows future
--     extensibility in update types
--
-- -   Clarify deferred host ops for pipeline creation
--
--     -   'Vulkan.Extensions.Handles.DeferredOperationKHR' is now a
--         top-level parameter for 'buildAccelerationStructuresKHR',
--         'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.createRayTracingPipelinesKHR',
--         'copyAccelerationStructureToMemoryKHR',
--         'copyAccelerationStructureKHR', and
--         'copyMemoryToAccelerationStructureKHR'
--
--     -   removed @VkDeferredOperationInfoKHR@ structure
--
--     -   change deferred host creation\/return parameter behavior such
--         that the implementation can modify such parameters until the
--         deferred host operation completes
--
--     -   @VK_KHR_deferred_host_operations@ is required again
--
-- -   Change acceleration structure build to always be sized
--
--     -   de-alias
--         'Vulkan.Extensions.VK_NV_ray_tracing.AccelerationStructureMemoryRequirementsTypeNV'
--         and @VkAccelerationStructureMemoryRequirementsTypeKHR@, and
--         remove @VkAccelerationStructureMemoryRequirementsTypeKHR@
--
--     -   add 'getAccelerationStructureBuildSizesKHR' command and
--         'AccelerationStructureBuildSizesInfoKHR' structure and
--         'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR'
--         enum to query sizes for acceleration structures and scratch
--         storage
--
--     -   move size queries for scratch space to
--         'getAccelerationStructureBuildSizesKHR'
--
--     -   remove @compactedSize@, @buildFlags@, @maxGeometryCount@,
--         @pGeometryInfos@, @pCreateSizeInfos@ members of
--         'AccelerationStructureCreateInfoKHR' and add the @size@ member
--
--     -   add @maxVertex@ member to
--         'AccelerationStructureGeometryTrianglesDataKHR' structure
--
--     -   remove @VkAccelerationStructureCreateSizeInfoKHR@ structure
--
-- (4) What are the changes between the internal provisional
-- (VK_KHR_ray_tracing v9) release and the final
-- (VK_KHR_acceleration_structure v11) release?
--
-- -   refactor VK_KHR_ray_tracing into 3 extensions, enabling
--     implementation flexibility and decoupling ray query support from ray
--     pipelines:
--
--     -   @VK_KHR_acceleration_structure@ (for acceleration structure
--         operations)
--
--     -   @VK_KHR_ray_tracing_pipeline@ (for ray tracing pipeline and
--         shader stages)
--
--     -   @VK_KHR_ray_query@ (for ray queries in existing shader stages)
--
-- -   clarify buffer usage flags for ray tracing
--
--     -   'Vulkan.Extensions.VK_NV_ray_tracing.BUFFER_USAGE_RAY_TRACING_BIT_NV'
--         is left alone in @VK_NV_ray_tracing@ (required on @scratch@ and
--         @instanceData@)
--
--     -   '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'
--         in @VK_KHR_ray_tracing_pipeline@ and is required on shader
--         binding table buffers
--
--     -   'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR'
--         is added in @VK_KHR_acceleration_structure@ for all vertex,
--         index, transform, aabb, and instance buffer data referenced by
--         device build commands
--
--     -   'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_BUFFER_BIT'
--         is used for @scratchData@
--
-- -   add max primitive counts (@ppMaxPrimitiveCounts@) to
--     'cmdBuildAccelerationStructuresIndirectKHR'
--
-- -   Allocate acceleration structures from @VkBuffers@ and add a mode to
--     constrain the device address
--
--     -   de-alias
--         'Vulkan.Extensions.VK_NV_ray_tracing.BindAccelerationStructureMemoryInfoNV'
--         and
--         'Vulkan.Extensions.VK_NV_ray_tracing.bindAccelerationStructureMemoryNV',
--         and remove @VkBindAccelerationStructureMemoryInfoKHR@,
--         @VkAccelerationStructureMemoryRequirementsInfoKHR@, and
--         @vkGetAccelerationStructureMemoryRequirementsKHR@
--
--     -   acceleration structures now take a
--         'Vulkan.Core10.Handles.Buffer' and offset at creation time for
--         memory placement
--
--     -   add a new
--         'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR'
--         buffer usage for such buffers
--
--     -   add a new 'ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR' acceleration
--         structure type for layering
--
-- -   move 'GEOMETRY_TYPE_INSTANCES_KHR' to main enum instead of being
--     added via extension
--
-- -   make build commands more consistent - all now build multiple
--     acceleration structures and are named plurally
--     ('cmdBuildAccelerationStructuresIndirectKHR',
--     'cmdBuildAccelerationStructuresKHR',
--     'buildAccelerationStructuresKHR')
--
-- -   add interactions with
--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
--     for acceleration structures, including a new feature
--     (@descriptorBindingAccelerationStructureUpdateAfterBind@) and 3 new
--     properties (@maxPerStageDescriptorAccelerationStructures@,
--     @maxPerStageDescriptorUpdateAfterBindAccelerationStructures@,
--     @maxDescriptorSetUpdateAfterBindAccelerationStructures@)
--
-- -   extension is no longer provisional
--
-- -   define synchronization requirements for builds, traces, and copies
--
-- -   define synchronization requirements for AS build inputs and indirect
--     build buffer
--
-- (5) What is 'ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR' for?
--
-- __RESOLVED__: It is primarily intended for API layering. In DXR, the
-- acceleration structure is basically just a buffer in a special layout,
-- and you do not know at creation time whether it will be used as a top or
-- bottom level acceleration structure. We thus added a generic
-- acceleration structure type whose type is unknown at creation time, but
-- is specified at build time instead. Applications which are written
-- directly for Vulkan should not use it.
--
-- == Version History
--
-- -   Revision 1, 2019-12-05 (Members of the Vulkan Ray Tracing TSG)
--
--     -   Internal revisions (forked from VK_NV_ray_tracing)
--
-- -   Revision 2, 2019-12-20 (Daniel Koch, Eric Werness)
--
--     -   Add const version of DeviceOrHostAddress (!3515)
--
--     -   Add VU to clarify that only handles in the current pipeline are
--         valid (!3518)
--
--     -   Restore some missing VUs and add in-place update language
--         (#1902, !3522)
--
--     -   rename VkAccelerationStructureInstanceKHR member from
--         accelerationStructure to accelerationStructureReference to
--         better match its type (!3523)
--
--     -   Allow VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS for pipeline
--         creation if shader group handles cannot be reused (!3523)
--
--     -   update documentation for the
--         VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS error code and add
--         missing documentation for new return codes from
--         VK_KHR_deferred_host_operations (!3523)
--
--     -   list new query types for VK_KHR_ray_tracing (!3523)
--
--     -   Fix VU statements for VkAccelerationStructureGeometryKHR
--         referring to correct union members and update to use more
--         current wording (!3523)
--
-- -   Revision 3, 2020-01-10 (Daniel Koch, Jon Leech, Christoph Kubisch)
--
--     -   Fix \'instance of\' and \'that\/which contains\/defines\' markup
--         issues (!3528)
--
--     -   factor out VK_KHR_pipeline_library as stand-alone extension
--         (!3540)
--
--     -   Resolve Vulkan-hpp issues (!3543)
--
--     -   add missing require for VkGeometryInstanceFlagsKHR
--
--     -   de-alias VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV
--         since the KHR structure is no longer equivalent
--
--     -   add len to pDataSize attribute for
--         vkWriteAccelerationStructuresPropertiesKHR
--
-- -   Revision 4, 2020-01-23 (Daniel Koch, Eric Werness)
--
--     -   Improve vkWriteAccelerationStructuresPropertiesKHR, add return
--         value and VUs (#1947)
--
--     -   Clarify language to allow multiple raygen shaders (#1959)
--
--     -   Various editorial feedback (!3556)
--
--     -   Add language to help deal with looped self-intersecting fans
--         (#1901)
--
--     -   Change vkCmdTraceRays{Indirect}KHR args to pointers (!3559)
--
--     -   Add scratch address validation language (#1941, !3551)
--
--     -   Fix definition and add hierarchy information for shader call
--         scope (#1977, !3571)
--
-- -   Revision 5, 2020-02-04 (Eric Werness, Jeff Bolz, Daniel Koch)
--
--     -   remove vestigial accelerationStructureUUID (!3582)
--
--     -   update definition of repack instructions and improve memory
--         model interactions (#1910, #1913, !3584)
--
--     -   Fix wrong sType for VkPhysicalDeviceRayTracingFeaturesKHR
--         (#1988)
--
--     -   Use provisional SPIR-V capabilities (#1987)
--
--     -   require rayTraversalPrimitiveCulling if rayQuery is supported
--         (#1927)
--
--     -   Miss shaders do not have object parameters (!3592)
--
--     -   Fix missing required types in XML (!3592)
--
--     -   clarify matching conditions for update (!3592)
--
--     -   add goal that host and device builds be similar (!3592)
--
--     -   clarify that @maxPrimitiveCount@ limit should apply to triangles
--         and AABBs (!3592)
--
--     -   Require alignment for instance arrayOfPointers (!3592)
--
--     -   Zero is a valid value for instance flags (!3592)
--
--     -   Add some alignment VUs that got lost in refactoring (!3592)
--
--     -   Recommend TMin epsilon rather than culling (!3592)
--
--     -   Get angle from dot product not cross product (!3592)
--
--     -   Clarify that AH can access the payload and attributes (!3592)
--
--     -   Match DXR behavior for inactive primitive definition (!3592)
--
--     -   Use a more generic term than degenerate for inactive to avoid
--         confusion (!3592)
--
-- -   Revision 6, 2020-02-20 (Daniel Koch)
--
--     -   fix some dangling NV references (#1996)
--
--     -   rename VkCmdTraceRaysIndirectCommandKHR to
--         VkTraceRaysIndirectCommandKHR (!3607)
--
--     -   update contributor list (!3611)
--
--     -   use uint64_t instead of VkAccelerationStructureReferenceKHR in
--         VkAccelerationStructureInstanceKHR (#2004)
--
-- -   Revision 7, 2020-02-28 (Tobias Hector)
--
--     -   remove HitTKHR SPIR-V builtin (spirv\/spirv-extensions#7)
--
-- -   Revision 8, 2020-03-06 (Tobias Hector, Dae Kim, Daniel Koch, Jeff
--     Bolz, Eric Werness)
--
--     -   explicitly state that Tmax is updated when new closest
--         intersection is accepted (#2020,!3536)
--
--     -   Made references to min and max t values consistent (!3644)
--
--     -   finish enumerating differences relative to VK_NV_ray_tracing in
--         issues (1) and (2) (#1974,!3642)
--
--     -   fix formatting in some math equations (!3642)
--
--     -   Restrict the Hit Kind operand of @OpReportIntersectionKHR@ to
--         7-bits (spirv\/spirv-extensions#8,!3646)
--
--     -   Say ray tracing \'/should/\' be watertight (#2008,!3631)
--
--     -   Clarify memory requirements for ray tracing buffers
--         (#2005,!3649)
--
--     -   Add callable size limits (#1997,!3652)
--
-- -   Revision 9, 2020-04-15 (Eric Werness, Daniel Koch, Tobias Hector,
--     Joshua Barczak)
--
--     -   Add geometry flags to acceleration structure creation (!3672)
--
--     -   add build scratch memory alignment
--         (minAccelerationStructureScratchOffsetAlignment) (#2065,!3725)
--
--     -   fix naming and return enum from
--         vkGetDeviceAccelerationStructureCompatibilityKHR (#2051,!3726)
--
--     -   require SPIR-V 1.4 (#2096,!3777)
--
--     -   added creation time capture\/replay flags (#2104,!3774)
--
--     -   require Vulkan 1.1 (#2133,!3806)
--
--     -   use device addresses instead of VkBuffers for ray tracing
--         commands (#2074,!3815)
--
--     -   add interactions with Vulkan 1.2 and VK_KHR_vulkan_memory_model
--         (#2133,!3830)
--
--     -   make VK_KHR_pipeline_library an interaction instead of required
--         (#2045,#2108,!3830)
--
--     -   make VK_KHR_deferred_host_operations an interaction instead of
--         required (#2045,!3830)
--
--     -   removed maxCallableSize and added explicit stack size management
--         for ray pipelines (#1997,!3817,!3772,!3844)
--
--     -   improved documentation for VkAccelerationStructureVersionInfoKHR
--         (#2135,3835)
--
--     -   rename VkAccelerationStructureBuildOffsetInfoKHR to
--         VkAccelerationStructureBuildRangeInfoKHR (#2058,!3754)
--
--     -   Re-unify geometry description between build and create (!3754)
--
--     -   Fix ppGeometries ambiguity, add pGeometries (#2032,!3811)
--
--     -   add interactions with VK_EXT_robustness2 and allow
--         nullDescriptor support for acceleration structures (#1920,!3848)
--
--     -   added future extensibility for AS updates (#2114,!3849)
--
--     -   Fix VU for dispatchrays and add a limit on the size of the full
--         grid (#2160,!3851)
--
--     -   Add shaderGroupHandleAlignment property (#2180,!3875)
--
--     -   Clarify deferred host ops for pipeline creation (#2067,!3813)
--
--     -   Change acceleration structure build to always be sized
--         (#2131,#2197,#2198,!3854,!3883,!3880)
--
-- -   Revision 10, 2020-07-03 (Mathieu Robart, Daniel Koch, Eric Werness,
--     Tobias Hector)
--
--     -   Decomposition of the specification, from VK_KHR_ray_tracing to
--         VK_KHR_acceleration_structure (#1918,!3912)
--
--     -   clarify buffer usage flags for ray tracing (#2181,!3939)
--
--     -   add max primitive counts to build indirect command (#2233,!3944)
--
--     -   Allocate acceleration structures from VkBuffers and add a mode
--         to constrain the device address (#2131,!3936)
--
--     -   Move VK_GEOMETRY_TYPE_INSTANCES_KHR to main enum (#2243,!3952)
--
--     -   make build commands more consistent (#2247,!3958)
--
--     -   add interactions with UPDATE_AFTER_BIND (#2128,!3986)
--
--     -   correct and expand build command VUs (!4020)
--
--     -   fix copy command VUs (!4018)
--
--     -   added various alignment requirements (#2229,!3943)
--
--     -   fix valid usage for arrays of geometryCount items (#2198,!4010)
--
--     -   define what is allowed to change on RTAS updates and relevant
--         VUs (#2177,!3961)
--
-- -   Revision 11, 2020-11-12 (Eric Werness, Josh Barczak, Daniel Koch,
--     Tobias Hector)
--
--     -   de-alias NV and KHR acceleration structure types and associated
--         commands (#2271,!4035)
--
--     -   specify alignment for host copy commands (#2273,!4037)
--
--     -   document
--         'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR'
--
--     -   specify that acceleration structures are non-linear
--         (#2289,!4068)
--
--     -   add several missing VUs for strides, vertexFormat, and indexType
--         (#2315,!4069)
--
--     -   restore VUs for VkAccelerationStructureBuildGeometryInfoKHR
--         (#2337,!4098)
--
--     -   ban multi-instance memory for host operations (#2324,!4102)
--
--     -   allow dstAccelerationStructure to be null for
--         vkGetAccelerationStructureBuildSizesKHR (#2330,!4111)
--
--     -   more build VU cleanup (#2138,#4130)
--
--     -   specify host endianness for AS serialization (#2261,!4136)
--
--     -   add invertible transform matrix VU (#1710,!4140)
--
--     -   require geometryCount to be 1 for TLAS builds (!4145)
--
--     -   improved validity conditions for build addresses (#4142)
--
--     -   add single statement SPIR-V VUs, build limit VUs (!4158)
--
--     -   document limits for vertex and aabb strides (#2390,!4184)
--
--     -   specify that
--         'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'
--         applies to AS copies (#2382,#4173)
--
--     -   define sync for AS build inputs and indirect buffer
--         (#2407,!4208)
--
-- -   Revision 12, 2021-08-06 (Samuel Bourasseau)
--
--     -   rename
--         VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR to
--         VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR (keep previous
--         as alias).
--
--     -   Clarify description and add note.
--
-- -   Revision 13, 2021-09-30 (Jon Leech)
--
--     -   Add interaction with @VK_KHR_format_feature_flags2@ to @vk.xml@
--
-- == See Also
--
-- 'AabbPositionsKHR', 'AccelerationStructureBuildGeometryInfoKHR',
-- 'AccelerationStructureBuildRangeInfoKHR',
-- 'AccelerationStructureBuildSizesInfoKHR',
-- 'AccelerationStructureBuildTypeKHR',
-- 'AccelerationStructureCompatibilityKHR',
-- 'AccelerationStructureCreateFlagBitsKHR',
-- 'AccelerationStructureCreateFlagsKHR',
-- 'AccelerationStructureCreateInfoKHR',
-- 'AccelerationStructureDeviceAddressInfoKHR',
-- 'AccelerationStructureGeometryAabbsDataKHR',
-- 'AccelerationStructureGeometryDataKHR',
-- 'AccelerationStructureGeometryInstancesDataKHR',
-- 'AccelerationStructureGeometryKHR',
-- 'AccelerationStructureGeometryTrianglesDataKHR',
-- 'AccelerationStructureInstanceKHR',
-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
-- 'AccelerationStructureTypeKHR', 'AccelerationStructureVersionInfoKHR',
-- 'BuildAccelerationStructureFlagBitsKHR',
-- 'BuildAccelerationStructureFlagsKHR',
-- 'BuildAccelerationStructureModeKHR', 'CopyAccelerationStructureInfoKHR',
-- 'CopyAccelerationStructureModeKHR',
-- 'CopyAccelerationStructureToMemoryInfoKHR',
-- 'CopyMemoryToAccelerationStructureInfoKHR',
-- 'DeviceOrHostAddressConstKHR', 'DeviceOrHostAddressKHR',
-- 'GeometryFlagBitsKHR', 'GeometryFlagsKHR',
-- 'GeometryInstanceFlagBitsKHR', 'GeometryInstanceFlagsKHR',
-- 'GeometryTypeKHR', 'PhysicalDeviceAccelerationStructureFeaturesKHR',
-- 'PhysicalDeviceAccelerationStructurePropertiesKHR',
-- 'TransformMatrixKHR', 'WriteDescriptorSetAccelerationStructureKHR',
-- 'buildAccelerationStructuresKHR',
-- 'cmdBuildAccelerationStructuresIndirectKHR',
-- 'cmdBuildAccelerationStructuresKHR', 'cmdCopyAccelerationStructureKHR',
-- 'cmdCopyAccelerationStructureToMemoryKHR',
-- 'cmdCopyMemoryToAccelerationStructureKHR',
-- 'cmdWriteAccelerationStructuresPropertiesKHR',
-- 'copyAccelerationStructureKHR', 'copyAccelerationStructureToMemoryKHR',
-- 'copyMemoryToAccelerationStructureKHR',
-- 'createAccelerationStructureKHR', 'destroyAccelerationStructureKHR',
-- 'getAccelerationStructureBuildSizesKHR',
-- 'getAccelerationStructureDeviceAddressKHR',
-- 'getDeviceAccelerationStructureCompatibilityKHR',
-- 'writeAccelerationStructuresPropertiesKHR'
--
-- == Document Notes
--
-- For more information, see the
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure 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_acceleration_structure  ( destroyAccelerationStructureKHR
                                                        , cmdCopyAccelerationStructureKHR
                                                        , copyAccelerationStructureKHR
                                                        , cmdCopyAccelerationStructureToMemoryKHR
                                                        , copyAccelerationStructureToMemoryKHR
                                                        , cmdCopyMemoryToAccelerationStructureKHR
                                                        , copyMemoryToAccelerationStructureKHR
                                                        , cmdWriteAccelerationStructuresPropertiesKHR
                                                        , writeAccelerationStructuresPropertiesKHR
                                                        , getDeviceAccelerationStructureCompatibilityKHR
                                                        , createAccelerationStructureKHR
                                                        , withAccelerationStructureKHR
                                                        , cmdBuildAccelerationStructuresKHR
                                                        , cmdBuildAccelerationStructuresIndirectKHR
                                                        , buildAccelerationStructuresKHR
                                                        , getAccelerationStructureDeviceAddressKHR
                                                        , getAccelerationStructureBuildSizesKHR
                                                        , pattern GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR
                                                        , WriteDescriptorSetAccelerationStructureKHR(..)
                                                        , PhysicalDeviceAccelerationStructureFeaturesKHR(..)
                                                        , PhysicalDeviceAccelerationStructurePropertiesKHR(..)
                                                        , AccelerationStructureGeometryTrianglesDataKHR(..)
                                                        , AccelerationStructureGeometryAabbsDataKHR(..)
                                                        , AccelerationStructureGeometryInstancesDataKHR(..)
                                                        , AccelerationStructureGeometryKHR(..)
                                                        , AccelerationStructureBuildGeometryInfoKHR(..)
                                                        , AccelerationStructureBuildRangeInfoKHR(..)
                                                        , AccelerationStructureCreateInfoKHR(..)
                                                        , AabbPositionsKHR(..)
                                                        , TransformMatrixKHR(..)
                                                        , AccelerationStructureInstanceKHR(..)
                                                        , AccelerationStructureDeviceAddressInfoKHR(..)
                                                        , AccelerationStructureVersionInfoKHR(..)
                                                        , CopyAccelerationStructureInfoKHR(..)
                                                        , CopyAccelerationStructureToMemoryInfoKHR(..)
                                                        , CopyMemoryToAccelerationStructureInfoKHR(..)
                                                        , AccelerationStructureBuildSizesInfoKHR(..)
                                                        , DeviceOrHostAddressKHR(..)
                                                        , DeviceOrHostAddressConstKHR(..)
                                                        , AccelerationStructureGeometryDataKHR(..)
                                                        , GeometryInstanceFlagsKHR
                                                        , GeometryInstanceFlagBitsKHR( GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR
                                                                                     , GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR
                                                                                     , GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR
                                                                                     , GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR
                                                                                     , ..
                                                                                     )
                                                        , GeometryFlagsKHR
                                                        , GeometryFlagBitsKHR( GEOMETRY_OPAQUE_BIT_KHR
                                                                             , GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR
                                                                             , ..
                                                                             )
                                                        , BuildAccelerationStructureFlagsKHR
                                                        , BuildAccelerationStructureFlagBitsKHR( BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR
                                                                                               , BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR
                                                                                               , BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR
                                                                                               , BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR
                                                                                               , BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR
                                                                                               , BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV
                                                                                               , ..
                                                                                               )
                                                        , AccelerationStructureCreateFlagsKHR
                                                        , AccelerationStructureCreateFlagBitsKHR( ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR
                                                                                                , ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV
                                                                                                , ..
                                                                                                )
                                                        , CopyAccelerationStructureModeKHR( COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR
                                                                                          , COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR
                                                                                          , COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR
                                                                                          , COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR
                                                                                          , ..
                                                                                          )
                                                        , BuildAccelerationStructureModeKHR( BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR
                                                                                           , BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
                                                                                           , ..
                                                                                           )
                                                        , AccelerationStructureTypeKHR( ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR
                                                                                      , ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
                                                                                      , ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
                                                                                      , ..
                                                                                      )
                                                        , GeometryTypeKHR( GEOMETRY_TYPE_TRIANGLES_KHR
                                                                         , GEOMETRY_TYPE_AABBS_KHR
                                                                         , GEOMETRY_TYPE_INSTANCES_KHR
                                                                         , ..
                                                                         )
                                                        , AccelerationStructureBuildTypeKHR( ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR
                                                                                           , ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR
                                                                                           , ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR
                                                                                           , ..
                                                                                           )
                                                        , AccelerationStructureCompatibilityKHR( ACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR
                                                                                               , ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR
                                                                                               , ..
                                                                                               )
                                                        , FormatFeatureFlags2KHR
                                                        , FormatFeatureFlagBits2KHR( FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_VERTEX_BUFFER_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_BLIT_DST_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT
                                                                                   , FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_DISJOINT_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
                                                                                   , FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT
                                                                                   , FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR
                                                                                   , ..
                                                                                   )
                                                        , KHR_ACCELERATION_STRUCTURE_SPEC_VERSION
                                                        , pattern KHR_ACCELERATION_STRUCTURE_SPEC_VERSION
                                                        , KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME
                                                        , pattern KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME
                                                        , AccelerationStructureKHR(..)
                                                        , DeferredOperationKHR(..)
                                                        , DebugReportObjectTypeEXT(..)
                                                        , Flags64
                                                        ) where

import Vulkan.CStruct.Utils (FixedArray)
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.Bits ((.&.))
import Data.Bits ((.|.))
import Data.Bits (shiftL)
import Data.Bits (shiftR)
import Data.Typeable (eqT)
import Foreign.Marshal.Alloc (allocaBytes)
import Foreign.Marshal.Alloc (callocBytes)
import Foreign.Marshal.Alloc (free)
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 (showString)
import GHC.Show (showsPrec)
import Numeric (showHex)
import qualified Data.ByteString (length)
import Data.ByteString (packCStringLen)
import Data.ByteString.Unsafe (unsafeUseAsCString)
import Data.Coerce (coerce)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Cont (evalContT)
import Control.Monad.Trans.Cont (runContT)
import Data.Vector (generateM)
import qualified Data.Vector (imapM_)
import qualified Data.Vector (length)
import qualified Data.Vector (null)
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.Bits (Bits)
import Data.Bits (FiniteBits)
import Data.String (IsString)
import Data.Type.Equality ((:~:)(Refl))
import Data.Typeable (Typeable)
import Foreign.C.Types (CChar)
import Foreign.C.Types (CFloat)
import Foreign.C.Types (CFloat(..))
import Foreign.C.Types (CFloat(CFloat))
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.Word (Word8)
import Data.ByteString (ByteString)
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.CStruct.Extends (forgetExtensions)
import Vulkan.CStruct.Utils (lowerArrayPtr)
import Vulkan.CStruct.Extends (pokeSomeCStruct)
import Vulkan.NamedType ((:::))
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (AccelerationStructureGeometryMotionTrianglesDataNV)
import Vulkan.Extensions.Handles (AccelerationStructureKHR)
import Vulkan.Extensions.Handles (AccelerationStructureKHR(..))
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (AccelerationStructureMotionInfoNV)
import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
import Vulkan.Core10.FundamentalTypes (Bool32)
import Vulkan.Core10.Handles (Buffer)
import Vulkan.CStruct.Extends (Chain)
import Vulkan.Core10.Handles (CommandBuffer)
import Vulkan.Core10.Handles (CommandBuffer(..))
import Vulkan.Core10.Handles (CommandBuffer(CommandBuffer))
import Vulkan.Core10.Handles (CommandBuffer_T)
import Vulkan.Extensions.Handles (DeferredOperationKHR)
import Vulkan.Extensions.Handles (DeferredOperationKHR(..))
import Vulkan.Core10.Handles (Device)
import Vulkan.Core10.Handles (Device(..))
import Vulkan.Core10.Handles (Device(Device))
import Vulkan.Core10.FundamentalTypes (DeviceAddress)
import Vulkan.Dynamic (DeviceCmds(pVkBuildAccelerationStructuresKHR))
import Vulkan.Dynamic (DeviceCmds(pVkCmdBuildAccelerationStructuresIndirectKHR))
import Vulkan.Dynamic (DeviceCmds(pVkCmdBuildAccelerationStructuresKHR))
import Vulkan.Dynamic (DeviceCmds(pVkCmdCopyAccelerationStructureKHR))
import Vulkan.Dynamic (DeviceCmds(pVkCmdCopyAccelerationStructureToMemoryKHR))
import Vulkan.Dynamic (DeviceCmds(pVkCmdCopyMemoryToAccelerationStructureKHR))
import Vulkan.Dynamic (DeviceCmds(pVkCmdWriteAccelerationStructuresPropertiesKHR))
import Vulkan.Dynamic (DeviceCmds(pVkCopyAccelerationStructureKHR))
import Vulkan.Dynamic (DeviceCmds(pVkCopyAccelerationStructureToMemoryKHR))
import Vulkan.Dynamic (DeviceCmds(pVkCopyMemoryToAccelerationStructureKHR))
import Vulkan.Dynamic (DeviceCmds(pVkCreateAccelerationStructureKHR))
import Vulkan.Dynamic (DeviceCmds(pVkDestroyAccelerationStructureKHR))
import Vulkan.Dynamic (DeviceCmds(pVkGetAccelerationStructureBuildSizesKHR))
import Vulkan.Dynamic (DeviceCmds(pVkGetAccelerationStructureDeviceAddressKHR))
import Vulkan.Dynamic (DeviceCmds(pVkGetDeviceAccelerationStructureCompatibilityKHR))
import Vulkan.Dynamic (DeviceCmds(pVkWriteAccelerationStructuresPropertiesKHR))
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.Core10.FundamentalTypes (Flags)
import Vulkan.Core10.FundamentalTypes (Flags64)
import Vulkan.Core10.Enums.Format (Format)
import Vulkan.Core10.Enums.IndexType (IndexType)
import Vulkan.CStruct.Extends (PeekChain)
import Vulkan.CStruct.Extends (PeekChain(..))
import Vulkan.CStruct.Extends (PokeChain)
import Vulkan.CStruct.Extends (PokeChain(..))
import Vulkan.Core10.Handles (QueryPool)
import Vulkan.Core10.Handles (QueryPool(..))
import Vulkan.Core10.Enums.QueryType (QueryType)
import Vulkan.Core10.Enums.QueryType (QueryType(..))
import Vulkan.Core10.Enums.Result (Result)
import Vulkan.Core10.Enums.Result (Result(..))
import Vulkan.CStruct.Extends (SomeStruct)
import Vulkan.CStruct.Extends (SomeStruct(..))
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Exception (VulkanException(..))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR))
import Vulkan.Core10.Enums.Result (Result(SUCCESS))
import Vulkan.Core10.APIConstants (pattern UUID_SIZE)
import Vulkan.Extensions.Handles (AccelerationStructureKHR(..))
import Vulkan.Extensions.VK_EXT_debug_report (DebugReportObjectTypeEXT(..))
import Vulkan.Extensions.Handles (DeferredOperationKHR(..))
import Vulkan.Core10.FundamentalTypes (Flags64)
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkDestroyAccelerationStructureKHR
  :: FunPtr (Ptr Device_T -> AccelerationStructureKHR -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> AccelerationStructureKHR -> Ptr AllocationCallbacks -> IO ()

-- | vkDestroyAccelerationStructureKHR - Destroy an acceleration structure
-- object
--
-- == Valid Usage
--
-- -   #VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-02442#
--     All submitted commands that refer to @accelerationStructure@ /must/
--     have completed execution
--
-- -   #VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-02443#
--     If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
--     provided when @accelerationStructure@ was created, a compatible set
--     of callbacks /must/ be provided here
--
-- -   #VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-02444#
--     If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
--     provided when @accelerationStructure@ was created, @pAllocator@
--     /must/ be @NULL@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkDestroyAccelerationStructureKHR-device-parameter# @device@
--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-parameter#
--     If @accelerationStructure@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @accelerationStructure@
--     /must/ be a valid
--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
--
-- -   #VUID-vkDestroyAccelerationStructureKHR-pAllocator-parameter# If
--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer
--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
--     structure
--
-- -   #VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-parent#
--     If @accelerationStructure@ is a valid handle, it /must/ have been
--     created, allocated, or retrieved from @device@
--
-- == Host Synchronization
--
-- -   Host access to @accelerationStructure@ /must/ be externally
--     synchronized
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
-- 'Vulkan.Core10.Handles.Device'
destroyAccelerationStructureKHR :: forall io
                                 . (MonadIO io)
                                => -- | @device@ is the logical device that destroys the acceleration structure.
                                   Device
                                -> -- | @accelerationStructure@ is the acceleration structure to destroy.
                                   AccelerationStructureKHR
                                -> -- | @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 ()
destroyAccelerationStructureKHR :: Device
-> AccelerationStructureKHR
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
destroyAccelerationStructureKHR Device
device AccelerationStructureKHR
accelerationStructure "allocator" ::: Maybe AllocationCallbacks
allocator = 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 vkDestroyAccelerationStructureKHRPtr :: FunPtr
  (Ptr Device_T
   -> AccelerationStructureKHR
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
vkDestroyAccelerationStructureKHRPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> AccelerationStructureKHR
      -> ("pAllocator" ::: Ptr AllocationCallbacks)
      -> IO ())
pVkDestroyAccelerationStructureKHR (case Device
device of Device{DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  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 Device_T
   -> AccelerationStructureKHR
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
vkDestroyAccelerationStructureKHRPtr FunPtr
  (Ptr Device_T
   -> AccelerationStructureKHR
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
-> FunPtr
     (Ptr Device_T
      -> AccelerationStructureKHR
      -> ("pAllocator" ::: Ptr AllocationCallbacks)
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> AccelerationStructureKHR
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> 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 String
"" String
"The function pointer for vkDestroyAccelerationStructureKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkDestroyAccelerationStructureKHR' :: Ptr Device_T
-> AccelerationStructureKHR
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> IO ()
vkDestroyAccelerationStructureKHR' = FunPtr
  (Ptr Device_T
   -> AccelerationStructureKHR
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
-> Ptr Device_T
-> AccelerationStructureKHR
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> IO ()
mkVkDestroyAccelerationStructureKHR FunPtr
  (Ptr Device_T
   -> AccelerationStructureKHR
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
vkDestroyAccelerationStructureKHRPtr
  "pAllocator" ::: Ptr AllocationCallbacks
pAllocator <- case ("allocator" ::: Maybe AllocationCallbacks
allocator) of
    "allocator" ::: Maybe AllocationCallbacks
Nothing -> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ContT () IO ("pAllocator" ::: Ptr AllocationCallbacks)
forall (f :: * -> *) a. Applicative f => a -> f a
pure "pAllocator" ::: Ptr AllocationCallbacks
forall a. Ptr a
nullPtr
    Just AllocationCallbacks
j -> ((("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) -> IO ())
-> ContT () 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 ()) -> IO ())
 -> ContT () IO ("pAllocator" ::: Ptr AllocationCallbacks))
-> ((("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) -> IO ())
-> ContT () IO ("pAllocator" ::: Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks
-> (("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) -> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
  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 String
"vkDestroyAccelerationStructureKHR" (Ptr Device_T
-> AccelerationStructureKHR
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> IO ()
vkDestroyAccelerationStructureKHR' (Device -> Ptr Device_T
deviceHandle (Device
device)) (AccelerationStructureKHR
accelerationStructure) "pAllocator" ::: Ptr AllocationCallbacks
pAllocator)
  () -> 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" mkVkCmdCopyAccelerationStructureKHR
  :: FunPtr (Ptr CommandBuffer_T -> Ptr CopyAccelerationStructureInfoKHR -> IO ()) -> Ptr CommandBuffer_T -> Ptr CopyAccelerationStructureInfoKHR -> IO ()

-- | vkCmdCopyAccelerationStructureKHR - Copy an acceleration structure
--
-- = Description
--
-- This command copies the @pInfo->src@ acceleration structure to the
-- @pInfo->dst@ acceleration structure in the manner specified by
-- @pInfo->mode@.
--
-- Accesses to @pInfo->src@ and @pInfo->dst@ /must/ be
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies synchronized>
-- with the
-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages pipeline stage>
-- and an
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types access type>
-- of
-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR'
-- or
-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR'
-- as appropriate.
--
-- == Valid Usage
--
-- -   #VUID-vkCmdCopyAccelerationStructureKHR-buffer-03737# The @buffer@
--     used to create @pInfo->src@ /must/ be bound to device memory
--
-- -   #VUID-vkCmdCopyAccelerationStructureKHR-buffer-03738# The @buffer@
--     used to create @pInfo->dst@ /must/ be bound to device memory
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdCopyAccelerationStructureKHR-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdCopyAccelerationStructureKHR-pInfo-parameter# @pInfo@
--     /must/ be a valid pointer to a valid
--     'CopyAccelerationStructureInfoKHR' structure
--
-- -   #VUID-vkCmdCopyAccelerationStructureKHR-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-vkCmdCopyAccelerationStructureKHR-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support compute operations
--
-- -   #VUID-vkCmdCopyAccelerationStructureKHR-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> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |
-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'Vulkan.Core10.Handles.CommandBuffer',
-- 'CopyAccelerationStructureInfoKHR'
cmdCopyAccelerationStructureKHR :: forall io
                                 . (MonadIO io)
                                => -- | @commandBuffer@ is the command buffer into which the command will be
                                   -- recorded.
                                   CommandBuffer
                                -> -- | @pInfo@ is a pointer to a 'CopyAccelerationStructureInfoKHR' structure
                                   -- defining the copy operation.
                                   CopyAccelerationStructureInfoKHR
                                -> io ()
cmdCopyAccelerationStructureKHR :: CommandBuffer -> CopyAccelerationStructureInfoKHR -> io ()
cmdCopyAccelerationStructureKHR CommandBuffer
commandBuffer CopyAccelerationStructureInfoKHR
info = 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 vkCmdCopyAccelerationStructureKHRPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO ())
vkCmdCopyAccelerationStructureKHRPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO ())
pVkCmdCopyAccelerationStructureKHR (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  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
   -> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO ())
vkCmdCopyAccelerationStructureKHRPtr FunPtr
  (Ptr CommandBuffer_T
   -> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> 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 String
"" String
"The function pointer for vkCmdCopyAccelerationStructureKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdCopyAccelerationStructureKHR' :: Ptr CommandBuffer_T
-> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO ()
vkCmdCopyAccelerationStructureKHR' = FunPtr
  (Ptr CommandBuffer_T
   -> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO ())
-> Ptr CommandBuffer_T
-> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> IO ()
mkVkCmdCopyAccelerationStructureKHR FunPtr
  (Ptr CommandBuffer_T
   -> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO ())
vkCmdCopyAccelerationStructureKHRPtr
  "pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
pInfo <- ((("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO ())
 -> IO ())
-> ContT () IO ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO ())
  -> IO ())
 -> ContT () IO ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR))
-> ((("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO ())
    -> IO ())
-> ContT () IO ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
forall a b. (a -> b) -> a -> b
$ CopyAccelerationStructureInfoKHR
-> (("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (CopyAccelerationStructureInfoKHR
info)
  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 String
"vkCmdCopyAccelerationStructureKHR" (Ptr CommandBuffer_T
-> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO ()
vkCmdCopyAccelerationStructureKHR' (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer)) "pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
pInfo)
  () -> 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" mkVkCopyAccelerationStructureKHR
  :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> Ptr CopyAccelerationStructureInfoKHR -> IO Result) -> Ptr Device_T -> DeferredOperationKHR -> Ptr CopyAccelerationStructureInfoKHR -> IO Result

-- | vkCopyAccelerationStructureKHR - Copy an acceleration structure on the
-- host
--
-- = Description
--
-- This command fulfills the same task as 'cmdCopyAccelerationStructureKHR'
-- but is executed by the host.
--
-- == Valid Usage
--
-- -   #VUID-vkCopyAccelerationStructureKHR-deferredOperation-03677# If
--     @deferredOperation@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
--     it /must/ be a valid
--     'Vulkan.Extensions.Handles.DeferredOperationKHR' object
--
-- -   #VUID-vkCopyAccelerationStructureKHR-deferredOperation-03678# Any
--     previous deferred operation that was associated with
--     @deferredOperation@ /must/ be complete
--
-- -   #VUID-vkCopyAccelerationStructureKHR-buffer-03727# The @buffer@ used
--     to create @pInfo->src@ /must/ be bound to host-visible device memory
--
-- -   #VUID-vkCopyAccelerationStructureKHR-buffer-03728# The @buffer@ used
--     to create @pInfo->dst@ /must/ be bound to host-visible device memory
--
-- -   #VUID-vkCopyAccelerationStructureKHR-accelerationStructureHostCommands-03582#
--     The
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-accelerationStructureHostCommands ::accelerationStructureHostCommands>
--     feature /must/ be enabled
--
-- -   #VUID-vkCopyAccelerationStructureKHR-buffer-03780# The @buffer@ used
--     to create @pInfo->src@ /must/ be bound to memory that was not
--     allocated with multiple instances
--
-- -   #VUID-vkCopyAccelerationStructureKHR-buffer-03781# The @buffer@ used
--     to create @pInfo->dst@ /must/ be bound to memory that was not
--     allocated with multiple instances
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCopyAccelerationStructureKHR-device-parameter# @device@
--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkCopyAccelerationStructureKHR-deferredOperation-parameter# If
--     @deferredOperation@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
--     @deferredOperation@ /must/ be a valid
--     'Vulkan.Extensions.Handles.DeferredOperationKHR' handle
--
-- -   #VUID-vkCopyAccelerationStructureKHR-pInfo-parameter# @pInfo@ /must/
--     be a valid pointer to a valid 'CopyAccelerationStructureInfoKHR'
--     structure
--
-- -   #VUID-vkCopyAccelerationStructureKHR-deferredOperation-parent# If
--     @deferredOperation@ 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'
--
-- [<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
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'CopyAccelerationStructureInfoKHR',
-- 'Vulkan.Extensions.Handles.DeferredOperationKHR',
-- 'Vulkan.Core10.Handles.Device'
copyAccelerationStructureKHR :: forall io
                              . (MonadIO io)
                             => -- | @device@ is the device which owns the acceleration structures.
                                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
                             -> -- | @pInfo@ is a pointer to a 'CopyAccelerationStructureInfoKHR' structure
                                -- defining the copy operation.
                                CopyAccelerationStructureInfoKHR
                             -> io (Result)
copyAccelerationStructureKHR :: Device
-> DeferredOperationKHR
-> CopyAccelerationStructureInfoKHR
-> io Result
copyAccelerationStructureKHR Device
device DeferredOperationKHR
deferredOperation CopyAccelerationStructureInfoKHR
info = IO Result -> io Result
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Result -> io Result)
-> (ContT Result IO Result -> IO Result)
-> ContT Result IO Result
-> io Result
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT Result IO Result -> IO Result
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Result IO Result -> io Result)
-> ContT Result IO Result -> io Result
forall a b. (a -> b) -> a -> b
$ do
  let vkCopyAccelerationStructureKHRPtr :: FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
   -> IO Result)
vkCopyAccelerationStructureKHRPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> DeferredOperationKHR
      -> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
      -> IO Result)
pVkCopyAccelerationStructureKHR (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT Result IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT Result IO ()) -> IO () -> ContT Result IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
   -> IO Result)
vkCopyAccelerationStructureKHRPtr FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> DeferredOperationKHR
      -> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
   -> 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 String
"" String
"The function pointer for vkCopyAccelerationStructureKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCopyAccelerationStructureKHR' :: Ptr Device_T
-> DeferredOperationKHR
-> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> IO Result
vkCopyAccelerationStructureKHR' = FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
   -> IO Result)
-> Ptr Device_T
-> DeferredOperationKHR
-> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> IO Result
mkVkCopyAccelerationStructureKHR FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
   -> IO Result)
vkCopyAccelerationStructureKHRPtr
  "pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
pInfo <- ((("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO Result)
 -> IO Result)
-> ContT
     Result IO ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO Result)
  -> IO Result)
 -> ContT
      Result IO ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR))
-> ((("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
     -> IO Result)
    -> IO Result)
-> ContT
     Result IO ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
forall a b. (a -> b) -> a -> b
$ CopyAccelerationStructureInfoKHR
-> (("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
    -> IO Result)
-> IO Result
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (CopyAccelerationStructureInfoKHR
info)
  Result
r <- IO Result -> ContT Result IO Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result -> ContT Result IO Result)
-> IO Result -> ContT Result IO Result
forall a b. (a -> b) -> a -> b
$ String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCopyAccelerationStructureKHR" (Ptr Device_T
-> DeferredOperationKHR
-> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> IO Result
vkCopyAccelerationStructureKHR' (Device -> Ptr Device_T
deviceHandle (Device
device)) (DeferredOperationKHR
deferredOperation) "pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
pInfo)
  IO () -> ContT Result IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT Result IO ()) -> IO () -> ContT Result 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))
  Result -> ContT Result IO Result
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Result -> ContT Result IO Result)
-> Result -> ContT Result IO Result
forall a b. (a -> b) -> a -> b
$ (Result
r)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCmdCopyAccelerationStructureToMemoryKHR
  :: FunPtr (Ptr CommandBuffer_T -> Ptr CopyAccelerationStructureToMemoryInfoKHR -> IO ()) -> Ptr CommandBuffer_T -> Ptr CopyAccelerationStructureToMemoryInfoKHR -> IO ()

-- | vkCmdCopyAccelerationStructureToMemoryKHR - Copy an acceleration
-- structure to device memory
--
-- = Description
--
-- Accesses to @pInfo->src@ /must/ be
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies synchronized>
-- with the
-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages pipeline stage>
-- and an
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types access type>
-- of
-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR'.
-- Accesses to the buffer indicated by @pInfo->dst.deviceAddress@ /must/ be
-- synchronized with the
-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'
-- pipeline stage and an access type of
-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_TRANSFER_WRITE_BIT'.
--
-- This command produces the same results as
-- 'copyAccelerationStructureToMemoryKHR', but writes its result to a
-- device address, and is executed on the device rather than the host. The
-- output /may/ not necessarily be bit-for-bit identical, but it can be
-- equally used by either 'cmdCopyMemoryToAccelerationStructureKHR' or
-- 'copyMemoryToAccelerationStructureKHR'.
--
-- The defined header structure for the serialized data consists of:
--
-- -   'Vulkan.Core10.APIConstants.UUID_SIZE' bytes of data matching
--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties'::@driverUUID@
--
-- -   'Vulkan.Core10.APIConstants.UUID_SIZE' bytes of data identifying the
--     compatibility for comparison using
--     'getDeviceAccelerationStructureCompatibilityKHR'
--
-- -   A 64-bit integer of the total size matching the value queried using
--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'
--
-- -   A 64-bit integer of the deserialized size to be passed in to
--     'AccelerationStructureCreateInfoKHR'::@size@
--
-- -   A 64-bit integer of the count of the number of acceleration
--     structure handles following. This will be zero for a bottom-level
--     acceleration structure. For top-level acceleration structures this
--     number is implementation-dependent; the number of and ordering of
--     the handles may not match the instance descriptions which were used
--     to build the acceleration structure.
--
-- The corresponding handles matching the values returned by
-- 'getAccelerationStructureDeviceAddressKHR' or
-- 'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV'
-- are tightly packed in the buffer following the count. The application is
-- expected to store a mapping between those handles and the original
-- application-generated bottom-level acceleration structures to provide
-- when deserializing. The serialized data is written to the buffer (or
-- read from the buffer) according to the host endianness.
--
-- == Valid Usage
--
-- -   #VUID-vkCmdCopyAccelerationStructureToMemoryKHR-pInfo-03739#
--     @pInfo->dst.deviceAddress@ /must/ be a valid device address for a
--     buffer bound to device memory
--
-- -   #VUID-vkCmdCopyAccelerationStructureToMemoryKHR-pInfo-03740#
--     @pInfo->dst.deviceAddress@ /must/ be aligned to @256@ bytes
--
-- -   #VUID-vkCmdCopyAccelerationStructureToMemoryKHR-pInfo-03741# If the
--     buffer pointed to by @pInfo->dst.deviceAddress@ is non-sparse then
--     it /must/ be bound completely and contiguously to a single
--     'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdCopyAccelerationStructureToMemoryKHR-None-03559# The
--     @buffer@ used to create @pInfo->src@ /must/ be bound to device
--     memory
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdCopyAccelerationStructureToMemoryKHR-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdCopyAccelerationStructureToMemoryKHR-pInfo-parameter#
--     @pInfo@ /must/ be a valid pointer to a valid
--     'CopyAccelerationStructureToMemoryInfoKHR' structure
--
-- -   #VUID-vkCmdCopyAccelerationStructureToMemoryKHR-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-vkCmdCopyAccelerationStructureToMemoryKHR-commandBuffer-cmdpool#
--     The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support compute operations
--
-- -   #VUID-vkCmdCopyAccelerationStructureToMemoryKHR-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> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |
-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'Vulkan.Core10.Handles.CommandBuffer',
-- 'CopyAccelerationStructureToMemoryInfoKHR'
cmdCopyAccelerationStructureToMemoryKHR :: forall io
                                         . (MonadIO io)
                                        => -- | @commandBuffer@ is the command buffer into which the command will be
                                           -- recorded.
                                           CommandBuffer
                                        -> -- | @pInfo@ is an a pointer to a 'CopyAccelerationStructureToMemoryInfoKHR'
                                           -- structure defining the copy operation.
                                           CopyAccelerationStructureToMemoryInfoKHR
                                        -> io ()
cmdCopyAccelerationStructureToMemoryKHR :: CommandBuffer -> CopyAccelerationStructureToMemoryInfoKHR -> io ()
cmdCopyAccelerationStructureToMemoryKHR CommandBuffer
commandBuffer CopyAccelerationStructureToMemoryInfoKHR
info = 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 vkCmdCopyAccelerationStructureToMemoryKHRPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
   -> IO ())
vkCmdCopyAccelerationStructureToMemoryKHRPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
      -> IO ())
pVkCmdCopyAccelerationStructureToMemoryKHR (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  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
   -> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
   -> IO ())
vkCmdCopyAccelerationStructureToMemoryKHRPtr FunPtr
  (Ptr CommandBuffer_T
   -> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
   -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
   -> 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 String
"" String
"The function pointer for vkCmdCopyAccelerationStructureToMemoryKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdCopyAccelerationStructureToMemoryKHR' :: Ptr CommandBuffer_T
-> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
-> IO ()
vkCmdCopyAccelerationStructureToMemoryKHR' = FunPtr
  (Ptr CommandBuffer_T
   -> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
   -> IO ())
-> Ptr CommandBuffer_T
-> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
-> IO ()
mkVkCmdCopyAccelerationStructureToMemoryKHR FunPtr
  (Ptr CommandBuffer_T
   -> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
   -> IO ())
vkCmdCopyAccelerationStructureToMemoryKHRPtr
  "pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR
pInfo <- ((("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
  -> IO ())
 -> IO ())
-> ContT
     () IO ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
   -> IO ())
  -> IO ())
 -> ContT
      () IO ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR))
-> ((("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
     -> IO ())
    -> IO ())
-> ContT
     () IO ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
forall a b. (a -> b) -> a -> b
$ CopyAccelerationStructureToMemoryInfoKHR
-> (("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
    -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (CopyAccelerationStructureToMemoryInfoKHR
info)
  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 String
"vkCmdCopyAccelerationStructureToMemoryKHR" (Ptr CommandBuffer_T
-> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
-> IO ()
vkCmdCopyAccelerationStructureToMemoryKHR' (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer)) "pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR
pInfo)
  () -> 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" mkVkCopyAccelerationStructureToMemoryKHR
  :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> Ptr CopyAccelerationStructureToMemoryInfoKHR -> IO Result) -> Ptr Device_T -> DeferredOperationKHR -> Ptr CopyAccelerationStructureToMemoryInfoKHR -> IO Result

-- | vkCopyAccelerationStructureToMemoryKHR - Serialize an acceleration
-- structure on the host
--
-- = Description
--
-- This command fulfills the same task as
-- 'cmdCopyAccelerationStructureToMemoryKHR' but is executed by the host.
--
-- This command produces the same results as
-- 'cmdCopyAccelerationStructureToMemoryKHR', but writes its result
-- directly to a host pointer, and is executed on the host rather than the
-- device. The output /may/ not necessarily be bit-for-bit identical, but
-- it can be equally used by either
-- 'cmdCopyMemoryToAccelerationStructureKHR' or
-- 'copyMemoryToAccelerationStructureKHR'.
--
-- == Valid Usage
--
-- -   #VUID-vkCopyAccelerationStructureToMemoryKHR-deferredOperation-03677#
--     If @deferredOperation@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', it /must/ be a valid
--     'Vulkan.Extensions.Handles.DeferredOperationKHR' object
--
-- -   #VUID-vkCopyAccelerationStructureToMemoryKHR-deferredOperation-03678#
--     Any previous deferred operation that was associated with
--     @deferredOperation@ /must/ be complete
--
-- -   #VUID-vkCopyAccelerationStructureToMemoryKHR-buffer-03731# The
--     @buffer@ used to create @pInfo->src@ /must/ be bound to host-visible
--     device memory
--
-- -   #VUID-vkCopyAccelerationStructureToMemoryKHR-pInfo-03732#
--     @pInfo->dst.hostAddress@ /must/ be a valid host pointer
--
-- -   #VUID-vkCopyAccelerationStructureToMemoryKHR-pInfo-03751#
--     @pInfo->dst.hostAddress@ /must/ be aligned to 16 bytes
--
-- -   #VUID-vkCopyAccelerationStructureToMemoryKHR-accelerationStructureHostCommands-03584#
--     The
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-accelerationStructureHostCommands ::accelerationStructureHostCommands>
--     feature /must/ be enabled
--
-- -   #VUID-vkCopyAccelerationStructureToMemoryKHR-buffer-03783# The
--     @buffer@ used to create @pInfo->src@ /must/ be bound to memory that
--     was not allocated with multiple instances
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCopyAccelerationStructureToMemoryKHR-device-parameter#
--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkCopyAccelerationStructureToMemoryKHR-deferredOperation-parameter#
--     If @deferredOperation@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @deferredOperation@ /must/
--     be a valid 'Vulkan.Extensions.Handles.DeferredOperationKHR' handle
--
-- -   #VUID-vkCopyAccelerationStructureToMemoryKHR-pInfo-parameter#
--     @pInfo@ /must/ be a valid pointer to a valid
--     'CopyAccelerationStructureToMemoryInfoKHR' structure
--
-- -   #VUID-vkCopyAccelerationStructureToMemoryKHR-deferredOperation-parent#
--     If @deferredOperation@ 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'
--
-- [<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
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'CopyAccelerationStructureToMemoryInfoKHR',
-- 'Vulkan.Extensions.Handles.DeferredOperationKHR',
-- 'Vulkan.Core10.Handles.Device'
copyAccelerationStructureToMemoryKHR :: forall io
                                      . (MonadIO io)
                                     => -- | @device@ is the device which owns @pInfo->src@.
                                        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
                                     -> -- | @pInfo@ is a pointer to a 'CopyAccelerationStructureToMemoryInfoKHR'
                                        -- structure defining the copy operation.
                                        CopyAccelerationStructureToMemoryInfoKHR
                                     -> io (Result)
copyAccelerationStructureToMemoryKHR :: Device
-> DeferredOperationKHR
-> CopyAccelerationStructureToMemoryInfoKHR
-> io Result
copyAccelerationStructureToMemoryKHR Device
device DeferredOperationKHR
deferredOperation CopyAccelerationStructureToMemoryInfoKHR
info = IO Result -> io Result
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Result -> io Result)
-> (ContT Result IO Result -> IO Result)
-> ContT Result IO Result
-> io Result
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT Result IO Result -> IO Result
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Result IO Result -> io Result)
-> ContT Result IO Result -> io Result
forall a b. (a -> b) -> a -> b
$ do
  let vkCopyAccelerationStructureToMemoryKHRPtr :: FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
   -> IO Result)
vkCopyAccelerationStructureToMemoryKHRPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> DeferredOperationKHR
      -> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
      -> IO Result)
pVkCopyAccelerationStructureToMemoryKHR (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT Result IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT Result IO ()) -> IO () -> ContT Result IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
   -> IO Result)
vkCopyAccelerationStructureToMemoryKHRPtr FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> DeferredOperationKHR
      -> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
   -> 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 String
"" String
"The function pointer for vkCopyAccelerationStructureToMemoryKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCopyAccelerationStructureToMemoryKHR' :: Ptr Device_T
-> DeferredOperationKHR
-> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
-> IO Result
vkCopyAccelerationStructureToMemoryKHR' = FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
   -> IO Result)
-> Ptr Device_T
-> DeferredOperationKHR
-> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
-> IO Result
mkVkCopyAccelerationStructureToMemoryKHR FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
   -> IO Result)
vkCopyAccelerationStructureToMemoryKHRPtr
  "pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR
pInfo <- ((("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
  -> IO Result)
 -> IO Result)
-> ContT
     Result
     IO
     ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
   -> IO Result)
  -> IO Result)
 -> ContT
      Result
      IO
      ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR))
-> ((("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
     -> IO Result)
    -> IO Result)
-> ContT
     Result
     IO
     ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
forall a b. (a -> b) -> a -> b
$ CopyAccelerationStructureToMemoryInfoKHR
-> (("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
    -> IO Result)
-> IO Result
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (CopyAccelerationStructureToMemoryInfoKHR
info)
  Result
r <- IO Result -> ContT Result IO Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result -> ContT Result IO Result)
-> IO Result -> ContT Result IO Result
forall a b. (a -> b) -> a -> b
$ String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCopyAccelerationStructureToMemoryKHR" (Ptr Device_T
-> DeferredOperationKHR
-> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
-> IO Result
vkCopyAccelerationStructureToMemoryKHR' (Device -> Ptr Device_T
deviceHandle (Device
device)) (DeferredOperationKHR
deferredOperation) "pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR
pInfo)
  IO () -> ContT Result IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT Result IO ()) -> IO () -> ContT Result 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))
  Result -> ContT Result IO Result
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Result -> ContT Result IO Result)
-> Result -> ContT Result IO Result
forall a b. (a -> b) -> a -> b
$ (Result
r)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCmdCopyMemoryToAccelerationStructureKHR
  :: FunPtr (Ptr CommandBuffer_T -> Ptr CopyMemoryToAccelerationStructureInfoKHR -> IO ()) -> Ptr CommandBuffer_T -> Ptr CopyMemoryToAccelerationStructureInfoKHR -> IO ()

-- | vkCmdCopyMemoryToAccelerationStructureKHR - Copy device memory to an
-- acceleration structure
--
-- = Description
--
-- Accesses to @pInfo->dst@ /must/ be
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies synchronized>
-- with the
-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages pipeline stage>
-- and an
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types access type>
-- of
-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR'.
-- Accesses to the buffer indicated by @pInfo->src.deviceAddress@ /must/ be
-- synchronized with the
-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'
-- pipeline stage and an access type of
-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_TRANSFER_READ_BIT'.
--
-- This command can accept acceleration structures produced by either
-- 'cmdCopyAccelerationStructureToMemoryKHR' or
-- 'copyAccelerationStructureToMemoryKHR'.
--
-- The structure provided as input to deserialize is as described in
-- 'cmdCopyAccelerationStructureToMemoryKHR', with any acceleration
-- structure handles filled in with the newly-queried handles to bottom
-- level acceleration structures created before deserialization. These do
-- not need to be built at deserialize time, but /must/ be created.
--
-- == Valid Usage
--
-- -   #VUID-vkCmdCopyMemoryToAccelerationStructureKHR-pInfo-03742#
--     @pInfo->src.deviceAddress@ /must/ be a valid device address for a
--     buffer bound to device memory
--
-- -   #VUID-vkCmdCopyMemoryToAccelerationStructureKHR-pInfo-03743#
--     @pInfo->src.deviceAddress@ /must/ be aligned to @256@ bytes
--
-- -   #VUID-vkCmdCopyMemoryToAccelerationStructureKHR-pInfo-03744# If the
--     buffer pointed to by @pInfo->src.deviceAddress@ is non-sparse then
--     it /must/ be bound completely and contiguously to a single
--     'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdCopyMemoryToAccelerationStructureKHR-buffer-03745# The
--     @buffer@ used to create @pInfo->dst@ /must/ be bound to device
--     memory
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdCopyMemoryToAccelerationStructureKHR-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdCopyMemoryToAccelerationStructureKHR-pInfo-parameter#
--     @pInfo@ /must/ be a valid pointer to a valid
--     'CopyMemoryToAccelerationStructureInfoKHR' structure
--
-- -   #VUID-vkCmdCopyMemoryToAccelerationStructureKHR-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-vkCmdCopyMemoryToAccelerationStructureKHR-commandBuffer-cmdpool#
--     The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support compute operations
--
-- -   #VUID-vkCmdCopyMemoryToAccelerationStructureKHR-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> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |
-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'Vulkan.Core10.Handles.CommandBuffer',
-- 'CopyMemoryToAccelerationStructureInfoKHR'
cmdCopyMemoryToAccelerationStructureKHR :: forall io
                                         . (MonadIO io)
                                        => -- | @commandBuffer@ is the command buffer into which the command will be
                                           -- recorded.
                                           CommandBuffer
                                        -> -- | @pInfo@ is a pointer to a 'CopyMemoryToAccelerationStructureInfoKHR'
                                           -- structure defining the copy operation.
                                           CopyMemoryToAccelerationStructureInfoKHR
                                        -> io ()
cmdCopyMemoryToAccelerationStructureKHR :: CommandBuffer -> CopyMemoryToAccelerationStructureInfoKHR -> io ()
cmdCopyMemoryToAccelerationStructureKHR CommandBuffer
commandBuffer CopyMemoryToAccelerationStructureInfoKHR
info = 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 vkCmdCopyMemoryToAccelerationStructureKHRPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
   -> IO ())
vkCmdCopyMemoryToAccelerationStructureKHRPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
      -> IO ())
pVkCmdCopyMemoryToAccelerationStructureKHR (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  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
   -> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
   -> IO ())
vkCmdCopyMemoryToAccelerationStructureKHRPtr FunPtr
  (Ptr CommandBuffer_T
   -> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
   -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
   -> 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 String
"" String
"The function pointer for vkCmdCopyMemoryToAccelerationStructureKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdCopyMemoryToAccelerationStructureKHR' :: Ptr CommandBuffer_T
-> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
-> IO ()
vkCmdCopyMemoryToAccelerationStructureKHR' = FunPtr
  (Ptr CommandBuffer_T
   -> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
   -> IO ())
-> Ptr CommandBuffer_T
-> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
-> IO ()
mkVkCmdCopyMemoryToAccelerationStructureKHR FunPtr
  (Ptr CommandBuffer_T
   -> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
   -> IO ())
vkCmdCopyMemoryToAccelerationStructureKHRPtr
  "pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR
pInfo <- ((("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
  -> IO ())
 -> IO ())
-> ContT
     () IO ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
   -> IO ())
  -> IO ())
 -> ContT
      () IO ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR))
-> ((("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
     -> IO ())
    -> IO ())
-> ContT
     () IO ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
forall a b. (a -> b) -> a -> b
$ CopyMemoryToAccelerationStructureInfoKHR
-> (("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
    -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (CopyMemoryToAccelerationStructureInfoKHR
info)
  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 String
"vkCmdCopyMemoryToAccelerationStructureKHR" (Ptr CommandBuffer_T
-> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
-> IO ()
vkCmdCopyMemoryToAccelerationStructureKHR' (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer)) "pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR
pInfo)
  () -> 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" mkVkCopyMemoryToAccelerationStructureKHR
  :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> Ptr CopyMemoryToAccelerationStructureInfoKHR -> IO Result) -> Ptr Device_T -> DeferredOperationKHR -> Ptr CopyMemoryToAccelerationStructureInfoKHR -> IO Result

-- | vkCopyMemoryToAccelerationStructureKHR - Deserialize an acceleration
-- structure on the host
--
-- = Description
--
-- This command fulfills the same task as
-- 'cmdCopyMemoryToAccelerationStructureKHR' but is executed by the host.
--
-- This command can accept acceleration structures produced by either
-- 'cmdCopyAccelerationStructureToMemoryKHR' or
-- 'copyAccelerationStructureToMemoryKHR'.
--
-- == Valid Usage
--
-- -   #VUID-vkCopyMemoryToAccelerationStructureKHR-deferredOperation-03677#
--     If @deferredOperation@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', it /must/ be a valid
--     'Vulkan.Extensions.Handles.DeferredOperationKHR' object
--
-- -   #VUID-vkCopyMemoryToAccelerationStructureKHR-deferredOperation-03678#
--     Any previous deferred operation that was associated with
--     @deferredOperation@ /must/ be complete
--
-- -   #VUID-vkCopyMemoryToAccelerationStructureKHR-pInfo-03729#
--     @pInfo->src.hostAddress@ /must/ be a valid host pointer
--
-- -   #VUID-vkCopyMemoryToAccelerationStructureKHR-pInfo-03750#
--     @pInfo->src.hostAddress@ /must/ be aligned to 16 bytes
--
-- -   #VUID-vkCopyMemoryToAccelerationStructureKHR-buffer-03730# The
--     @buffer@ used to create @pInfo->dst@ /must/ be bound to host-visible
--     device memory
--
-- -   #VUID-vkCopyMemoryToAccelerationStructureKHR-accelerationStructureHostCommands-03583#
--     The
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-accelerationStructureHostCommands ::accelerationStructureHostCommands>
--     feature /must/ be enabled
--
-- -   #VUID-vkCopyMemoryToAccelerationStructureKHR-buffer-03782# The
--     @buffer@ used to create @pInfo->dst@ /must/ be bound to memory that
--     was not allocated with multiple instances
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCopyMemoryToAccelerationStructureKHR-device-parameter#
--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkCopyMemoryToAccelerationStructureKHR-deferredOperation-parameter#
--     If @deferredOperation@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @deferredOperation@ /must/
--     be a valid 'Vulkan.Extensions.Handles.DeferredOperationKHR' handle
--
-- -   #VUID-vkCopyMemoryToAccelerationStructureKHR-pInfo-parameter#
--     @pInfo@ /must/ be a valid pointer to a valid
--     'CopyMemoryToAccelerationStructureInfoKHR' structure
--
-- -   #VUID-vkCopyMemoryToAccelerationStructureKHR-deferredOperation-parent#
--     If @deferredOperation@ 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'
--
-- [<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
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'CopyMemoryToAccelerationStructureInfoKHR',
-- 'Vulkan.Extensions.Handles.DeferredOperationKHR',
-- 'Vulkan.Core10.Handles.Device'
copyMemoryToAccelerationStructureKHR :: forall io
                                      . (MonadIO io)
                                     => -- | @device@ is the device which owns @pInfo->dst@.
                                        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
                                     -> -- | @pInfo@ is a pointer to a 'CopyMemoryToAccelerationStructureInfoKHR'
                                        -- structure defining the copy operation.
                                        CopyMemoryToAccelerationStructureInfoKHR
                                     -> io (Result)
copyMemoryToAccelerationStructureKHR :: Device
-> DeferredOperationKHR
-> CopyMemoryToAccelerationStructureInfoKHR
-> io Result
copyMemoryToAccelerationStructureKHR Device
device DeferredOperationKHR
deferredOperation CopyMemoryToAccelerationStructureInfoKHR
info = IO Result -> io Result
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Result -> io Result)
-> (ContT Result IO Result -> IO Result)
-> ContT Result IO Result
-> io Result
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT Result IO Result -> IO Result
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Result IO Result -> io Result)
-> ContT Result IO Result -> io Result
forall a b. (a -> b) -> a -> b
$ do
  let vkCopyMemoryToAccelerationStructureKHRPtr :: FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
   -> IO Result)
vkCopyMemoryToAccelerationStructureKHRPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> DeferredOperationKHR
      -> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
      -> IO Result)
pVkCopyMemoryToAccelerationStructureKHR (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT Result IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT Result IO ()) -> IO () -> ContT Result IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
   -> IO Result)
vkCopyMemoryToAccelerationStructureKHRPtr FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> DeferredOperationKHR
      -> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
   -> 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 String
"" String
"The function pointer for vkCopyMemoryToAccelerationStructureKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCopyMemoryToAccelerationStructureKHR' :: Ptr Device_T
-> DeferredOperationKHR
-> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
-> IO Result
vkCopyMemoryToAccelerationStructureKHR' = FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
   -> IO Result)
-> Ptr Device_T
-> DeferredOperationKHR
-> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
-> IO Result
mkVkCopyMemoryToAccelerationStructureKHR FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
   -> IO Result)
vkCopyMemoryToAccelerationStructureKHRPtr
  "pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR
pInfo <- ((("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
  -> IO Result)
 -> IO Result)
-> ContT
     Result
     IO
     ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
   -> IO Result)
  -> IO Result)
 -> ContT
      Result
      IO
      ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR))
-> ((("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
     -> IO Result)
    -> IO Result)
-> ContT
     Result
     IO
     ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
forall a b. (a -> b) -> a -> b
$ CopyMemoryToAccelerationStructureInfoKHR
-> (("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
    -> IO Result)
-> IO Result
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (CopyMemoryToAccelerationStructureInfoKHR
info)
  Result
r <- IO Result -> ContT Result IO Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result -> ContT Result IO Result)
-> IO Result -> ContT Result IO Result
forall a b. (a -> b) -> a -> b
$ String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCopyMemoryToAccelerationStructureKHR" (Ptr Device_T
-> DeferredOperationKHR
-> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
-> IO Result
vkCopyMemoryToAccelerationStructureKHR' (Device -> Ptr Device_T
deviceHandle (Device
device)) (DeferredOperationKHR
deferredOperation) "pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR
pInfo)
  IO () -> ContT Result IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT Result IO ()) -> IO () -> ContT Result 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))
  Result -> ContT Result IO Result
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Result -> ContT Result IO Result)
-> Result -> ContT Result IO Result
forall a b. (a -> b) -> a -> b
$ (Result
r)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCmdWriteAccelerationStructuresPropertiesKHR
  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr AccelerationStructureKHR -> QueryType -> QueryPool -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr AccelerationStructureKHR -> QueryType -> QueryPool -> Word32 -> IO ()

-- | vkCmdWriteAccelerationStructuresPropertiesKHR - Write acceleration
-- structure result parameters to query results.
--
-- = Description
--
-- Accesses to any of the acceleration structures listed in
-- @pAccelerationStructures@ /must/ be
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies synchronized>
-- with the
-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages pipeline stage>
-- and an
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types access type>
-- of
-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR'.
--
-- -   If @queryType@ is
--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR',
--     then the value written out is the number of bytes required by a
--     compacted acceleration structure.
--
-- -   If @queryType@ is
--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR',
--     then the value written out is the number of bytes required by a
--     serialized acceleration structure.
--
-- == Valid Usage
--
-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryPool-02493#
--     @queryPool@ /must/ have been created with a @queryType@ matching
--     @queryType@
--
-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryPool-02494#
--     The queries identified by @queryPool@ and @firstQuery@ /must/ be
--     /unavailable/
--
-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-buffer-03736#
--     The @buffer@ used to create each acceleration structure in
--     @pAccelerationStructures@ /must/ be bound to device memory
--
-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-query-04880# The
--     sum of @query@ plus @accelerationStructureCount@ /must/ be less than
--     or equal to the number of queries in @queryPool@
--
-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-pAccelerationStructures-04964#
--     All acceleration structures in @pAccelerationStructures@ /must/ have
--     been built prior to the execution of this command
--
-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-accelerationStructures-03431#
--     All acceleration structures in @pAccelerationStructures@ /must/ have
--     been built with
--     'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' if
--     @queryType@ is
--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'
--
-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryType-03432#
--     @queryType@ /must/ be
--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'
--     or
--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-pAccelerationStructures-parameter#
--     @pAccelerationStructures@ /must/ be a valid pointer to an array of
--     @accelerationStructureCount@ valid
--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handles
--
-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryType-parameter#
--     @queryType@ /must/ be a valid
--     'Vulkan.Core10.Enums.QueryType.QueryType' value
--
-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryPool-parameter#
--     @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'
--     handle
--
-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-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-vkCmdWriteAccelerationStructuresPropertiesKHR-commandBuffer-cmdpool#
--     The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support compute operations
--
-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-renderpass# This
--     command /must/ only be called outside of a render pass instance
--
-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-accelerationStructureCount-arraylength#
--     @accelerationStructureCount@ /must/ be greater than @0@
--
-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-commonparent#
--     Each of @commandBuffer@, @queryPool@, and the elements of
--     @pAccelerationStructures@ /must/ have been created, allocated, or
--     retrieved from the same 'Vulkan.Core10.Handles.Device'
--
-- == 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> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |
-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
-- 'Vulkan.Core10.Handles.CommandBuffer',
-- 'Vulkan.Core10.Handles.QueryPool',
-- 'Vulkan.Core10.Enums.QueryType.QueryType'
cmdWriteAccelerationStructuresPropertiesKHR :: forall io
                                             . (MonadIO io)
                                            => -- | @commandBuffer@ is the command buffer into which the command will be
                                               -- recorded.
                                               CommandBuffer
                                            -> -- | @pAccelerationStructures@ is a pointer to an array of existing
                                               -- previously built acceleration structures.
                                               ("accelerationStructures" ::: Vector AccelerationStructureKHR)
                                            -> -- | @queryType@ is a 'Vulkan.Core10.Enums.QueryType.QueryType' value
                                               -- specifying the type of queries managed by the pool.
                                               QueryType
                                            -> -- | @queryPool@ is the query pool that will manage the results of the query.
                                               QueryPool
                                            -> -- | @firstQuery@ is the first query index within the query pool that will
                                               -- contain the @accelerationStructureCount@ number of results.
                                               ("firstQuery" ::: Word32)
                                            -> io ()
cmdWriteAccelerationStructuresPropertiesKHR :: CommandBuffer
-> ("accelerationStructures" ::: Vector AccelerationStructureKHR)
-> QueryType
-> QueryPool
-> ("firstQuery" ::: Word32)
-> io ()
cmdWriteAccelerationStructuresPropertiesKHR CommandBuffer
commandBuffer "accelerationStructures" ::: Vector AccelerationStructureKHR
accelerationStructures QueryType
queryType QueryPool
queryPool "firstQuery" ::: Word32
firstQuery = 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 vkCmdWriteAccelerationStructuresPropertiesKHRPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> ("firstQuery" ::: Word32)
   -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> QueryType
   -> QueryPool
   -> ("firstQuery" ::: Word32)
   -> IO ())
vkCmdWriteAccelerationStructuresPropertiesKHRPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("firstQuery" ::: Word32)
      -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
      -> QueryType
      -> QueryPool
      -> ("firstQuery" ::: Word32)
      -> IO ())
pVkCmdWriteAccelerationStructuresPropertiesKHR (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  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
   -> ("firstQuery" ::: Word32)
   -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> QueryType
   -> QueryPool
   -> ("firstQuery" ::: Word32)
   -> IO ())
vkCmdWriteAccelerationStructuresPropertiesKHRPtr FunPtr
  (Ptr CommandBuffer_T
   -> ("firstQuery" ::: Word32)
   -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> QueryType
   -> QueryPool
   -> ("firstQuery" ::: Word32)
   -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("firstQuery" ::: Word32)
      -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
      -> QueryType
      -> QueryPool
      -> ("firstQuery" ::: Word32)
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> ("firstQuery" ::: Word32)
   -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> QueryType
   -> QueryPool
   -> ("firstQuery" ::: 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 String
"" String
"The function pointer for vkCmdWriteAccelerationStructuresPropertiesKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdWriteAccelerationStructuresPropertiesKHR' :: Ptr CommandBuffer_T
-> ("firstQuery" ::: Word32)
-> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> QueryType
-> QueryPool
-> ("firstQuery" ::: Word32)
-> IO ()
vkCmdWriteAccelerationStructuresPropertiesKHR' = FunPtr
  (Ptr CommandBuffer_T
   -> ("firstQuery" ::: Word32)
   -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> QueryType
   -> QueryPool
   -> ("firstQuery" ::: Word32)
   -> IO ())
-> Ptr CommandBuffer_T
-> ("firstQuery" ::: Word32)
-> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> QueryType
-> QueryPool
-> ("firstQuery" ::: Word32)
-> IO ()
mkVkCmdWriteAccelerationStructuresPropertiesKHR FunPtr
  (Ptr CommandBuffer_T
   -> ("firstQuery" ::: Word32)
   -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> QueryType
   -> QueryPool
   -> ("firstQuery" ::: Word32)
   -> IO ())
vkCmdWriteAccelerationStructuresPropertiesKHRPtr
  "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
pPAccelerationStructures <- ((("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
  -> IO ())
 -> IO ())
-> ContT
     () IO ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> IO ())
  -> IO ())
 -> ContT
      () IO ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR))
-> ((("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
     -> IO ())
    -> IO ())
-> ContT
     () IO ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
forall a b. (a -> b) -> a -> b
$ Int
-> (("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
    -> IO ())
-> IO ()
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @AccelerationStructureKHR ((("accelerationStructures" ::: Vector AccelerationStructureKHR)
-> Int
forall a. Vector a -> Int
Data.Vector.length ("accelerationStructures" ::: Vector AccelerationStructureKHR
accelerationStructures)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
8)
  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
$ (Int -> AccelerationStructureKHR -> IO ())
-> ("accelerationStructures" ::: Vector AccelerationStructureKHR)
-> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i AccelerationStructureKHR
e -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> AccelerationStructureKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR
pPAccelerationStructures ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> Int
-> "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr AccelerationStructureKHR) (AccelerationStructureKHR
e)) ("accelerationStructures" ::: Vector AccelerationStructureKHR
accelerationStructures)
  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 String
"vkCmdWriteAccelerationStructuresPropertiesKHR" (Ptr CommandBuffer_T
-> ("firstQuery" ::: Word32)
-> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> QueryType
-> QueryPool
-> ("firstQuery" ::: Word32)
-> IO ()
vkCmdWriteAccelerationStructuresPropertiesKHR' (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer)) ((Int -> "firstQuery" ::: Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (("accelerationStructures" ::: Vector AccelerationStructureKHR)
-> Int
forall a. Vector a -> Int
Data.Vector.length (("accelerationStructures" ::: Vector AccelerationStructureKHR)
 -> Int)
-> ("accelerationStructures" ::: Vector AccelerationStructureKHR)
-> Int
forall a b. (a -> b) -> a -> b
$ ("accelerationStructures" ::: Vector AccelerationStructureKHR
accelerationStructures)) :: Word32)) ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR
pPAccelerationStructures) (QueryType
queryType) (QueryPool
queryPool) ("firstQuery" ::: Word32
firstQuery))
  () -> 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" mkVkWriteAccelerationStructuresPropertiesKHR
  :: FunPtr (Ptr Device_T -> Word32 -> Ptr AccelerationStructureKHR -> QueryType -> CSize -> Ptr () -> CSize -> IO Result) -> Ptr Device_T -> Word32 -> Ptr AccelerationStructureKHR -> QueryType -> CSize -> Ptr () -> CSize -> IO Result

-- | vkWriteAccelerationStructuresPropertiesKHR - Query acceleration
-- structure meta-data on the host
--
-- = Description
--
-- This command fulfills the same task as
-- 'cmdWriteAccelerationStructuresPropertiesKHR' but is executed by the
-- host.
--
-- == Valid Usage
--
-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-pAccelerationStructures-04964#
--     All acceleration structures in @pAccelerationStructures@ /must/ have
--     been built prior to the execution of this command
--
-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-accelerationStructures-03431#
--     All acceleration structures in @pAccelerationStructures@ /must/ have
--     been built with
--     'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' if
--     @queryType@ is
--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'
--
-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03432#
--     @queryType@ /must/ be
--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'
--     or
--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'
--
-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03448# If
--     @queryType@ is
--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR',
--     then @stride@ /must/ be a multiple of the size of
--     'Vulkan.Core10.FundamentalTypes.DeviceSize'
--
-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03449# If
--     @queryType@ is
--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR',
--     then @data@ /must/ point to a
--     'Vulkan.Core10.FundamentalTypes.DeviceSize'
--
-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03450# If
--     @queryType@ is
--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR',
--     then @stride@ /must/ be a multiple of the size of
--     'Vulkan.Core10.FundamentalTypes.DeviceSize'
--
-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03451# If
--     @queryType@ is
--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR',
--     then @data@ /must/ point to a
--     'Vulkan.Core10.FundamentalTypes.DeviceSize'
--
-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-dataSize-03452#
--     @dataSize@ /must/ be greater than or equal to
--     @accelerationStructureCount@*@stride@
--
-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-buffer-03733# The
--     @buffer@ used to create each acceleration structure in
--     @pAccelerationStructures@ /must/ be bound to host-visible device
--     memory
--
-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-accelerationStructureHostCommands-03585#
--     The
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-accelerationStructureHostCommands ::accelerationStructureHostCommands>
--     feature /must/ be enabled
--
-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-buffer-03784# The
--     @buffer@ used to create each acceleration structure in
--     @pAccelerationStructures@ /must/ be bound to memory that was not
--     allocated with multiple instances
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-device-parameter#
--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-pAccelerationStructures-parameter#
--     @pAccelerationStructures@ /must/ be a valid pointer to an array of
--     @accelerationStructureCount@ valid
--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handles
--
-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-parameter#
--     @queryType@ /must/ be a valid
--     'Vulkan.Core10.Enums.QueryType.QueryType' value
--
-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-pData-parameter#
--     @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes
--
-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-accelerationStructureCount-arraylength#
--     @accelerationStructureCount@ /must/ be greater than @0@
--
-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-dataSize-arraylength#
--     @dataSize@ /must/ be greater than @0@
--
-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-pAccelerationStructures-parent#
--     Each element of @pAccelerationStructures@ /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
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
-- 'Vulkan.Core10.Handles.Device',
-- 'Vulkan.Core10.Enums.QueryType.QueryType'
writeAccelerationStructuresPropertiesKHR :: forall io
                                          . (MonadIO io)
                                         => -- | @device@ is the device which owns the acceleration structures in
                                            -- @pAccelerationStructures@.
                                            Device
                                         -> -- | @pAccelerationStructures@ is a pointer to an array of existing
                                            -- previously built acceleration structures.
                                            ("accelerationStructures" ::: Vector AccelerationStructureKHR)
                                         -> -- | @queryType@ is a 'Vulkan.Core10.Enums.QueryType.QueryType' value
                                            -- specifying the property to be queried.
                                            QueryType
                                         -> -- | @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 ())
                                         -> -- | @stride@ is the stride in bytes between results for individual queries
                                            -- within @pData@.
                                            ("stride" ::: Word64)
                                         -> io ()
writeAccelerationStructuresPropertiesKHR :: Device
-> ("accelerationStructures" ::: Vector AccelerationStructureKHR)
-> QueryType
-> ("dataSize" ::: Word64)
-> ("data" ::: Ptr ())
-> ("dataSize" ::: Word64)
-> io ()
writeAccelerationStructuresPropertiesKHR Device
device "accelerationStructures" ::: Vector AccelerationStructureKHR
accelerationStructures QueryType
queryType "dataSize" ::: Word64
dataSize "data" ::: Ptr ()
data' "dataSize" ::: Word64
stride = 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 vkWriteAccelerationStructuresPropertiesKHRPtr :: FunPtr
  (Ptr Device_T
   -> ("firstQuery" ::: Word32)
   -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> QueryType
   -> ("dataSize" ::: CSize)
   -> ("data" ::: Ptr ())
   -> ("dataSize" ::: CSize)
   -> IO Result)
vkWriteAccelerationStructuresPropertiesKHRPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> ("firstQuery" ::: Word32)
      -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
      -> QueryType
      -> ("dataSize" ::: CSize)
      -> ("data" ::: Ptr ())
      -> ("dataSize" ::: CSize)
      -> IO Result)
pVkWriteAccelerationStructuresPropertiesKHR (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  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 Device_T
   -> ("firstQuery" ::: Word32)
   -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> QueryType
   -> ("dataSize" ::: CSize)
   -> ("data" ::: Ptr ())
   -> ("dataSize" ::: CSize)
   -> IO Result)
vkWriteAccelerationStructuresPropertiesKHRPtr FunPtr
  (Ptr Device_T
   -> ("firstQuery" ::: Word32)
   -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> QueryType
   -> ("dataSize" ::: CSize)
   -> ("data" ::: Ptr ())
   -> ("dataSize" ::: CSize)
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> ("firstQuery" ::: Word32)
      -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
      -> QueryType
      -> ("dataSize" ::: CSize)
      -> ("data" ::: Ptr ())
      -> ("dataSize" ::: CSize)
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> ("firstQuery" ::: Word32)
   -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> QueryType
   -> ("dataSize" ::: CSize)
   -> ("data" ::: Ptr ())
   -> ("dataSize" ::: CSize)
   -> 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 String
"" String
"The function pointer for vkWriteAccelerationStructuresPropertiesKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkWriteAccelerationStructuresPropertiesKHR' :: Ptr Device_T
-> ("firstQuery" ::: Word32)
-> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> QueryType
-> ("dataSize" ::: CSize)
-> ("data" ::: Ptr ())
-> ("dataSize" ::: CSize)
-> IO Result
vkWriteAccelerationStructuresPropertiesKHR' = FunPtr
  (Ptr Device_T
   -> ("firstQuery" ::: Word32)
   -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> QueryType
   -> ("dataSize" ::: CSize)
   -> ("data" ::: Ptr ())
   -> ("dataSize" ::: CSize)
   -> IO Result)
-> Ptr Device_T
-> ("firstQuery" ::: Word32)
-> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> QueryType
-> ("dataSize" ::: CSize)
-> ("data" ::: Ptr ())
-> ("dataSize" ::: CSize)
-> IO Result
mkVkWriteAccelerationStructuresPropertiesKHR FunPtr
  (Ptr Device_T
   -> ("firstQuery" ::: Word32)
   -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> QueryType
   -> ("dataSize" ::: CSize)
   -> ("data" ::: Ptr ())
   -> ("dataSize" ::: CSize)
   -> IO Result)
vkWriteAccelerationStructuresPropertiesKHRPtr
  "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
pPAccelerationStructures <- ((("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
  -> IO ())
 -> IO ())
-> ContT
     () IO ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> IO ())
  -> IO ())
 -> ContT
      () IO ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR))
-> ((("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
     -> IO ())
    -> IO ())
-> ContT
     () IO ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
forall a b. (a -> b) -> a -> b
$ Int
-> (("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
    -> IO ())
-> IO ()
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @AccelerationStructureKHR ((("accelerationStructures" ::: Vector AccelerationStructureKHR)
-> Int
forall a. Vector a -> Int
Data.Vector.length ("accelerationStructures" ::: Vector AccelerationStructureKHR
accelerationStructures)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
8)
  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
$ (Int -> AccelerationStructureKHR -> IO ())
-> ("accelerationStructures" ::: Vector AccelerationStructureKHR)
-> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i AccelerationStructureKHR
e -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> AccelerationStructureKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR
pPAccelerationStructures ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> Int
-> "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr AccelerationStructureKHR) (AccelerationStructureKHR
e)) ("accelerationStructures" ::: Vector AccelerationStructureKHR
accelerationStructures)
  Result
r <- IO Result -> ContT () IO Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result -> ContT () IO Result)
-> IO Result -> ContT () IO Result
forall a b. (a -> b) -> a -> b
$ String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkWriteAccelerationStructuresPropertiesKHR" (Ptr Device_T
-> ("firstQuery" ::: Word32)
-> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> QueryType
-> ("dataSize" ::: CSize)
-> ("data" ::: Ptr ())
-> ("dataSize" ::: CSize)
-> IO Result
vkWriteAccelerationStructuresPropertiesKHR' (Device -> Ptr Device_T
deviceHandle (Device
device)) ((Int -> "firstQuery" ::: Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (("accelerationStructures" ::: Vector AccelerationStructureKHR)
-> Int
forall a. Vector a -> Int
Data.Vector.length (("accelerationStructures" ::: Vector AccelerationStructureKHR)
 -> Int)
-> ("accelerationStructures" ::: Vector AccelerationStructureKHR)
-> Int
forall a b. (a -> b) -> a -> b
$ ("accelerationStructures" ::: Vector AccelerationStructureKHR
accelerationStructures)) :: Word32)) ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR
pPAccelerationStructures) (QueryType
queryType) (("dataSize" ::: Word64) -> "dataSize" ::: CSize
CSize ("dataSize" ::: Word64
dataSize)) ("data" ::: Ptr ()
data') (("dataSize" ::: Word64) -> "dataSize" ::: CSize
CSize ("dataSize" ::: Word64
stride)))
  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 ()
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" mkVkGetDeviceAccelerationStructureCompatibilityKHR
  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureVersionInfoKHR -> Ptr AccelerationStructureCompatibilityKHR -> IO ()) -> Ptr Device_T -> Ptr AccelerationStructureVersionInfoKHR -> Ptr AccelerationStructureCompatibilityKHR -> IO ()

-- | vkGetDeviceAccelerationStructureCompatibilityKHR - Check if a serialized
-- acceleration structure is compatible with the current device
--
-- == Valid Usage
--
-- -   #VUID-vkGetDeviceAccelerationStructureCompatibilityKHR-rayTracingPipeline-03661#
--     The
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayTracingPipeline rayTracingPipeline>
--     or
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayQuery rayQuery>
--     feature /must/ be enabled
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkGetDeviceAccelerationStructureCompatibilityKHR-device-parameter#
--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkGetDeviceAccelerationStructureCompatibilityKHR-pVersionInfo-parameter#
--     @pVersionInfo@ /must/ be a valid pointer to a valid
--     'AccelerationStructureVersionInfoKHR' structure
--
-- -   #VUID-vkGetDeviceAccelerationStructureCompatibilityKHR-pCompatibility-parameter#
--     @pCompatibility@ /must/ be a valid pointer to a
--     'AccelerationStructureCompatibilityKHR' value
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'AccelerationStructureCompatibilityKHR',
-- 'AccelerationStructureVersionInfoKHR', 'Vulkan.Core10.Handles.Device'
getDeviceAccelerationStructureCompatibilityKHR :: forall io
                                                . (MonadIO io)
                                               => -- | @device@ is the device to check the version against.
                                                  Device
                                               -> -- | @pVersionInfo@ is a pointer to a 'AccelerationStructureVersionInfoKHR'
                                                  -- structure specifying version information to check against the device.
                                                  AccelerationStructureVersionInfoKHR
                                               -> io (AccelerationStructureCompatibilityKHR)
getDeviceAccelerationStructureCompatibilityKHR :: Device
-> AccelerationStructureVersionInfoKHR
-> io AccelerationStructureCompatibilityKHR
getDeviceAccelerationStructureCompatibilityKHR Device
device AccelerationStructureVersionInfoKHR
versionInfo = IO AccelerationStructureCompatibilityKHR
-> io AccelerationStructureCompatibilityKHR
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO AccelerationStructureCompatibilityKHR
 -> io AccelerationStructureCompatibilityKHR)
-> (ContT
      AccelerationStructureCompatibilityKHR
      IO
      AccelerationStructureCompatibilityKHR
    -> IO AccelerationStructureCompatibilityKHR)
-> ContT
     AccelerationStructureCompatibilityKHR
     IO
     AccelerationStructureCompatibilityKHR
-> io AccelerationStructureCompatibilityKHR
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT
  AccelerationStructureCompatibilityKHR
  IO
  AccelerationStructureCompatibilityKHR
-> IO AccelerationStructureCompatibilityKHR
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   AccelerationStructureCompatibilityKHR
   IO
   AccelerationStructureCompatibilityKHR
 -> io AccelerationStructureCompatibilityKHR)
-> ContT
     AccelerationStructureCompatibilityKHR
     IO
     AccelerationStructureCompatibilityKHR
-> io AccelerationStructureCompatibilityKHR
forall a b. (a -> b) -> a -> b
$ do
  let vkGetDeviceAccelerationStructureCompatibilityKHRPtr :: FunPtr
  (Ptr Device_T
   -> ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
   -> ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
   -> IO ())
vkGetDeviceAccelerationStructureCompatibilityKHRPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
      -> ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
      -> IO ())
pVkGetDeviceAccelerationStructureCompatibilityKHR (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT AccelerationStructureCompatibilityKHR IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT AccelerationStructureCompatibilityKHR IO ())
-> IO () -> ContT AccelerationStructureCompatibilityKHR IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
   -> ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
   -> IO ())
vkGetDeviceAccelerationStructureCompatibilityKHRPtr FunPtr
  (Ptr Device_T
   -> ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
   -> ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
   -> IO ())
-> FunPtr
     (Ptr Device_T
      -> ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
      -> ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
   -> ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
   -> 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 String
"" String
"The function pointer for vkGetDeviceAccelerationStructureCompatibilityKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetDeviceAccelerationStructureCompatibilityKHR' :: Ptr Device_T
-> ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
-> ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
-> IO ()
vkGetDeviceAccelerationStructureCompatibilityKHR' = FunPtr
  (Ptr Device_T
   -> ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
   -> ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
   -> IO ())
-> Ptr Device_T
-> ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
-> ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
-> IO ()
mkVkGetDeviceAccelerationStructureCompatibilityKHR FunPtr
  (Ptr Device_T
   -> ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
   -> ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
   -> IO ())
vkGetDeviceAccelerationStructureCompatibilityKHRPtr
  "pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR
pVersionInfo <- ((("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
  -> IO AccelerationStructureCompatibilityKHR)
 -> IO AccelerationStructureCompatibilityKHR)
-> ContT
     AccelerationStructureCompatibilityKHR
     IO
     ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
   -> IO AccelerationStructureCompatibilityKHR)
  -> IO AccelerationStructureCompatibilityKHR)
 -> ContT
      AccelerationStructureCompatibilityKHR
      IO
      ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR))
-> ((("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
     -> IO AccelerationStructureCompatibilityKHR)
    -> IO AccelerationStructureCompatibilityKHR)
-> ContT
     AccelerationStructureCompatibilityKHR
     IO
     ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
forall a b. (a -> b) -> a -> b
$ AccelerationStructureVersionInfoKHR
-> (("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
    -> IO AccelerationStructureCompatibilityKHR)
-> IO AccelerationStructureCompatibilityKHR
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (AccelerationStructureVersionInfoKHR
versionInfo)
  "pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR
pPCompatibility <- ((("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
  -> IO AccelerationStructureCompatibilityKHR)
 -> IO AccelerationStructureCompatibilityKHR)
-> ContT
     AccelerationStructureCompatibilityKHR
     IO
     ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
   -> IO AccelerationStructureCompatibilityKHR)
  -> IO AccelerationStructureCompatibilityKHR)
 -> ContT
      AccelerationStructureCompatibilityKHR
      IO
      ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR))
-> ((("pCompatibility"
      ::: Ptr AccelerationStructureCompatibilityKHR)
     -> IO AccelerationStructureCompatibilityKHR)
    -> IO AccelerationStructureCompatibilityKHR)
-> ContT
     AccelerationStructureCompatibilityKHR
     IO
     ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
forall a b. (a -> b) -> a -> b
$ IO ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
-> (("pCompatibility"
     ::: Ptr AccelerationStructureCompatibilityKHR)
    -> IO ())
-> (("pCompatibility"
     ::: Ptr AccelerationStructureCompatibilityKHR)
    -> IO AccelerationStructureCompatibilityKHR)
-> IO AccelerationStructureCompatibilityKHR
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (Int
-> IO
     ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
forall a. Int -> IO (Ptr a)
callocBytes @AccelerationStructureCompatibilityKHR Int
4) ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
-> IO ()
forall a. Ptr a -> IO ()
free
  IO () -> ContT AccelerationStructureCompatibilityKHR IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT AccelerationStructureCompatibilityKHR IO ())
-> IO () -> ContT AccelerationStructureCompatibilityKHR IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetDeviceAccelerationStructureCompatibilityKHR" (Ptr Device_T
-> ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
-> ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
-> IO ()
vkGetDeviceAccelerationStructureCompatibilityKHR' (Device -> Ptr Device_T
deviceHandle (Device
device)) "pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR
pVersionInfo ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR
pPCompatibility))
  AccelerationStructureCompatibilityKHR
pCompatibility <- IO AccelerationStructureCompatibilityKHR
-> ContT
     AccelerationStructureCompatibilityKHR
     IO
     AccelerationStructureCompatibilityKHR
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO AccelerationStructureCompatibilityKHR
 -> ContT
      AccelerationStructureCompatibilityKHR
      IO
      AccelerationStructureCompatibilityKHR)
-> IO AccelerationStructureCompatibilityKHR
-> ContT
     AccelerationStructureCompatibilityKHR
     IO
     AccelerationStructureCompatibilityKHR
forall a b. (a -> b) -> a -> b
$ ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
-> IO AccelerationStructureCompatibilityKHR
forall a. Storable a => Ptr a -> IO a
peek @AccelerationStructureCompatibilityKHR "pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR
pPCompatibility
  AccelerationStructureCompatibilityKHR
-> ContT
     AccelerationStructureCompatibilityKHR
     IO
     AccelerationStructureCompatibilityKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (AccelerationStructureCompatibilityKHR
 -> ContT
      AccelerationStructureCompatibilityKHR
      IO
      AccelerationStructureCompatibilityKHR)
-> AccelerationStructureCompatibilityKHR
-> ContT
     AccelerationStructureCompatibilityKHR
     IO
     AccelerationStructureCompatibilityKHR
forall a b. (a -> b) -> a -> b
$ (AccelerationStructureCompatibilityKHR
pCompatibility)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCreateAccelerationStructureKHR
  :: FunPtr (Ptr Device_T -> Ptr (SomeStruct AccelerationStructureCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr AccelerationStructureKHR -> IO Result) -> Ptr Device_T -> Ptr (SomeStruct AccelerationStructureCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr AccelerationStructureKHR -> IO Result

-- | vkCreateAccelerationStructureKHR - Create a new acceleration structure
-- object
--
-- = Description
--
-- Similar to other objects in Vulkan, the acceleration structure creation
-- merely creates an object with a specific “shape”. The type and quantity
-- of geometry that can be built into an acceleration structure is
-- determined by the parameters of 'AccelerationStructureCreateInfoKHR'.
--
-- Populating the data in the object after allocating and binding memory is
-- done with commands such as 'cmdBuildAccelerationStructuresKHR',
-- 'buildAccelerationStructuresKHR', 'cmdCopyAccelerationStructureKHR', and
-- 'copyAccelerationStructureKHR'.
--
-- The input buffers passed to acceleration structure build commands will
-- be referenced by the implementation for the duration of the command.
-- After the command completes, the acceleration structure /may/ hold a
-- reference to any acceleration structure specified by an active instance
-- contained therein. Apart from this referencing, acceleration structures
-- /must/ be fully self-contained. The application /may/ re-use or free any
-- memory which was used by the command as an input or as scratch without
-- affecting the results of ray traversal.
--
-- == Valid Usage
--
-- -   #VUID-vkCreateAccelerationStructureKHR-accelerationStructure-03611#
--     The
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-accelerationStructure accelerationStructure>
--     feature /must/ be enabled
--
-- -   #VUID-vkCreateAccelerationStructureKHR-deviceAddress-03488# If
--     'AccelerationStructureCreateInfoKHR'::@deviceAddress@ is not zero,
--     the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-accelerationStructureCaptureReplay accelerationStructureCaptureReplay>
--     feature /must/ be enabled
--
-- -   #VUID-vkCreateAccelerationStructureKHR-device-03489# If @device@ was
--     created with multiple physical devices, then the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice>
--     feature /must/ be enabled
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCreateAccelerationStructureKHR-device-parameter# @device@
--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkCreateAccelerationStructureKHR-pCreateInfo-parameter#
--     @pCreateInfo@ /must/ be a valid pointer to a valid
--     'AccelerationStructureCreateInfoKHR' structure
--
-- -   #VUID-vkCreateAccelerationStructureKHR-pAllocator-parameter# If
--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer
--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
--     structure
--
-- -   #VUID-vkCreateAccelerationStructureKHR-pAccelerationStructure-parameter#
--     @pAccelerationStructure@ /must/ be a valid pointer to a
--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
--
-- == 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.Extensions.VK_KHR_buffer_device_address.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'AccelerationStructureCreateInfoKHR',
-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
-- 'Vulkan.Core10.Handles.Device'
createAccelerationStructureKHR :: forall a io
                                . (Extendss AccelerationStructureCreateInfoKHR a, PokeChain a, MonadIO io)
                               => -- | @device@ is the logical device that creates the acceleration structure
                                  -- object.
                                  Device
                               -> -- | @pCreateInfo@ is a pointer to a 'AccelerationStructureCreateInfoKHR'
                                  -- structure containing parameters affecting creation of the acceleration
                                  -- structure.
                                  (AccelerationStructureCreateInfoKHR a)
                               -> -- | @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 (AccelerationStructureKHR)
createAccelerationStructureKHR :: Device
-> AccelerationStructureCreateInfoKHR a
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io AccelerationStructureKHR
createAccelerationStructureKHR Device
device AccelerationStructureCreateInfoKHR a
createInfo "allocator" ::: Maybe AllocationCallbacks
allocator = IO AccelerationStructureKHR -> io AccelerationStructureKHR
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO AccelerationStructureKHR -> io AccelerationStructureKHR)
-> (ContT AccelerationStructureKHR IO AccelerationStructureKHR
    -> IO AccelerationStructureKHR)
-> ContT AccelerationStructureKHR IO AccelerationStructureKHR
-> io AccelerationStructureKHR
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT AccelerationStructureKHR IO AccelerationStructureKHR
-> IO AccelerationStructureKHR
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT AccelerationStructureKHR IO AccelerationStructureKHR
 -> io AccelerationStructureKHR)
-> ContT AccelerationStructureKHR IO AccelerationStructureKHR
-> io AccelerationStructureKHR
forall a b. (a -> b) -> a -> b
$ do
  let vkCreateAccelerationStructureKHRPtr :: FunPtr
  (Ptr Device_T
   -> ("pCreateInfo"
       ::: Ptr (SomeStruct AccelerationStructureCreateInfoKHR))
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> IO Result)
vkCreateAccelerationStructureKHRPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> ("pCreateInfo"
          ::: Ptr (SomeStruct AccelerationStructureCreateInfoKHR))
      -> ("pAllocator" ::: Ptr AllocationCallbacks)
      -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
      -> IO Result)
pVkCreateAccelerationStructureKHR (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT AccelerationStructureKHR IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT AccelerationStructureKHR IO ())
-> IO () -> ContT AccelerationStructureKHR IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> ("pCreateInfo"
       ::: Ptr (SomeStruct AccelerationStructureCreateInfoKHR))
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> IO Result)
vkCreateAccelerationStructureKHRPtr FunPtr
  (Ptr Device_T
   -> ("pCreateInfo"
       ::: Ptr (SomeStruct AccelerationStructureCreateInfoKHR))
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> ("pCreateInfo"
          ::: Ptr (SomeStruct AccelerationStructureCreateInfoKHR))
      -> ("pAllocator" ::: Ptr AllocationCallbacks)
      -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> ("pCreateInfo"
       ::: Ptr (SomeStruct AccelerationStructureCreateInfoKHR))
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> 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 String
"" String
"The function pointer for vkCreateAccelerationStructureKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCreateAccelerationStructureKHR' :: Ptr Device_T
-> ("pCreateInfo"
    ::: Ptr (SomeStruct AccelerationStructureCreateInfoKHR))
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> IO Result
vkCreateAccelerationStructureKHR' = FunPtr
  (Ptr Device_T
   -> ("pCreateInfo"
       ::: Ptr (SomeStruct AccelerationStructureCreateInfoKHR))
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> IO Result)
-> Ptr Device_T
-> ("pCreateInfo"
    ::: Ptr (SomeStruct AccelerationStructureCreateInfoKHR))
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> IO Result
mkVkCreateAccelerationStructureKHR FunPtr
  (Ptr Device_T
   -> ("pCreateInfo"
       ::: Ptr (SomeStruct AccelerationStructureCreateInfoKHR))
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> IO Result)
vkCreateAccelerationStructureKHRPtr
  Ptr (AccelerationStructureCreateInfoKHR a)
pCreateInfo <- ((Ptr (AccelerationStructureCreateInfoKHR a)
  -> IO AccelerationStructureKHR)
 -> IO AccelerationStructureKHR)
-> ContT
     AccelerationStructureKHR
     IO
     (Ptr (AccelerationStructureCreateInfoKHR a))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (AccelerationStructureCreateInfoKHR a)
   -> IO AccelerationStructureKHR)
  -> IO AccelerationStructureKHR)
 -> ContT
      AccelerationStructureKHR
      IO
      (Ptr (AccelerationStructureCreateInfoKHR a)))
-> ((Ptr (AccelerationStructureCreateInfoKHR a)
     -> IO AccelerationStructureKHR)
    -> IO AccelerationStructureKHR)
-> ContT
     AccelerationStructureKHR
     IO
     (Ptr (AccelerationStructureCreateInfoKHR a))
forall a b. (a -> b) -> a -> b
$ AccelerationStructureCreateInfoKHR a
-> (Ptr (AccelerationStructureCreateInfoKHR a)
    -> IO AccelerationStructureKHR)
-> IO AccelerationStructureKHR
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (AccelerationStructureCreateInfoKHR a
createInfo)
  "pAllocator" ::: Ptr AllocationCallbacks
pAllocator <- case ("allocator" ::: Maybe AllocationCallbacks
allocator) of
    "allocator" ::: Maybe AllocationCallbacks
Nothing -> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ContT
     AccelerationStructureKHR
     IO
     ("pAllocator" ::: Ptr AllocationCallbacks)
forall (f :: * -> *) a. Applicative f => a -> f a
pure "pAllocator" ::: Ptr AllocationCallbacks
forall a. Ptr a
nullPtr
    Just AllocationCallbacks
j -> ((("pAllocator" ::: Ptr AllocationCallbacks)
  -> IO AccelerationStructureKHR)
 -> IO AccelerationStructureKHR)
-> ContT
     AccelerationStructureKHR
     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 AccelerationStructureKHR)
  -> IO AccelerationStructureKHR)
 -> ContT
      AccelerationStructureKHR
      IO
      ("pAllocator" ::: Ptr AllocationCallbacks))
-> ((("pAllocator" ::: Ptr AllocationCallbacks)
     -> IO AccelerationStructureKHR)
    -> IO AccelerationStructureKHR)
-> ContT
     AccelerationStructureKHR
     IO
     ("pAllocator" ::: Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks
-> (("pAllocator" ::: Ptr AllocationCallbacks)
    -> IO AccelerationStructureKHR)
-> IO AccelerationStructureKHR
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
  "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
pPAccelerationStructure <- ((("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
  -> IO AccelerationStructureKHR)
 -> IO AccelerationStructureKHR)
-> ContT
     AccelerationStructureKHR
     IO
     ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> IO AccelerationStructureKHR)
  -> IO AccelerationStructureKHR)
 -> ContT
      AccelerationStructureKHR
      IO
      ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR))
-> ((("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
     -> IO AccelerationStructureKHR)
    -> IO AccelerationStructureKHR)
-> ContT
     AccelerationStructureKHR
     IO
     ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
forall a b. (a -> b) -> a -> b
$ IO ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> (("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
    -> IO ())
-> (("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
    -> IO AccelerationStructureKHR)
-> IO AccelerationStructureKHR
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (Int
-> IO ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
forall a. Int -> IO (Ptr a)
callocBytes @AccelerationStructureKHR Int
8) ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> IO ()
forall a. Ptr a -> IO ()
free
  Result
r <- IO Result -> ContT AccelerationStructureKHR IO Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result -> ContT AccelerationStructureKHR IO Result)
-> IO Result -> ContT AccelerationStructureKHR IO Result
forall a b. (a -> b) -> a -> b
$ String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCreateAccelerationStructureKHR" (Ptr Device_T
-> ("pCreateInfo"
    ::: Ptr (SomeStruct AccelerationStructureCreateInfoKHR))
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> IO Result
vkCreateAccelerationStructureKHR' (Device -> Ptr Device_T
deviceHandle (Device
device)) (Ptr (AccelerationStructureCreateInfoKHR a)
-> "pCreateInfo"
   ::: Ptr (SomeStruct AccelerationStructureCreateInfoKHR)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions Ptr (AccelerationStructureCreateInfoKHR a)
pCreateInfo) "pAllocator" ::: Ptr AllocationCallbacks
pAllocator ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR
pPAccelerationStructure))
  IO () -> ContT AccelerationStructureKHR IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT AccelerationStructureKHR IO ())
-> IO () -> ContT AccelerationStructureKHR 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))
  AccelerationStructureKHR
pAccelerationStructure <- IO AccelerationStructureKHR
-> ContT AccelerationStructureKHR IO AccelerationStructureKHR
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO AccelerationStructureKHR
 -> ContT AccelerationStructureKHR IO AccelerationStructureKHR)
-> IO AccelerationStructureKHR
-> ContT AccelerationStructureKHR IO AccelerationStructureKHR
forall a b. (a -> b) -> a -> b
$ ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> IO AccelerationStructureKHR
forall a. Storable a => Ptr a -> IO a
peek @AccelerationStructureKHR "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
pPAccelerationStructure
  AccelerationStructureKHR
-> ContT AccelerationStructureKHR IO AccelerationStructureKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (AccelerationStructureKHR
 -> ContT AccelerationStructureKHR IO AccelerationStructureKHR)
-> AccelerationStructureKHR
-> ContT AccelerationStructureKHR IO AccelerationStructureKHR
forall a b. (a -> b) -> a -> b
$ (AccelerationStructureKHR
pAccelerationStructure)

-- | A convenience wrapper to make a compatible pair of calls to
-- 'createAccelerationStructureKHR' and 'destroyAccelerationStructureKHR'
--
-- To ensure that 'destroyAccelerationStructureKHR' 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.
--
withAccelerationStructureKHR :: forall a io r . (Extendss AccelerationStructureCreateInfoKHR a, PokeChain a, MonadIO io) => Device -> AccelerationStructureCreateInfoKHR a -> Maybe AllocationCallbacks -> (io AccelerationStructureKHR -> (AccelerationStructureKHR -> io ()) -> r) -> r
withAccelerationStructureKHR :: Device
-> AccelerationStructureCreateInfoKHR a
-> ("allocator" ::: Maybe AllocationCallbacks)
-> (io AccelerationStructureKHR
    -> (AccelerationStructureKHR -> io ()) -> r)
-> r
withAccelerationStructureKHR Device
device AccelerationStructureCreateInfoKHR a
pCreateInfo "allocator" ::: Maybe AllocationCallbacks
pAllocator io AccelerationStructureKHR
-> (AccelerationStructureKHR -> io ()) -> r
b =
  io AccelerationStructureKHR
-> (AccelerationStructureKHR -> io ()) -> r
b (Device
-> AccelerationStructureCreateInfoKHR a
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io AccelerationStructureKHR
forall (a :: [*]) (io :: * -> *).
(Extendss AccelerationStructureCreateInfoKHR a, PokeChain a,
 MonadIO io) =>
Device
-> AccelerationStructureCreateInfoKHR a
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io AccelerationStructureKHR
createAccelerationStructureKHR Device
device AccelerationStructureCreateInfoKHR a
pCreateInfo "allocator" ::: Maybe AllocationCallbacks
pAllocator)
    (\(AccelerationStructureKHR
o0) -> Device
-> AccelerationStructureKHR
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
forall (io :: * -> *).
MonadIO io =>
Device
-> AccelerationStructureKHR
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
destroyAccelerationStructureKHR Device
device AccelerationStructureKHR
o0 "allocator" ::: Maybe AllocationCallbacks
pAllocator)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCmdBuildAccelerationStructuresKHR
  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr AccelerationStructureBuildGeometryInfoKHR -> Ptr (Ptr AccelerationStructureBuildRangeInfoKHR) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr AccelerationStructureBuildGeometryInfoKHR -> Ptr (Ptr AccelerationStructureBuildRangeInfoKHR) -> IO ()

-- | vkCmdBuildAccelerationStructuresKHR - Build an acceleration structure
--
-- = Description
--
-- The 'cmdBuildAccelerationStructuresKHR' command provides the ability to
-- initiate multiple acceleration structures builds, however there is no
-- ordering or synchronization implied between any of the individual
-- acceleration structure builds.
--
-- Note
--
-- This means that an application /cannot/ build a top-level acceleration
-- structure in the same 'cmdBuildAccelerationStructuresKHR' call as the
-- associated bottom-level or instance acceleration structures are being
-- built. There also /cannot/ be any memory aliasing between any
-- acceleration structure memories or scratch memories being used by any of
-- the builds.
--
-- Accesses to the acceleration structure scratch buffers as identified by
-- the 'AccelerationStructureBuildGeometryInfoKHR'::@scratchData@ buffer
-- device addresses /must/ be
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies synchronized>
-- with the
-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages pipeline stage>
-- and an
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types access type>
-- of
-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR'
-- or
-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR'.
-- Similarly for accesses to each
-- 'AccelerationStructureBuildGeometryInfoKHR'::@srcAccelerationStructure@
-- and
-- 'AccelerationStructureBuildGeometryInfoKHR'::@dstAccelerationStructure@.
--
-- Accesses to other input buffers as identified by any used values of
-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureGeometryMotionTrianglesDataNV'::@vertexData@,
-- 'AccelerationStructureGeometryTrianglesDataKHR'::@vertexData@,
-- 'AccelerationStructureGeometryTrianglesDataKHR'::@indexData@,
-- 'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@,
-- 'AccelerationStructureGeometryAabbsDataKHR'::@data@, and
-- 'AccelerationStructureGeometryInstancesDataKHR'::@data@ /must/ be
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies synchronized>
-- with the
-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages pipeline stage>
-- and an
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types access type>
-- of 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_SHADER_READ_BIT'.
--
-- == Valid Usage
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-mode-04628# The @mode@
--     member of each element of @pInfos@ /must/ be a valid
--     'BuildAccelerationStructureModeKHR' value
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-srcAccelerationStructure-04629#
--     If the @srcAccelerationStructure@ member of any element of @pInfos@
--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the
--     @srcAccelerationStructure@ member /must/ be a valid
--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-04630# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', its
--     @srcAccelerationStructure@ member /must/ not be
--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03403# The
--     @srcAccelerationStructure@ member of any element of @pInfos@ /must/
--     not be the same acceleration structure as the
--     @dstAccelerationStructure@ member of any other element of @pInfos@
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-dstAccelerationStructure-03698#
--     The @dstAccelerationStructure@ member of any element of @pInfos@
--     /must/ not be the same acceleration structure as the
--     @dstAccelerationStructure@ member of any other element of @pInfos@
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-dstAccelerationStructure-03800#
--     The @dstAccelerationStructure@ member of any element of @pInfos@
--     /must/ be a valid
--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03699# For each
--     element of @pInfos@, if its @type@ member is
--     'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR', its
--     @dstAccelerationStructure@ member /must/ have been created with a
--     value of 'AccelerationStructureCreateInfoKHR'::@type@ equal to
--     either 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR' or
--     'ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR'
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03700# For each
--     element of @pInfos@, if its @type@ member is
--     'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR', its
--     @dstAccelerationStructure@ member /must/ have been created with a
--     value of 'AccelerationStructureCreateInfoKHR'::@type@ equal to
--     either 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' or
--     'ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR'
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03663# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR',
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims inactive primitives>
--     in its @srcAccelerationStructure@ member /must/ not be made active
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03664# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', active primitives in
--     its @srcAccelerationStructure@ member /must/ not be made
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims inactive>
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-None-03407# The
--     @dstAccelerationStructure@ member of any element of @pInfos@ /must/
--     not be referenced by the @geometry.instances.data@ member of any
--     element of @pGeometries@ or @ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_INSTANCES_KHR' in any other element of @pInfos@
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-dstAccelerationStructure-03701#
--     The range of memory backing the @dstAccelerationStructure@ member of
--     any element of @pInfos@ that is accessed by this command /must/ not
--     overlap the memory backing the @srcAccelerationStructure@ member of
--     any other element of @pInfos@ with a @mode@ equal to
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', which is accessed by
--     this command
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-dstAccelerationStructure-03702#
--     The range of memory backing the @dstAccelerationStructure@ member of
--     any element of @pInfos@ that is accessed by this command /must/ not
--     overlap the memory backing the @dstAccelerationStructure@ member of
--     any other element of @pInfos@, which is accessed by this command
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-dstAccelerationStructure-03703#
--     The range of memory backing the @dstAccelerationStructure@ member of
--     any element of @pInfos@ that is accessed by this command /must/ not
--     overlap the memory backing the @scratchData@ member of any element
--     of @pInfos@ (including the same element), which is accessed by this
--     command
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-scratchData-03704# The
--     range of memory backing the @scratchData@ member of any element of
--     @pInfos@ that is accessed by this command /must/ not overlap the
--     memory backing the @scratchData@ member of any other element of
--     @pInfos@, which is accessed by this command
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-scratchData-03705# The
--     range of memory backing the @scratchData@ member of any element of
--     @pInfos@ that is accessed by this command /must/ not overlap the
--     memory backing the @srcAccelerationStructure@ member of any element
--     of @pInfos@ with a @mode@ equal to
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR' (including the same
--     element), which is accessed by this command
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-dstAccelerationStructure-03706#
--     The range of memory backing the @dstAccelerationStructure@ member of
--     any element of @pInfos@ that is accessed by this command /must/ not
--     overlap the memory backing any acceleration structure referenced by
--     the @geometry.instances.data@ member of any element of @pGeometries@
--     or @ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_INSTANCES_KHR' in any other element of @pInfos@,
--     which is accessed by this command
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03667# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', its
--     @srcAccelerationStructure@ member /must/ have previously been
--     constructed with 'BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR'
--     set in 'AccelerationStructureBuildGeometryInfoKHR'::@flags@ in the
--     build
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03668# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', its
--     @srcAccelerationStructure@ and @dstAccelerationStructure@ members
--     /must/ either be the same
--     'Vulkan.Extensions.Handles.AccelerationStructureKHR', or not have
--     any
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03758# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', its @geometryCount@
--     member /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03759# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', its @flags@ member
--     /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03760# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', its @type@ member
--     /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03761# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, its @geometryType@ member
--     /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03762# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, its @flags@ member /must/
--     have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03763# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, if @geometryType@ is
--     'GEOMETRY_TYPE_TRIANGLES_KHR', its @geometry.triangles.vertexFormat@
--     member /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03764# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, if @geometryType@ is
--     'GEOMETRY_TYPE_TRIANGLES_KHR', its @geometry.triangles.maxVertex@
--     member /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03765# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, if @geometryType@ is
--     'GEOMETRY_TYPE_TRIANGLES_KHR', its @geometry.triangles.indexType@
--     member /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03766# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, if @geometryType@ is
--     'GEOMETRY_TYPE_TRIANGLES_KHR', if its
--     @geometry.triangles.transformData@ address was @NULL@ when
--     @srcAccelerationStructure@ was last built, then it /must/ be @NULL@
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03767# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, if @geometryType@ is
--     'GEOMETRY_TYPE_TRIANGLES_KHR', if its
--     @geometry.triangles.transformData@ address was not @NULL@ when
--     @srcAccelerationStructure@ was last built, then it /must/ not be
--     @NULL@
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03768# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, if @geometryType@ is
--     'GEOMETRY_TYPE_TRIANGLES_KHR', and @geometry.triangles.indexType@ is
--     not 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR', then the
--     value of each index referenced /must/ be the same as the
--     corresponding index value when @srcAccelerationStructure@ was last
--     built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-primitiveCount-03769# For
--     each 'AccelerationStructureBuildRangeInfoKHR' referenced by this
--     command, its @primitiveCount@ member /must/ have the same value
--     which was specified when @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-firstVertex-03770# For
--     each 'AccelerationStructureBuildRangeInfoKHR' referenced by this
--     command, if the corresponding geometry uses indices, its
--     @firstVertex@ member /must/ have the same value which was specified
--     when @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03801# For each
--     element of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@
--     with a @geometryType@ of 'GEOMETRY_TYPE_INSTANCES_KHR', the
--     corresponding @ppBuildRangeInfos@[i][j].@primitiveCount@ /must/ be
--     less than or equal to
--     'PhysicalDeviceAccelerationStructurePropertiesKHR'::@maxInstanceCount@
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03707# For each
--     element of @pInfos@, the @buffer@ used to create its
--     @dstAccelerationStructure@ member /must/ be bound to device memory
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03708# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR' the @buffer@ used to
--     create its @srcAccelerationStructure@ member /must/ be bound to
--     device memory
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03709# For each
--     element of @pInfos@, the @buffer@ used to create each acceleration
--     structure referenced by the @geometry.instances.data@ member of any
--     element of @pGeometries@ or @ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_INSTANCES_KHR' /must/ be bound to device memory
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03671# If
--     @pInfos@[i].@mode@ is 'BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR',
--     all addresses between @pInfos@[i].@scratchData.deviceAddress@ and
--     @pInfos@[i].@scratchData.deviceAddress@ + N - 1 /must/ be in the
--     buffer device address range of the same buffer, where N is given by
--     the @buildScratchSize@ member of the
--     'AccelerationStructureBuildSizesInfoKHR' structure returned from a
--     call to 'getAccelerationStructureBuildSizesKHR' with an identical
--     'AccelerationStructureBuildGeometryInfoKHR' structure and primitive
--     count
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03672# If
--     @pInfos@[i].@mode@ is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', all addresses
--     between @pInfos@[i].@scratchData.deviceAddress@ and
--     @pInfos@[i].@scratchData.deviceAddress@ + N - 1 /must/ be in the
--     buffer device address range of the same buffer, where N is given by
--     the @updateScratchSize@ member of the
--     'AccelerationStructureBuildSizesInfoKHR' structure returned from a
--     call to 'getAccelerationStructureBuildSizesKHR' with an identical
--     'AccelerationStructureBuildGeometryInfoKHR' structure and primitive
--     count
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-geometry-03673# The
--     buffers from which the buffer device addresses for all of the
--     @geometry.triangles.vertexData@, @geometry.triangles.indexData@,
--     @geometry.triangles.transformData@, @geometry.aabbs.data@, and
--     @geometry.instances.data@ members of all @pInfos@[i].@pGeometries@
--     and @pInfos@[i].@ppGeometries@ are queried /must/ have been created
--     with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR'
--     usage flag
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03674# The buffer
--     from which the buffer device address
--     @pInfos@[i].@scratchData.deviceAddress@ is queried /must/ have been
--     created with
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_BUFFER_BIT'
--     usage flag
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03802# For each
--     element of @pInfos@, its @scratchData.deviceAddress@ member /must/
--     be a valid device address obtained from
--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress'
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03803# For each
--     element of @pInfos@, if @scratchData.deviceAddress@ is the address
--     of a non-sparse buffer then it /must/ be bound completely and
--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03710# For each
--     element of @pInfos@, its @scratchData.deviceAddress@ member /must/
--     be a multiple of
--     'PhysicalDeviceAccelerationStructurePropertiesKHR'::@minAccelerationStructureScratchOffsetAlignment@
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03804# For any
--     element of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@
--     with a @geometryType@ of 'GEOMETRY_TYPE_TRIANGLES_KHR',
--     @geometry.triangles.vertexData.deviceAddress@ /must/ be a valid
--     device address obtained from
--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress'
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03805# For any
--     element of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@
--     with a @geometryType@ of 'GEOMETRY_TYPE_TRIANGLES_KHR', if
--     @geometry.triangles.vertexData.deviceAddress@ is the address of a
--     non-sparse buffer then it /must/ be bound completely and
--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03711# For any
--     element of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@
--     with a @geometryType@ of 'GEOMETRY_TYPE_TRIANGLES_KHR',
--     @geometry.triangles.vertexData.deviceAddress@ /must/ be aligned to
--     the size in bytes of the smallest component of the format in
--     @vertexFormat@
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03806# For any
--     element of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@
--     with a @geometryType@ of 'GEOMETRY_TYPE_TRIANGLES_KHR', if
--     @geometry.triangles.indexType@ is not
--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR',
--     @geometry.triangles.indexData.deviceAddress@ /must/ be a valid
--     device address obtained from
--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress'
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03807# For any
--     element of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@
--     with a @geometryType@ of 'GEOMETRY_TYPE_TRIANGLES_KHR', if
--     @geometry.triangles.indexType@ is not
--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR', if
--     @geometry.triangles.indexData.deviceAddress@ is the address of a
--     non-sparse buffer then it /must/ be bound completely and
--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03712# For any
--     element of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@
--     with a @geometryType@ of 'GEOMETRY_TYPE_TRIANGLES_KHR', and with
--     @geometry.triangles.indexType@ not equal to
--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR',
--     @geometry.triangles.indexData.deviceAddress@ /must/ be aligned to
--     the size in bytes of the type in @indexType@
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03808# For any
--     element of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@
--     with a @geometryType@ of 'GEOMETRY_TYPE_TRIANGLES_KHR', if
--     @geometry.triangles.transformData.deviceAddress@ is not @0@, it
--     /must/ be a valid device address obtained from
--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress'
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03809# For any
--     element of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@
--     with a @geometryType@ of 'GEOMETRY_TYPE_TRIANGLES_KHR', if
--     @geometry.triangles.transformData.deviceAddress@ is the address of a
--     non-sparse buffer then it /must/ be bound completely and
--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03810# For any
--     element of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@
--     with a @geometryType@ of 'GEOMETRY_TYPE_TRIANGLES_KHR', if
--     @geometry.triangles.transformData.deviceAddress@ is not @0@, it
--     /must/ be aligned to @16@ bytes
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03811# For any
--     element of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@
--     with a @geometryType@ of 'GEOMETRY_TYPE_AABBS_KHR',
--     @geometry.aabbs.data.deviceAddress@ /must/ be a valid device address
--     obtained from
--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress'
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03812# For any
--     element of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@
--     with a @geometryType@ of 'GEOMETRY_TYPE_AABBS_KHR', if
--     @geometry.aabbs.data.deviceAddress@ is the address of a non-sparse
--     buffer then it /must/ be bound completely and contiguously to a
--     single 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03714# For any
--     element of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@
--     with a @geometryType@ of 'GEOMETRY_TYPE_AABBS_KHR',
--     @geometry.aabbs.data.deviceAddress@ /must/ be aligned to @8@ bytes
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03715# For any
--     element of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@
--     with a @geometryType@ of 'GEOMETRY_TYPE_INSTANCES_KHR', if
--     @geometry.arrayOfPointers@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE',
--     @geometry.instances.data.deviceAddress@ /must/ be aligned to @16@
--     bytes
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03716# For any
--     element of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@
--     with a @geometryType@ of 'GEOMETRY_TYPE_INSTANCES_KHR', if
--     @geometry.arrayOfPointers@ is 'Vulkan.Core10.FundamentalTypes.TRUE',
--     @geometry.instances.data.deviceAddress@ /must/ be aligned to @8@
--     bytes
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03717# For any
--     element of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@
--     with a @geometryType@ of 'GEOMETRY_TYPE_INSTANCES_KHR', if
--     @geometry.arrayOfPointers@ is 'Vulkan.Core10.FundamentalTypes.TRUE',
--     each element of @geometry.instances.data.deviceAddress@ in device
--     memory /must/ be aligned to @16@ bytes
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03813# For any
--     element of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@
--     with a @geometryType@ of 'GEOMETRY_TYPE_INSTANCES_KHR',
--     @geometry.instances.data.deviceAddress@ /must/ be a valid device
--     address obtained from
--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress'
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03814# For any
--     element of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@
--     with a @geometryType@ of 'GEOMETRY_TYPE_INSTANCES_KHR', if
--     @geometry.instances.data.deviceAddress@ is the address of a
--     non-sparse buffer then it /must/ be bound completely and
--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03815# For any
--     element of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@
--     with a @geometryType@ of 'GEOMETRY_TYPE_INSTANCES_KHR', each
--     'AccelerationStructureInstanceKHR'::@accelerationStructureReference@
--     value in @geometry.instances.data.deviceAddress@ /must/ be a valid
--     device address containing a value obtained from
--     'getAccelerationStructureDeviceAddressKHR'
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03675# For each
--     @pInfos@[i], @dstAccelerationStructure@ /must/ have been created
--     with a value of 'AccelerationStructureCreateInfoKHR'::@size@ greater
--     than or equal to the memory size required by the build operation, as
--     returned by 'getAccelerationStructureBuildSizesKHR' with
--     @pBuildInfo@ = @pInfos@[i] and with each element of the
--     @pMaxPrimitiveCounts@ array greater than or equal to the equivalent
--     @ppBuildRangeInfos@[i][j].@primitiveCount@ values for @j@ in
--     [0,@pInfos@[i].@geometryCount@)
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-ppBuildRangeInfos-03676#
--     Each element of @ppBuildRangeInfos@[i] /must/ be a valid pointer to
--     an array of @pInfos@[i].@geometryCount@
--     'AccelerationStructureBuildRangeInfoKHR' structures
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-parameter# @pInfos@
--     /must/ be a valid pointer to an array of @infoCount@ valid
--     'AccelerationStructureBuildGeometryInfoKHR' structures
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-ppBuildRangeInfos-parameter#
--     @ppBuildRangeInfos@ /must/ be a valid pointer to an array of
--     @infoCount@ 'AccelerationStructureBuildRangeInfoKHR' structures
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-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-vkCmdBuildAccelerationStructuresKHR-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support compute operations
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-renderpass# This command
--     /must/ only be called outside of a render pass instance
--
-- -   #VUID-vkCmdBuildAccelerationStructuresKHR-infoCount-arraylength#
--     @infoCount@ /must/ be greater than @0@
--
-- == 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> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |
-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'AccelerationStructureBuildGeometryInfoKHR',
-- 'AccelerationStructureBuildRangeInfoKHR',
-- 'Vulkan.Core10.Handles.CommandBuffer'
cmdBuildAccelerationStructuresKHR :: forall io
                                   . (MonadIO io)
                                  => -- | @commandBuffer@ is the command buffer into which the command will be
                                     -- recorded.
                                     CommandBuffer
                                  -> -- | @pInfos@ is a pointer to an array of @infoCount@
                                     -- 'AccelerationStructureBuildGeometryInfoKHR' structures defining the
                                     -- geometry used to build each acceleration structure.
                                     ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR)
                                  -> -- | @ppBuildRangeInfos@ is a pointer to an array of @infoCount@ pointers to
                                     -- arrays of 'AccelerationStructureBuildRangeInfoKHR' structures. Each
                                     -- @ppBuildRangeInfos@[i] is a pointer to an array of
                                     -- @pInfos@[i].@geometryCount@ 'AccelerationStructureBuildRangeInfoKHR'
                                     -- structures defining dynamic offsets to the addresses where geometry data
                                     -- is stored, as defined by @pInfos@[i].
                                     ("buildRangeInfos" ::: Vector (Vector AccelerationStructureBuildRangeInfoKHR))
                                  -> io ()
cmdBuildAccelerationStructuresKHR :: CommandBuffer
-> ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR)
-> ("buildRangeInfos"
    ::: Vector (Vector AccelerationStructureBuildRangeInfoKHR))
-> io ()
cmdBuildAccelerationStructuresKHR CommandBuffer
commandBuffer "infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR
infos "buildRangeInfos"
::: Vector (Vector AccelerationStructureBuildRangeInfoKHR)
buildRangeInfos = 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 vkCmdBuildAccelerationStructuresKHRPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> ("firstQuery" ::: Word32)
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("ppBuildRangeInfos"
       ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
   -> IO ())
vkCmdBuildAccelerationStructuresKHRPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("firstQuery" ::: Word32)
      -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
      -> ("ppBuildRangeInfos"
          ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
      -> IO ())
pVkCmdBuildAccelerationStructuresKHR (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  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
   -> ("firstQuery" ::: Word32)
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("ppBuildRangeInfos"
       ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
   -> IO ())
vkCmdBuildAccelerationStructuresKHRPtr FunPtr
  (Ptr CommandBuffer_T
   -> ("firstQuery" ::: Word32)
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("ppBuildRangeInfos"
       ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
   -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("firstQuery" ::: Word32)
      -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
      -> ("ppBuildRangeInfos"
          ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> ("firstQuery" ::: Word32)
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("ppBuildRangeInfos"
       ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
   -> 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 String
"" String
"The function pointer for vkCmdBuildAccelerationStructuresKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdBuildAccelerationStructuresKHR' :: Ptr CommandBuffer_T
-> ("firstQuery" ::: Word32)
-> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> ("ppBuildRangeInfos"
    ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
-> IO ()
vkCmdBuildAccelerationStructuresKHR' = FunPtr
  (Ptr CommandBuffer_T
   -> ("firstQuery" ::: Word32)
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("ppBuildRangeInfos"
       ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
   -> IO ())
-> Ptr CommandBuffer_T
-> ("firstQuery" ::: Word32)
-> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> ("ppBuildRangeInfos"
    ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
-> IO ()
mkVkCmdBuildAccelerationStructuresKHR FunPtr
  (Ptr CommandBuffer_T
   -> ("firstQuery" ::: Word32)
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("ppBuildRangeInfos"
       ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
   -> IO ())
vkCmdBuildAccelerationStructuresKHRPtr
  let pInfosLength :: Int
pInfosLength = ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR)
-> Int
forall a. Vector a -> Int
Data.Vector.length (("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR)
 -> Int)
-> ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR)
-> Int
forall a b. (a -> b) -> a -> b
$ ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR
infos)
  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 ((("buildRangeInfos"
 ::: Vector (Vector AccelerationStructureBuildRangeInfoKHR))
-> Int
forall a. Vector a -> Int
Data.Vector.length (("buildRangeInfos"
  ::: Vector (Vector AccelerationStructureBuildRangeInfoKHR))
 -> Int)
-> ("buildRangeInfos"
    ::: Vector (Vector AccelerationStructureBuildRangeInfoKHR))
-> Int
forall a b. (a -> b) -> a -> b
$ ("buildRangeInfos"
::: Vector (Vector AccelerationStructureBuildRangeInfoKHR)
buildRangeInfos)) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
pInfosLength) (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 String
"" String
"ppBuildRangeInfos and pInfos must have the same length" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  "pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
pPInfos <- ((("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
  -> IO ())
 -> IO ())
-> ContT
     () IO ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> IO ())
  -> IO ())
 -> ContT
      () IO ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR))
-> ((("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
     -> IO ())
    -> IO ())
-> ContT
     () IO ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
forall a b. (a -> b) -> a -> b
$ Int
-> (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
    -> IO ())
-> IO ()
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @AccelerationStructureBuildGeometryInfoKHR ((("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR)
-> Int
forall a. Vector a -> Int
Data.Vector.length ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR
infos)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
80)
  (Int
 -> AccelerationStructureBuildGeometryInfoKHR -> ContT () IO ())
-> ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR)
-> ContT () IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i AccelerationStructureBuildGeometryInfoKHR
e -> ((() -> IO ()) -> IO ()) -> ContT () IO ()
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO ()) -> IO ()) -> ContT () IO ())
-> ((() -> IO ()) -> IO ()) -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> AccelerationStructureBuildGeometryInfoKHR -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
pPInfos ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> Int
-> "pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
80 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr AccelerationStructureBuildGeometryInfoKHR) (AccelerationStructureBuildGeometryInfoKHR
e) (IO () -> IO ())
-> ((() -> IO ()) -> IO ()) -> (() -> IO ()) -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO ()) -> () -> IO ()
forall a b. (a -> b) -> a -> b
$ ())) ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR
infos)
  "ppBuildRangeInfos"
::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR)
pPpBuildRangeInfos <- ((("ppBuildRangeInfos"
   ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
  -> IO ())
 -> IO ())
-> ContT
     ()
     IO
     ("ppBuildRangeInfos"
      ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("ppBuildRangeInfos"
    ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
   -> IO ())
  -> IO ())
 -> ContT
      ()
      IO
      ("ppBuildRangeInfos"
       ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR)))
-> ((("ppBuildRangeInfos"
      ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
     -> IO ())
    -> IO ())
-> ContT
     ()
     IO
     ("ppBuildRangeInfos"
      ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
forall a b. (a -> b) -> a -> b
$ Int
-> (("ppBuildRangeInfos"
     ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
    -> IO ())
-> IO ()
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @(Ptr AccelerationStructureBuildRangeInfoKHR) ((("buildRangeInfos"
 ::: Vector (Vector AccelerationStructureBuildRangeInfoKHR))
-> Int
forall a. Vector a -> Int
Data.Vector.length ("buildRangeInfos"
::: Vector (Vector AccelerationStructureBuildRangeInfoKHR)
buildRangeInfos)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
8)
  (Int
 -> Vector AccelerationStructureBuildRangeInfoKHR -> ContT () IO ())
-> ("buildRangeInfos"
    ::: Vector (Vector AccelerationStructureBuildRangeInfoKHR))
-> ContT () IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i Vector AccelerationStructureBuildRangeInfoKHR
e -> do
    Ptr AccelerationStructureBuildRangeInfoKHR
pPpBuildRangeInfos' <- ((Ptr AccelerationStructureBuildRangeInfoKHR -> IO ()) -> IO ())
-> ContT () IO (Ptr AccelerationStructureBuildRangeInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr AccelerationStructureBuildRangeInfoKHR -> IO ()) -> IO ())
 -> ContT () IO (Ptr AccelerationStructureBuildRangeInfoKHR))
-> ((Ptr AccelerationStructureBuildRangeInfoKHR -> IO ()) -> IO ())
-> ContT () IO (Ptr AccelerationStructureBuildRangeInfoKHR)
forall a b. (a -> b) -> a -> b
$ Int
-> (Ptr AccelerationStructureBuildRangeInfoKHR -> IO ()) -> IO ()
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @AccelerationStructureBuildRangeInfoKHR ((Vector AccelerationStructureBuildRangeInfoKHR -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector AccelerationStructureBuildRangeInfoKHR
e)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
16)
    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
$ (Int -> AccelerationStructureBuildRangeInfoKHR -> IO ())
-> Vector AccelerationStructureBuildRangeInfoKHR -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i' AccelerationStructureBuildRangeInfoKHR
e' -> Ptr AccelerationStructureBuildRangeInfoKHR
-> AccelerationStructureBuildRangeInfoKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr AccelerationStructureBuildRangeInfoKHR
pPpBuildRangeInfos' Ptr AccelerationStructureBuildRangeInfoKHR
-> Int -> Ptr AccelerationStructureBuildRangeInfoKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
16 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i')) :: Ptr AccelerationStructureBuildRangeInfoKHR) (AccelerationStructureBuildRangeInfoKHR
e')) (Vector AccelerationStructureBuildRangeInfoKHR
e)
    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
$ ("ppBuildRangeInfos"
 ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
-> Ptr AccelerationStructureBuildRangeInfoKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ("ppBuildRangeInfos"
::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR)
pPpBuildRangeInfos ("ppBuildRangeInfos"
 ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
-> Int
-> "ppBuildRangeInfos"
   ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR)) (Ptr AccelerationStructureBuildRangeInfoKHR
pPpBuildRangeInfos')) ("buildRangeInfos"
::: Vector (Vector AccelerationStructureBuildRangeInfoKHR)
buildRangeInfos)
  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 String
"vkCmdBuildAccelerationStructuresKHR" (Ptr CommandBuffer_T
-> ("firstQuery" ::: Word32)
-> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> ("ppBuildRangeInfos"
    ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
-> IO ()
vkCmdBuildAccelerationStructuresKHR' (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer)) ((Int -> "firstQuery" ::: Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
pInfosLength :: Word32)) ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
pPInfos) ("ppBuildRangeInfos"
::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR)
pPpBuildRangeInfos))
  () -> 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" mkVkCmdBuildAccelerationStructuresIndirectKHR
  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr AccelerationStructureBuildGeometryInfoKHR -> Ptr DeviceAddress -> Ptr Word32 -> Ptr (Ptr Word32) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr AccelerationStructureBuildGeometryInfoKHR -> Ptr DeviceAddress -> Ptr Word32 -> Ptr (Ptr Word32) -> IO ()

-- | vkCmdBuildAccelerationStructuresIndirectKHR - Build an acceleration
-- structure with some parameters provided on the device
--
-- = Description
--
-- Accesses to acceleration structures, scratch buffers, vertex buffers,
-- index buffers, and instance buffers must be synchronized as with
-- 'cmdBuildAccelerationStructuresKHR'.
--
-- Accesses to any element of @pIndirectDeviceAddresses@ /must/ be
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies synchronized>
-- with the
-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages pipeline stage>
-- and an
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types access type>
-- of
-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_INDIRECT_COMMAND_READ_BIT'.
--
-- == Valid Usage
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-mode-04628# The
--     @mode@ member of each element of @pInfos@ /must/ be a valid
--     'BuildAccelerationStructureModeKHR' value
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-srcAccelerationStructure-04629#
--     If the @srcAccelerationStructure@ member of any element of @pInfos@
--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the
--     @srcAccelerationStructure@ member /must/ be a valid
--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-04630# For
--     each element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', its
--     @srcAccelerationStructure@ member /must/ not be
--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03403# The
--     @srcAccelerationStructure@ member of any element of @pInfos@ /must/
--     not be the same acceleration structure as the
--     @dstAccelerationStructure@ member of any other element of @pInfos@
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-dstAccelerationStructure-03698#
--     The @dstAccelerationStructure@ member of any element of @pInfos@
--     /must/ not be the same acceleration structure as the
--     @dstAccelerationStructure@ member of any other element of @pInfos@
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-dstAccelerationStructure-03800#
--     The @dstAccelerationStructure@ member of any element of @pInfos@
--     /must/ be a valid
--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03699# For
--     each element of @pInfos@, if its @type@ member is
--     'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR', its
--     @dstAccelerationStructure@ member /must/ have been created with a
--     value of 'AccelerationStructureCreateInfoKHR'::@type@ equal to
--     either 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR' or
--     'ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR'
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03700# For
--     each element of @pInfos@, if its @type@ member is
--     'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR', its
--     @dstAccelerationStructure@ member /must/ have been created with a
--     value of 'AccelerationStructureCreateInfoKHR'::@type@ equal to
--     either 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' or
--     'ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR'
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03663# For
--     each element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR',
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims inactive primitives>
--     in its @srcAccelerationStructure@ member /must/ not be made active
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03664# For
--     each element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', active primitives in
--     its @srcAccelerationStructure@ member /must/ not be made
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims inactive>
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-None-03407# The
--     @dstAccelerationStructure@ member of any element of @pInfos@ /must/
--     not be referenced by the @geometry.instances.data@ member of any
--     element of @pGeometries@ or @ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_INSTANCES_KHR' in any other element of @pInfos@
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-dstAccelerationStructure-03701#
--     The range of memory backing the @dstAccelerationStructure@ member of
--     any element of @pInfos@ that is accessed by this command /must/ not
--     overlap the memory backing the @srcAccelerationStructure@ member of
--     any other element of @pInfos@ with a @mode@ equal to
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', which is accessed by
--     this command
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-dstAccelerationStructure-03702#
--     The range of memory backing the @dstAccelerationStructure@ member of
--     any element of @pInfos@ that is accessed by this command /must/ not
--     overlap the memory backing the @dstAccelerationStructure@ member of
--     any other element of @pInfos@, which is accessed by this command
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-dstAccelerationStructure-03703#
--     The range of memory backing the @dstAccelerationStructure@ member of
--     any element of @pInfos@ that is accessed by this command /must/ not
--     overlap the memory backing the @scratchData@ member of any element
--     of @pInfos@ (including the same element), which is accessed by this
--     command
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-scratchData-03704#
--     The range of memory backing the @scratchData@ member of any element
--     of @pInfos@ that is accessed by this command /must/ not overlap the
--     memory backing the @scratchData@ member of any other element of
--     @pInfos@, which is accessed by this command
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-scratchData-03705#
--     The range of memory backing the @scratchData@ member of any element
--     of @pInfos@ that is accessed by this command /must/ not overlap the
--     memory backing the @srcAccelerationStructure@ member of any element
--     of @pInfos@ with a @mode@ equal to
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR' (including the same
--     element), which is accessed by this command
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-dstAccelerationStructure-03706#
--     The range of memory backing the @dstAccelerationStructure@ member of
--     any element of @pInfos@ that is accessed by this command /must/ not
--     overlap the memory backing any acceleration structure referenced by
--     the @geometry.instances.data@ member of any element of @pGeometries@
--     or @ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_INSTANCES_KHR' in any other element of @pInfos@,
--     which is accessed by this command
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03667# For
--     each element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', its
--     @srcAccelerationStructure@ member /must/ have previously been
--     constructed with 'BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR'
--     set in 'AccelerationStructureBuildGeometryInfoKHR'::@flags@ in the
--     build
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03668# For
--     each element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', its
--     @srcAccelerationStructure@ and @dstAccelerationStructure@ members
--     /must/ either be the same
--     'Vulkan.Extensions.Handles.AccelerationStructureKHR', or not have
--     any
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03758# For
--     each element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', its @geometryCount@
--     member /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03759# For
--     each element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', its @flags@ member
--     /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03760# For
--     each element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', its @type@ member
--     /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03761# For
--     each element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, its @geometryType@ member
--     /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03762# For
--     each element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, its @flags@ member /must/
--     have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03763# For
--     each element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, if @geometryType@ is
--     'GEOMETRY_TYPE_TRIANGLES_KHR', its @geometry.triangles.vertexFormat@
--     member /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03764# For
--     each element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, if @geometryType@ is
--     'GEOMETRY_TYPE_TRIANGLES_KHR', its @geometry.triangles.maxVertex@
--     member /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03765# For
--     each element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, if @geometryType@ is
--     'GEOMETRY_TYPE_TRIANGLES_KHR', its @geometry.triangles.indexType@
--     member /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03766# For
--     each element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, if @geometryType@ is
--     'GEOMETRY_TYPE_TRIANGLES_KHR', if its
--     @geometry.triangles.transformData@ address was @NULL@ when
--     @srcAccelerationStructure@ was last built, then it /must/ be @NULL@
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03767# For
--     each element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, if @geometryType@ is
--     'GEOMETRY_TYPE_TRIANGLES_KHR', if its
--     @geometry.triangles.transformData@ address was not @NULL@ when
--     @srcAccelerationStructure@ was last built, then it /must/ not be
--     @NULL@
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03768# For
--     each element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, if @geometryType@ is
--     'GEOMETRY_TYPE_TRIANGLES_KHR', and @geometry.triangles.indexType@ is
--     not 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR', then the
--     value of each index referenced /must/ be the same as the
--     corresponding index value when @srcAccelerationStructure@ was last
--     built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-primitiveCount-03769#
--     For each 'AccelerationStructureBuildRangeInfoKHR' referenced by this
--     command, its @primitiveCount@ member /must/ have the same value
--     which was specified when @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-firstVertex-03770#
--     For each 'AccelerationStructureBuildRangeInfoKHR' referenced by this
--     command, if the corresponding geometry uses indices, its
--     @firstVertex@ member /must/ have the same value which was specified
--     when @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03801# For
--     each element of @pInfos@[i].@pGeometries@ or
--     @pInfos@[i].@ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_INSTANCES_KHR', the corresponding
--     @ppMaxPrimitiveCounts@[i][j] /must/ be less than or equal to
--     'PhysicalDeviceAccelerationStructurePropertiesKHR'::@maxInstanceCount@
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03707# For
--     each element of @pInfos@, the @buffer@ used to create its
--     @dstAccelerationStructure@ member /must/ be bound to device memory
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03708# For
--     each element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR' the @buffer@ used to
--     create its @srcAccelerationStructure@ member /must/ be bound to
--     device memory
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03709# For
--     each element of @pInfos@, the @buffer@ used to create each
--     acceleration structure referenced by the @geometry.instances.data@
--     member of any element of @pGeometries@ or @ppGeometries@ with a
--     @geometryType@ of 'GEOMETRY_TYPE_INSTANCES_KHR' /must/ be bound to
--     device memory
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03671# If
--     @pInfos@[i].@mode@ is 'BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR',
--     all addresses between @pInfos@[i].@scratchData.deviceAddress@ and
--     @pInfos@[i].@scratchData.deviceAddress@ + N - 1 /must/ be in the
--     buffer device address range of the same buffer, where N is given by
--     the @buildScratchSize@ member of the
--     'AccelerationStructureBuildSizesInfoKHR' structure returned from a
--     call to 'getAccelerationStructureBuildSizesKHR' with an identical
--     'AccelerationStructureBuildGeometryInfoKHR' structure and primitive
--     count
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03672# If
--     @pInfos@[i].@mode@ is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', all addresses
--     between @pInfos@[i].@scratchData.deviceAddress@ and
--     @pInfos@[i].@scratchData.deviceAddress@ + N - 1 /must/ be in the
--     buffer device address range of the same buffer, where N is given by
--     the @updateScratchSize@ member of the
--     'AccelerationStructureBuildSizesInfoKHR' structure returned from a
--     call to 'getAccelerationStructureBuildSizesKHR' with an identical
--     'AccelerationStructureBuildGeometryInfoKHR' structure and primitive
--     count
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-geometry-03673#
--     The buffers from which the buffer device addresses for all of the
--     @geometry.triangles.vertexData@, @geometry.triangles.indexData@,
--     @geometry.triangles.transformData@, @geometry.aabbs.data@, and
--     @geometry.instances.data@ members of all @pInfos@[i].@pGeometries@
--     and @pInfos@[i].@ppGeometries@ are queried /must/ have been created
--     with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR'
--     usage flag
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03674# The
--     buffer from which the buffer device address
--     @pInfos@[i].@scratchData.deviceAddress@ is queried /must/ have been
--     created with
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_BUFFER_BIT'
--     usage flag
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03802# For
--     each element of @pInfos@, its @scratchData.deviceAddress@ member
--     /must/ be a valid device address obtained from
--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress'
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03803# For
--     each element of @pInfos@, if @scratchData.deviceAddress@ is the
--     address of a non-sparse buffer then it /must/ be bound completely
--     and contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory'
--     object
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03710# For
--     each element of @pInfos@, its @scratchData.deviceAddress@ member
--     /must/ be a multiple of
--     'PhysicalDeviceAccelerationStructurePropertiesKHR'::@minAccelerationStructureScratchOffsetAlignment@
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03804# For
--     any element of @pInfos@[i].@pGeometries@ or
--     @pInfos@[i].@ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_TRIANGLES_KHR',
--     @geometry.triangles.vertexData.deviceAddress@ /must/ be a valid
--     device address obtained from
--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress'
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03805# For
--     any element of @pInfos@[i].@pGeometries@ or
--     @pInfos@[i].@ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_TRIANGLES_KHR', if
--     @geometry.triangles.vertexData.deviceAddress@ is the address of a
--     non-sparse buffer then it /must/ be bound completely and
--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03711# For
--     any element of @pInfos@[i].@pGeometries@ or
--     @pInfos@[i].@ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_TRIANGLES_KHR',
--     @geometry.triangles.vertexData.deviceAddress@ /must/ be aligned to
--     the size in bytes of the smallest component of the format in
--     @vertexFormat@
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03806# For
--     any element of @pInfos@[i].@pGeometries@ or
--     @pInfos@[i].@ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_TRIANGLES_KHR', if @geometry.triangles.indexType@ is
--     not 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR',
--     @geometry.triangles.indexData.deviceAddress@ /must/ be a valid
--     device address obtained from
--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress'
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03807# For
--     any element of @pInfos@[i].@pGeometries@ or
--     @pInfos@[i].@ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_TRIANGLES_KHR', if @geometry.triangles.indexType@ is
--     not 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR', if
--     @geometry.triangles.indexData.deviceAddress@ is the address of a
--     non-sparse buffer then it /must/ be bound completely and
--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03712# For
--     any element of @pInfos@[i].@pGeometries@ or
--     @pInfos@[i].@ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_TRIANGLES_KHR', and with
--     @geometry.triangles.indexType@ not equal to
--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR',
--     @geometry.triangles.indexData.deviceAddress@ /must/ be aligned to
--     the size in bytes of the type in @indexType@
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03808# For
--     any element of @pInfos@[i].@pGeometries@ or
--     @pInfos@[i].@ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_TRIANGLES_KHR', if
--     @geometry.triangles.transformData.deviceAddress@ is not @0@, it
--     /must/ be a valid device address obtained from
--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress'
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03809# For
--     any element of @pInfos@[i].@pGeometries@ or
--     @pInfos@[i].@ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_TRIANGLES_KHR', if
--     @geometry.triangles.transformData.deviceAddress@ is the address of a
--     non-sparse buffer then it /must/ be bound completely and
--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03810# For
--     any element of @pInfos@[i].@pGeometries@ or
--     @pInfos@[i].@ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_TRIANGLES_KHR', if
--     @geometry.triangles.transformData.deviceAddress@ is not @0@, it
--     /must/ be aligned to @16@ bytes
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03811# For
--     any element of @pInfos@[i].@pGeometries@ or
--     @pInfos@[i].@ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_AABBS_KHR', @geometry.aabbs.data.deviceAddress@
--     /must/ be a valid device address obtained from
--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress'
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03812# For
--     any element of @pInfos@[i].@pGeometries@ or
--     @pInfos@[i].@ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_AABBS_KHR', if @geometry.aabbs.data.deviceAddress@ is
--     the address of a non-sparse buffer then it /must/ be bound
--     completely and contiguously to a single
--     'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03714# For
--     any element of @pInfos@[i].@pGeometries@ or
--     @pInfos@[i].@ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_AABBS_KHR', @geometry.aabbs.data.deviceAddress@
--     /must/ be aligned to @8@ bytes
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03715# For
--     any element of @pInfos@[i].@pGeometries@ or
--     @pInfos@[i].@ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_INSTANCES_KHR', if @geometry.arrayOfPointers@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE',
--     @geometry.instances.data.deviceAddress@ /must/ be aligned to @16@
--     bytes
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03716# For
--     any element of @pInfos@[i].@pGeometries@ or
--     @pInfos@[i].@ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_INSTANCES_KHR', if @geometry.arrayOfPointers@ is
--     'Vulkan.Core10.FundamentalTypes.TRUE',
--     @geometry.instances.data.deviceAddress@ /must/ be aligned to @8@
--     bytes
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03717# For
--     any element of @pInfos@[i].@pGeometries@ or
--     @pInfos@[i].@ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_INSTANCES_KHR', if @geometry.arrayOfPointers@ is
--     'Vulkan.Core10.FundamentalTypes.TRUE', each element of
--     @geometry.instances.data.deviceAddress@ in device memory /must/ be
--     aligned to @16@ bytes
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03813# For
--     any element of @pInfos@[i].@pGeometries@ or
--     @pInfos@[i].@ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_INSTANCES_KHR',
--     @geometry.instances.data.deviceAddress@ /must/ be a valid device
--     address obtained from
--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress'
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03814# For
--     any element of @pInfos@[i].@pGeometries@ or
--     @pInfos@[i].@ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_INSTANCES_KHR', if
--     @geometry.instances.data.deviceAddress@ is the address of a
--     non-sparse buffer then it /must/ be bound completely and
--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03815# For
--     any element of @pInfos@[i].@pGeometries@ or
--     @pInfos@[i].@ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_INSTANCES_KHR', each
--     'AccelerationStructureInstanceKHR'::@accelerationStructureReference@
--     value in @geometry.instances.data.deviceAddress@ /must/ be a valid
--     device address containing a value obtained from
--     'getAccelerationStructureDeviceAddressKHR'
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03645#
--     For any element of @pIndirectDeviceAddresses@, if the buffer from
--     which it was queried is non-sparse then it /must/ be bound
--     completely and contiguously to a single
--     'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03646#
--     For any element of @pIndirectDeviceAddresses@[i], all device
--     addresses between @pIndirectDeviceAddresses@[i] and
--     @pIndirectDeviceAddresses@[i] + (@pInfos@[i].@geometryCount@ ×
--     @pIndirectStrides@[i]) - 1 /must/ be in the buffer device address
--     range of the same buffer
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03647#
--     For any element of @pIndirectDeviceAddresses@, the buffer from which
--     it was queried /must/ have been created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
--     bit set
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03648#
--     Each element of @pIndirectDeviceAddresses@ /must/ be a multiple of
--     @4@
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectStrides-03787#
--     Each element of @pIndirectStrides@ /must/ be a multiple of @4@
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-commandBuffer-03649#
--     @commandBuffer@ /must/ not be a protected command buffer
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-accelerationStructureIndirectBuild-03650#
--     The
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-accelerationStructureIndirectBuild ::accelerationStructureIndirectBuild>
--     feature /must/ be enabled
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03651#
--     Each 'AccelerationStructureBuildRangeInfoKHR' structure referenced
--     by any element of @pIndirectDeviceAddresses@ /must/ be a valid
--     'AccelerationStructureBuildRangeInfoKHR' structure
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03652#
--     @pInfos@[i].@dstAccelerationStructure@ /must/ have been created with
--     a value of 'AccelerationStructureCreateInfoKHR'::@size@ greater than
--     or equal to the memory size required by the build operation, as
--     returned by 'getAccelerationStructureBuildSizesKHR' with
--     @pBuildInfo@ = @pInfos@[i] and @pMaxPrimitiveCounts@ =
--     @ppMaxPrimitiveCounts@[i]
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-ppMaxPrimitiveCounts-03653#
--     Each @ppMaxPrimitiveCounts@[i][j] /must/ be greater than or equal to
--     the the @primitiveCount@ value specified by the
--     'AccelerationStructureBuildRangeInfoKHR' structure located at
--     @pIndirectDeviceAddresses@[i] + (@j@ × @pIndirectStrides@[i])
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-parameter#
--     @pInfos@ /must/ be a valid pointer to an array of @infoCount@ valid
--     'AccelerationStructureBuildGeometryInfoKHR' structures
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-parameter#
--     @pIndirectDeviceAddresses@ /must/ be a valid pointer to an array of
--     @infoCount@ 'Vulkan.Core10.FundamentalTypes.DeviceAddress' values
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectStrides-parameter#
--     @pIndirectStrides@ /must/ be a valid pointer to an array of
--     @infoCount@ @uint32_t@ values
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-ppMaxPrimitiveCounts-parameter#
--     @ppMaxPrimitiveCounts@ /must/ be a valid pointer to an array of
--     @infoCount@ @uint32_t@ values
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-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-vkCmdBuildAccelerationStructuresIndirectKHR-commandBuffer-cmdpool#
--     The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support compute operations
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-renderpass# This
--     command /must/ only be called outside of a render pass instance
--
-- -   #VUID-vkCmdBuildAccelerationStructuresIndirectKHR-infoCount-arraylength#
--     @infoCount@ /must/ be greater than @0@
--
-- == 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> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |
-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'AccelerationStructureBuildGeometryInfoKHR',
-- 'Vulkan.Core10.Handles.CommandBuffer',
-- 'Vulkan.Core10.FundamentalTypes.DeviceAddress'
cmdBuildAccelerationStructuresIndirectKHR :: forall io
                                           . (MonadIO io)
                                          => -- | @commandBuffer@ is the command buffer into which the command will be
                                             -- recorded.
                                             CommandBuffer
                                          -> -- | @pInfos@ is a pointer to an array of @infoCount@
                                             -- 'AccelerationStructureBuildGeometryInfoKHR' structures defining the
                                             -- geometry used to build each acceleration structure.
                                             ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR)
                                          -> -- | @pIndirectDeviceAddresses@ is a pointer to an array of @infoCount@
                                             -- buffer device addresses which point to @pInfos@[i].@geometryCount@
                                             -- 'AccelerationStructureBuildRangeInfoKHR' structures defining dynamic
                                             -- offsets to the addresses where geometry data is stored, as defined by
                                             -- @pInfos@[i].
                                             ("indirectDeviceAddresses" ::: Vector DeviceAddress)
                                          -> -- | @pIndirectStrides@ is a pointer to an array of @infoCount@ byte strides
                                             -- between elements of @pIndirectDeviceAddresses@.
                                             ("indirectStrides" ::: Vector Word32)
                                          -> -- | @ppMaxPrimitiveCounts@ is a pointer to an array of @infoCount@ pointers
                                             -- to arrays of @pInfos@[i].@geometryCount@ values indicating the maximum
                                             -- number of primitives that will be built by this command for each
                                             -- geometry.
                                             ("maxPrimitiveCounts" ::: Vector (Vector Word32))
                                          -> io ()
cmdBuildAccelerationStructuresIndirectKHR :: CommandBuffer
-> ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR)
-> ("indirectDeviceAddresses" ::: Vector ("dataSize" ::: Word64))
-> ("indirectStrides" ::: Vector ("firstQuery" ::: Word32))
-> ("maxPrimitiveCounts"
    ::: Vector
          ("indirectStrides" ::: Vector ("firstQuery" ::: Word32)))
-> io ()
cmdBuildAccelerationStructuresIndirectKHR CommandBuffer
commandBuffer "infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR
infos "indirectDeviceAddresses" ::: Vector ("dataSize" ::: Word64)
indirectDeviceAddresses "indirectStrides" ::: Vector ("firstQuery" ::: Word32)
indirectStrides "maxPrimitiveCounts"
::: Vector ("indirectStrides" ::: Vector ("firstQuery" ::: Word32))
maxPrimitiveCounts = 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 vkCmdBuildAccelerationStructuresIndirectKHRPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> ("firstQuery" ::: Word32)
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
   -> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
   -> ("ppMaxPrimitiveCounts"
       ::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
   -> IO ())
vkCmdBuildAccelerationStructuresIndirectKHRPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("firstQuery" ::: Word32)
      -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
      -> ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
      -> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
      -> ("ppMaxPrimitiveCounts"
          ::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
      -> IO ())
pVkCmdBuildAccelerationStructuresIndirectKHR (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  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
   -> ("firstQuery" ::: Word32)
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
   -> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
   -> ("ppMaxPrimitiveCounts"
       ::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
   -> IO ())
vkCmdBuildAccelerationStructuresIndirectKHRPtr FunPtr
  (Ptr CommandBuffer_T
   -> ("firstQuery" ::: Word32)
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
   -> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
   -> ("ppMaxPrimitiveCounts"
       ::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
   -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("firstQuery" ::: Word32)
      -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
      -> ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
      -> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
      -> ("ppMaxPrimitiveCounts"
          ::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> ("firstQuery" ::: Word32)
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
   -> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
   -> ("ppMaxPrimitiveCounts"
       ::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: 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 String
"" String
"The function pointer for vkCmdBuildAccelerationStructuresIndirectKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdBuildAccelerationStructuresIndirectKHR' :: Ptr CommandBuffer_T
-> ("firstQuery" ::: Word32)
-> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("ppMaxPrimitiveCounts"
    ::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
-> IO ()
vkCmdBuildAccelerationStructuresIndirectKHR' = FunPtr
  (Ptr CommandBuffer_T
   -> ("firstQuery" ::: Word32)
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
   -> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
   -> ("ppMaxPrimitiveCounts"
       ::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
   -> IO ())
-> Ptr CommandBuffer_T
-> ("firstQuery" ::: Word32)
-> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("ppMaxPrimitiveCounts"
    ::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
-> IO ()
mkVkCmdBuildAccelerationStructuresIndirectKHR FunPtr
  (Ptr CommandBuffer_T
   -> ("firstQuery" ::: Word32)
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
   -> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
   -> ("ppMaxPrimitiveCounts"
       ::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
   -> IO ())
vkCmdBuildAccelerationStructuresIndirectKHRPtr
  let pInfosLength :: Int
pInfosLength = ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR)
-> Int
forall a. Vector a -> Int
Data.Vector.length (("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR)
 -> Int)
-> ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR)
-> Int
forall a b. (a -> b) -> a -> b
$ ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR
infos)
  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 ((("indirectDeviceAddresses" ::: Vector ("dataSize" ::: Word64))
-> Int
forall a. Vector a -> Int
Data.Vector.length (("indirectDeviceAddresses" ::: Vector ("dataSize" ::: Word64))
 -> Int)
-> ("indirectDeviceAddresses" ::: Vector ("dataSize" ::: Word64))
-> Int
forall a b. (a -> b) -> a -> b
$ ("indirectDeviceAddresses" ::: Vector ("dataSize" ::: Word64)
indirectDeviceAddresses)) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
pInfosLength) (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 String
"" String
"pIndirectDeviceAddresses and pInfos must have the same length" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  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 ((("indirectStrides" ::: Vector ("firstQuery" ::: Word32)) -> Int
forall a. Vector a -> Int
Data.Vector.length (("indirectStrides" ::: Vector ("firstQuery" ::: Word32)) -> Int)
-> ("indirectStrides" ::: Vector ("firstQuery" ::: Word32)) -> Int
forall a b. (a -> b) -> a -> b
$ ("indirectStrides" ::: Vector ("firstQuery" ::: Word32)
indirectStrides)) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
pInfosLength) (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 String
"" String
"pIndirectStrides and pInfos must have the same length" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  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 ((("maxPrimitiveCounts"
 ::: Vector
       ("indirectStrides" ::: Vector ("firstQuery" ::: Word32)))
-> Int
forall a. Vector a -> Int
Data.Vector.length (("maxPrimitiveCounts"
  ::: Vector
        ("indirectStrides" ::: Vector ("firstQuery" ::: Word32)))
 -> Int)
-> ("maxPrimitiveCounts"
    ::: Vector
          ("indirectStrides" ::: Vector ("firstQuery" ::: Word32)))
-> Int
forall a b. (a -> b) -> a -> b
$ ("maxPrimitiveCounts"
::: Vector ("indirectStrides" ::: Vector ("firstQuery" ::: Word32))
maxPrimitiveCounts)) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
pInfosLength) (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 String
"" String
"ppMaxPrimitiveCounts and pInfos must have the same length" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  "pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
pPInfos <- ((("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
  -> IO ())
 -> IO ())
-> ContT
     () IO ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> IO ())
  -> IO ())
 -> ContT
      () IO ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR))
-> ((("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
     -> IO ())
    -> IO ())
-> ContT
     () IO ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
forall a b. (a -> b) -> a -> b
$ Int
-> (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
    -> IO ())
-> IO ()
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @AccelerationStructureBuildGeometryInfoKHR ((("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR)
-> Int
forall a. Vector a -> Int
Data.Vector.length ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR
infos)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
80)
  (Int
 -> AccelerationStructureBuildGeometryInfoKHR -> ContT () IO ())
-> ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR)
-> ContT () IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i AccelerationStructureBuildGeometryInfoKHR
e -> ((() -> IO ()) -> IO ()) -> ContT () IO ()
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO ()) -> IO ()) -> ContT () IO ())
-> ((() -> IO ()) -> IO ()) -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> AccelerationStructureBuildGeometryInfoKHR -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
pPInfos ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> Int
-> "pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
80 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr AccelerationStructureBuildGeometryInfoKHR) (AccelerationStructureBuildGeometryInfoKHR
e) (IO () -> IO ())
-> ((() -> IO ()) -> IO ()) -> (() -> IO ()) -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO ()) -> () -> IO ()
forall a b. (a -> b) -> a -> b
$ ())) ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR
infos)
  "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
pPIndirectDeviceAddresses <- ((("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
  -> IO ())
 -> IO ())
-> ContT
     () IO ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
   -> IO ())
  -> IO ())
 -> ContT
      () IO ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)))
-> ((("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
     -> IO ())
    -> IO ())
-> ContT
     () IO ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
forall a b. (a -> b) -> a -> b
$ Int
-> (("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
    -> IO ())
-> IO ()
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @DeviceAddress ((("indirectDeviceAddresses" ::: Vector ("dataSize" ::: Word64))
-> Int
forall a. Vector a -> Int
Data.Vector.length ("indirectDeviceAddresses" ::: Vector ("dataSize" ::: Word64)
indirectDeviceAddresses)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
8)
  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
$ (Int -> ("dataSize" ::: Word64) -> IO ())
-> ("indirectDeviceAddresses" ::: Vector ("dataSize" ::: Word64))
-> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i "dataSize" ::: Word64
e -> ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
pPIndirectDeviceAddresses ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr DeviceAddress) ("dataSize" ::: Word64
e)) ("indirectDeviceAddresses" ::: Vector ("dataSize" ::: Word64)
indirectDeviceAddresses)
  "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
pPIndirectStrides <- ((("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)) -> IO ())
 -> IO ())
-> ContT
     () IO ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)) -> IO ())
  -> IO ())
 -> ContT
      () IO ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
-> ((("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
     -> IO ())
    -> IO ())
-> ContT
     () IO ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
forall a b. (a -> b) -> a -> b
$ Int
-> (("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
    -> IO ())
-> IO ()
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @Word32 ((("indirectStrides" ::: Vector ("firstQuery" ::: Word32)) -> Int
forall a. Vector a -> Int
Data.Vector.length ("indirectStrides" ::: Vector ("firstQuery" ::: Word32)
indirectStrides)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
4)
  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
$ (Int -> ("firstQuery" ::: Word32) -> IO ())
-> ("indirectStrides" ::: Vector ("firstQuery" ::: Word32))
-> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i "firstQuery" ::: Word32
e -> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
pPIndirectStrides ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Word32) ("firstQuery" ::: Word32
e)) ("indirectStrides" ::: Vector ("firstQuery" ::: Word32)
indirectStrides)
  "ppMaxPrimitiveCounts"
::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
pPpMaxPrimitiveCounts <- ((("ppMaxPrimitiveCounts"
   ::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
  -> IO ())
 -> IO ())
-> ContT
     ()
     IO
     ("ppMaxPrimitiveCounts"
      ::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("ppMaxPrimitiveCounts"
    ::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
   -> IO ())
  -> IO ())
 -> ContT
      ()
      IO
      ("ppMaxPrimitiveCounts"
       ::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))))
-> ((("ppMaxPrimitiveCounts"
      ::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
     -> IO ())
    -> IO ())
-> ContT
     ()
     IO
     ("ppMaxPrimitiveCounts"
      ::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
forall a b. (a -> b) -> a -> b
$ Int
-> (("ppMaxPrimitiveCounts"
     ::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
    -> IO ())
-> IO ()
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @(Ptr Word32) ((("maxPrimitiveCounts"
 ::: Vector
       ("indirectStrides" ::: Vector ("firstQuery" ::: Word32)))
-> Int
forall a. Vector a -> Int
Data.Vector.length ("maxPrimitiveCounts"
::: Vector ("indirectStrides" ::: Vector ("firstQuery" ::: Word32))
maxPrimitiveCounts)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
8)
  (Int
 -> ("indirectStrides" ::: Vector ("firstQuery" ::: Word32))
 -> ContT () IO ())
-> ("maxPrimitiveCounts"
    ::: Vector
          ("indirectStrides" ::: Vector ("firstQuery" ::: Word32)))
-> ContT () IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i "indirectStrides" ::: Vector ("firstQuery" ::: Word32)
e -> do
    "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
pPpMaxPrimitiveCounts' <- ((("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)) -> IO ())
 -> IO ())
-> ContT
     () IO ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)) -> IO ())
  -> IO ())
 -> ContT
      () IO ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
-> ((("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
     -> IO ())
    -> IO ())
-> ContT
     () IO ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
forall a b. (a -> b) -> a -> b
$ Int
-> (("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
    -> IO ())
-> IO ()
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @Word32 ((("indirectStrides" ::: Vector ("firstQuery" ::: Word32)) -> Int
forall a. Vector a -> Int
Data.Vector.length ("indirectStrides" ::: Vector ("firstQuery" ::: Word32)
e)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
4)
    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
$ (Int -> ("firstQuery" ::: Word32) -> IO ())
-> ("indirectStrides" ::: Vector ("firstQuery" ::: Word32))
-> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i' "firstQuery" ::: Word32
e' -> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
pPpMaxPrimitiveCounts' ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i')) :: Ptr Word32) ("firstQuery" ::: Word32
e')) ("indirectStrides" ::: Vector ("firstQuery" ::: Word32)
e)
    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
$ ("ppMaxPrimitiveCounts"
 ::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
-> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ("ppMaxPrimitiveCounts"
::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
pPpMaxPrimitiveCounts ("ppMaxPrimitiveCounts"
 ::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
-> Int
-> "ppMaxPrimitiveCounts"
   ::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (Ptr Word32)) ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
pPpMaxPrimitiveCounts')) ("maxPrimitiveCounts"
::: Vector ("indirectStrides" ::: Vector ("firstQuery" ::: Word32))
maxPrimitiveCounts)
  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 String
"vkCmdBuildAccelerationStructuresIndirectKHR" (Ptr CommandBuffer_T
-> ("firstQuery" ::: Word32)
-> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("ppMaxPrimitiveCounts"
    ::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
-> IO ()
vkCmdBuildAccelerationStructuresIndirectKHR' (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer)) ((Int -> "firstQuery" ::: Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
pInfosLength :: Word32)) ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
pPInfos) ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
pPIndirectDeviceAddresses) ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
pPIndirectStrides) ("ppMaxPrimitiveCounts"
::: Ptr ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
pPpMaxPrimitiveCounts))
  () -> 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" mkVkBuildAccelerationStructuresKHR
  :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> Word32 -> Ptr AccelerationStructureBuildGeometryInfoKHR -> Ptr (Ptr AccelerationStructureBuildRangeInfoKHR) -> IO Result) -> Ptr Device_T -> DeferredOperationKHR -> Word32 -> Ptr AccelerationStructureBuildGeometryInfoKHR -> Ptr (Ptr AccelerationStructureBuildRangeInfoKHR) -> IO Result

-- | vkBuildAccelerationStructuresKHR - Build an acceleration structure on
-- the host
--
-- = Description
--
-- This command fulfills the same task as
-- 'cmdBuildAccelerationStructuresKHR' but is executed by the host.
--
-- The 'buildAccelerationStructuresKHR' command provides the ability to
-- initiate multiple acceleration structures builds, however there is no
-- ordering or synchronization implied between any of the individual
-- acceleration structure builds.
--
-- Note
--
-- This means that an application /cannot/ build a top-level acceleration
-- structure in the same 'buildAccelerationStructuresKHR' call as the
-- associated bottom-level or instance acceleration structures are being
-- built. There also /cannot/ be any memory aliasing between any
-- acceleration structure memories or scratch memories being used by any of
-- the builds.
--
-- == Valid Usage
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-mode-04628# The @mode@ member
--     of each element of @pInfos@ /must/ be a valid
--     'BuildAccelerationStructureModeKHR' value
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-srcAccelerationStructure-04629#
--     If the @srcAccelerationStructure@ member of any element of @pInfos@
--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the
--     @srcAccelerationStructure@ member /must/ be a valid
--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-04630# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', its
--     @srcAccelerationStructure@ member /must/ not be
--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03403# The
--     @srcAccelerationStructure@ member of any element of @pInfos@ /must/
--     not be the same acceleration structure as the
--     @dstAccelerationStructure@ member of any other element of @pInfos@
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-dstAccelerationStructure-03698#
--     The @dstAccelerationStructure@ member of any element of @pInfos@
--     /must/ not be the same acceleration structure as the
--     @dstAccelerationStructure@ member of any other element of @pInfos@
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-dstAccelerationStructure-03800#
--     The @dstAccelerationStructure@ member of any element of @pInfos@
--     /must/ be a valid
--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03699# For each
--     element of @pInfos@, if its @type@ member is
--     'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR', its
--     @dstAccelerationStructure@ member /must/ have been created with a
--     value of 'AccelerationStructureCreateInfoKHR'::@type@ equal to
--     either 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR' or
--     'ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR'
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03700# For each
--     element of @pInfos@, if its @type@ member is
--     'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR', its
--     @dstAccelerationStructure@ member /must/ have been created with a
--     value of 'AccelerationStructureCreateInfoKHR'::@type@ equal to
--     either 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' or
--     'ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR'
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03663# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR',
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims inactive primitives>
--     in its @srcAccelerationStructure@ member /must/ not be made active
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03664# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', active primitives in
--     its @srcAccelerationStructure@ member /must/ not be made
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims inactive>
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-None-03407# The
--     @dstAccelerationStructure@ member of any element of @pInfos@ /must/
--     not be referenced by the @geometry.instances.data@ member of any
--     element of @pGeometries@ or @ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_INSTANCES_KHR' in any other element of @pInfos@
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-dstAccelerationStructure-03701#
--     The range of memory backing the @dstAccelerationStructure@ member of
--     any element of @pInfos@ that is accessed by this command /must/ not
--     overlap the memory backing the @srcAccelerationStructure@ member of
--     any other element of @pInfos@ with a @mode@ equal to
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', which is accessed by
--     this command
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-dstAccelerationStructure-03702#
--     The range of memory backing the @dstAccelerationStructure@ member of
--     any element of @pInfos@ that is accessed by this command /must/ not
--     overlap the memory backing the @dstAccelerationStructure@ member of
--     any other element of @pInfos@, which is accessed by this command
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-dstAccelerationStructure-03703#
--     The range of memory backing the @dstAccelerationStructure@ member of
--     any element of @pInfos@ that is accessed by this command /must/ not
--     overlap the memory backing the @scratchData@ member of any element
--     of @pInfos@ (including the same element), which is accessed by this
--     command
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-scratchData-03704# The range
--     of memory backing the @scratchData@ member of any element of
--     @pInfos@ that is accessed by this command /must/ not overlap the
--     memory backing the @scratchData@ member of any other element of
--     @pInfos@, which is accessed by this command
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-scratchData-03705# The range
--     of memory backing the @scratchData@ member of any element of
--     @pInfos@ that is accessed by this command /must/ not overlap the
--     memory backing the @srcAccelerationStructure@ member of any element
--     of @pInfos@ with a @mode@ equal to
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR' (including the same
--     element), which is accessed by this command
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-dstAccelerationStructure-03706#
--     The range of memory backing the @dstAccelerationStructure@ member of
--     any element of @pInfos@ that is accessed by this command /must/ not
--     overlap the memory backing any acceleration structure referenced by
--     the @geometry.instances.data@ member of any element of @pGeometries@
--     or @ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_INSTANCES_KHR' in any other element of @pInfos@,
--     which is accessed by this command
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03667# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', its
--     @srcAccelerationStructure@ member /must/ have previously been
--     constructed with 'BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR'
--     set in 'AccelerationStructureBuildGeometryInfoKHR'::@flags@ in the
--     build
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03668# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', its
--     @srcAccelerationStructure@ and @dstAccelerationStructure@ members
--     /must/ either be the same
--     'Vulkan.Extensions.Handles.AccelerationStructureKHR', or not have
--     any
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03758# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', its @geometryCount@
--     member /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03759# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', its @flags@ member
--     /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03760# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', its @type@ member
--     /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03761# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, its @geometryType@ member
--     /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03762# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, its @flags@ member /must/
--     have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03763# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, if @geometryType@ is
--     'GEOMETRY_TYPE_TRIANGLES_KHR', its @geometry.triangles.vertexFormat@
--     member /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03764# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, if @geometryType@ is
--     'GEOMETRY_TYPE_TRIANGLES_KHR', its @geometry.triangles.maxVertex@
--     member /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03765# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, if @geometryType@ is
--     'GEOMETRY_TYPE_TRIANGLES_KHR', its @geometry.triangles.indexType@
--     member /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03766# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, if @geometryType@ is
--     'GEOMETRY_TYPE_TRIANGLES_KHR', if its
--     @geometry.triangles.transformData@ address was @NULL@ when
--     @srcAccelerationStructure@ was last built, then it /must/ be @NULL@
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03767# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, if @geometryType@ is
--     'GEOMETRY_TYPE_TRIANGLES_KHR', if its
--     @geometry.triangles.transformData@ address was not @NULL@ when
--     @srcAccelerationStructure@ was last built, then it /must/ not be
--     @NULL@
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03768# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', then for each
--     'AccelerationStructureGeometryKHR' structure referred to by its
--     @pGeometries@ or @ppGeometries@ members, if @geometryType@ is
--     'GEOMETRY_TYPE_TRIANGLES_KHR', and @geometry.triangles.indexType@ is
--     not 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR', then the
--     value of each index referenced /must/ be the same as the
--     corresponding index value when @srcAccelerationStructure@ was last
--     built
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-primitiveCount-03769# For
--     each 'AccelerationStructureBuildRangeInfoKHR' referenced by this
--     command, its @primitiveCount@ member /must/ have the same value
--     which was specified when @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-firstVertex-03770# For each
--     'AccelerationStructureBuildRangeInfoKHR' referenced by this command,
--     if the corresponding geometry uses indices, its @firstVertex@ member
--     /must/ have the same value which was specified when
--     @srcAccelerationStructure@ was last built
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03801# For each
--     element of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@
--     with a @geometryType@ of 'GEOMETRY_TYPE_INSTANCES_KHR', the
--     corresponding @ppBuildRangeInfos@[i][j].@primitiveCount@ /must/ be
--     less than or equal to
--     'PhysicalDeviceAccelerationStructurePropertiesKHR'::@maxInstanceCount@
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03675# For each
--     @pInfos@[i], @dstAccelerationStructure@ /must/ have been created
--     with a value of 'AccelerationStructureCreateInfoKHR'::@size@ greater
--     than or equal to the memory size required by the build operation, as
--     returned by 'getAccelerationStructureBuildSizesKHR' with
--     @pBuildInfo@ = @pInfos@[i] and with each element of the
--     @pMaxPrimitiveCounts@ array greater than or equal to the equivalent
--     @ppBuildRangeInfos@[i][j].@primitiveCount@ values for @j@ in
--     [0,@pInfos@[i].@geometryCount@)
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-ppBuildRangeInfos-03676# Each
--     element of @ppBuildRangeInfos@[i] /must/ be a valid pointer to an
--     array of @pInfos@[i].@geometryCount@
--     'AccelerationStructureBuildRangeInfoKHR' structures
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-deferredOperation-03677# If
--     @deferredOperation@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
--     it /must/ be a valid
--     'Vulkan.Extensions.Handles.DeferredOperationKHR' object
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-deferredOperation-03678# Any
--     previous deferred operation that was associated with
--     @deferredOperation@ /must/ be complete
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03722# For each
--     element of @pInfos@, the @buffer@ used to create its
--     @dstAccelerationStructure@ member /must/ be bound to host-visible
--     device memory
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03723# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR' the @buffer@ used to
--     create its @srcAccelerationStructure@ member /must/ be bound to
--     host-visible device memory
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03724# For each
--     element of @pInfos@, the @buffer@ used to create each acceleration
--     structure referenced by the @geometry.instances.data@ member of any
--     element of @pGeometries@ or @ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_INSTANCES_KHR' /must/ be bound to host-visible device
--     memory
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-accelerationStructureHostCommands-03581#
--     The
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-accelerationStructureHostCommands ::accelerationStructureHostCommands>
--     feature /must/ be enabled
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03725# If
--     @pInfos@[i].@mode@ is 'BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR',
--     all addresses between @pInfos@[i].@scratchData.hostAddress@ and
--     @pInfos@[i].@scratchData.hostAddress@ + N - 1 /must/ be valid host
--     memory, where N is given by the @buildScratchSize@ member of the
--     'AccelerationStructureBuildSizesInfoKHR' structure returned from a
--     call to 'getAccelerationStructureBuildSizesKHR' with an identical
--     'AccelerationStructureBuildGeometryInfoKHR' structure and primitive
--     count
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03726# If
--     @pInfos@[i].@mode@ is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR', all addresses
--     between @pInfos@[i].@scratchData.hostAddress@ and
--     @pInfos@[i].@scratchData.hostAddress@ + N - 1 /must/ be valid host
--     memory, where N is given by the @updateScratchSize@ member of the
--     'AccelerationStructureBuildSizesInfoKHR' structure returned from a
--     call to 'getAccelerationStructureBuildSizesKHR' with an identical
--     'AccelerationStructureBuildGeometryInfoKHR' structure and primitive
--     count
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03771# For any element
--     of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@ with a
--     @geometryType@ of 'GEOMETRY_TYPE_TRIANGLES_KHR',
--     @geometry.triangles.vertexData.hostAddress@ /must/ be a valid host
--     address
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03772# For any element
--     of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@ with a
--     @geometryType@ of 'GEOMETRY_TYPE_TRIANGLES_KHR', if
--     @geometry.triangles.indexType@ is not
--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR',
--     @geometry.triangles.indexData.hostAddress@ /must/ be a valid host
--     address
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03773# For any element
--     of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@ with a
--     @geometryType@ of 'GEOMETRY_TYPE_TRIANGLES_KHR', if
--     @geometry.triangles.transformData.hostAddress@ is not @0@, it /must/
--     be a valid host address
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03774# For any element
--     of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@ with a
--     @geometryType@ of 'GEOMETRY_TYPE_AABBS_KHR',
--     @geometry.aabbs.data.hostAddress@ /must/ be a valid host address
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03775# For each
--     element of @pInfos@, the @buffer@ used to create its
--     @dstAccelerationStructure@ member /must/ be bound to memory that was
--     not allocated with multiple instances
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03776# For each
--     element of @pInfos@, if its @mode@ member is
--     'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR' the @buffer@ used to
--     create its @srcAccelerationStructure@ member /must/ be bound to
--     memory that was not allocated with multiple instances
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03777# For each
--     element of @pInfos@, the @buffer@ used to create each acceleration
--     structure referenced by the @geometry.instances.data@ member of any
--     element of @pGeometries@ or @ppGeometries@ with a @geometryType@ of
--     'GEOMETRY_TYPE_INSTANCES_KHR' /must/ be bound to memory that was not
--     allocated with multiple instances
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03778# For any element
--     of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@ with a
--     @geometryType@ of 'GEOMETRY_TYPE_INSTANCES_KHR',
--     @geometry.instances.data.hostAddress@ /must/ be a valid host address
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-03779# For any element
--     of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@ with a
--     @geometryType@ of 'GEOMETRY_TYPE_INSTANCES_KHR', each
--     'AccelerationStructureInstanceKHR'::@accelerationStructureReference@
--     value in @geometry.instances.data.hostAddress@ must be a valid
--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' object
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-04930# For any element
--     of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@ with a
--     @geometryType@ of 'GEOMETRY_TYPE_INSTANCES_KHR' with
--     'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' set, each
--     @accelerationStructureReference@ in any structure in
--     'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInstanceNV'
--     value in @geometry.instances.data.hostAddress@ must be a valid
--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' object
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-device-parameter# @device@
--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-deferredOperation-parameter#
--     If @deferredOperation@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @deferredOperation@ /must/
--     be a valid 'Vulkan.Extensions.Handles.DeferredOperationKHR' handle
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-pInfos-parameter# @pInfos@
--     /must/ be a valid pointer to an array of @infoCount@ valid
--     'AccelerationStructureBuildGeometryInfoKHR' structures
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-ppBuildRangeInfos-parameter#
--     @ppBuildRangeInfos@ /must/ be a valid pointer to an array of
--     @infoCount@ 'AccelerationStructureBuildRangeInfoKHR' structures
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-infoCount-arraylength#
--     @infoCount@ /must/ be greater than @0@
--
-- -   #VUID-vkBuildAccelerationStructuresKHR-deferredOperation-parent# If
--     @deferredOperation@ 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'
--
-- [<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
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'AccelerationStructureBuildGeometryInfoKHR',
-- 'AccelerationStructureBuildRangeInfoKHR',
-- 'Vulkan.Extensions.Handles.DeferredOperationKHR',
-- 'Vulkan.Core10.Handles.Device'
buildAccelerationStructuresKHR :: forall io
                                . (MonadIO io)
                               => -- | @device@ is the 'Vulkan.Core10.Handles.Device' for which the
                                  -- acceleration structures are being built.
                                  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
                               -> -- | @pInfos@ is a pointer to an array of @infoCount@
                                  -- 'AccelerationStructureBuildGeometryInfoKHR' structures defining the
                                  -- geometry used to build each acceleration structure.
                                  ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR)
                               -> -- | @ppBuildRangeInfos@ is a pointer to an array of @infoCount@ pointers to
                                  -- arrays of 'AccelerationStructureBuildRangeInfoKHR' structures. Each
                                  -- @ppBuildRangeInfos@[i] is a pointer to an array of
                                  -- @pInfos@[i].@geometryCount@ 'AccelerationStructureBuildRangeInfoKHR'
                                  -- structures defining dynamic offsets to the addresses where geometry data
                                  -- is stored, as defined by @pInfos@[i].
                                  ("buildRangeInfos" ::: Vector (Vector AccelerationStructureBuildRangeInfoKHR))
                               -> io (Result)
buildAccelerationStructuresKHR :: Device
-> DeferredOperationKHR
-> ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR)
-> ("buildRangeInfos"
    ::: Vector (Vector AccelerationStructureBuildRangeInfoKHR))
-> io Result
buildAccelerationStructuresKHR Device
device DeferredOperationKHR
deferredOperation "infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR
infos "buildRangeInfos"
::: Vector (Vector AccelerationStructureBuildRangeInfoKHR)
buildRangeInfos = IO Result -> io Result
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Result -> io Result)
-> (ContT Result IO Result -> IO Result)
-> ContT Result IO Result
-> io Result
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT Result IO Result -> IO Result
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Result IO Result -> io Result)
-> ContT Result IO Result -> io Result
forall a b. (a -> b) -> a -> b
$ do
  let vkBuildAccelerationStructuresKHRPtr :: FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("firstQuery" ::: Word32)
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("ppBuildRangeInfos"
       ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
   -> IO Result)
vkBuildAccelerationStructuresKHRPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> DeferredOperationKHR
      -> ("firstQuery" ::: Word32)
      -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
      -> ("ppBuildRangeInfos"
          ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
      -> IO Result)
pVkBuildAccelerationStructuresKHR (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT Result IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT Result IO ()) -> IO () -> ContT Result IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("firstQuery" ::: Word32)
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("ppBuildRangeInfos"
       ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
   -> IO Result)
vkBuildAccelerationStructuresKHRPtr FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("firstQuery" ::: Word32)
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("ppBuildRangeInfos"
       ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> DeferredOperationKHR
      -> ("firstQuery" ::: Word32)
      -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
      -> ("ppBuildRangeInfos"
          ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("firstQuery" ::: Word32)
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("ppBuildRangeInfos"
       ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
   -> 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 String
"" String
"The function pointer for vkBuildAccelerationStructuresKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkBuildAccelerationStructuresKHR' :: Ptr Device_T
-> DeferredOperationKHR
-> ("firstQuery" ::: Word32)
-> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> ("ppBuildRangeInfos"
    ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
-> IO Result
vkBuildAccelerationStructuresKHR' = FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("firstQuery" ::: Word32)
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("ppBuildRangeInfos"
       ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
   -> IO Result)
-> Ptr Device_T
-> DeferredOperationKHR
-> ("firstQuery" ::: Word32)
-> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> ("ppBuildRangeInfos"
    ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
-> IO Result
mkVkBuildAccelerationStructuresKHR FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> ("firstQuery" ::: Word32)
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("ppBuildRangeInfos"
       ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
   -> IO Result)
vkBuildAccelerationStructuresKHRPtr
  let pInfosLength :: Int
pInfosLength = ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR)
-> Int
forall a. Vector a -> Int
Data.Vector.length (("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR)
 -> Int)
-> ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR)
-> Int
forall a b. (a -> b) -> a -> b
$ ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR
infos)
  IO () -> ContT Result IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT Result IO ()) -> IO () -> ContT Result IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless ((("buildRangeInfos"
 ::: Vector (Vector AccelerationStructureBuildRangeInfoKHR))
-> Int
forall a. Vector a -> Int
Data.Vector.length (("buildRangeInfos"
  ::: Vector (Vector AccelerationStructureBuildRangeInfoKHR))
 -> Int)
-> ("buildRangeInfos"
    ::: Vector (Vector AccelerationStructureBuildRangeInfoKHR))
-> Int
forall a b. (a -> b) -> a -> b
$ ("buildRangeInfos"
::: Vector (Vector AccelerationStructureBuildRangeInfoKHR)
buildRangeInfos)) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
pInfosLength) (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 String
"" String
"ppBuildRangeInfos and pInfos must have the same length" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  "pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
pPInfos <- ((("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
  -> IO Result)
 -> IO Result)
-> ContT
     Result
     IO
     ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> IO Result)
  -> IO Result)
 -> ContT
      Result
      IO
      ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR))
-> ((("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
     -> IO Result)
    -> IO Result)
-> ContT
     Result
     IO
     ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
forall a b. (a -> b) -> a -> b
$ Int
-> (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
    -> IO Result)
-> IO Result
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @AccelerationStructureBuildGeometryInfoKHR ((("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR)
-> Int
forall a. Vector a -> Int
Data.Vector.length ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR
infos)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
80)
  (Int
 -> AccelerationStructureBuildGeometryInfoKHR -> ContT Result IO ())
-> ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR)
-> ContT Result IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i AccelerationStructureBuildGeometryInfoKHR
e -> ((() -> IO Result) -> IO Result) -> ContT Result IO ()
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO Result) -> IO Result) -> ContT Result IO ())
-> ((() -> IO Result) -> IO Result) -> ContT Result IO ()
forall a b. (a -> b) -> a -> b
$ ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> AccelerationStructureBuildGeometryInfoKHR
-> IO Result
-> IO Result
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
pPInfos ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> Int
-> "pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
80 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr AccelerationStructureBuildGeometryInfoKHR) (AccelerationStructureBuildGeometryInfoKHR
e) (IO Result -> IO Result)
-> ((() -> IO Result) -> IO Result)
-> (() -> IO Result)
-> IO Result
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO Result) -> () -> IO Result
forall a b. (a -> b) -> a -> b
$ ())) ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR
infos)
  "ppBuildRangeInfos"
::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR)
pPpBuildRangeInfos <- ((("ppBuildRangeInfos"
   ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
  -> IO Result)
 -> IO Result)
-> ContT
     Result
     IO
     ("ppBuildRangeInfos"
      ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("ppBuildRangeInfos"
    ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
   -> IO Result)
  -> IO Result)
 -> ContT
      Result
      IO
      ("ppBuildRangeInfos"
       ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR)))
-> ((("ppBuildRangeInfos"
      ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
     -> IO Result)
    -> IO Result)
-> ContT
     Result
     IO
     ("ppBuildRangeInfos"
      ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
forall a b. (a -> b) -> a -> b
$ Int
-> (("ppBuildRangeInfos"
     ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
    -> IO Result)
-> IO Result
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @(Ptr AccelerationStructureBuildRangeInfoKHR) ((("buildRangeInfos"
 ::: Vector (Vector AccelerationStructureBuildRangeInfoKHR))
-> Int
forall a. Vector a -> Int
Data.Vector.length ("buildRangeInfos"
::: Vector (Vector AccelerationStructureBuildRangeInfoKHR)
buildRangeInfos)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
8)
  (Int
 -> Vector AccelerationStructureBuildRangeInfoKHR
 -> ContT Result IO ())
-> ("buildRangeInfos"
    ::: Vector (Vector AccelerationStructureBuildRangeInfoKHR))
-> ContT Result IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i Vector AccelerationStructureBuildRangeInfoKHR
e -> do
    Ptr AccelerationStructureBuildRangeInfoKHR
pPpBuildRangeInfos' <- ((Ptr AccelerationStructureBuildRangeInfoKHR -> IO Result)
 -> IO Result)
-> ContT Result IO (Ptr AccelerationStructureBuildRangeInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr AccelerationStructureBuildRangeInfoKHR -> IO Result)
  -> IO Result)
 -> ContT Result IO (Ptr AccelerationStructureBuildRangeInfoKHR))
-> ((Ptr AccelerationStructureBuildRangeInfoKHR -> IO Result)
    -> IO Result)
-> ContT Result IO (Ptr AccelerationStructureBuildRangeInfoKHR)
forall a b. (a -> b) -> a -> b
$ Int
-> (Ptr AccelerationStructureBuildRangeInfoKHR -> IO Result)
-> IO Result
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @AccelerationStructureBuildRangeInfoKHR ((Vector AccelerationStructureBuildRangeInfoKHR -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector AccelerationStructureBuildRangeInfoKHR
e)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
16)
    IO () -> ContT Result IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT Result IO ()) -> IO () -> ContT Result IO ()
forall a b. (a -> b) -> a -> b
$ (Int -> AccelerationStructureBuildRangeInfoKHR -> IO ())
-> Vector AccelerationStructureBuildRangeInfoKHR -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i' AccelerationStructureBuildRangeInfoKHR
e' -> Ptr AccelerationStructureBuildRangeInfoKHR
-> AccelerationStructureBuildRangeInfoKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr AccelerationStructureBuildRangeInfoKHR
pPpBuildRangeInfos' Ptr AccelerationStructureBuildRangeInfoKHR
-> Int -> Ptr AccelerationStructureBuildRangeInfoKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
16 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i')) :: Ptr AccelerationStructureBuildRangeInfoKHR) (AccelerationStructureBuildRangeInfoKHR
e')) (Vector AccelerationStructureBuildRangeInfoKHR
e)
    IO () -> ContT Result IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT Result IO ()) -> IO () -> ContT Result IO ()
forall a b. (a -> b) -> a -> b
$ ("ppBuildRangeInfos"
 ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
-> Ptr AccelerationStructureBuildRangeInfoKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ("ppBuildRangeInfos"
::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR)
pPpBuildRangeInfos ("ppBuildRangeInfos"
 ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
-> Int
-> "ppBuildRangeInfos"
   ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR)) (Ptr AccelerationStructureBuildRangeInfoKHR
pPpBuildRangeInfos')) ("buildRangeInfos"
::: Vector (Vector AccelerationStructureBuildRangeInfoKHR)
buildRangeInfos)
  Result
r <- IO Result -> ContT Result IO Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result -> ContT Result IO Result)
-> IO Result -> ContT Result IO Result
forall a b. (a -> b) -> a -> b
$ String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkBuildAccelerationStructuresKHR" (Ptr Device_T
-> DeferredOperationKHR
-> ("firstQuery" ::: Word32)
-> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> ("ppBuildRangeInfos"
    ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR))
-> IO Result
vkBuildAccelerationStructuresKHR' (Device -> Ptr Device_T
deviceHandle (Device
device)) (DeferredOperationKHR
deferredOperation) ((Int -> "firstQuery" ::: Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
pInfosLength :: Word32)) ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
pPInfos) ("ppBuildRangeInfos"
::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR)
pPpBuildRangeInfos))
  IO () -> ContT Result IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT Result IO ()) -> IO () -> ContT Result 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))
  Result -> ContT Result IO Result
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Result -> ContT Result IO Result)
-> Result -> ContT Result IO Result
forall a b. (a -> b) -> a -> b
$ (Result
r)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkGetAccelerationStructureDeviceAddressKHR
  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureDeviceAddressInfoKHR -> IO DeviceAddress) -> Ptr Device_T -> Ptr AccelerationStructureDeviceAddressInfoKHR -> IO DeviceAddress

-- | vkGetAccelerationStructureDeviceAddressKHR - Query an address of a
-- acceleration structure
--
-- = Description
--
-- The 64-bit return value is an address of the acceleration structure,
-- which can be used for device and shader operations that involve
-- acceleration structures, such as ray traversal and acceleration
-- structure building.
--
-- If the acceleration structure was created with a non-zero value of
-- 'AccelerationStructureCreateInfoKHR'::@deviceAddress@, the return value
-- will be the same address.
--
-- If the acceleration structure was created with a @type@ of
-- 'ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR', the returned address /must/
-- be consistent with the relative offset to other acceleration structures
-- with @type@ 'ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR' allocated with the
-- same 'Vulkan.Core10.Handles.Buffer'. That is, the difference in returned
-- addresses between the two /must/ be the same as the difference in
-- offsets provided at acceleration structure creation.
--
-- Note
--
-- The acceleration structure device address /may/ be different from the
-- buffer device address corresponding to the acceleration structure’s
-- start offset in its storage buffer for acceleration structure types
-- other than 'ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR'.
--
-- == Valid Usage
--
-- -   #VUID-vkGetAccelerationStructureDeviceAddressKHR-device-03504# If
--     @device@ was created with multiple physical devices, then the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice>
--     feature /must/ be enabled
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkGetAccelerationStructureDeviceAddressKHR-device-parameter#
--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkGetAccelerationStructureDeviceAddressKHR-pInfo-parameter#
--     @pInfo@ /must/ be a valid pointer to a valid
--     'AccelerationStructureDeviceAddressInfoKHR' structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'AccelerationStructureDeviceAddressInfoKHR',
-- 'Vulkan.Core10.Handles.Device'
getAccelerationStructureDeviceAddressKHR :: forall io
                                          . (MonadIO io)
                                         => -- | @device@ is the logical device that the acceleration structure was
                                            -- created on.
                                            Device
                                         -> -- | @pInfo@ is a pointer to a 'AccelerationStructureDeviceAddressInfoKHR'
                                            -- structure specifying the acceleration structure to retrieve an address
                                            -- for.
                                            AccelerationStructureDeviceAddressInfoKHR
                                         -> io (DeviceAddress)
getAccelerationStructureDeviceAddressKHR :: Device
-> AccelerationStructureDeviceAddressInfoKHR
-> io ("dataSize" ::: Word64)
getAccelerationStructureDeviceAddressKHR Device
device AccelerationStructureDeviceAddressInfoKHR
info = IO ("dataSize" ::: Word64) -> io ("dataSize" ::: Word64)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ("dataSize" ::: Word64) -> io ("dataSize" ::: Word64))
-> (ContT ("dataSize" ::: Word64) IO ("dataSize" ::: Word64)
    -> IO ("dataSize" ::: Word64))
-> ContT ("dataSize" ::: Word64) IO ("dataSize" ::: Word64)
-> io ("dataSize" ::: Word64)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT ("dataSize" ::: Word64) IO ("dataSize" ::: Word64)
-> IO ("dataSize" ::: Word64)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT ("dataSize" ::: Word64) IO ("dataSize" ::: Word64)
 -> io ("dataSize" ::: Word64))
-> ContT ("dataSize" ::: Word64) IO ("dataSize" ::: Word64)
-> io ("dataSize" ::: Word64)
forall a b. (a -> b) -> a -> b
$ do
  let vkGetAccelerationStructureDeviceAddressKHRPtr :: FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
   -> IO ("dataSize" ::: Word64))
vkGetAccelerationStructureDeviceAddressKHRPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
      -> IO ("dataSize" ::: Word64))
pVkGetAccelerationStructureDeviceAddressKHR (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT ("dataSize" ::: Word64) IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT ("dataSize" ::: Word64) IO ())
-> IO () -> ContT ("dataSize" ::: Word64) IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
   -> IO ("dataSize" ::: Word64))
vkGetAccelerationStructureDeviceAddressKHRPtr FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
   -> IO ("dataSize" ::: Word64))
-> FunPtr
     (Ptr Device_T
      -> ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
      -> IO ("dataSize" ::: Word64))
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
   -> 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 String
"" String
"The function pointer for vkGetAccelerationStructureDeviceAddressKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetAccelerationStructureDeviceAddressKHR' :: Ptr Device_T
-> ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
-> IO ("dataSize" ::: Word64)
vkGetAccelerationStructureDeviceAddressKHR' = FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
   -> IO ("dataSize" ::: Word64))
-> Ptr Device_T
-> ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
-> IO ("dataSize" ::: Word64)
mkVkGetAccelerationStructureDeviceAddressKHR FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
   -> IO ("dataSize" ::: Word64))
vkGetAccelerationStructureDeviceAddressKHRPtr
  "pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR
pInfo <- ((("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
  -> IO ("dataSize" ::: Word64))
 -> IO ("dataSize" ::: Word64))
-> ContT
     ("dataSize" ::: Word64)
     IO
     ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
   -> IO ("dataSize" ::: Word64))
  -> IO ("dataSize" ::: Word64))
 -> ContT
      ("dataSize" ::: Word64)
      IO
      ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR))
-> ((("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
     -> IO ("dataSize" ::: Word64))
    -> IO ("dataSize" ::: Word64))
-> ContT
     ("dataSize" ::: Word64)
     IO
     ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
forall a b. (a -> b) -> a -> b
$ AccelerationStructureDeviceAddressInfoKHR
-> (("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
    -> IO ("dataSize" ::: Word64))
-> IO ("dataSize" ::: Word64)
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (AccelerationStructureDeviceAddressInfoKHR
info)
  "dataSize" ::: Word64
r <- IO ("dataSize" ::: Word64)
-> ContT ("dataSize" ::: Word64) IO ("dataSize" ::: Word64)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ("dataSize" ::: Word64)
 -> ContT ("dataSize" ::: Word64) IO ("dataSize" ::: Word64))
-> IO ("dataSize" ::: Word64)
-> ContT ("dataSize" ::: Word64) IO ("dataSize" ::: Word64)
forall a b. (a -> b) -> a -> b
$ String -> IO ("dataSize" ::: Word64) -> IO ("dataSize" ::: Word64)
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetAccelerationStructureDeviceAddressKHR" (Ptr Device_T
-> ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
-> IO ("dataSize" ::: Word64)
vkGetAccelerationStructureDeviceAddressKHR' (Device -> Ptr Device_T
deviceHandle (Device
device)) "pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR
pInfo)
  ("dataSize" ::: Word64)
-> ContT ("dataSize" ::: Word64) IO ("dataSize" ::: Word64)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (("dataSize" ::: Word64)
 -> ContT ("dataSize" ::: Word64) IO ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64)
-> ContT ("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" mkVkGetAccelerationStructureBuildSizesKHR
  :: FunPtr (Ptr Device_T -> AccelerationStructureBuildTypeKHR -> Ptr AccelerationStructureBuildGeometryInfoKHR -> Ptr Word32 -> Ptr AccelerationStructureBuildSizesInfoKHR -> IO ()) -> Ptr Device_T -> AccelerationStructureBuildTypeKHR -> Ptr AccelerationStructureBuildGeometryInfoKHR -> Ptr Word32 -> Ptr AccelerationStructureBuildSizesInfoKHR -> IO ()

-- | vkGetAccelerationStructureBuildSizesKHR - Retrieve the required size for
-- an acceleration structure
--
-- = Description
--
-- The @srcAccelerationStructure@, @dstAccelerationStructure@, and @mode@
-- members of @pBuildInfo@ are ignored. Any 'DeviceOrHostAddressKHR'
-- members of @pBuildInfo@ are ignored by this command, except that the
-- @hostAddress@ member of
-- 'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@ will be
-- examined to check if it is @NULL@.
--
-- An acceleration structure created with the @accelerationStructureSize@
-- returned by this command supports any build or update with a
-- 'AccelerationStructureBuildGeometryInfoKHR' structure and array of
-- 'AccelerationStructureBuildRangeInfoKHR' structures subject to the
-- following properties:
--
-- -   The build command is a host build command, and @buildType@ is
--     'ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR' or
--     'ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR'
--
-- -   The build command is a device build command, and @buildType@ is
--     'ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR' or
--     'ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR'
--
-- -   For 'AccelerationStructureBuildGeometryInfoKHR':
--
--     -   Its @type@, and @flags@ members are equal to @pBuildInfo->type@
--         andm @pBuildInfo->flags@, respectively.
--
--     -   @geometryCount@ is less than or equal to
--         @pBuildInfo->geometryCount@.
--
--     -   For each element of either @pGeometries@ or @ppGeometries@ at a
--         given index, its @geometryType@ member is equal to
--         @pBuildInfo->geometryType@.
--
--     -   For each element of either @pGeometries@ or @ppGeometries@ at a
--         given index, with a @geometryType@ member equal to
--         'GEOMETRY_TYPE_TRIANGLES_KHR', the @vertexFormat@ and
--         @indexType@ members of @geometry.triangles@ are equal to the
--         corresponding members of the same element in @pBuildInfo@.
--
--     -   For each element of either @pGeometries@ or @ppGeometries@ at a
--         given index, with a @geometryType@ member equal to
--         'GEOMETRY_TYPE_TRIANGLES_KHR', the @maxVertex@ member of
--         @geometry.triangles@ is less than or equal to the corresponding
--         member of the same element in @pBuildInfo@.
--
--     -   For each element of either @pGeometries@ or @ppGeometries@ at a
--         given index, with a @geometryType@ member equal to
--         'GEOMETRY_TYPE_TRIANGLES_KHR', if the applicable address in the
--         @transformData@ member of @geometry.triangles@ is not @NULL@,
--         the corresponding @transformData.hostAddress@ parameter in
--         @pBuildInfo@ is not @NULL@.
--
-- -   For each 'AccelerationStructureBuildRangeInfoKHR' corresponding to
--     the 'AccelerationStructureBuildGeometryInfoKHR':
--
--     -   Its @primitiveCount@ member is less than or equal to the
--         corresponding element of @pMaxPrimitiveCounts@.
--
-- Similarly, the @updateScratchSize@ value will support any build command
-- specifying the 'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR' @mode@
-- under the above conditions, and the @buildScratchSize@ value will
-- support any build command specifying the
-- 'BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR' @mode@ under the above
-- conditions.
--
-- == Valid Usage
--
-- -   #VUID-vkGetAccelerationStructureBuildSizesKHR-rayTracingPipeline-03617#
--     The
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayTracingPipeline rayTracingPipeline>
--     or
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayQuery rayQuery>
--     feature /must/ be enabled
--
-- -   #VUID-vkGetAccelerationStructureBuildSizesKHR-device-03618# If
--     @device@ was created with multiple physical devices, then the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice>
--     feature /must/ be enabled
--
-- -   #VUID-vkGetAccelerationStructureBuildSizesKHR-pBuildInfo-03619# If
--     @pBuildInfo->geometryCount@ is not @0@, @pMaxPrimitiveCounts@ /must/
--     be a valid pointer to an array of @pBuildInfo->geometryCount@
--     @uint32_t@ values
--
-- -   #VUID-vkGetAccelerationStructureBuildSizesKHR-pBuildInfo-03785# If
--     @pBuildInfo->pGeometries@ or @pBuildInfo->ppGeometries@ has a
--     @geometryType@ of 'GEOMETRY_TYPE_INSTANCES_KHR', each
--     @pMaxPrimitiveCounts@[i] /must/ be less than or equal to
--     'PhysicalDeviceAccelerationStructurePropertiesKHR'::@maxInstanceCount@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkGetAccelerationStructureBuildSizesKHR-device-parameter#
--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkGetAccelerationStructureBuildSizesKHR-buildType-parameter#
--     @buildType@ /must/ be a valid 'AccelerationStructureBuildTypeKHR'
--     value
--
-- -   #VUID-vkGetAccelerationStructureBuildSizesKHR-pBuildInfo-parameter#
--     @pBuildInfo@ /must/ be a valid pointer to a valid
--     'AccelerationStructureBuildGeometryInfoKHR' structure
--
-- -   #VUID-vkGetAccelerationStructureBuildSizesKHR-pMaxPrimitiveCounts-parameter#
--     If @pMaxPrimitiveCounts@ is not @NULL@, @pMaxPrimitiveCounts@ /must/
--     be a valid pointer to an array of @pBuildInfo->geometryCount@
--     @uint32_t@ values
--
-- -   #VUID-vkGetAccelerationStructureBuildSizesKHR-pSizeInfo-parameter#
--     @pSizeInfo@ /must/ be a valid pointer to a
--     'AccelerationStructureBuildSizesInfoKHR' structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'AccelerationStructureBuildGeometryInfoKHR',
-- 'AccelerationStructureBuildSizesInfoKHR',
-- 'AccelerationStructureBuildTypeKHR', 'Vulkan.Core10.Handles.Device'
getAccelerationStructureBuildSizesKHR :: forall io
                                       . (MonadIO io)
                                      => -- | @device@ is the logical device that will be used for creating the
                                         -- acceleration structure.
                                         Device
                                      -> -- | @buildType@ defines whether host or device operations (or both) are
                                         -- being queried for.
                                         AccelerationStructureBuildTypeKHR
                                      -> -- | @pBuildInfo@ is a pointer to a
                                         -- 'AccelerationStructureBuildGeometryInfoKHR' structure describing
                                         -- parameters of a build operation.
                                         ("buildInfo" ::: AccelerationStructureBuildGeometryInfoKHR)
                                      -> -- | @pMaxPrimitiveCounts@ is a pointer to an array of
                                         -- @pBuildInfo->geometryCount@ @uint32_t@ values defining the number of
                                         -- primitives built into each geometry.
                                         ("maxPrimitiveCounts" ::: Vector Word32)
                                      -> io (("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
getAccelerationStructureBuildSizesKHR :: Device
-> AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildGeometryInfoKHR
-> ("indirectStrides" ::: Vector ("firstQuery" ::: Word32))
-> io ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
getAccelerationStructureBuildSizesKHR Device
device AccelerationStructureBuildTypeKHR
buildType AccelerationStructureBuildGeometryInfoKHR
buildInfo "indirectStrides" ::: Vector ("firstQuery" ::: Word32)
maxPrimitiveCounts = IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> io ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
 -> io ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> (ContT
      ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
      IO
      ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
    -> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> ContT
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
     IO
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> io ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT
  ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
  IO
  ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
   IO
   ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
 -> io ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> ContT
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
     IO
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> io ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
forall a b. (a -> b) -> a -> b
$ do
  let vkGetAccelerationStructureBuildSizesKHRPtr :: FunPtr
  (Ptr Device_T
   -> AccelerationStructureBuildTypeKHR
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
   -> ("pSizeInfo"
       ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
   -> IO ())
vkGetAccelerationStructureBuildSizesKHRPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> AccelerationStructureBuildTypeKHR
      -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
      -> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
      -> ("pSizeInfo"
          ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
      -> IO ())
pVkGetAccelerationStructureBuildSizesKHR (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO ()
-> ContT
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR) IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT
      ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR) IO ())
-> IO ()
-> ContT
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR) IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> AccelerationStructureBuildTypeKHR
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
   -> ("pSizeInfo"
       ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
   -> IO ())
vkGetAccelerationStructureBuildSizesKHRPtr FunPtr
  (Ptr Device_T
   -> AccelerationStructureBuildTypeKHR
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
   -> ("pSizeInfo"
       ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
   -> IO ())
-> FunPtr
     (Ptr Device_T
      -> AccelerationStructureBuildTypeKHR
      -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
      -> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
      -> ("pSizeInfo"
          ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> AccelerationStructureBuildTypeKHR
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
   -> ("pSizeInfo"
       ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
   -> 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 String
"" String
"The function pointer for vkGetAccelerationStructureBuildSizesKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetAccelerationStructureBuildSizesKHR' :: Ptr Device_T
-> AccelerationStructureBuildTypeKHR
-> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("pSizeInfo"
    ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> IO ()
vkGetAccelerationStructureBuildSizesKHR' = FunPtr
  (Ptr Device_T
   -> AccelerationStructureBuildTypeKHR
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
   -> ("pSizeInfo"
       ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
   -> IO ())
-> Ptr Device_T
-> AccelerationStructureBuildTypeKHR
-> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("pSizeInfo"
    ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> IO ()
mkVkGetAccelerationStructureBuildSizesKHR FunPtr
  (Ptr Device_T
   -> AccelerationStructureBuildTypeKHR
   -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
   -> ("pSizeInfo"
       ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
   -> IO ())
vkGetAccelerationStructureBuildSizesKHRPtr
  "pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
pBuildInfo <- ((("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
  -> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
 -> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> ContT
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
     IO
     ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
   -> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
  -> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
 -> ContT
      ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
      IO
      ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR))
-> ((("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
     -> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
    -> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> ContT
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
     IO
     ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
forall a b. (a -> b) -> a -> b
$ AccelerationStructureBuildGeometryInfoKHR
-> (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
    -> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (AccelerationStructureBuildGeometryInfoKHR
buildInfo)
  "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
pMaxPrimitiveCounts <- if ("indirectStrides" ::: Vector ("firstQuery" ::: Word32)) -> Bool
forall a. Vector a -> Bool
Data.Vector.null ("indirectStrides" ::: Vector ("firstQuery" ::: Word32)
maxPrimitiveCounts)
    then ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ContT
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
     IO
     ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
forall (f :: * -> *) a. Applicative f => a -> f a
pure "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a. Ptr a
nullPtr
    else do
      "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
pPMaxPrimitiveCounts <- ((("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
  -> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
 -> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> ContT
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
     IO
     ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
   -> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
  -> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
 -> ContT
      ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
      IO
      ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
-> ((("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
     -> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
    -> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> ContT
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
     IO
     ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
forall a b. (a -> b) -> a -> b
$ Int
-> (("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
    -> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @Word32 (((("indirectStrides" ::: Vector ("firstQuery" ::: Word32)) -> Int
forall a. Vector a -> Int
Data.Vector.length ("indirectStrides" ::: Vector ("firstQuery" ::: Word32)
maxPrimitiveCounts))) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
4)
      IO ()
-> ContT
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR) IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT
      ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR) IO ())
-> IO ()
-> ContT
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR) IO ()
forall a b. (a -> b) -> a -> b
$ (Int -> ("firstQuery" ::: Word32) -> IO ())
-> ("indirectStrides" ::: Vector ("firstQuery" ::: Word32))
-> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i "firstQuery" ::: Word32
e -> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
pPMaxPrimitiveCounts ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Word32) ("firstQuery" ::: Word32
e)) (("indirectStrides" ::: Vector ("firstQuery" ::: Word32)
maxPrimitiveCounts))
      ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ContT
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
     IO
     ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
 -> ContT
      ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
      IO
      ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)))
-> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ContT
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
     IO
     ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
forall a b. (a -> b) -> a -> b
$ "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
pPMaxPrimitiveCounts
  "pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
pPSizeInfo <- ((("pSizeInfo"
   ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
  -> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
 -> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> ContT
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
     IO
     ("pSizeInfo"
      ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (forall b.
ToCStruct
  ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR) =>
(("pSizeInfo"
  ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
 -> IO b)
-> IO b
forall a b. ToCStruct a => (Ptr a -> IO b) -> IO b
withZeroCStruct @AccelerationStructureBuildSizesInfoKHR)
  IO ()
-> ContT
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR) IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT
      ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR) IO ())
-> IO ()
-> ContT
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR) IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetAccelerationStructureBuildSizesKHR" (Ptr Device_T
-> AccelerationStructureBuildTypeKHR
-> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("pSizeInfo"
    ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> IO ()
vkGetAccelerationStructureBuildSizesKHR' (Device -> Ptr Device_T
deviceHandle (Device
device)) (AccelerationStructureBuildTypeKHR
buildType) "pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
pBuildInfo "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
pMaxPrimitiveCounts ("pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
pPSizeInfo))
  "sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR
pSizeInfo <- IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> ContT
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
     IO
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
 -> ContT
      ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
      IO
      ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> ContT
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
     IO
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
forall a b. (a -> b) -> a -> b
$ ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @AccelerationStructureBuildSizesInfoKHR "pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
pPSizeInfo
  ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> ContT
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
     IO
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
 -> ContT
      ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
      IO
      ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> ContT
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
     IO
     ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
forall a b. (a -> b) -> a -> b
$ ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR
pSizeInfo)


-- No documentation found for TopLevel "VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR"
pattern $bGEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR :: GeometryInstanceFlagBitsKHR
$mGEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR :: forall r.
GeometryInstanceFlagBitsKHR -> (Void# -> r) -> (Void# -> r) -> r
GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR = GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR


-- | VkWriteDescriptorSetAccelerationStructureKHR - Structure specifying
-- acceleration structure descriptor information
--
-- == Valid Usage
--
-- -   #VUID-VkWriteDescriptorSetAccelerationStructureKHR-accelerationStructureCount-02236#
--     @accelerationStructureCount@ /must/ be equal to @descriptorCount@ in
--     the extended structure
--
-- -   #VUID-VkWriteDescriptorSetAccelerationStructureKHR-pAccelerationStructures-03579#
--     Each acceleration structure in @pAccelerationStructures@ /must/ have
--     been created with a @type@ of
--     'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR' or
--     'ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR'
--
-- -   #VUID-VkWriteDescriptorSetAccelerationStructureKHR-pAccelerationStructures-03580#
--     If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
--     feature is not enabled, each element of @pAccelerationStructures@
--     /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkWriteDescriptorSetAccelerationStructureKHR-sType-sType#
--     @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR'
--
-- -   #VUID-VkWriteDescriptorSetAccelerationStructureKHR-pAccelerationStructures-parameter#
--     @pAccelerationStructures@ /must/ be a valid pointer to an array of
--     @accelerationStructureCount@ valid or
--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handles
--
-- -   #VUID-VkWriteDescriptorSetAccelerationStructureKHR-accelerationStructureCount-arraylength#
--     @accelerationStructureCount@ /must/ be greater than @0@
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data WriteDescriptorSetAccelerationStructureKHR = WriteDescriptorSetAccelerationStructureKHR
  { -- | @pAccelerationStructures@ is a pointer to an array of
    -- 'Vulkan.Extensions.Handles.AccelerationStructureKHR' structures
    -- specifying the acceleration structures to update.
    WriteDescriptorSetAccelerationStructureKHR
-> "accelerationStructures" ::: Vector AccelerationStructureKHR
accelerationStructures :: Vector AccelerationStructureKHR }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (WriteDescriptorSetAccelerationStructureKHR)
#endif
deriving instance Show WriteDescriptorSetAccelerationStructureKHR

instance ToCStruct WriteDescriptorSetAccelerationStructureKHR where
  withCStruct :: WriteDescriptorSetAccelerationStructureKHR
-> (Ptr WriteDescriptorSetAccelerationStructureKHR -> IO b) -> IO b
withCStruct WriteDescriptorSetAccelerationStructureKHR
x Ptr WriteDescriptorSetAccelerationStructureKHR -> IO b
f = Int
-> (Ptr WriteDescriptorSetAccelerationStructureKHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr WriteDescriptorSetAccelerationStructureKHR -> IO b) -> IO b)
-> (Ptr WriteDescriptorSetAccelerationStructureKHR -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr WriteDescriptorSetAccelerationStructureKHR
p -> Ptr WriteDescriptorSetAccelerationStructureKHR
-> WriteDescriptorSetAccelerationStructureKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr WriteDescriptorSetAccelerationStructureKHR
p WriteDescriptorSetAccelerationStructureKHR
x (Ptr WriteDescriptorSetAccelerationStructureKHR -> IO b
f Ptr WriteDescriptorSetAccelerationStructureKHR
p)
  pokeCStruct :: Ptr WriteDescriptorSetAccelerationStructureKHR
-> WriteDescriptorSetAccelerationStructureKHR -> IO b -> IO b
pokeCStruct Ptr WriteDescriptorSetAccelerationStructureKHR
p WriteDescriptorSetAccelerationStructureKHR{"accelerationStructures" ::: Vector AccelerationStructureKHR
accelerationStructures :: "accelerationStructures" ::: Vector AccelerationStructureKHR
$sel:accelerationStructures:WriteDescriptorSetAccelerationStructureKHR :: WriteDescriptorSetAccelerationStructureKHR
-> "accelerationStructures" ::: Vector AccelerationStructureKHR
..} 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 WriteDescriptorSetAccelerationStructureKHR
p Ptr WriteDescriptorSetAccelerationStructureKHR
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR)
    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 WriteDescriptorSetAccelerationStructureKHR
p Ptr WriteDescriptorSetAccelerationStructureKHR
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    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
$ ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr WriteDescriptorSetAccelerationStructureKHR
p Ptr WriteDescriptorSetAccelerationStructureKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) ((Int -> "firstQuery" ::: Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (("accelerationStructures" ::: Vector AccelerationStructureKHR)
-> Int
forall a. Vector a -> Int
Data.Vector.length (("accelerationStructures" ::: Vector AccelerationStructureKHR)
 -> Int)
-> ("accelerationStructures" ::: Vector AccelerationStructureKHR)
-> Int
forall a b. (a -> b) -> a -> b
$ ("accelerationStructures" ::: Vector AccelerationStructureKHR
accelerationStructures)) :: Word32))
    "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
pPAccelerationStructures' <- ((("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
  -> IO b)
 -> IO b)
-> ContT
     b IO ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
   -> IO b)
  -> IO b)
 -> ContT
      b IO ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR))
-> ((("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
     -> IO b)
    -> IO b)
-> ContT
     b IO ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
forall a b. (a -> b) -> a -> b
$ Int
-> (("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @AccelerationStructureKHR ((("accelerationStructures" ::: Vector AccelerationStructureKHR)
-> Int
forall a. Vector a -> Int
Data.Vector.length ("accelerationStructures" ::: Vector AccelerationStructureKHR
accelerationStructures)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
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 -> AccelerationStructureKHR -> IO ())
-> ("accelerationStructures" ::: Vector AccelerationStructureKHR)
-> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i AccelerationStructureKHR
e -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> AccelerationStructureKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR
pPAccelerationStructures' ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> Int
-> "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr AccelerationStructureKHR) (AccelerationStructureKHR
e)) ("accelerationStructures" ::: Vector AccelerationStructureKHR
accelerationStructures)
    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 ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr WriteDescriptorSetAccelerationStructureKHR
p Ptr WriteDescriptorSetAccelerationStructureKHR
-> Int
-> Ptr ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr AccelerationStructureKHR))) ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR
pPAccelerationStructures')
    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 = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr WriteDescriptorSetAccelerationStructureKHR -> IO b -> IO b
pokeZeroCStruct Ptr WriteDescriptorSetAccelerationStructureKHR
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr WriteDescriptorSetAccelerationStructureKHR
p Ptr WriteDescriptorSetAccelerationStructureKHR
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR)
    Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr WriteDescriptorSetAccelerationStructureKHR
p Ptr WriteDescriptorSetAccelerationStructureKHR
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    IO b
f

instance FromCStruct WriteDescriptorSetAccelerationStructureKHR where
  peekCStruct :: Ptr WriteDescriptorSetAccelerationStructureKHR
-> IO WriteDescriptorSetAccelerationStructureKHR
peekCStruct Ptr WriteDescriptorSetAccelerationStructureKHR
p = do
    "firstQuery" ::: Word32
accelerationStructureCount <- ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> IO ("firstQuery" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr WriteDescriptorSetAccelerationStructureKHR
p Ptr WriteDescriptorSetAccelerationStructureKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
pAccelerationStructures <- Ptr ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> IO ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
forall a. Storable a => Ptr a -> IO a
peek @(Ptr AccelerationStructureKHR) ((Ptr WriteDescriptorSetAccelerationStructureKHR
p Ptr WriteDescriptorSetAccelerationStructureKHR
-> Int
-> Ptr ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr AccelerationStructureKHR)))
    "accelerationStructures" ::: Vector AccelerationStructureKHR
pAccelerationStructures' <- Int
-> (Int -> IO AccelerationStructureKHR)
-> IO
     ("accelerationStructures" ::: Vector AccelerationStructureKHR)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (("firstQuery" ::: Word32) -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral "firstQuery" ::: Word32
accelerationStructureCount) (\Int
i -> ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> IO AccelerationStructureKHR
forall a. Storable a => Ptr a -> IO a
peek @AccelerationStructureKHR (("pAccelerationStructures" ::: Ptr AccelerationStructureKHR
pAccelerationStructures ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> Int
-> "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr AccelerationStructureKHR)))
    WriteDescriptorSetAccelerationStructureKHR
-> IO WriteDescriptorSetAccelerationStructureKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (WriteDescriptorSetAccelerationStructureKHR
 -> IO WriteDescriptorSetAccelerationStructureKHR)
-> WriteDescriptorSetAccelerationStructureKHR
-> IO WriteDescriptorSetAccelerationStructureKHR
forall a b. (a -> b) -> a -> b
$ ("accelerationStructures" ::: Vector AccelerationStructureKHR)
-> WriteDescriptorSetAccelerationStructureKHR
WriteDescriptorSetAccelerationStructureKHR
             "accelerationStructures" ::: Vector AccelerationStructureKHR
pAccelerationStructures'

instance Zero WriteDescriptorSetAccelerationStructureKHR where
  zero :: WriteDescriptorSetAccelerationStructureKHR
zero = ("accelerationStructures" ::: Vector AccelerationStructureKHR)
-> WriteDescriptorSetAccelerationStructureKHR
WriteDescriptorSetAccelerationStructureKHR
           "accelerationStructures" ::: Vector AccelerationStructureKHR
forall a. Monoid a => a
mempty


-- | VkPhysicalDeviceAccelerationStructureFeaturesKHR - Structure describing
-- the acceleration structure features that can be supported by an
-- implementation
--
-- = Members
--
-- This structure describes the following features:
--
-- = Description
--
-- If the 'PhysicalDeviceAccelerationStructureFeaturesKHR' structure is
-- included in the @pNext@ chain of the
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2'
-- structure passed to
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2',
-- it is filled in to indicate whether each corresponding feature is
-- supported. 'PhysicalDeviceAccelerationStructureFeaturesKHR' /can/ also
-- be used in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo'
-- to selectively enable these features.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceAccelerationStructureFeaturesKHR = PhysicalDeviceAccelerationStructureFeaturesKHR
  { -- | #features-accelerationStructure# @accelerationStructure@ indicates
    -- whether the implementation supports the acceleration structure
    -- functionality. See
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure Acceleration Structures>.
    PhysicalDeviceAccelerationStructureFeaturesKHR -> Bool
accelerationStructure :: Bool
  , -- | #features-accelerationStructureCaptureReplay#
    -- @accelerationStructureCaptureReplay@ indicates whether the
    -- implementation supports saving and reusing acceleration structure device
    -- addresses, e.g. for trace capture and replay.
    PhysicalDeviceAccelerationStructureFeaturesKHR -> Bool
accelerationStructureCaptureReplay :: Bool
  , -- | #features-accelerationStructureIndirectBuild#
    -- @accelerationStructureIndirectBuild@ indicates whether the
    -- implementation supports indirect acceleration structure build commands,
    -- e.g. 'cmdBuildAccelerationStructuresIndirectKHR'.
    PhysicalDeviceAccelerationStructureFeaturesKHR -> Bool
accelerationStructureIndirectBuild :: Bool
  , -- | #features-accelerationStructureHostCommands#
    -- @accelerationStructureHostCommands@ indicates whether the implementation
    -- supports host side acceleration structure commands, e.g.
    -- 'buildAccelerationStructuresKHR', 'copyAccelerationStructureKHR',
    -- 'copyAccelerationStructureToMemoryKHR',
    -- 'copyMemoryToAccelerationStructureKHR',
    -- 'writeAccelerationStructuresPropertiesKHR'.
    PhysicalDeviceAccelerationStructureFeaturesKHR -> Bool
accelerationStructureHostCommands :: Bool
  , -- | #features-descriptorBindingAccelerationStructureUpdateAfterBind#
    -- @descriptorBindingAccelerationStructureUpdateAfterBind@ indicates
    -- whether the implementation supports updating acceleration structure
    -- descriptors after a set is bound. If this feature is not enabled,
    -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
    -- /must/ not be used with
    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR'.
    PhysicalDeviceAccelerationStructureFeaturesKHR -> Bool
descriptorBindingAccelerationStructureUpdateAfterBind :: Bool
  }
  deriving (Typeable, PhysicalDeviceAccelerationStructureFeaturesKHR
-> PhysicalDeviceAccelerationStructureFeaturesKHR -> Bool
(PhysicalDeviceAccelerationStructureFeaturesKHR
 -> PhysicalDeviceAccelerationStructureFeaturesKHR -> Bool)
-> (PhysicalDeviceAccelerationStructureFeaturesKHR
    -> PhysicalDeviceAccelerationStructureFeaturesKHR -> Bool)
-> Eq PhysicalDeviceAccelerationStructureFeaturesKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PhysicalDeviceAccelerationStructureFeaturesKHR
-> PhysicalDeviceAccelerationStructureFeaturesKHR -> Bool
$c/= :: PhysicalDeviceAccelerationStructureFeaturesKHR
-> PhysicalDeviceAccelerationStructureFeaturesKHR -> Bool
== :: PhysicalDeviceAccelerationStructureFeaturesKHR
-> PhysicalDeviceAccelerationStructureFeaturesKHR -> Bool
$c== :: PhysicalDeviceAccelerationStructureFeaturesKHR
-> PhysicalDeviceAccelerationStructureFeaturesKHR -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceAccelerationStructureFeaturesKHR)
#endif
deriving instance Show PhysicalDeviceAccelerationStructureFeaturesKHR

instance ToCStruct PhysicalDeviceAccelerationStructureFeaturesKHR where
  withCStruct :: PhysicalDeviceAccelerationStructureFeaturesKHR
-> (Ptr PhysicalDeviceAccelerationStructureFeaturesKHR -> IO b)
-> IO b
withCStruct PhysicalDeviceAccelerationStructureFeaturesKHR
x Ptr PhysicalDeviceAccelerationStructureFeaturesKHR -> IO b
f = Int
-> (Ptr PhysicalDeviceAccelerationStructureFeaturesKHR -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 ((Ptr PhysicalDeviceAccelerationStructureFeaturesKHR -> IO b)
 -> IO b)
-> (Ptr PhysicalDeviceAccelerationStructureFeaturesKHR -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p -> Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> PhysicalDeviceAccelerationStructureFeaturesKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p PhysicalDeviceAccelerationStructureFeaturesKHR
x (Ptr PhysicalDeviceAccelerationStructureFeaturesKHR -> IO b
f Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p)
  pokeCStruct :: Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> PhysicalDeviceAccelerationStructureFeaturesKHR -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p PhysicalDeviceAccelerationStructureFeaturesKHR{Bool
descriptorBindingAccelerationStructureUpdateAfterBind :: Bool
accelerationStructureHostCommands :: Bool
accelerationStructureIndirectBuild :: Bool
accelerationStructureCaptureReplay :: Bool
accelerationStructure :: Bool
$sel:descriptorBindingAccelerationStructureUpdateAfterBind:PhysicalDeviceAccelerationStructureFeaturesKHR :: PhysicalDeviceAccelerationStructureFeaturesKHR -> Bool
$sel:accelerationStructureHostCommands:PhysicalDeviceAccelerationStructureFeaturesKHR :: PhysicalDeviceAccelerationStructureFeaturesKHR -> Bool
$sel:accelerationStructureIndirectBuild:PhysicalDeviceAccelerationStructureFeaturesKHR :: PhysicalDeviceAccelerationStructureFeaturesKHR -> Bool
$sel:accelerationStructureCaptureReplay:PhysicalDeviceAccelerationStructureFeaturesKHR :: PhysicalDeviceAccelerationStructureFeaturesKHR -> Bool
$sel:accelerationStructure:PhysicalDeviceAccelerationStructureFeaturesKHR :: PhysicalDeviceAccelerationStructureFeaturesKHR -> Bool
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR)
    Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
accelerationStructure))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
accelerationStructureCaptureReplay))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
accelerationStructureIndirectBuild))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
accelerationStructureHostCommands))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
descriptorBindingAccelerationStructureUpdateAfterBind))
    IO b
f
  cStructSize :: Int
cStructSize = Int
40
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr PhysicalDeviceAccelerationStructureFeaturesKHR -> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR)
    Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    IO b
f

instance FromCStruct PhysicalDeviceAccelerationStructureFeaturesKHR where
  peekCStruct :: Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> IO PhysicalDeviceAccelerationStructureFeaturesKHR
peekCStruct Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p = do
    Bool32
accelerationStructure <- Ptr Bool32 -> IO Bool32
forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32))
    Bool32
accelerationStructureCaptureReplay <- Ptr Bool32 -> IO Bool32
forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Bool32))
    Bool32
accelerationStructureIndirectBuild <- Ptr Bool32 -> IO Bool32
forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Bool32))
    Bool32
accelerationStructureHostCommands <- Ptr Bool32 -> IO Bool32
forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Bool32))
    Bool32
descriptorBindingAccelerationStructureUpdateAfterBind <- Ptr Bool32 -> IO Bool32
forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
p Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Bool32))
    PhysicalDeviceAccelerationStructureFeaturesKHR
-> IO PhysicalDeviceAccelerationStructureFeaturesKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PhysicalDeviceAccelerationStructureFeaturesKHR
 -> IO PhysicalDeviceAccelerationStructureFeaturesKHR)
-> PhysicalDeviceAccelerationStructureFeaturesKHR
-> IO PhysicalDeviceAccelerationStructureFeaturesKHR
forall a b. (a -> b) -> a -> b
$ Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> PhysicalDeviceAccelerationStructureFeaturesKHR
PhysicalDeviceAccelerationStructureFeaturesKHR
             (Bool32 -> Bool
bool32ToBool Bool32
accelerationStructure) (Bool32 -> Bool
bool32ToBool Bool32
accelerationStructureCaptureReplay) (Bool32 -> Bool
bool32ToBool Bool32
accelerationStructureIndirectBuild) (Bool32 -> Bool
bool32ToBool Bool32
accelerationStructureHostCommands) (Bool32 -> Bool
bool32ToBool Bool32
descriptorBindingAccelerationStructureUpdateAfterBind)

instance Storable PhysicalDeviceAccelerationStructureFeaturesKHR where
  sizeOf :: PhysicalDeviceAccelerationStructureFeaturesKHR -> Int
sizeOf ~PhysicalDeviceAccelerationStructureFeaturesKHR
_ = Int
40
  alignment :: PhysicalDeviceAccelerationStructureFeaturesKHR -> Int
alignment ~PhysicalDeviceAccelerationStructureFeaturesKHR
_ = Int
8
  peek :: Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> IO PhysicalDeviceAccelerationStructureFeaturesKHR
peek = Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> IO PhysicalDeviceAccelerationStructureFeaturesKHR
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> PhysicalDeviceAccelerationStructureFeaturesKHR -> IO ()
poke Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
ptr PhysicalDeviceAccelerationStructureFeaturesKHR
poked = Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
-> PhysicalDeviceAccelerationStructureFeaturesKHR -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceAccelerationStructureFeaturesKHR
ptr PhysicalDeviceAccelerationStructureFeaturesKHR
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero PhysicalDeviceAccelerationStructureFeaturesKHR where
  zero :: PhysicalDeviceAccelerationStructureFeaturesKHR
zero = Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> PhysicalDeviceAccelerationStructureFeaturesKHR
PhysicalDeviceAccelerationStructureFeaturesKHR
           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


-- | VkPhysicalDeviceAccelerationStructurePropertiesKHR - Properties of the
-- physical device for acceleration structure
--
-- = Description
--
-- Due to the fact that the geometry, instance, and primitive counts are
-- specified at acceleration structure creation as 32-bit values,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxGeometryCount maxGeometryCount>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxInstanceCount maxInstanceCount>,
-- and
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxPrimitiveCount maxPrimitiveCount>
-- /must/ not exceed 232-1.
--
-- If the 'PhysicalDeviceAccelerationStructurePropertiesKHR' structure is
-- included in the @pNext@ chain of the
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2'
-- structure passed to
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceProperties2',
-- it is filled in with each corresponding implementation-dependent
-- property.
--
-- Limits specified by this structure /must/ match those specified with the
-- same name in
-- 'Vulkan.Extensions.VK_NV_ray_tracing.PhysicalDeviceRayTracingPropertiesNV'.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceAccelerationStructurePropertiesKHR = PhysicalDeviceAccelerationStructurePropertiesKHR
  { -- | #limits-maxGeometryCount# @maxGeometryCount@ is the maximum number of
    -- geometries in the bottom level acceleration structure.
    PhysicalDeviceAccelerationStructurePropertiesKHR
-> "dataSize" ::: Word64
maxGeometryCount :: Word64
  , -- | #limits-maxInstanceCount# @maxInstanceCount@ is the maximum number of
    -- instances in the top level acceleration structure.
    PhysicalDeviceAccelerationStructurePropertiesKHR
-> "dataSize" ::: Word64
maxInstanceCount :: Word64
  , -- | #limits-maxPrimitiveCount# @maxPrimitiveCount@ is the maximum number of
    -- triangles or AABBs in all geometries in the bottom level acceleration
    -- structure.
    PhysicalDeviceAccelerationStructurePropertiesKHR
-> "dataSize" ::: Word64
maxPrimitiveCount :: Word64
  , -- | #limits-maxPerStageDescriptorAccelerationStructures#
    -- @maxPerStageDescriptorAccelerationStructures@ is the maximum number of
    -- acceleration structure bindings that /can/ be accessible to a single
    -- shader stage in a pipeline layout. Descriptor bindings with a descriptor
    -- type of
    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR'
    -- count against this limit. Only descriptor bindings in descriptor set
    -- layouts created without the
    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
    -- bit set count against this limit.
    PhysicalDeviceAccelerationStructurePropertiesKHR
-> "firstQuery" ::: Word32
maxPerStageDescriptorAccelerationStructures :: Word32
  , -- | #limits-maxPerStageDescriptorUpdateAfterBindAccelerationStructures#
    -- @maxPerStageDescriptorUpdateAfterBindAccelerationStructures@ is similar
    -- to @maxPerStageDescriptorAccelerationStructures@ but counts descriptor
    -- bindings from descriptor sets created with or without the
    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
    -- bit set.
    PhysicalDeviceAccelerationStructurePropertiesKHR
-> "firstQuery" ::: Word32
maxPerStageDescriptorUpdateAfterBindAccelerationStructures :: Word32
  , -- | #limits-maxDescriptorSetAccelerationStructures#
    -- @maxDescriptorSetAccelerationStructures@ is the maximum number of
    -- acceleration structure descriptors that /can/ be included in descriptor
    -- bindings in a pipeline layout across all pipeline shader stages and
    -- descriptor set numbers. Descriptor bindings with a descriptor type of
    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR'
    -- count against this limit. Only descriptor bindings in descriptor set
    -- layouts created without the
    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
    -- bit set count against this limit.
    PhysicalDeviceAccelerationStructurePropertiesKHR
-> "firstQuery" ::: Word32
maxDescriptorSetAccelerationStructures :: Word32
  , -- | #limits-maxDescriptorSetUpdateAfterBindAccelerationStructures#
    -- @maxDescriptorSetUpdateAfterBindAccelerationStructures@ is similar to
    -- @maxDescriptorSetAccelerationStructures@ but counts descriptor bindings
    -- from descriptor sets created with or without the
    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
    -- bit set.
    PhysicalDeviceAccelerationStructurePropertiesKHR
-> "firstQuery" ::: Word32
maxDescriptorSetUpdateAfterBindAccelerationStructures :: Word32
  , -- | #limits-minAccelerationStructureScratchOffsetAlignment#
    -- @minAccelerationStructureScratchOffsetAlignment@ is the minimum
    -- /required/ alignment, in bytes, for scratch data passed in to an
    -- acceleration structure build command. The value /must/ be a power of
    -- two.
    PhysicalDeviceAccelerationStructurePropertiesKHR
-> "firstQuery" ::: Word32
minAccelerationStructureScratchOffsetAlignment :: Word32
  }
  deriving (Typeable, PhysicalDeviceAccelerationStructurePropertiesKHR
-> PhysicalDeviceAccelerationStructurePropertiesKHR -> Bool
(PhysicalDeviceAccelerationStructurePropertiesKHR
 -> PhysicalDeviceAccelerationStructurePropertiesKHR -> Bool)
-> (PhysicalDeviceAccelerationStructurePropertiesKHR
    -> PhysicalDeviceAccelerationStructurePropertiesKHR -> Bool)
-> Eq PhysicalDeviceAccelerationStructurePropertiesKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PhysicalDeviceAccelerationStructurePropertiesKHR
-> PhysicalDeviceAccelerationStructurePropertiesKHR -> Bool
$c/= :: PhysicalDeviceAccelerationStructurePropertiesKHR
-> PhysicalDeviceAccelerationStructurePropertiesKHR -> Bool
== :: PhysicalDeviceAccelerationStructurePropertiesKHR
-> PhysicalDeviceAccelerationStructurePropertiesKHR -> Bool
$c== :: PhysicalDeviceAccelerationStructurePropertiesKHR
-> PhysicalDeviceAccelerationStructurePropertiesKHR -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceAccelerationStructurePropertiesKHR)
#endif
deriving instance Show PhysicalDeviceAccelerationStructurePropertiesKHR

instance ToCStruct PhysicalDeviceAccelerationStructurePropertiesKHR where
  withCStruct :: PhysicalDeviceAccelerationStructurePropertiesKHR
-> (Ptr PhysicalDeviceAccelerationStructurePropertiesKHR -> IO b)
-> IO b
withCStruct PhysicalDeviceAccelerationStructurePropertiesKHR
x Ptr PhysicalDeviceAccelerationStructurePropertiesKHR -> IO b
f = Int
-> (Ptr PhysicalDeviceAccelerationStructurePropertiesKHR -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
64 ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR -> IO b)
 -> IO b)
-> (Ptr PhysicalDeviceAccelerationStructurePropertiesKHR -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p -> Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> PhysicalDeviceAccelerationStructurePropertiesKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p PhysicalDeviceAccelerationStructurePropertiesKHR
x (Ptr PhysicalDeviceAccelerationStructurePropertiesKHR -> IO b
f Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p)
  pokeCStruct :: Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> PhysicalDeviceAccelerationStructurePropertiesKHR -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p PhysicalDeviceAccelerationStructurePropertiesKHR{"firstQuery" ::: Word32
"dataSize" ::: Word64
minAccelerationStructureScratchOffsetAlignment :: "firstQuery" ::: Word32
maxDescriptorSetUpdateAfterBindAccelerationStructures :: "firstQuery" ::: Word32
maxDescriptorSetAccelerationStructures :: "firstQuery" ::: Word32
maxPerStageDescriptorUpdateAfterBindAccelerationStructures :: "firstQuery" ::: Word32
maxPerStageDescriptorAccelerationStructures :: "firstQuery" ::: Word32
maxPrimitiveCount :: "dataSize" ::: Word64
maxInstanceCount :: "dataSize" ::: Word64
maxGeometryCount :: "dataSize" ::: Word64
$sel:minAccelerationStructureScratchOffsetAlignment:PhysicalDeviceAccelerationStructurePropertiesKHR :: PhysicalDeviceAccelerationStructurePropertiesKHR
-> "firstQuery" ::: Word32
$sel:maxDescriptorSetUpdateAfterBindAccelerationStructures:PhysicalDeviceAccelerationStructurePropertiesKHR :: PhysicalDeviceAccelerationStructurePropertiesKHR
-> "firstQuery" ::: Word32
$sel:maxDescriptorSetAccelerationStructures:PhysicalDeviceAccelerationStructurePropertiesKHR :: PhysicalDeviceAccelerationStructurePropertiesKHR
-> "firstQuery" ::: Word32
$sel:maxPerStageDescriptorUpdateAfterBindAccelerationStructures:PhysicalDeviceAccelerationStructurePropertiesKHR :: PhysicalDeviceAccelerationStructurePropertiesKHR
-> "firstQuery" ::: Word32
$sel:maxPerStageDescriptorAccelerationStructures:PhysicalDeviceAccelerationStructurePropertiesKHR :: PhysicalDeviceAccelerationStructurePropertiesKHR
-> "firstQuery" ::: Word32
$sel:maxPrimitiveCount:PhysicalDeviceAccelerationStructurePropertiesKHR :: PhysicalDeviceAccelerationStructurePropertiesKHR
-> "dataSize" ::: Word64
$sel:maxInstanceCount:PhysicalDeviceAccelerationStructurePropertiesKHR :: PhysicalDeviceAccelerationStructurePropertiesKHR
-> "dataSize" ::: Word64
$sel:maxGeometryCount:PhysicalDeviceAccelerationStructurePropertiesKHR :: PhysicalDeviceAccelerationStructurePropertiesKHR
-> "dataSize" ::: Word64
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR)
    Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word64)) ("dataSize" ::: Word64
maxGeometryCount)
    ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word64)) ("dataSize" ::: Word64
maxInstanceCount)
    ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word64)) ("dataSize" ::: Word64
maxPrimitiveCount)
    ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32)) ("firstQuery" ::: Word32
maxPerStageDescriptorAccelerationStructures)
    ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
44 :: Ptr Word32)) ("firstQuery" ::: Word32
maxPerStageDescriptorUpdateAfterBindAccelerationStructures)
    ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32)) ("firstQuery" ::: Word32
maxDescriptorSetAccelerationStructures)
    ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr Word32)) ("firstQuery" ::: Word32
maxDescriptorSetUpdateAfterBindAccelerationStructures)
    ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Word32)) ("firstQuery" ::: Word32
minAccelerationStructureScratchOffsetAlignment)
    IO b
f
  cStructSize :: Int
cStructSize = Int
64
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR)
    Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word64)) ("dataSize" ::: Word64
forall a. Zero a => a
zero)
    ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word64)) ("dataSize" ::: Word64
forall a. Zero a => a
zero)
    ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word64)) ("dataSize" ::: Word64
forall a. Zero a => a
zero)
    ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32)) ("firstQuery" ::: Word32
forall a. Zero a => a
zero)
    ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
44 :: Ptr Word32)) ("firstQuery" ::: Word32
forall a. Zero a => a
zero)
    ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32)) ("firstQuery" ::: Word32
forall a. Zero a => a
zero)
    ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr Word32)) ("firstQuery" ::: Word32
forall a. Zero a => a
zero)
    ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Word32)) ("firstQuery" ::: Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct PhysicalDeviceAccelerationStructurePropertiesKHR where
  peekCStruct :: Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> IO PhysicalDeviceAccelerationStructurePropertiesKHR
peekCStruct Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p = do
    "dataSize" ::: Word64
maxGeometryCount <- ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> IO ("dataSize" ::: Word64)
forall a. Storable a => Ptr a -> IO a
peek @Word64 ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word64))
    "dataSize" ::: Word64
maxInstanceCount <- ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> IO ("dataSize" ::: Word64)
forall a. Storable a => Ptr a -> IO a
peek @Word64 ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word64))
    "dataSize" ::: Word64
maxPrimitiveCount <- ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> IO ("dataSize" ::: Word64)
forall a. Storable a => Ptr a -> IO a
peek @Word64 ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word64))
    "firstQuery" ::: Word32
maxPerStageDescriptorAccelerationStructures <- ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> IO ("firstQuery" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32))
    "firstQuery" ::: Word32
maxPerStageDescriptorUpdateAfterBindAccelerationStructures <- ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> IO ("firstQuery" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
44 :: Ptr Word32))
    "firstQuery" ::: Word32
maxDescriptorSetAccelerationStructures <- ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> IO ("firstQuery" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32))
    "firstQuery" ::: Word32
maxDescriptorSetUpdateAfterBindAccelerationStructures <- ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> IO ("firstQuery" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr Word32))
    "firstQuery" ::: Word32
minAccelerationStructureScratchOffsetAlignment <- ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> IO ("firstQuery" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
p Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Word32))
    PhysicalDeviceAccelerationStructurePropertiesKHR
-> IO PhysicalDeviceAccelerationStructurePropertiesKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PhysicalDeviceAccelerationStructurePropertiesKHR
 -> IO PhysicalDeviceAccelerationStructurePropertiesKHR)
-> PhysicalDeviceAccelerationStructurePropertiesKHR
-> IO PhysicalDeviceAccelerationStructurePropertiesKHR
forall a b. (a -> b) -> a -> b
$ ("dataSize" ::: Word64)
-> ("dataSize" ::: Word64)
-> ("dataSize" ::: Word64)
-> ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32)
-> PhysicalDeviceAccelerationStructurePropertiesKHR
PhysicalDeviceAccelerationStructurePropertiesKHR
             "dataSize" ::: Word64
maxGeometryCount "dataSize" ::: Word64
maxInstanceCount "dataSize" ::: Word64
maxPrimitiveCount "firstQuery" ::: Word32
maxPerStageDescriptorAccelerationStructures "firstQuery" ::: Word32
maxPerStageDescriptorUpdateAfterBindAccelerationStructures "firstQuery" ::: Word32
maxDescriptorSetAccelerationStructures "firstQuery" ::: Word32
maxDescriptorSetUpdateAfterBindAccelerationStructures "firstQuery" ::: Word32
minAccelerationStructureScratchOffsetAlignment

instance Storable PhysicalDeviceAccelerationStructurePropertiesKHR where
  sizeOf :: PhysicalDeviceAccelerationStructurePropertiesKHR -> Int
sizeOf ~PhysicalDeviceAccelerationStructurePropertiesKHR
_ = Int
64
  alignment :: PhysicalDeviceAccelerationStructurePropertiesKHR -> Int
alignment ~PhysicalDeviceAccelerationStructurePropertiesKHR
_ = Int
8
  peek :: Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> IO PhysicalDeviceAccelerationStructurePropertiesKHR
peek = Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> IO PhysicalDeviceAccelerationStructurePropertiesKHR
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> PhysicalDeviceAccelerationStructurePropertiesKHR -> IO ()
poke Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
ptr PhysicalDeviceAccelerationStructurePropertiesKHR
poked = Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
-> PhysicalDeviceAccelerationStructurePropertiesKHR
-> IO ()
-> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceAccelerationStructurePropertiesKHR
ptr PhysicalDeviceAccelerationStructurePropertiesKHR
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero PhysicalDeviceAccelerationStructurePropertiesKHR where
  zero :: PhysicalDeviceAccelerationStructurePropertiesKHR
zero = ("dataSize" ::: Word64)
-> ("dataSize" ::: Word64)
-> ("dataSize" ::: Word64)
-> ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32)
-> PhysicalDeviceAccelerationStructurePropertiesKHR
PhysicalDeviceAccelerationStructurePropertiesKHR
           "dataSize" ::: Word64
forall a. Zero a => a
zero
           "dataSize" ::: Word64
forall a. Zero a => a
zero
           "dataSize" ::: Word64
forall a. Zero a => a
zero
           "firstQuery" ::: Word32
forall a. Zero a => a
zero
           "firstQuery" ::: Word32
forall a. Zero a => a
zero
           "firstQuery" ::: Word32
forall a. Zero a => a
zero
           "firstQuery" ::: Word32
forall a. Zero a => a
zero
           "firstQuery" ::: Word32
forall a. Zero a => a
zero


-- | VkAccelerationStructureGeometryTrianglesDataKHR - Structure specifying a
-- triangle geometry in a bottom-level acceleration structure
--
-- = Description
--
-- Note
--
-- Unlike the stride for vertex buffers in
-- 'Vulkan.Core10.Pipeline.VertexInputBindingDescription' for graphics
-- pipelines which must not exceed @maxVertexInputBindingStride@,
-- @vertexStride@ for acceleration structure geometry is instead restricted
-- to being a 32-bit value.
--
-- == Valid Usage
--
-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexStride-03735#
--     @vertexStride@ /must/ be a multiple of the size in bytes of the
--     smallest component of @vertexFormat@
--
-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexStride-03819#
--     @vertexStride@ /must/ be less than or equal to 232-1
--
-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexFormat-03797#
--     @vertexFormat@ /must/ support the
--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR'
--     in
--     'Vulkan.Core10.DeviceInitialization.FormatProperties'::@bufferFeatures@
--     as returned by
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2'
--
-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexType-03798#
--     @indexType@ /must/ be
--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16',
--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32', or
--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-sType-sType#
--     @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR'
--
-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-pNext-pNext#
--     @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
--     'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureGeometryMotionTrianglesDataNV'
--
-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-sType-unique#
--     The @sType@ value of each struct in the @pNext@ chain /must/ be
--     unique
--
-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexFormat-parameter#
--     @vertexFormat@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format'
--     value
--
-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexType-parameter#
--     @indexType@ /must/ be a valid
--     'Vulkan.Core10.Enums.IndexType.IndexType' value
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'AccelerationStructureGeometryDataKHR', 'DeviceOrHostAddressConstKHR',
-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',
-- 'Vulkan.Core10.Enums.Format.Format',
-- 'Vulkan.Core10.Enums.IndexType.IndexType',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data AccelerationStructureGeometryTrianglesDataKHR (es :: [Type]) = AccelerationStructureGeometryTrianglesDataKHR
  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
    AccelerationStructureGeometryTrianglesDataKHR es -> Chain es
next :: Chain es
  , -- | @vertexFormat@ is the 'Vulkan.Core10.Enums.Format.Format' of each vertex
    -- element.
    AccelerationStructureGeometryTrianglesDataKHR es -> Format
vertexFormat :: Format
  , -- | @vertexData@ is a device or host address to memory containing vertex
    -- data for this geometry.
    AccelerationStructureGeometryTrianglesDataKHR es
-> DeviceOrHostAddressConstKHR
vertexData :: DeviceOrHostAddressConstKHR
  , -- | @vertexStride@ is the stride in bytes between each vertex.
    AccelerationStructureGeometryTrianglesDataKHR es
-> "dataSize" ::: Word64
vertexStride :: DeviceSize
  , -- | @maxVertex@ is the highest index of a vertex that will be addressed by a
    -- build command using this structure.
    AccelerationStructureGeometryTrianglesDataKHR es
-> "firstQuery" ::: Word32
maxVertex :: Word32
  , -- | @indexType@ is the 'Vulkan.Core10.Enums.IndexType.IndexType' of each
    -- index element.
    AccelerationStructureGeometryTrianglesDataKHR es -> IndexType
indexType :: IndexType
  , -- | @indexData@ is a device or host address to memory containing index data
    -- for this geometry.
    AccelerationStructureGeometryTrianglesDataKHR es
-> DeviceOrHostAddressConstKHR
indexData :: DeviceOrHostAddressConstKHR
  , -- | @transformData@ is a device or host address to memory containing an
    -- optional reference to a 'TransformMatrixKHR' structure describing a
    -- transformation from the space in which the vertices in this geometry are
    -- described to the space in which the acceleration structure is defined.
    AccelerationStructureGeometryTrianglesDataKHR es
-> DeviceOrHostAddressConstKHR
transformData :: DeviceOrHostAddressConstKHR
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (AccelerationStructureGeometryTrianglesDataKHR (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (AccelerationStructureGeometryTrianglesDataKHR es)

instance Extensible AccelerationStructureGeometryTrianglesDataKHR where
  extensibleTypeName :: String
extensibleTypeName = String
"AccelerationStructureGeometryTrianglesDataKHR"
  setNext :: AccelerationStructureGeometryTrianglesDataKHR ds
-> Chain es -> AccelerationStructureGeometryTrianglesDataKHR es
setNext AccelerationStructureGeometryTrianglesDataKHR{"firstQuery" ::: Word32
"dataSize" ::: Word64
Chain ds
Format
IndexType
DeviceOrHostAddressConstKHR
transformData :: DeviceOrHostAddressConstKHR
indexData :: DeviceOrHostAddressConstKHR
indexType :: IndexType
maxVertex :: "firstQuery" ::: Word32
vertexStride :: "dataSize" ::: Word64
vertexData :: DeviceOrHostAddressConstKHR
vertexFormat :: Format
next :: Chain ds
$sel:transformData:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es
-> DeviceOrHostAddressConstKHR
$sel:indexData:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es
-> DeviceOrHostAddressConstKHR
$sel:indexType:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es -> IndexType
$sel:maxVertex:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es
-> "firstQuery" ::: Word32
$sel:vertexStride:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es
-> "dataSize" ::: Word64
$sel:vertexData:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es
-> DeviceOrHostAddressConstKHR
$sel:vertexFormat:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es -> Format
$sel:next:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es -> Chain es
..} Chain es
next' = AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
Chain es
-> Format
-> DeviceOrHostAddressConstKHR
-> ("dataSize" ::: Word64)
-> ("firstQuery" ::: Word32)
-> IndexType
-> DeviceOrHostAddressConstKHR
-> DeviceOrHostAddressConstKHR
-> AccelerationStructureGeometryTrianglesDataKHR es
AccelerationStructureGeometryTrianglesDataKHR{$sel:next:AccelerationStructureGeometryTrianglesDataKHR :: Chain es
next = Chain es
next', "firstQuery" ::: Word32
"dataSize" ::: Word64
Format
IndexType
DeviceOrHostAddressConstKHR
transformData :: DeviceOrHostAddressConstKHR
indexData :: DeviceOrHostAddressConstKHR
indexType :: IndexType
maxVertex :: "firstQuery" ::: Word32
vertexStride :: "dataSize" ::: Word64
vertexData :: DeviceOrHostAddressConstKHR
vertexFormat :: Format
$sel:transformData:AccelerationStructureGeometryTrianglesDataKHR :: DeviceOrHostAddressConstKHR
$sel:indexData:AccelerationStructureGeometryTrianglesDataKHR :: DeviceOrHostAddressConstKHR
$sel:indexType:AccelerationStructureGeometryTrianglesDataKHR :: IndexType
$sel:maxVertex:AccelerationStructureGeometryTrianglesDataKHR :: "firstQuery" ::: Word32
$sel:vertexStride:AccelerationStructureGeometryTrianglesDataKHR :: "dataSize" ::: Word64
$sel:vertexData:AccelerationStructureGeometryTrianglesDataKHR :: DeviceOrHostAddressConstKHR
$sel:vertexFormat:AccelerationStructureGeometryTrianglesDataKHR :: Format
..}
  getNext :: AccelerationStructureGeometryTrianglesDataKHR es -> Chain es
getNext AccelerationStructureGeometryTrianglesDataKHR{"firstQuery" ::: Word32
"dataSize" ::: Word64
Chain es
Format
IndexType
DeviceOrHostAddressConstKHR
transformData :: DeviceOrHostAddressConstKHR
indexData :: DeviceOrHostAddressConstKHR
indexType :: IndexType
maxVertex :: "firstQuery" ::: Word32
vertexStride :: "dataSize" ::: Word64
vertexData :: DeviceOrHostAddressConstKHR
vertexFormat :: Format
next :: Chain es
$sel:transformData:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es
-> DeviceOrHostAddressConstKHR
$sel:indexData:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es
-> DeviceOrHostAddressConstKHR
$sel:indexType:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es -> IndexType
$sel:maxVertex:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es
-> "firstQuery" ::: Word32
$sel:vertexStride:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es
-> "dataSize" ::: Word64
$sel:vertexData:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es
-> DeviceOrHostAddressConstKHR
$sel:vertexFormat:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es -> Format
$sel:next:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es -> Chain es
..} = Chain es
next
  extends :: forall e b proxy. Typeable e => proxy e -> (Extends AccelerationStructureGeometryTrianglesDataKHR e => b) -> Maybe b
  extends :: proxy e
-> (Extends AccelerationStructureGeometryTrianglesDataKHR e => b)
-> Maybe b
extends proxy e
_ Extends AccelerationStructureGeometryTrianglesDataKHR e => b
f
    | Just e :~: AccelerationStructureGeometryMotionTrianglesDataNV
Refl <- (Typeable e,
 Typeable AccelerationStructureGeometryMotionTrianglesDataNV) =>
Maybe (e :~: AccelerationStructureGeometryMotionTrianglesDataNV)
forall k (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
eqT @e @AccelerationStructureGeometryMotionTrianglesDataNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends AccelerationStructureGeometryTrianglesDataKHR e => b
f
    | Bool
otherwise = Maybe b
forall a. Maybe a
Nothing

instance (Extendss AccelerationStructureGeometryTrianglesDataKHR es, PokeChain es) => ToCStruct (AccelerationStructureGeometryTrianglesDataKHR es) where
  withCStruct :: AccelerationStructureGeometryTrianglesDataKHR es
-> (Ptr (AccelerationStructureGeometryTrianglesDataKHR es) -> IO b)
-> IO b
withCStruct AccelerationStructureGeometryTrianglesDataKHR es
x Ptr (AccelerationStructureGeometryTrianglesDataKHR es) -> IO b
f = Int
-> (Ptr (AccelerationStructureGeometryTrianglesDataKHR es) -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
64 ((Ptr (AccelerationStructureGeometryTrianglesDataKHR es) -> IO b)
 -> IO b)
-> (Ptr (AccelerationStructureGeometryTrianglesDataKHR es) -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
p -> Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
-> AccelerationStructureGeometryTrianglesDataKHR es -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
p AccelerationStructureGeometryTrianglesDataKHR es
x (Ptr (AccelerationStructureGeometryTrianglesDataKHR es) -> IO b
f Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
p)
  pokeCStruct :: Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
-> AccelerationStructureGeometryTrianglesDataKHR es -> IO b -> IO b
pokeCStruct Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
p AccelerationStructureGeometryTrianglesDataKHR{"firstQuery" ::: Word32
"dataSize" ::: Word64
Chain es
Format
IndexType
DeviceOrHostAddressConstKHR
transformData :: DeviceOrHostAddressConstKHR
indexData :: DeviceOrHostAddressConstKHR
indexType :: IndexType
maxVertex :: "firstQuery" ::: Word32
vertexStride :: "dataSize" ::: Word64
vertexData :: DeviceOrHostAddressConstKHR
vertexFormat :: Format
next :: Chain es
$sel:transformData:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es
-> DeviceOrHostAddressConstKHR
$sel:indexData:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es
-> DeviceOrHostAddressConstKHR
$sel:indexType:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es -> IndexType
$sel:maxVertex:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es
-> "firstQuery" ::: Word32
$sel:vertexStride:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es
-> "dataSize" ::: Word64
$sel:vertexData:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es
-> DeviceOrHostAddressConstKHR
$sel:vertexFormat:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es -> Format
$sel:next:AccelerationStructureGeometryTrianglesDataKHR :: forall (es :: [*]).
AccelerationStructureGeometryTrianglesDataKHR es -> Chain es
..} 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 (AccelerationStructureGeometryTrianglesDataKHR es)
p Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_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 (AccelerationStructureGeometryTrianglesDataKHR es)
p Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
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 Format -> Format -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
p Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
-> Int -> Ptr Format
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Format)) (Format
vertexFormat)
    ((() -> 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 DeviceOrHostAddressConstKHR
-> DeviceOrHostAddressConstKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ((Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
p Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
-> Int -> Ptr DeviceOrHostAddressConstKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DeviceOrHostAddressConstKHR)) (DeviceOrHostAddressConstKHR
vertexData) (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
$ ())
    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
$ ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
p Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr DeviceSize)) ("dataSize" ::: Word64
vertexStride)
    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
$ ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
p Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32)) ("firstQuery" ::: Word32
maxVertex)
    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 IndexType -> IndexType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
p Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
-> Int -> Ptr IndexType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
44 :: Ptr IndexType)) (IndexType
indexType)
    ((() -> 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 DeviceOrHostAddressConstKHR
-> DeviceOrHostAddressConstKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ((Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
p Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
-> Int -> Ptr DeviceOrHostAddressConstKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr DeviceOrHostAddressConstKHR)) (DeviceOrHostAddressConstKHR
indexData) (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
$ ())
    ((() -> 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 DeviceOrHostAddressConstKHR
-> DeviceOrHostAddressConstKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ((Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
p Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
-> Int -> Ptr DeviceOrHostAddressConstKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr DeviceOrHostAddressConstKHR)) (DeviceOrHostAddressConstKHR
transformData) (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
$ ())
    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 = Int
64
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
-> IO b -> IO b
pokeZeroCStruct Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (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 (AccelerationStructureGeometryTrianglesDataKHR es)
p Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_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 (AccelerationStructureGeometryTrianglesDataKHR es)
p Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
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 Format -> Format -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
p Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
-> Int -> Ptr Format
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Format)) (Format
forall a. Zero a => a
zero)
    ((() -> 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 DeviceOrHostAddressConstKHR
-> DeviceOrHostAddressConstKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ((Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
p Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
-> Int -> Ptr DeviceOrHostAddressConstKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DeviceOrHostAddressConstKHR)) (DeviceOrHostAddressConstKHR
forall a. Zero a => a
zero) (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
$ ())
    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
$ ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
p Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr DeviceSize)) ("dataSize" ::: Word64
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
$ ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
p Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32)) ("firstQuery" ::: 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 IndexType -> IndexType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
p Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
-> Int -> Ptr IndexType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
44 :: Ptr IndexType)) (IndexType
forall a. Zero a => a
zero)
    ((() -> 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 DeviceOrHostAddressConstKHR
-> DeviceOrHostAddressConstKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ((Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
p Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
-> Int -> Ptr DeviceOrHostAddressConstKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr DeviceOrHostAddressConstKHR)) (DeviceOrHostAddressConstKHR
forall a. Zero a => a
zero) (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
$ ())
    ((() -> 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 DeviceOrHostAddressConstKHR
-> DeviceOrHostAddressConstKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ((Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
p Ptr (AccelerationStructureGeometryTrianglesDataKHR es)
-> Int -> Ptr DeviceOrHostAddressConstKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr DeviceOrHostAddressConstKHR)) (DeviceOrHostAddressConstKHR
forall a. Zero a => a
zero) (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
$ ())
    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 es ~ '[] => Zero (AccelerationStructureGeometryTrianglesDataKHR es) where
  zero :: AccelerationStructureGeometryTrianglesDataKHR es
zero = Chain es
-> Format
-> DeviceOrHostAddressConstKHR
-> ("dataSize" ::: Word64)
-> ("firstQuery" ::: Word32)
-> IndexType
-> DeviceOrHostAddressConstKHR
-> DeviceOrHostAddressConstKHR
-> AccelerationStructureGeometryTrianglesDataKHR es
forall (es :: [*]).
Chain es
-> Format
-> DeviceOrHostAddressConstKHR
-> ("dataSize" ::: Word64)
-> ("firstQuery" ::: Word32)
-> IndexType
-> DeviceOrHostAddressConstKHR
-> DeviceOrHostAddressConstKHR
-> AccelerationStructureGeometryTrianglesDataKHR es
AccelerationStructureGeometryTrianglesDataKHR
           ()
           Format
forall a. Zero a => a
zero
           DeviceOrHostAddressConstKHR
forall a. Zero a => a
zero
           "dataSize" ::: Word64
forall a. Zero a => a
zero
           "firstQuery" ::: Word32
forall a. Zero a => a
zero
           IndexType
forall a. Zero a => a
zero
           DeviceOrHostAddressConstKHR
forall a. Zero a => a
zero
           DeviceOrHostAddressConstKHR
forall a. Zero a => a
zero


-- | VkAccelerationStructureGeometryAabbsDataKHR - Structure specifying
-- axis-aligned bounding box geometry in a bottom-level acceleration
-- structure
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'AccelerationStructureGeometryDataKHR', 'DeviceOrHostAddressConstKHR',
-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data AccelerationStructureGeometryAabbsDataKHR = AccelerationStructureGeometryAabbsDataKHR
  { -- | @data@ is a device or host address to memory containing
    -- 'AabbPositionsKHR' structures containing position data for each
    -- axis-aligned bounding box in the geometry.
    AccelerationStructureGeometryAabbsDataKHR
-> DeviceOrHostAddressConstKHR
data' :: DeviceOrHostAddressConstKHR
  , -- | @stride@ is the stride in bytes between each entry in @data@. The stride
    -- /must/ be a multiple of @8@.
    --
    -- #VUID-VkAccelerationStructureGeometryAabbsDataKHR-stride-03545# @stride@
    -- /must/ be a multiple of @8@
    --
    -- #VUID-VkAccelerationStructureGeometryAabbsDataKHR-stride-03820# @stride@
    -- /must/ be less than or equal to 232-1
    AccelerationStructureGeometryAabbsDataKHR -> "dataSize" ::: Word64
stride :: DeviceSize
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (AccelerationStructureGeometryAabbsDataKHR)
#endif
deriving instance Show AccelerationStructureGeometryAabbsDataKHR

instance ToCStruct AccelerationStructureGeometryAabbsDataKHR where
  withCStruct :: AccelerationStructureGeometryAabbsDataKHR
-> (Ptr AccelerationStructureGeometryAabbsDataKHR -> IO b) -> IO b
withCStruct AccelerationStructureGeometryAabbsDataKHR
x Ptr AccelerationStructureGeometryAabbsDataKHR -> IO b
f = Int
-> (Ptr AccelerationStructureGeometryAabbsDataKHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr AccelerationStructureGeometryAabbsDataKHR -> IO b) -> IO b)
-> (Ptr AccelerationStructureGeometryAabbsDataKHR -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr AccelerationStructureGeometryAabbsDataKHR
p -> Ptr AccelerationStructureGeometryAabbsDataKHR
-> AccelerationStructureGeometryAabbsDataKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr AccelerationStructureGeometryAabbsDataKHR
p AccelerationStructureGeometryAabbsDataKHR
x (Ptr AccelerationStructureGeometryAabbsDataKHR -> IO b
f Ptr AccelerationStructureGeometryAabbsDataKHR
p)
  pokeCStruct :: Ptr AccelerationStructureGeometryAabbsDataKHR
-> AccelerationStructureGeometryAabbsDataKHR -> IO b -> IO b
pokeCStruct Ptr AccelerationStructureGeometryAabbsDataKHR
p AccelerationStructureGeometryAabbsDataKHR{"dataSize" ::: Word64
DeviceOrHostAddressConstKHR
stride :: "dataSize" ::: Word64
data' :: DeviceOrHostAddressConstKHR
$sel:stride:AccelerationStructureGeometryAabbsDataKHR :: AccelerationStructureGeometryAabbsDataKHR -> "dataSize" ::: Word64
$sel:data':AccelerationStructureGeometryAabbsDataKHR :: AccelerationStructureGeometryAabbsDataKHR
-> DeviceOrHostAddressConstKHR
..} 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 AccelerationStructureGeometryAabbsDataKHR
p Ptr AccelerationStructureGeometryAabbsDataKHR
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR)
    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 AccelerationStructureGeometryAabbsDataKHR
p Ptr AccelerationStructureGeometryAabbsDataKHR
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    ((() -> 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 DeviceOrHostAddressConstKHR
-> DeviceOrHostAddressConstKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ((Ptr AccelerationStructureGeometryAabbsDataKHR
p Ptr AccelerationStructureGeometryAabbsDataKHR
-> Int -> Ptr DeviceOrHostAddressConstKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceOrHostAddressConstKHR)) (DeviceOrHostAddressConstKHR
data') (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
$ ())
    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
$ ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AccelerationStructureGeometryAabbsDataKHR
p Ptr AccelerationStructureGeometryAabbsDataKHR
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DeviceSize)) ("dataSize" ::: Word64
stride)
    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 = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr AccelerationStructureGeometryAabbsDataKHR -> IO b -> IO b
pokeZeroCStruct Ptr AccelerationStructureGeometryAabbsDataKHR
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (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 AccelerationStructureGeometryAabbsDataKHR
p Ptr AccelerationStructureGeometryAabbsDataKHR
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR)
    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 AccelerationStructureGeometryAabbsDataKHR
p Ptr AccelerationStructureGeometryAabbsDataKHR
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    ((() -> 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 DeviceOrHostAddressConstKHR
-> DeviceOrHostAddressConstKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ((Ptr AccelerationStructureGeometryAabbsDataKHR
p Ptr AccelerationStructureGeometryAabbsDataKHR
-> Int -> Ptr DeviceOrHostAddressConstKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceOrHostAddressConstKHR)) (DeviceOrHostAddressConstKHR
forall a. Zero a => a
zero) (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
$ ())
    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
$ ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AccelerationStructureGeometryAabbsDataKHR
p Ptr AccelerationStructureGeometryAabbsDataKHR
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DeviceSize)) ("dataSize" ::: Word64
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 Zero AccelerationStructureGeometryAabbsDataKHR where
  zero :: AccelerationStructureGeometryAabbsDataKHR
zero = DeviceOrHostAddressConstKHR
-> ("dataSize" ::: Word64)
-> AccelerationStructureGeometryAabbsDataKHR
AccelerationStructureGeometryAabbsDataKHR
           DeviceOrHostAddressConstKHR
forall a. Zero a => a
zero
           "dataSize" ::: Word64
forall a. Zero a => a
zero


-- | VkAccelerationStructureGeometryInstancesDataKHR - Structure specifying a
-- geometry consisting of instances of other acceleration structures
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'AccelerationStructureGeometryDataKHR',
-- 'Vulkan.Core10.FundamentalTypes.Bool32', 'DeviceOrHostAddressConstKHR',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data AccelerationStructureGeometryInstancesDataKHR = AccelerationStructureGeometryInstancesDataKHR
  { -- | @arrayOfPointers@ specifies whether @data@ is used as an array of
    -- addresses or just an array.
    AccelerationStructureGeometryInstancesDataKHR -> Bool
arrayOfPointers :: Bool
  , -- | @data@ is either the address of an array of device or host addresses
    -- referencing individual 'AccelerationStructureInstanceKHR' structures or
    -- packed motion instance information as described in
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-motion-instances motion instances>
    -- if @arrayOfPointers@ is 'Vulkan.Core10.FundamentalTypes.TRUE', or the
    -- address of an array of 'AccelerationStructureInstanceKHR' or
    -- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInstanceNV'
    -- structures. Addresses and 'AccelerationStructureInstanceKHR' structures
    -- are tightly packed.
    -- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInstanceNV'
    -- structures have a stride of 160 bytes.
    AccelerationStructureGeometryInstancesDataKHR
-> DeviceOrHostAddressConstKHR
data' :: DeviceOrHostAddressConstKHR
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (AccelerationStructureGeometryInstancesDataKHR)
#endif
deriving instance Show AccelerationStructureGeometryInstancesDataKHR

instance ToCStruct AccelerationStructureGeometryInstancesDataKHR where
  withCStruct :: AccelerationStructureGeometryInstancesDataKHR
-> (Ptr AccelerationStructureGeometryInstancesDataKHR -> IO b)
-> IO b
withCStruct AccelerationStructureGeometryInstancesDataKHR
x Ptr AccelerationStructureGeometryInstancesDataKHR -> IO b
f = Int
-> (Ptr AccelerationStructureGeometryInstancesDataKHR -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr AccelerationStructureGeometryInstancesDataKHR -> IO b)
 -> IO b)
-> (Ptr AccelerationStructureGeometryInstancesDataKHR -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr AccelerationStructureGeometryInstancesDataKHR
p -> Ptr AccelerationStructureGeometryInstancesDataKHR
-> AccelerationStructureGeometryInstancesDataKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr AccelerationStructureGeometryInstancesDataKHR
p AccelerationStructureGeometryInstancesDataKHR
x (Ptr AccelerationStructureGeometryInstancesDataKHR -> IO b
f Ptr AccelerationStructureGeometryInstancesDataKHR
p)
  pokeCStruct :: Ptr AccelerationStructureGeometryInstancesDataKHR
-> AccelerationStructureGeometryInstancesDataKHR -> IO b -> IO b
pokeCStruct Ptr AccelerationStructureGeometryInstancesDataKHR
p AccelerationStructureGeometryInstancesDataKHR{Bool
DeviceOrHostAddressConstKHR
data' :: DeviceOrHostAddressConstKHR
arrayOfPointers :: Bool
$sel:data':AccelerationStructureGeometryInstancesDataKHR :: AccelerationStructureGeometryInstancesDataKHR
-> DeviceOrHostAddressConstKHR
$sel:arrayOfPointers:AccelerationStructureGeometryInstancesDataKHR :: AccelerationStructureGeometryInstancesDataKHR -> Bool
..} 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 AccelerationStructureGeometryInstancesDataKHR
p Ptr AccelerationStructureGeometryInstancesDataKHR
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR)
    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 AccelerationStructureGeometryInstancesDataKHR
p Ptr AccelerationStructureGeometryInstancesDataKHR
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    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 Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AccelerationStructureGeometryInstancesDataKHR
p Ptr AccelerationStructureGeometryInstancesDataKHR
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
arrayOfPointers))
    ((() -> 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 DeviceOrHostAddressConstKHR
-> DeviceOrHostAddressConstKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ((Ptr AccelerationStructureGeometryInstancesDataKHR
p Ptr AccelerationStructureGeometryInstancesDataKHR
-> Int -> Ptr DeviceOrHostAddressConstKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DeviceOrHostAddressConstKHR)) (DeviceOrHostAddressConstKHR
data') (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
$ ())
    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 = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr AccelerationStructureGeometryInstancesDataKHR -> IO b -> IO b
pokeZeroCStruct Ptr AccelerationStructureGeometryInstancesDataKHR
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (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 AccelerationStructureGeometryInstancesDataKHR
p Ptr AccelerationStructureGeometryInstancesDataKHR
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR)
    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 AccelerationStructureGeometryInstancesDataKHR
p Ptr AccelerationStructureGeometryInstancesDataKHR
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    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 Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AccelerationStructureGeometryInstancesDataKHR
p Ptr AccelerationStructureGeometryInstancesDataKHR
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    ((() -> 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 DeviceOrHostAddressConstKHR
-> DeviceOrHostAddressConstKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ((Ptr AccelerationStructureGeometryInstancesDataKHR
p Ptr AccelerationStructureGeometryInstancesDataKHR
-> Int -> Ptr DeviceOrHostAddressConstKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DeviceOrHostAddressConstKHR)) (DeviceOrHostAddressConstKHR
forall a. Zero a => a
zero) (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
$ ())
    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 Zero AccelerationStructureGeometryInstancesDataKHR where
  zero :: AccelerationStructureGeometryInstancesDataKHR
zero = Bool
-> DeviceOrHostAddressConstKHR
-> AccelerationStructureGeometryInstancesDataKHR
AccelerationStructureGeometryInstancesDataKHR
           Bool
forall a. Zero a => a
zero
           DeviceOrHostAddressConstKHR
forall a. Zero a => a
zero


-- | VkAccelerationStructureGeometryKHR - Structure specifying geometries to
-- be built into an acceleration structure
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkAccelerationStructureGeometryKHR-sType-sType# @sType@ /must/
--     be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR'
--
-- -   #VUID-VkAccelerationStructureGeometryKHR-pNext-pNext# @pNext@ /must/
--     be @NULL@
--
-- -   #VUID-VkAccelerationStructureGeometryKHR-geometryType-parameter#
--     @geometryType@ /must/ be a valid 'GeometryTypeKHR' value
--
-- -   #VUID-VkAccelerationStructureGeometryKHR-triangles-parameter# If
--     @geometryType@ is 'GEOMETRY_TYPE_TRIANGLES_KHR', the @triangles@
--     member of @geometry@ /must/ be a valid
--     'AccelerationStructureGeometryTrianglesDataKHR' structure
--
-- -   #VUID-VkAccelerationStructureGeometryKHR-aabbs-parameter# If
--     @geometryType@ is 'GEOMETRY_TYPE_AABBS_KHR', the @aabbs@ member of
--     @geometry@ /must/ be a valid
--     'AccelerationStructureGeometryAabbsDataKHR' structure
--
-- -   #VUID-VkAccelerationStructureGeometryKHR-instances-parameter# If
--     @geometryType@ is 'GEOMETRY_TYPE_INSTANCES_KHR', the @instances@
--     member of @geometry@ /must/ be a valid
--     'AccelerationStructureGeometryInstancesDataKHR' structure
--
-- -   #VUID-VkAccelerationStructureGeometryKHR-flags-parameter# @flags@
--     /must/ be a valid combination of 'GeometryFlagBitsKHR' values
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'AccelerationStructureBuildGeometryInfoKHR',
-- 'AccelerationStructureGeometryDataKHR', 'GeometryFlagsKHR',
-- 'GeometryTypeKHR', 'Vulkan.Core10.Enums.StructureType.StructureType'
data AccelerationStructureGeometryKHR = AccelerationStructureGeometryKHR
  { -- | @geometryType@ describes which type of geometry this
    -- 'AccelerationStructureGeometryKHR' refers to.
    AccelerationStructureGeometryKHR -> GeometryTypeKHR
geometryType :: GeometryTypeKHR
  , -- | @geometry@ is a 'AccelerationStructureGeometryDataKHR' union describing
    -- the geometry data for the relevant geometry type.
    AccelerationStructureGeometryKHR
-> AccelerationStructureGeometryDataKHR
geometry :: AccelerationStructureGeometryDataKHR
  , -- | @flags@ is a bitmask of 'GeometryFlagBitsKHR' values describing
    -- additional properties of how the geometry should be built.
    AccelerationStructureGeometryKHR -> GeometryFlagsKHR
flags :: GeometryFlagsKHR
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (AccelerationStructureGeometryKHR)
#endif
deriving instance Show AccelerationStructureGeometryKHR

instance ToCStruct AccelerationStructureGeometryKHR where
  withCStruct :: AccelerationStructureGeometryKHR
-> (Ptr AccelerationStructureGeometryKHR -> IO b) -> IO b
withCStruct AccelerationStructureGeometryKHR
x Ptr AccelerationStructureGeometryKHR -> IO b
f = Int -> (Ptr AccelerationStructureGeometryKHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
96 ((Ptr AccelerationStructureGeometryKHR -> IO b) -> IO b)
-> (Ptr AccelerationStructureGeometryKHR -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr AccelerationStructureGeometryKHR
p -> Ptr AccelerationStructureGeometryKHR
-> AccelerationStructureGeometryKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr AccelerationStructureGeometryKHR
p AccelerationStructureGeometryKHR
x (Ptr AccelerationStructureGeometryKHR -> IO b
f Ptr AccelerationStructureGeometryKHR
p)
  pokeCStruct :: Ptr AccelerationStructureGeometryKHR
-> AccelerationStructureGeometryKHR -> IO b -> IO b
pokeCStruct Ptr AccelerationStructureGeometryKHR
p AccelerationStructureGeometryKHR{GeometryTypeKHR
GeometryFlagsKHR
AccelerationStructureGeometryDataKHR
flags :: GeometryFlagsKHR
geometry :: AccelerationStructureGeometryDataKHR
geometryType :: GeometryTypeKHR
$sel:flags:AccelerationStructureGeometryKHR :: AccelerationStructureGeometryKHR -> GeometryFlagsKHR
$sel:geometry:AccelerationStructureGeometryKHR :: AccelerationStructureGeometryKHR
-> AccelerationStructureGeometryDataKHR
$sel:geometryType:AccelerationStructureGeometryKHR :: AccelerationStructureGeometryKHR -> GeometryTypeKHR
..} 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 AccelerationStructureGeometryKHR
p Ptr AccelerationStructureGeometryKHR -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR)
    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 AccelerationStructureGeometryKHR
p Ptr AccelerationStructureGeometryKHR
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    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 GeometryTypeKHR -> GeometryTypeKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AccelerationStructureGeometryKHR
p Ptr AccelerationStructureGeometryKHR -> Int -> Ptr GeometryTypeKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr GeometryTypeKHR)) (GeometryTypeKHR
geometryType)
    ((() -> 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 AccelerationStructureGeometryDataKHR
-> AccelerationStructureGeometryDataKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ((Ptr AccelerationStructureGeometryKHR
p Ptr AccelerationStructureGeometryKHR
-> Int -> Ptr AccelerationStructureGeometryDataKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr AccelerationStructureGeometryDataKHR)) (AccelerationStructureGeometryDataKHR
geometry) (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
$ ())
    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 GeometryFlagsKHR -> GeometryFlagsKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AccelerationStructureGeometryKHR
p Ptr AccelerationStructureGeometryKHR -> Int -> Ptr GeometryFlagsKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
88 :: Ptr GeometryFlagsKHR)) (GeometryFlagsKHR
flags)
    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 = Int
96
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr AccelerationStructureGeometryKHR -> IO b -> IO b
pokeZeroCStruct Ptr AccelerationStructureGeometryKHR
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (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 AccelerationStructureGeometryKHR
p Ptr AccelerationStructureGeometryKHR -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR)
    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 AccelerationStructureGeometryKHR
p Ptr AccelerationStructureGeometryKHR
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    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 GeometryTypeKHR -> GeometryTypeKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AccelerationStructureGeometryKHR
p Ptr AccelerationStructureGeometryKHR -> Int -> Ptr GeometryTypeKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr GeometryTypeKHR)) (GeometryTypeKHR
forall a. Zero a => a
zero)
    ((() -> 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 AccelerationStructureGeometryDataKHR
-> AccelerationStructureGeometryDataKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ((Ptr AccelerationStructureGeometryKHR
p Ptr AccelerationStructureGeometryKHR
-> Int -> Ptr AccelerationStructureGeometryDataKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr AccelerationStructureGeometryDataKHR)) (AccelerationStructureGeometryDataKHR
forall a. Zero a => a
zero) (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
$ ())
    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 Zero AccelerationStructureGeometryKHR where
  zero :: AccelerationStructureGeometryKHR
zero = GeometryTypeKHR
-> AccelerationStructureGeometryDataKHR
-> GeometryFlagsKHR
-> AccelerationStructureGeometryKHR
AccelerationStructureGeometryKHR
           GeometryTypeKHR
forall a. Zero a => a
zero
           AccelerationStructureGeometryDataKHR
forall a. Zero a => a
zero
           GeometryFlagsKHR
forall a. Zero a => a
zero


-- | VkAccelerationStructureBuildGeometryInfoKHR - Structure specifying the
-- geometry data used to build an acceleration structure
--
-- = Description
--
-- Only one of @pGeometries@ or @ppGeometries@ /can/ be a valid pointer,
-- the other /must/ be @NULL@. Each element of the non-@NULL@ array
-- describes the data used to build each acceleration structure geometry.
--
-- The index of each element of the @pGeometries@ or @ppGeometries@ members
-- of 'AccelerationStructureBuildGeometryInfoKHR' is used as the /geometry
-- index/ during ray traversal. The geometry index is available in ray
-- shaders via the
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-builtin-variables-raygeometryindex RayGeometryIndexKHR built-in>,
-- and is
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shader-binding-table-hit-shader-indexing used to determine hit and intersection shaders executed during traversal>.
-- The geometry index is available to ray queries via the
-- @OpRayQueryGetIntersectionGeometryIndexKHR@ instruction.
--
-- Setting 'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' in @flags@
-- indicates that this build is a motion top level acceleration structure.
-- A motion top level uses instances of format
-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInstanceNV'
-- if 'AccelerationStructureGeometryInstancesDataKHR'::@arrayOfPointers@ is
-- 'Vulkan.Core10.FundamentalTypes.FALSE'.
--
-- If 'AccelerationStructureGeometryInstancesDataKHR'::@arrayOfPointers@ is
-- 'Vulkan.Core10.FundamentalTypes.TRUE', the pointer for any given element
-- of the array of instance pointers consists of 4 bits of
-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInstanceTypeNV'
-- in the low 4 bits of the pointer identifying the type of structure at
-- the pointer. The device address accessed is the value in the array with
-- the low 4 bits set to zero. The structure at the pointer is one of
-- 'AccelerationStructureInstanceKHR',
-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMatrixMotionInstanceNV'
-- or
-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureSRTMotionInstanceNV',
-- depending on the type value encoded in the low 4 bits.
--
-- A top level acceleration structure with either motion instances or
-- vertex motion in its instances /must/ set
-- 'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' in @flags@.
--
-- Members @srcAccelerationStructure@ and @dstAccelerationStructure@ /may/
-- be the same or different for an update operation (when @mode@ is
-- 'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR'). If they are the same,
-- the update happens in-place. Otherwise, the target acceleration
-- structure is updated and the source is not modified.
--
-- == Valid Usage
--
-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03654# @type@
--     /must/ not be 'ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR'
--
-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-pGeometries-03788#
--     Only one of @pGeometries@ or @ppGeometries@ /can/ be a valid
--     pointer, the other /must/ be @NULL@
--
-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03789# If
--     @type@ is 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR', the
--     @geometryType@ member of elements of either @pGeometries@ or
--     @ppGeometries@ /must/ be 'GEOMETRY_TYPE_INSTANCES_KHR'
--
-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03790# If
--     @type@ is 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR',
--     @geometryCount@ /must/ be @1@
--
-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03791# If
--     @type@ is 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' the
--     @geometryType@ member of elements of either @pGeometries@ or
--     @ppGeometries@ /must/ not be 'GEOMETRY_TYPE_INSTANCES_KHR'
--
-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03792# If
--     @type@ is 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' then the
--     @geometryType@ member of each geometry in either @pGeometries@ or
--     @ppGeometries@ /must/ be the same
--
-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03793# If
--     @type@ is 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' then
--     @geometryCount@ /must/ be less than or equal to
--     'PhysicalDeviceAccelerationStructurePropertiesKHR'::@maxGeometryCount@
--
-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03794# If
--     @type@ is 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' and the
--     @geometryType@ member of either @pGeometries@ or @ppGeometries@ is
--     'GEOMETRY_TYPE_AABBS_KHR', the total number of AABBs in all
--     geometries /must/ be less than or equal to
--     'PhysicalDeviceAccelerationStructurePropertiesKHR'::@maxPrimitiveCount@
--
-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03795# If
--     @type@ is 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' and the
--     @geometryType@ member of either @pGeometries@ or @ppGeometries@ is
--     'GEOMETRY_TYPE_TRIANGLES_KHR', the total number of triangles in all
--     geometries /must/ be less than or equal to
--     'PhysicalDeviceAccelerationStructurePropertiesKHR'::@maxPrimitiveCount@
--
-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-03796# If
--     @flags@ has the
--     'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR' bit set,
--     then it /must/ not have the
--     'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR' bit set
--
-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-dstAccelerationStructure-04927#
--     If @dstAccelerationStructure@ was created with
--     'ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV' set in
--     'AccelerationStructureCreateInfoKHR'::@flags@,
--     'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' /must/ be set in
--     @flags@
--
-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-04928# If
--     'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' is set in @flags@,
--     @dstAccelerationStructure@ /must/ have been created with
--     'ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV' set in
--     'AccelerationStructureCreateInfoKHR'::@flags@
--
-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-04929# If
--     'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' is set in @flags@,
--     @type@ /must/ not be 'ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-sType-sType#
--     @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR'
--
-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-pNext-pNext#
--     @pNext@ /must/ be @NULL@
--
-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-parameter#
--     @type@ /must/ be a valid 'AccelerationStructureTypeKHR' value
--
-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-parameter#
--     @flags@ /must/ be a valid combination of
--     'BuildAccelerationStructureFlagBitsKHR' values
--
-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-pGeometries-parameter#
--     If @geometryCount@ is not @0@, and @pGeometries@ is not @NULL@,
--     @pGeometries@ /must/ be a valid pointer to an array of
--     @geometryCount@ valid 'AccelerationStructureGeometryKHR' structures
--
-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-ppGeometries-parameter#
--     If @geometryCount@ is not @0@, and @ppGeometries@ is not @NULL@,
--     @ppGeometries@ /must/ be a valid pointer to an array of
--     @geometryCount@ valid pointers to valid
--     'AccelerationStructureGeometryKHR' structures
--
-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-commonparent# Both
--     of @dstAccelerationStructure@, and @srcAccelerationStructure@ that
--     are valid handles of non-ignored parameters /must/ have been
--     created, allocated, or retrieved from the same
--     'Vulkan.Core10.Handles.Device'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'AccelerationStructureGeometryKHR',
-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
-- 'AccelerationStructureTypeKHR', 'BuildAccelerationStructureFlagsKHR',
-- 'BuildAccelerationStructureModeKHR', 'DeviceOrHostAddressKHR',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'buildAccelerationStructuresKHR',
-- 'cmdBuildAccelerationStructuresIndirectKHR',
-- 'cmdBuildAccelerationStructuresKHR',
-- 'getAccelerationStructureBuildSizesKHR'
data AccelerationStructureBuildGeometryInfoKHR = AccelerationStructureBuildGeometryInfoKHR
  { -- | @type@ is a 'AccelerationStructureTypeKHR' value specifying the type of
    -- acceleration structure being built.
    AccelerationStructureBuildGeometryInfoKHR
-> AccelerationStructureTypeKHR
type' :: AccelerationStructureTypeKHR
  , -- | @flags@ is a bitmask of 'BuildAccelerationStructureFlagBitsKHR'
    -- specifying additional parameters of the acceleration structure.
    AccelerationStructureBuildGeometryInfoKHR
-> BuildAccelerationStructureFlagsKHR
flags :: BuildAccelerationStructureFlagsKHR
  , -- | @mode@ is a 'BuildAccelerationStructureModeKHR' value specifying the
    -- type of operation to perform.
    AccelerationStructureBuildGeometryInfoKHR
-> BuildAccelerationStructureModeKHR
mode :: BuildAccelerationStructureModeKHR
  , -- | @srcAccelerationStructure@ is a pointer to an existing acceleration
    -- structure that is to be used to update the @dst@ acceleration structure
    -- when @mode@ is 'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR'.
    AccelerationStructureBuildGeometryInfoKHR
-> AccelerationStructureKHR
srcAccelerationStructure :: AccelerationStructureKHR
  , -- | @dstAccelerationStructure@ is a pointer to the target acceleration
    -- structure for the build.
    AccelerationStructureBuildGeometryInfoKHR
-> AccelerationStructureKHR
dstAccelerationStructure :: AccelerationStructureKHR
  , -- | @pGeometries@ is a pointer to an array of
    -- 'AccelerationStructureGeometryKHR' structures.
    AccelerationStructureBuildGeometryInfoKHR
-> Vector AccelerationStructureGeometryKHR
geometries :: Vector AccelerationStructureGeometryKHR
  , -- | @scratchData@ is the device or host address to memory that will be used
    -- as scratch memory for the build.
    AccelerationStructureBuildGeometryInfoKHR -> DeviceOrHostAddressKHR
scratchData :: DeviceOrHostAddressKHR
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (AccelerationStructureBuildGeometryInfoKHR)
#endif
deriving instance Show AccelerationStructureBuildGeometryInfoKHR

instance ToCStruct AccelerationStructureBuildGeometryInfoKHR where
  withCStruct :: AccelerationStructureBuildGeometryInfoKHR
-> (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
    -> IO b)
-> IO b
withCStruct AccelerationStructureBuildGeometryInfoKHR
x ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> IO b
f = Int
-> (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
80 ((("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
  -> IO b)
 -> IO b)
-> (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
    -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \"pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> AccelerationStructureBuildGeometryInfoKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p AccelerationStructureBuildGeometryInfoKHR
x (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> IO b
f "pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p)
  pokeCStruct :: ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> AccelerationStructureBuildGeometryInfoKHR -> IO b -> IO b
pokeCStruct "pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p AccelerationStructureBuildGeometryInfoKHR{Vector AccelerationStructureGeometryKHR
AccelerationStructureKHR
AccelerationStructureTypeKHR
BuildAccelerationStructureFlagsKHR
BuildAccelerationStructureModeKHR
DeviceOrHostAddressKHR
scratchData :: DeviceOrHostAddressKHR
geometries :: Vector AccelerationStructureGeometryKHR
dstAccelerationStructure :: AccelerationStructureKHR
srcAccelerationStructure :: AccelerationStructureKHR
mode :: BuildAccelerationStructureModeKHR
flags :: BuildAccelerationStructureFlagsKHR
type' :: AccelerationStructureTypeKHR
$sel:scratchData:AccelerationStructureBuildGeometryInfoKHR :: AccelerationStructureBuildGeometryInfoKHR -> DeviceOrHostAddressKHR
$sel:geometries:AccelerationStructureBuildGeometryInfoKHR :: AccelerationStructureBuildGeometryInfoKHR
-> Vector AccelerationStructureGeometryKHR
$sel:dstAccelerationStructure:AccelerationStructureBuildGeometryInfoKHR :: AccelerationStructureBuildGeometryInfoKHR
-> AccelerationStructureKHR
$sel:srcAccelerationStructure:AccelerationStructureBuildGeometryInfoKHR :: AccelerationStructureBuildGeometryInfoKHR
-> AccelerationStructureKHR
$sel:mode:AccelerationStructureBuildGeometryInfoKHR :: AccelerationStructureBuildGeometryInfoKHR
-> BuildAccelerationStructureModeKHR
$sel:flags:AccelerationStructureBuildGeometryInfoKHR :: AccelerationStructureBuildGeometryInfoKHR
-> BuildAccelerationStructureFlagsKHR
$sel:type':AccelerationStructureBuildGeometryInfoKHR :: AccelerationStructureBuildGeometryInfoKHR
-> AccelerationStructureTypeKHR
..} 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 (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR)
    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 (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    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 AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> Int -> Ptr AccelerationStructureTypeKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr AccelerationStructureTypeKHR)) (AccelerationStructureTypeKHR
type')
    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 BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> Int -> Ptr BuildAccelerationStructureFlagsKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr BuildAccelerationStructureFlagsKHR)) (BuildAccelerationStructureFlagsKHR
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 BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> Int -> Ptr BuildAccelerationStructureModeKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr BuildAccelerationStructureModeKHR)) (BuildAccelerationStructureModeKHR
mode)
    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
$ ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> AccelerationStructureKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> Int
-> "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr AccelerationStructureKHR)) (AccelerationStructureKHR
srcAccelerationStructure)
    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
$ ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> AccelerationStructureKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> Int
-> "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr AccelerationStructureKHR)) (AccelerationStructureKHR
dstAccelerationStructure)
    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
$ ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32)) ((Int -> "firstQuery" ::: Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector AccelerationStructureGeometryKHR -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector AccelerationStructureGeometryKHR -> Int)
-> Vector AccelerationStructureGeometryKHR -> Int
forall a b. (a -> b) -> a -> b
$ (Vector AccelerationStructureGeometryKHR
geometries)) :: Word32))
    Ptr AccelerationStructureGeometryKHR
pPGeometries' <- ((Ptr AccelerationStructureGeometryKHR -> IO b) -> IO b)
-> ContT b IO (Ptr AccelerationStructureGeometryKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr AccelerationStructureGeometryKHR -> IO b) -> IO b)
 -> ContT b IO (Ptr AccelerationStructureGeometryKHR))
-> ((Ptr AccelerationStructureGeometryKHR -> IO b) -> IO b)
-> ContT b IO (Ptr AccelerationStructureGeometryKHR)
forall a b. (a -> b) -> a -> b
$ Int -> (Ptr AccelerationStructureGeometryKHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @AccelerationStructureGeometryKHR ((Vector AccelerationStructureGeometryKHR -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector AccelerationStructureGeometryKHR
geometries)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
96)
    (Int -> AccelerationStructureGeometryKHR -> ContT b IO ())
-> Vector AccelerationStructureGeometryKHR -> ContT b IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i AccelerationStructureGeometryKHR
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 AccelerationStructureGeometryKHR
-> AccelerationStructureGeometryKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (Ptr AccelerationStructureGeometryKHR
pPGeometries' Ptr AccelerationStructureGeometryKHR
-> Int -> Ptr AccelerationStructureGeometryKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
96 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr AccelerationStructureGeometryKHR) (AccelerationStructureGeometryKHR
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 AccelerationStructureGeometryKHR
geometries)
    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 AccelerationStructureGeometryKHR)
-> Ptr AccelerationStructureGeometryKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> Int -> Ptr (Ptr AccelerationStructureGeometryKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr (Ptr AccelerationStructureGeometryKHR))) (Ptr AccelerationStructureGeometryKHR
pPGeometries')
    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 (Ptr AccelerationStructureGeometryKHR))
-> Ptr (Ptr AccelerationStructureGeometryKHR) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> Int -> Ptr (Ptr (Ptr AccelerationStructureGeometryKHR))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr (Ptr (Ptr AccelerationStructureGeometryKHR)))) (Ptr (Ptr AccelerationStructureGeometryKHR)
forall a. Ptr a
nullPtr)
    ((() -> 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 DeviceOrHostAddressKHR
-> DeviceOrHostAddressKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> Int -> Ptr DeviceOrHostAddressKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
72 :: Ptr DeviceOrHostAddressKHR)) (DeviceOrHostAddressKHR
scratchData) (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
$ ())
    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 = Int
80
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> IO b -> IO b
pokeZeroCStruct "pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (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 (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR)
    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 (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    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 AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> Int -> Ptr AccelerationStructureTypeKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr AccelerationStructureTypeKHR)) (AccelerationStructureTypeKHR
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 BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> Int -> Ptr BuildAccelerationStructureModeKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr BuildAccelerationStructureModeKHR)) (BuildAccelerationStructureModeKHR
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 (Ptr (Ptr AccelerationStructureGeometryKHR))
-> Ptr (Ptr AccelerationStructureGeometryKHR) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> Int -> Ptr (Ptr (Ptr AccelerationStructureGeometryKHR))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr (Ptr (Ptr AccelerationStructureGeometryKHR)))) (Ptr (Ptr AccelerationStructureGeometryKHR)
forall a. Ptr a
nullPtr)
    ((() -> 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 DeviceOrHostAddressKHR
-> DeviceOrHostAddressKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR
p ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR)
-> Int -> Ptr DeviceOrHostAddressKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
72 :: Ptr DeviceOrHostAddressKHR)) (DeviceOrHostAddressKHR
forall a. Zero a => a
zero) (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
$ ())
    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 Zero AccelerationStructureBuildGeometryInfoKHR where
  zero :: AccelerationStructureBuildGeometryInfoKHR
zero = AccelerationStructureTypeKHR
-> BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureModeKHR
-> AccelerationStructureKHR
-> AccelerationStructureKHR
-> Vector AccelerationStructureGeometryKHR
-> DeviceOrHostAddressKHR
-> AccelerationStructureBuildGeometryInfoKHR
AccelerationStructureBuildGeometryInfoKHR
           AccelerationStructureTypeKHR
forall a. Zero a => a
zero
           BuildAccelerationStructureFlagsKHR
forall a. Zero a => a
zero
           BuildAccelerationStructureModeKHR
forall a. Zero a => a
zero
           AccelerationStructureKHR
forall a. Zero a => a
zero
           AccelerationStructureKHR
forall a. Zero a => a
zero
           Vector AccelerationStructureGeometryKHR
forall a. Monoid a => a
mempty
           DeviceOrHostAddressKHR
forall a. Zero a => a
zero


-- | VkAccelerationStructureBuildRangeInfoKHR - Structure specifying build
-- offsets and counts for acceleration structure builds
--
-- = Description
--
-- The primitive count and primitive offset are interpreted differently
-- depending on the 'GeometryTypeKHR' used:
--
-- -   For geometries of type 'GEOMETRY_TYPE_TRIANGLES_KHR',
--     @primitiveCount@ is the number of triangles to be built, where each
--     triangle is treated as 3 vertices.
--
--     -   If the geometry uses indices, @primitiveCount@ × 3 indices are
--         consumed from
--         'AccelerationStructureGeometryTrianglesDataKHR'::@indexData@,
--         starting at an offset of @primitiveOffset@. The value of
--         @firstVertex@ is added to the index values before fetching
--         vertices.
--
--     -   If the geometry does not use indices, @primitiveCount@ × 3
--         vertices are consumed from
--         'AccelerationStructureGeometryTrianglesDataKHR'::@vertexData@,
--         starting at an offset of @primitiveOffset@ +
--         'AccelerationStructureGeometryTrianglesDataKHR'::@vertexStride@
--         × @firstVertex@.
--
--     -   If
--         'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@
--         is not @NULL@, a single 'TransformMatrixKHR' structure is
--         consumed from
--         'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@,
--         at an offset of @transformOffset@. This matrix describes a
--         transformation from the space in which the vertices for all
--         triangles in this geometry are described to the space in which
--         the acceleration structure is defined.
--
-- -   For geometries of type 'GEOMETRY_TYPE_AABBS_KHR', @primitiveCount@
--     is the number of axis-aligned bounding boxes. @primitiveCount@
--     'AabbPositionsKHR' structures are consumed from
--     'AccelerationStructureGeometryAabbsDataKHR'::@data@, starting at an
--     offset of @primitiveOffset@.
--
-- -   For geometries of type 'GEOMETRY_TYPE_INSTANCES_KHR',
--     @primitiveCount@ is the number of acceleration structures.
--     @primitiveCount@ 'AccelerationStructureInstanceKHR' or
--     'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInstanceNV'
--     structures are consumed from
--     'AccelerationStructureGeometryInstancesDataKHR'::@data@, starting at
--     an offset of @primitiveOffset@.
--
-- == Valid Usage
--
-- -   #VUID-VkAccelerationStructureBuildRangeInfoKHR-primitiveOffset-03656#
--     For geometries of type 'GEOMETRY_TYPE_TRIANGLES_KHR', if the
--     geometry uses indices, the offset @primitiveOffset@ from
--     'AccelerationStructureGeometryTrianglesDataKHR'::@indexData@ /must/
--     be a multiple of the element size of
--     'AccelerationStructureGeometryTrianglesDataKHR'::@indexType@
--
-- -   #VUID-VkAccelerationStructureBuildRangeInfoKHR-primitiveOffset-03657#
--     For geometries of type 'GEOMETRY_TYPE_TRIANGLES_KHR', if the
--     geometry does not use indices, the offset @primitiveOffset@ from
--     'AccelerationStructureGeometryTrianglesDataKHR'::@vertexData@ /must/
--     be a multiple of the component size of
--     'AccelerationStructureGeometryTrianglesDataKHR'::@vertexFormat@
--
-- -   #VUID-VkAccelerationStructureBuildRangeInfoKHR-transformOffset-03658#
--     For geometries of type 'GEOMETRY_TYPE_TRIANGLES_KHR', the offset
--     @transformOffset@ from
--     'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@
--     /must/ be a multiple of 16
--
-- -   #VUID-VkAccelerationStructureBuildRangeInfoKHR-primitiveOffset-03659#
--     For geometries of type 'GEOMETRY_TYPE_AABBS_KHR', the offset
--     @primitiveOffset@ from
--     'AccelerationStructureGeometryAabbsDataKHR'::@data@ /must/ be a
--     multiple of 8
--
-- -   #VUID-VkAccelerationStructureBuildRangeInfoKHR-primitiveOffset-03660#
--     For geometries of type 'GEOMETRY_TYPE_INSTANCES_KHR', the offset
--     @primitiveOffset@ from
--     'AccelerationStructureGeometryInstancesDataKHR'::@data@ /must/ be a
--     multiple of 16
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'buildAccelerationStructuresKHR', 'cmdBuildAccelerationStructuresKHR'
data AccelerationStructureBuildRangeInfoKHR = AccelerationStructureBuildRangeInfoKHR
  { -- | @primitiveCount@ defines the number of primitives for a corresponding
    -- acceleration structure geometry.
    AccelerationStructureBuildRangeInfoKHR -> "firstQuery" ::: Word32
primitiveCount :: Word32
  , -- | @primitiveOffset@ defines an offset in bytes into the memory where
    -- primitive data is defined.
    AccelerationStructureBuildRangeInfoKHR -> "firstQuery" ::: Word32
primitiveOffset :: Word32
  , -- | @firstVertex@ is the index of the first vertex to build from for
    -- triangle geometry.
    AccelerationStructureBuildRangeInfoKHR -> "firstQuery" ::: Word32
firstVertex :: Word32
  , -- | @transformOffset@ defines an offset in bytes into the memory where a
    -- transform matrix is defined.
    AccelerationStructureBuildRangeInfoKHR -> "firstQuery" ::: Word32
transformOffset :: Word32
  }
  deriving (Typeable, AccelerationStructureBuildRangeInfoKHR
-> AccelerationStructureBuildRangeInfoKHR -> Bool
(AccelerationStructureBuildRangeInfoKHR
 -> AccelerationStructureBuildRangeInfoKHR -> Bool)
-> (AccelerationStructureBuildRangeInfoKHR
    -> AccelerationStructureBuildRangeInfoKHR -> Bool)
-> Eq AccelerationStructureBuildRangeInfoKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AccelerationStructureBuildRangeInfoKHR
-> AccelerationStructureBuildRangeInfoKHR -> Bool
$c/= :: AccelerationStructureBuildRangeInfoKHR
-> AccelerationStructureBuildRangeInfoKHR -> Bool
== :: AccelerationStructureBuildRangeInfoKHR
-> AccelerationStructureBuildRangeInfoKHR -> Bool
$c== :: AccelerationStructureBuildRangeInfoKHR
-> AccelerationStructureBuildRangeInfoKHR -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (AccelerationStructureBuildRangeInfoKHR)
#endif
deriving instance Show AccelerationStructureBuildRangeInfoKHR

instance ToCStruct AccelerationStructureBuildRangeInfoKHR where
  withCStruct :: AccelerationStructureBuildRangeInfoKHR
-> (Ptr AccelerationStructureBuildRangeInfoKHR -> IO b) -> IO b
withCStruct AccelerationStructureBuildRangeInfoKHR
x Ptr AccelerationStructureBuildRangeInfoKHR -> IO b
f = Int -> (Ptr AccelerationStructureBuildRangeInfoKHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
16 ((Ptr AccelerationStructureBuildRangeInfoKHR -> IO b) -> IO b)
-> (Ptr AccelerationStructureBuildRangeInfoKHR -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr AccelerationStructureBuildRangeInfoKHR
p -> Ptr AccelerationStructureBuildRangeInfoKHR
-> AccelerationStructureBuildRangeInfoKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr AccelerationStructureBuildRangeInfoKHR
p AccelerationStructureBuildRangeInfoKHR
x (Ptr AccelerationStructureBuildRangeInfoKHR -> IO b
f Ptr AccelerationStructureBuildRangeInfoKHR
p)
  pokeCStruct :: Ptr AccelerationStructureBuildRangeInfoKHR
-> AccelerationStructureBuildRangeInfoKHR -> IO b -> IO b
pokeCStruct Ptr AccelerationStructureBuildRangeInfoKHR
p AccelerationStructureBuildRangeInfoKHR{"firstQuery" ::: Word32
transformOffset :: "firstQuery" ::: Word32
firstVertex :: "firstQuery" ::: Word32
primitiveOffset :: "firstQuery" ::: Word32
primitiveCount :: "firstQuery" ::: Word32
$sel:transformOffset:AccelerationStructureBuildRangeInfoKHR :: AccelerationStructureBuildRangeInfoKHR -> "firstQuery" ::: Word32
$sel:firstVertex:AccelerationStructureBuildRangeInfoKHR :: AccelerationStructureBuildRangeInfoKHR -> "firstQuery" ::: Word32
$sel:primitiveOffset:AccelerationStructureBuildRangeInfoKHR :: AccelerationStructureBuildRangeInfoKHR -> "firstQuery" ::: Word32
$sel:primitiveCount:AccelerationStructureBuildRangeInfoKHR :: AccelerationStructureBuildRangeInfoKHR -> "firstQuery" ::: Word32
..} IO b
f = do
    ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AccelerationStructureBuildRangeInfoKHR
p Ptr AccelerationStructureBuildRangeInfoKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) ("firstQuery" ::: Word32
primitiveCount)
    ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AccelerationStructureBuildRangeInfoKHR
p Ptr AccelerationStructureBuildRangeInfoKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) ("firstQuery" ::: Word32
primitiveOffset)
    ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AccelerationStructureBuildRangeInfoKHR
p Ptr AccelerationStructureBuildRangeInfoKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) ("firstQuery" ::: Word32
firstVertex)
    ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AccelerationStructureBuildRangeInfoKHR
p Ptr AccelerationStructureBuildRangeInfoKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32)) ("firstQuery" ::: Word32
transformOffset)
    IO b
f
  cStructSize :: Int
cStructSize = Int
16
  cStructAlignment :: Int
cStructAlignment = Int
4
  pokeZeroCStruct :: Ptr AccelerationStructureBuildRangeInfoKHR -> IO b -> IO b
pokeZeroCStruct Ptr AccelerationStructureBuildRangeInfoKHR
p IO b
f = do
    ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AccelerationStructureBuildRangeInfoKHR
p Ptr AccelerationStructureBuildRangeInfoKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) ("firstQuery" ::: Word32
forall a. Zero a => a
zero)
    ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AccelerationStructureBuildRangeInfoKHR
p Ptr AccelerationStructureBuildRangeInfoKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) ("firstQuery" ::: Word32
forall a. Zero a => a
zero)
    ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AccelerationStructureBuildRangeInfoKHR
p Ptr AccelerationStructureBuildRangeInfoKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) ("firstQuery" ::: Word32
forall a. Zero a => a
zero)
    ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AccelerationStructureBuildRangeInfoKHR
p Ptr AccelerationStructureBuildRangeInfoKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32)) ("firstQuery" ::: Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct AccelerationStructureBuildRangeInfoKHR where
  peekCStruct :: Ptr AccelerationStructureBuildRangeInfoKHR
-> IO AccelerationStructureBuildRangeInfoKHR
peekCStruct Ptr AccelerationStructureBuildRangeInfoKHR
p = do
    "firstQuery" ::: Word32
primitiveCount <- ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> IO ("firstQuery" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr AccelerationStructureBuildRangeInfoKHR
p Ptr AccelerationStructureBuildRangeInfoKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32))
    "firstQuery" ::: Word32
primitiveOffset <- ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> IO ("firstQuery" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr AccelerationStructureBuildRangeInfoKHR
p Ptr AccelerationStructureBuildRangeInfoKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32))
    "firstQuery" ::: Word32
firstVertex <- ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> IO ("firstQuery" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr AccelerationStructureBuildRangeInfoKHR
p Ptr AccelerationStructureBuildRangeInfoKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32))
    "firstQuery" ::: Word32
transformOffset <- ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> IO ("firstQuery" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr AccelerationStructureBuildRangeInfoKHR
p Ptr AccelerationStructureBuildRangeInfoKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32))
    AccelerationStructureBuildRangeInfoKHR
-> IO AccelerationStructureBuildRangeInfoKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (AccelerationStructureBuildRangeInfoKHR
 -> IO AccelerationStructureBuildRangeInfoKHR)
-> AccelerationStructureBuildRangeInfoKHR
-> IO AccelerationStructureBuildRangeInfoKHR
forall a b. (a -> b) -> a -> b
$ ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32)
-> AccelerationStructureBuildRangeInfoKHR
AccelerationStructureBuildRangeInfoKHR
             "firstQuery" ::: Word32
primitiveCount "firstQuery" ::: Word32
primitiveOffset "firstQuery" ::: Word32
firstVertex "firstQuery" ::: Word32
transformOffset

instance Storable AccelerationStructureBuildRangeInfoKHR where
  sizeOf :: AccelerationStructureBuildRangeInfoKHR -> Int
sizeOf ~AccelerationStructureBuildRangeInfoKHR
_ = Int
16
  alignment :: AccelerationStructureBuildRangeInfoKHR -> Int
alignment ~AccelerationStructureBuildRangeInfoKHR
_ = Int
4
  peek :: Ptr AccelerationStructureBuildRangeInfoKHR
-> IO AccelerationStructureBuildRangeInfoKHR
peek = Ptr AccelerationStructureBuildRangeInfoKHR
-> IO AccelerationStructureBuildRangeInfoKHR
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr AccelerationStructureBuildRangeInfoKHR
-> AccelerationStructureBuildRangeInfoKHR -> IO ()
poke Ptr AccelerationStructureBuildRangeInfoKHR
ptr AccelerationStructureBuildRangeInfoKHR
poked = Ptr AccelerationStructureBuildRangeInfoKHR
-> AccelerationStructureBuildRangeInfoKHR -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr AccelerationStructureBuildRangeInfoKHR
ptr AccelerationStructureBuildRangeInfoKHR
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero AccelerationStructureBuildRangeInfoKHR where
  zero :: AccelerationStructureBuildRangeInfoKHR
zero = ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32)
-> AccelerationStructureBuildRangeInfoKHR
AccelerationStructureBuildRangeInfoKHR
           "firstQuery" ::: Word32
forall a. Zero a => a
zero
           "firstQuery" ::: Word32
forall a. Zero a => a
zero
           "firstQuery" ::: Word32
forall a. Zero a => a
zero
           "firstQuery" ::: Word32
forall a. Zero a => a
zero


-- | VkAccelerationStructureCreateInfoKHR - Structure specifying the
-- parameters of a newly created acceleration structure object
--
-- = Description
--
-- If @deviceAddress@ is zero, no specific address is requested.
--
-- If @deviceAddress@ is not zero, @deviceAddress@ /must/ be an address
-- retrieved from an identically created acceleration structure on the same
-- implementation. The acceleration structure /must/ also be placed on an
-- identically created @buffer@ and at the same @offset@.
--
-- Applications /should/ avoid creating acceleration structures with
-- application-provided addresses and implementation-provided addresses in
-- the same process, to reduce the likelihood of
-- 'Vulkan.Extensions.VK_KHR_buffer_device_address.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR'
-- errors.
--
-- Note
--
-- The expected usage for this is that a trace capture\/replay tool will
-- add the
-- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT'
-- flag to all buffers that use
-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT',
-- and will add
-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT'
-- to all buffers used as storage for an acceleration structure where
-- @deviceAddress@ is not zero. This also means that the tool will need to
-- add
-- 'Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT'
-- to memory allocations to allow the flag to be set where the application
-- may not have otherwise required it. During capture the tool will save
-- the queried opaque device addresses in the trace. During replay, the
-- buffers will be created specifying the original address so any address
-- values stored in the trace data will remain valid.
--
-- Implementations are expected to separate such buffers in the GPU address
-- space so normal allocations will avoid using these addresses.
-- Apps\/tools should avoid mixing app-provided and implementation-provided
-- addresses for buffers created with
-- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT',
-- to avoid address space allocation conflicts.
--
-- Applications /should/ create an acceleration structure with a specific
-- 'AccelerationStructureTypeKHR' other than
-- 'ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR'.
--
-- If the acceleration structure will be the target of a build operation,
-- the required size for an acceleration structure /can/ be queried with
-- 'getAccelerationStructureBuildSizesKHR'. If the acceleration structure
-- is going to be the target of a compacting copy,
-- 'cmdWriteAccelerationStructuresPropertiesKHR' or
-- 'writeAccelerationStructuresPropertiesKHR' /can/ be used to obtain the
-- compacted size required.
--
-- If the acceleration structure will be the target of a build operation
-- with 'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' it /must/ include
-- 'ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV' in @flags@ and include
-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInfoNV'
-- as an extension structure in @pNext@ with the number of instances as
-- metadata for the object.
--
-- == Valid Usage
--
-- -   #VUID-VkAccelerationStructureCreateInfoKHR-deviceAddress-03612# If
--     @deviceAddress@ is not zero, @createFlags@ /must/ include
--     'ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR'
--
-- -   #VUID-VkAccelerationStructureCreateInfoKHR-createFlags-03613# If
--     @createFlags@ includes
--     'ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR',
--     'PhysicalDeviceAccelerationStructureFeaturesKHR'::@accelerationStructureCaptureReplay@
--     /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE'
--
-- -   #VUID-VkAccelerationStructureCreateInfoKHR-buffer-03614# @buffer@
--     /must/ have been created with a @usage@ value containing
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR'
--
-- -   #VUID-VkAccelerationStructureCreateInfoKHR-buffer-03615# @buffer@
--     /must/ not have been created with
--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'
--
-- -   #VUID-VkAccelerationStructureCreateInfoKHR-offset-03616# The sum of
--     @offset@ and @size@ /must/ be less than the size of @buffer@
--
-- -   #VUID-VkAccelerationStructureCreateInfoKHR-offset-03734# @offset@
--     /must/ be a multiple of @256@ bytes
--
-- -   #VUID-VkAccelerationStructureCreateInfoKHR-flags-04954# If
--     'ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV' is set in @flags@ and
--     @type@ is 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR', one member of
--     the @pNext@ chain /must/ be a pointer to a valid instance of
--     'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInfoNV'
--
-- -   #VUID-VkAccelerationStructureCreateInfoKHR-flags-04955# If any
--     geometry includes
--     'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureGeometryMotionTrianglesDataNV'
--     then @flags@ /must/ contain
--     'ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkAccelerationStructureCreateInfoKHR-sType-sType# @sType@
--     /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR'
--
-- -   #VUID-VkAccelerationStructureCreateInfoKHR-pNext-pNext# @pNext@
--     /must/ be @NULL@ or a pointer to a valid instance of
--     'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInfoNV'
--
-- -   #VUID-VkAccelerationStructureCreateInfoKHR-sType-unique# The @sType@
--     value of each struct in the @pNext@ chain /must/ be unique
--
-- -   #VUID-VkAccelerationStructureCreateInfoKHR-createFlags-parameter#
--     @createFlags@ /must/ be a valid combination of
--     'AccelerationStructureCreateFlagBitsKHR' values
--
-- -   #VUID-VkAccelerationStructureCreateInfoKHR-buffer-parameter#
--     @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
--
-- -   #VUID-VkAccelerationStructureCreateInfoKHR-type-parameter# @type@
--     /must/ be a valid 'AccelerationStructureTypeKHR' value
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'AccelerationStructureCreateFlagsKHR', 'AccelerationStructureTypeKHR',
-- 'Vulkan.Core10.Handles.Buffer',
-- 'Vulkan.Core10.FundamentalTypes.DeviceAddress',
-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'createAccelerationStructureKHR'
data AccelerationStructureCreateInfoKHR (es :: [Type]) = AccelerationStructureCreateInfoKHR
  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
    AccelerationStructureCreateInfoKHR es -> Chain es
next :: Chain es
  , -- | @createFlags@ is a bitmask of 'AccelerationStructureCreateFlagBitsKHR'
    -- specifying additional creation parameters of the acceleration structure.
    AccelerationStructureCreateInfoKHR es
-> AccelerationStructureCreateFlagsKHR
createFlags :: AccelerationStructureCreateFlagsKHR
  , -- | @buffer@ is the buffer on which the acceleration structure will be
    -- stored.
    AccelerationStructureCreateInfoKHR es -> Buffer
buffer :: Buffer
  , -- | @offset@ is an offset in bytes from the base address of the buffer at
    -- which the acceleration structure will be stored, and /must/ be a
    -- multiple of @256@.
    AccelerationStructureCreateInfoKHR es -> "dataSize" ::: Word64
offset :: DeviceSize
  , -- | @size@ is the size required for the acceleration structure.
    AccelerationStructureCreateInfoKHR es -> "dataSize" ::: Word64
size :: DeviceSize
  , -- | @type@ is a 'AccelerationStructureTypeKHR' value specifying the type of
    -- acceleration structure that will be created.
    AccelerationStructureCreateInfoKHR es
-> AccelerationStructureTypeKHR
type' :: AccelerationStructureTypeKHR
  , -- | @deviceAddress@ is the device address requested for the acceleration
    -- structure if the
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-accelerationStructureCaptureReplay accelerationStructureCaptureReplay>
    -- feature is being used.
    AccelerationStructureCreateInfoKHR es -> "dataSize" ::: Word64
deviceAddress :: DeviceAddress
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (AccelerationStructureCreateInfoKHR (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (AccelerationStructureCreateInfoKHR es)

instance Extensible AccelerationStructureCreateInfoKHR where
  extensibleTypeName :: String
extensibleTypeName = String
"AccelerationStructureCreateInfoKHR"
  setNext :: AccelerationStructureCreateInfoKHR ds
-> Chain es -> AccelerationStructureCreateInfoKHR es
setNext AccelerationStructureCreateInfoKHR{"dataSize" ::: Word64
Chain ds
Buffer
AccelerationStructureTypeKHR
AccelerationStructureCreateFlagsKHR
deviceAddress :: "dataSize" ::: Word64
type' :: AccelerationStructureTypeKHR
size :: "dataSize" ::: Word64
offset :: "dataSize" ::: Word64
buffer :: Buffer
createFlags :: AccelerationStructureCreateFlagsKHR
next :: Chain ds
$sel:deviceAddress:AccelerationStructureCreateInfoKHR :: forall (es :: [*]).
AccelerationStructureCreateInfoKHR es -> "dataSize" ::: Word64
$sel:type':AccelerationStructureCreateInfoKHR :: forall (es :: [*]).
AccelerationStructureCreateInfoKHR es
-> AccelerationStructureTypeKHR
$sel:size:AccelerationStructureCreateInfoKHR :: forall (es :: [*]).
AccelerationStructureCreateInfoKHR es -> "dataSize" ::: Word64
$sel:offset:AccelerationStructureCreateInfoKHR :: forall (es :: [*]).
AccelerationStructureCreateInfoKHR es -> "dataSize" ::: Word64
$sel:buffer:AccelerationStructureCreateInfoKHR :: forall (es :: [*]). AccelerationStructureCreateInfoKHR es -> Buffer
$sel:createFlags:AccelerationStructureCreateInfoKHR :: forall (es :: [*]).
AccelerationStructureCreateInfoKHR es
-> AccelerationStructureCreateFlagsKHR
$sel:next:AccelerationStructureCreateInfoKHR :: forall (es :: [*]).
AccelerationStructureCreateInfoKHR es -> Chain es
..} Chain es
next' = AccelerationStructureCreateInfoKHR :: forall (es :: [*]).
Chain es
-> AccelerationStructureCreateFlagsKHR
-> Buffer
-> ("dataSize" ::: Word64)
-> ("dataSize" ::: Word64)
-> AccelerationStructureTypeKHR
-> ("dataSize" ::: Word64)
-> AccelerationStructureCreateInfoKHR es
AccelerationStructureCreateInfoKHR{$sel:next:AccelerationStructureCreateInfoKHR :: Chain es
next = Chain es
next', "dataSize" ::: Word64
Buffer
AccelerationStructureTypeKHR
AccelerationStructureCreateFlagsKHR
deviceAddress :: "dataSize" ::: Word64
type' :: AccelerationStructureTypeKHR
size :: "dataSize" ::: Word64
offset :: "dataSize" ::: Word64
buffer :: Buffer
createFlags :: AccelerationStructureCreateFlagsKHR
$sel:deviceAddress:AccelerationStructureCreateInfoKHR :: "dataSize" ::: Word64
$sel:type':AccelerationStructureCreateInfoKHR :: AccelerationStructureTypeKHR
$sel:size:AccelerationStructureCreateInfoKHR :: "dataSize" ::: Word64
$sel:offset:AccelerationStructureCreateInfoKHR :: "dataSize" ::: Word64
$sel:buffer:AccelerationStructureCreateInfoKHR :: Buffer
$sel:createFlags:AccelerationStructureCreateInfoKHR :: AccelerationStructureCreateFlagsKHR
..}
  getNext :: AccelerationStructureCreateInfoKHR es -> Chain es
getNext AccelerationStructureCreateInfoKHR{"dataSize" ::: Word64
Chain es
Buffer
AccelerationStructureTypeKHR
AccelerationStructureCreateFlagsKHR
deviceAddress :: "dataSize" ::: Word64
type' :: AccelerationStructureTypeKHR
size :: "dataSize" ::: Word64
offset :: "dataSize" ::: Word64
buffer :: Buffer
createFlags :: AccelerationStructureCreateFlagsKHR
next :: Chain es
$sel:deviceAddress:AccelerationStructureCreateInfoKHR :: forall (es :: [*]).
AccelerationStructureCreateInfoKHR es -> "dataSize" ::: Word64
$sel:type':AccelerationStructureCreateInfoKHR :: forall (es :: [*]).
AccelerationStructureCreateInfoKHR es
-> AccelerationStructureTypeKHR
$sel:size:AccelerationStructureCreateInfoKHR :: forall (es :: [*]).
AccelerationStructureCreateInfoKHR es -> "dataSize" ::: Word64
$sel:offset:AccelerationStructureCreateInfoKHR :: forall (es :: [*]).
AccelerationStructureCreateInfoKHR es -> "dataSize" ::: Word64
$sel:buffer:AccelerationStructureCreateInfoKHR :: forall (es :: [*]). AccelerationStructureCreateInfoKHR es -> Buffer
$sel:createFlags:AccelerationStructureCreateInfoKHR :: forall (es :: [*]).
AccelerationStructureCreateInfoKHR es
-> AccelerationStructureCreateFlagsKHR
$sel:next:AccelerationStructureCreateInfoKHR :: forall (es :: [*]).
AccelerationStructureCreateInfoKHR es -> Chain es
..} = Chain es
next
  extends :: forall e b proxy. Typeable e => proxy e -> (Extends AccelerationStructureCreateInfoKHR e => b) -> Maybe b
  extends :: proxy e
-> (Extends AccelerationStructureCreateInfoKHR e => b) -> Maybe b
extends proxy e
_ Extends AccelerationStructureCreateInfoKHR e => b
f
    | Just e :~: AccelerationStructureMotionInfoNV
Refl <- (Typeable e, Typeable AccelerationStructureMotionInfoNV) =>
Maybe (e :~: AccelerationStructureMotionInfoNV)
forall k (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
eqT @e @AccelerationStructureMotionInfoNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends AccelerationStructureCreateInfoKHR e => b
f
    | Bool
otherwise = Maybe b
forall a. Maybe a
Nothing

instance (Extendss AccelerationStructureCreateInfoKHR es, PokeChain es) => ToCStruct (AccelerationStructureCreateInfoKHR es) where
  withCStruct :: AccelerationStructureCreateInfoKHR es
-> (Ptr (AccelerationStructureCreateInfoKHR es) -> IO b) -> IO b
withCStruct AccelerationStructureCreateInfoKHR es
x Ptr (AccelerationStructureCreateInfoKHR es) -> IO b
f = Int
-> (Ptr (AccelerationStructureCreateInfoKHR es) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
64 ((Ptr (AccelerationStructureCreateInfoKHR es) -> IO b) -> IO b)
-> (Ptr (AccelerationStructureCreateInfoKHR es) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (AccelerationStructureCreateInfoKHR es)
p -> Ptr (AccelerationStructureCreateInfoKHR es)
-> AccelerationStructureCreateInfoKHR es -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (AccelerationStructureCreateInfoKHR es)
p AccelerationStructureCreateInfoKHR es
x (Ptr (AccelerationStructureCreateInfoKHR es) -> IO b
f Ptr (AccelerationStructureCreateInfoKHR es)
p)
  pokeCStruct :: Ptr (AccelerationStructureCreateInfoKHR es)
-> AccelerationStructureCreateInfoKHR es -> IO b -> IO b
pokeCStruct Ptr (AccelerationStructureCreateInfoKHR es)
p AccelerationStructureCreateInfoKHR{"dataSize" ::: Word64
Chain es
Buffer
AccelerationStructureTypeKHR
AccelerationStructureCreateFlagsKHR
deviceAddress :: "dataSize" ::: Word64
type' :: AccelerationStructureTypeKHR
size :: "dataSize" ::: Word64
offset :: "dataSize" ::: Word64
buffer :: Buffer
createFlags :: AccelerationStructureCreateFlagsKHR
next :: Chain es
$sel:deviceAddress:AccelerationStructureCreateInfoKHR :: forall (es :: [*]).
AccelerationStructureCreateInfoKHR es -> "dataSize" ::: Word64
$sel:type':AccelerationStructureCreateInfoKHR :: forall (es :: [*]).
AccelerationStructureCreateInfoKHR es
-> AccelerationStructureTypeKHR
$sel:size:AccelerationStructureCreateInfoKHR :: forall (es :: [*]).
AccelerationStructureCreateInfoKHR es -> "dataSize" ::: Word64
$sel:offset:AccelerationStructureCreateInfoKHR :: forall (es :: [*]).
AccelerationStructureCreateInfoKHR es -> "dataSize" ::: Word64
$sel:buffer:AccelerationStructureCreateInfoKHR :: forall (es :: [*]). AccelerationStructureCreateInfoKHR es -> Buffer
$sel:createFlags:AccelerationStructureCreateInfoKHR :: forall (es :: [*]).
AccelerationStructureCreateInfoKHR es
-> AccelerationStructureCreateFlagsKHR
$sel:next:AccelerationStructureCreateInfoKHR :: forall (es :: [*]).
AccelerationStructureCreateInfoKHR es -> Chain es
..} 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 (AccelerationStructureCreateInfoKHR es)
p Ptr (AccelerationStructureCreateInfoKHR es)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_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 (AccelerationStructureCreateInfoKHR es)
p Ptr (AccelerationStructureCreateInfoKHR es)
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
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 AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (AccelerationStructureCreateInfoKHR es)
p Ptr (AccelerationStructureCreateInfoKHR es)
-> Int -> Ptr AccelerationStructureCreateFlagsKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr AccelerationStructureCreateFlagsKHR)) (AccelerationStructureCreateFlagsKHR
createFlags)
    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 Buffer -> Buffer -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (AccelerationStructureCreateInfoKHR es)
p Ptr (AccelerationStructureCreateInfoKHR es) -> Int -> Ptr Buffer
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Buffer)) (Buffer
buffer)
    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
$ ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (AccelerationStructureCreateInfoKHR es)
p Ptr (AccelerationStructureCreateInfoKHR es)
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr DeviceSize)) ("dataSize" ::: Word64
offset)
    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
$ ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (AccelerationStructureCreateInfoKHR es)
p Ptr (AccelerationStructureCreateInfoKHR es)
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr DeviceSize)) ("dataSize" ::: Word64
size)
    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 AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (AccelerationStructureCreateInfoKHR es)
p Ptr (AccelerationStructureCreateInfoKHR es)
-> Int -> Ptr AccelerationStructureTypeKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr AccelerationStructureTypeKHR)) (AccelerationStructureTypeKHR
type')
    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
$ ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (AccelerationStructureCreateInfoKHR es)
p Ptr (AccelerationStructureCreateInfoKHR es)
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr DeviceAddress)) ("dataSize" ::: Word64
deviceAddress)
    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 = Int
64
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr (AccelerationStructureCreateInfoKHR es) -> IO b -> IO b
pokeZeroCStruct Ptr (AccelerationStructureCreateInfoKHR es)
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (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 (AccelerationStructureCreateInfoKHR es)
p Ptr (AccelerationStructureCreateInfoKHR es)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_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 (AccelerationStructureCreateInfoKHR es)
p Ptr (AccelerationStructureCreateInfoKHR es)
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
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 Buffer -> Buffer -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (AccelerationStructureCreateInfoKHR es)
p Ptr (AccelerationStructureCreateInfoKHR es) -> Int -> Ptr Buffer
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Buffer)) (Buffer
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
$ ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (AccelerationStructureCreateInfoKHR es)
p Ptr (AccelerationStructureCreateInfoKHR es)
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr DeviceSize)) ("dataSize" ::: Word64
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
$ ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (AccelerationStructureCreateInfoKHR es)
p Ptr (AccelerationStructureCreateInfoKHR es)
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr DeviceSize)) ("dataSize" ::: Word64
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 AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (AccelerationStructureCreateInfoKHR es)
p Ptr (AccelerationStructureCreateInfoKHR es)
-> Int -> Ptr AccelerationStructureTypeKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr AccelerationStructureTypeKHR)) (AccelerationStructureTypeKHR
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 AccelerationStructureCreateInfoKHR es, PeekChain es) => FromCStruct (AccelerationStructureCreateInfoKHR es) where
  peekCStruct :: Ptr (AccelerationStructureCreateInfoKHR es)
-> IO (AccelerationStructureCreateInfoKHR es)
peekCStruct Ptr (AccelerationStructureCreateInfoKHR es)
p = do
    "data" ::: Ptr ()
pNext <- Ptr ("data" ::: Ptr ()) -> IO ("data" ::: Ptr ())
forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr (AccelerationStructureCreateInfoKHR es)
p Ptr (AccelerationStructureCreateInfoKHR es)
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
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)
    AccelerationStructureCreateFlagsKHR
createFlags <- Ptr AccelerationStructureCreateFlagsKHR
-> IO AccelerationStructureCreateFlagsKHR
forall a. Storable a => Ptr a -> IO a
peek @AccelerationStructureCreateFlagsKHR ((Ptr (AccelerationStructureCreateInfoKHR es)
p Ptr (AccelerationStructureCreateInfoKHR es)
-> Int -> Ptr AccelerationStructureCreateFlagsKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr AccelerationStructureCreateFlagsKHR))
    Buffer
buffer <- Ptr Buffer -> IO Buffer
forall a. Storable a => Ptr a -> IO a
peek @Buffer ((Ptr (AccelerationStructureCreateInfoKHR es)
p Ptr (AccelerationStructureCreateInfoKHR es) -> Int -> Ptr Buffer
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Buffer))
    "dataSize" ::: Word64
offset <- ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> IO ("dataSize" ::: Word64)
forall a. Storable a => Ptr a -> IO a
peek @DeviceSize ((Ptr (AccelerationStructureCreateInfoKHR es)
p Ptr (AccelerationStructureCreateInfoKHR es)
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr DeviceSize))
    "dataSize" ::: Word64
size <- ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> IO ("dataSize" ::: Word64)
forall a. Storable a => Ptr a -> IO a
peek @DeviceSize ((Ptr (AccelerationStructureCreateInfoKHR es)
p Ptr (AccelerationStructureCreateInfoKHR es)
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr DeviceSize))
    AccelerationStructureTypeKHR
type' <- Ptr AccelerationStructureTypeKHR -> IO AccelerationStructureTypeKHR
forall a. Storable a => Ptr a -> IO a
peek @AccelerationStructureTypeKHR ((Ptr (AccelerationStructureCreateInfoKHR es)
p Ptr (AccelerationStructureCreateInfoKHR es)
-> Int -> Ptr AccelerationStructureTypeKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr AccelerationStructureTypeKHR))
    "dataSize" ::: Word64
deviceAddress <- ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> IO ("dataSize" ::: Word64)
forall a. Storable a => Ptr a -> IO a
peek @DeviceAddress ((Ptr (AccelerationStructureCreateInfoKHR es)
p Ptr (AccelerationStructureCreateInfoKHR es)
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr DeviceAddress))
    AccelerationStructureCreateInfoKHR es
-> IO (AccelerationStructureCreateInfoKHR es)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (AccelerationStructureCreateInfoKHR es
 -> IO (AccelerationStructureCreateInfoKHR es))
-> AccelerationStructureCreateInfoKHR es
-> IO (AccelerationStructureCreateInfoKHR es)
forall a b. (a -> b) -> a -> b
$ Chain es
-> AccelerationStructureCreateFlagsKHR
-> Buffer
-> ("dataSize" ::: Word64)
-> ("dataSize" ::: Word64)
-> AccelerationStructureTypeKHR
-> ("dataSize" ::: Word64)
-> AccelerationStructureCreateInfoKHR es
forall (es :: [*]).
Chain es
-> AccelerationStructureCreateFlagsKHR
-> Buffer
-> ("dataSize" ::: Word64)
-> ("dataSize" ::: Word64)
-> AccelerationStructureTypeKHR
-> ("dataSize" ::: Word64)
-> AccelerationStructureCreateInfoKHR es
AccelerationStructureCreateInfoKHR
             Chain es
next AccelerationStructureCreateFlagsKHR
createFlags Buffer
buffer "dataSize" ::: Word64
offset "dataSize" ::: Word64
size AccelerationStructureTypeKHR
type' "dataSize" ::: Word64
deviceAddress

instance es ~ '[] => Zero (AccelerationStructureCreateInfoKHR es) where
  zero :: AccelerationStructureCreateInfoKHR es
zero = Chain es
-> AccelerationStructureCreateFlagsKHR
-> Buffer
-> ("dataSize" ::: Word64)
-> ("dataSize" ::: Word64)
-> AccelerationStructureTypeKHR
-> ("dataSize" ::: Word64)
-> AccelerationStructureCreateInfoKHR es
forall (es :: [*]).
Chain es
-> AccelerationStructureCreateFlagsKHR
-> Buffer
-> ("dataSize" ::: Word64)
-> ("dataSize" ::: Word64)
-> AccelerationStructureTypeKHR
-> ("dataSize" ::: Word64)
-> AccelerationStructureCreateInfoKHR es
AccelerationStructureCreateInfoKHR
           ()
           AccelerationStructureCreateFlagsKHR
forall a. Zero a => a
zero
           Buffer
forall a. Zero a => a
zero
           "dataSize" ::: Word64
forall a. Zero a => a
zero
           "dataSize" ::: Word64
forall a. Zero a => a
zero
           AccelerationStructureTypeKHR
forall a. Zero a => a
zero
           "dataSize" ::: Word64
forall a. Zero a => a
zero


-- | VkAabbPositionsKHR - Structure specifying two opposing corners of an
-- axis-aligned bounding box
--
-- == Valid Usage
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_ray_tracing VK_NV_ray_tracing>
data AabbPositionsKHR = AabbPositionsKHR
  { -- | @minX@ is the x position of one opposing corner of a bounding box.
    --
    -- #VUID-VkAabbPositionsKHR-minX-03546# @minX@ /must/ be less than or equal
    -- to @maxX@
    AabbPositionsKHR -> Float
minX :: Float
  , -- | @minY@ is the y position of one opposing corner of a bounding box.
    --
    -- #VUID-VkAabbPositionsKHR-minY-03547# @minY@ /must/ be less than or equal
    -- to @maxY@
    AabbPositionsKHR -> Float
minY :: Float
  , -- | @minZ@ is the z position of one opposing corner of a bounding box.
    --
    -- #VUID-VkAabbPositionsKHR-minZ-03548# @minZ@ /must/ be less than or equal
    -- to @maxZ@
    AabbPositionsKHR -> Float
minZ :: Float
  , -- | @maxX@ is the x position of the other opposing corner of a bounding box.
    AabbPositionsKHR -> Float
maxX :: Float
  , -- | @maxY@ is the y position of the other opposing corner of a bounding box.
    AabbPositionsKHR -> Float
maxY :: Float
  , -- | @maxZ@ is the z position of the other opposing corner of a bounding box.
    AabbPositionsKHR -> Float
maxZ :: Float
  }
  deriving (Typeable, AabbPositionsKHR -> AabbPositionsKHR -> Bool
(AabbPositionsKHR -> AabbPositionsKHR -> Bool)
-> (AabbPositionsKHR -> AabbPositionsKHR -> Bool)
-> Eq AabbPositionsKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AabbPositionsKHR -> AabbPositionsKHR -> Bool
$c/= :: AabbPositionsKHR -> AabbPositionsKHR -> Bool
== :: AabbPositionsKHR -> AabbPositionsKHR -> Bool
$c== :: AabbPositionsKHR -> AabbPositionsKHR -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (AabbPositionsKHR)
#endif
deriving instance Show AabbPositionsKHR

instance ToCStruct AabbPositionsKHR where
  withCStruct :: AabbPositionsKHR -> (Ptr AabbPositionsKHR -> IO b) -> IO b
withCStruct AabbPositionsKHR
x Ptr AabbPositionsKHR -> IO b
f = Int -> (Ptr AabbPositionsKHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr AabbPositionsKHR -> IO b) -> IO b)
-> (Ptr AabbPositionsKHR -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr AabbPositionsKHR
p -> Ptr AabbPositionsKHR -> AabbPositionsKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr AabbPositionsKHR
p AabbPositionsKHR
x (Ptr AabbPositionsKHR -> IO b
f Ptr AabbPositionsKHR
p)
  pokeCStruct :: Ptr AabbPositionsKHR -> AabbPositionsKHR -> IO b -> IO b
pokeCStruct Ptr AabbPositionsKHR
p AabbPositionsKHR{Float
maxZ :: Float
maxY :: Float
maxX :: Float
minZ :: Float
minY :: Float
minX :: Float
$sel:maxZ:AabbPositionsKHR :: AabbPositionsKHR -> Float
$sel:maxY:AabbPositionsKHR :: AabbPositionsKHR -> Float
$sel:maxX:AabbPositionsKHR :: AabbPositionsKHR -> Float
$sel:minZ:AabbPositionsKHR :: AabbPositionsKHR -> Float
$sel:minY:AabbPositionsKHR :: AabbPositionsKHR -> Float
$sel:minX:AabbPositionsKHR :: AabbPositionsKHR -> Float
..} IO b
f = do
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AabbPositionsKHR
p Ptr AabbPositionsKHR -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
minX))
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AabbPositionsKHR
p Ptr AabbPositionsKHR -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
minY))
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AabbPositionsKHR
p Ptr AabbPositionsKHR -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
minZ))
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AabbPositionsKHR
p Ptr AabbPositionsKHR -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
maxX))
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AabbPositionsKHR
p Ptr AabbPositionsKHR -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
maxY))
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AabbPositionsKHR
p Ptr AabbPositionsKHR -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
maxZ))
    IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
4
  pokeZeroCStruct :: Ptr AabbPositionsKHR -> IO b -> IO b
pokeZeroCStruct Ptr AabbPositionsKHR
p IO b
f = do
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AabbPositionsKHR
p Ptr AabbPositionsKHR -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
forall a. Zero a => a
zero))
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AabbPositionsKHR
p Ptr AabbPositionsKHR -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
forall a. Zero a => a
zero))
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AabbPositionsKHR
p Ptr AabbPositionsKHR -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
forall a. Zero a => a
zero))
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AabbPositionsKHR
p Ptr AabbPositionsKHR -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
forall a. Zero a => a
zero))
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AabbPositionsKHR
p Ptr AabbPositionsKHR -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
forall a. Zero a => a
zero))
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AabbPositionsKHR
p Ptr AabbPositionsKHR -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
forall a. Zero a => a
zero))
    IO b
f

instance FromCStruct AabbPositionsKHR where
  peekCStruct :: Ptr AabbPositionsKHR -> IO AabbPositionsKHR
peekCStruct Ptr AabbPositionsKHR
p = do
    CFloat
minX <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr AabbPositionsKHR
p Ptr AabbPositionsKHR -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr CFloat))
    CFloat
minY <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr AabbPositionsKHR
p Ptr AabbPositionsKHR -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr CFloat))
    CFloat
minZ <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr AabbPositionsKHR
p Ptr AabbPositionsKHR -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr CFloat))
    CFloat
maxX <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr AabbPositionsKHR
p Ptr AabbPositionsKHR -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr CFloat))
    CFloat
maxY <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr AabbPositionsKHR
p Ptr AabbPositionsKHR -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr CFloat))
    CFloat
maxZ <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr AabbPositionsKHR
p Ptr AabbPositionsKHR -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr CFloat))
    AabbPositionsKHR -> IO AabbPositionsKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (AabbPositionsKHR -> IO AabbPositionsKHR)
-> AabbPositionsKHR -> IO AabbPositionsKHR
forall a b. (a -> b) -> a -> b
$ Float
-> Float -> Float -> Float -> Float -> Float -> AabbPositionsKHR
AabbPositionsKHR
             (CFloat -> Float
coerce @CFloat @Float CFloat
minX) (CFloat -> Float
coerce @CFloat @Float CFloat
minY) (CFloat -> Float
coerce @CFloat @Float CFloat
minZ) (CFloat -> Float
coerce @CFloat @Float CFloat
maxX) (CFloat -> Float
coerce @CFloat @Float CFloat
maxY) (CFloat -> Float
coerce @CFloat @Float CFloat
maxZ)

instance Storable AabbPositionsKHR where
  sizeOf :: AabbPositionsKHR -> Int
sizeOf ~AabbPositionsKHR
_ = Int
24
  alignment :: AabbPositionsKHR -> Int
alignment ~AabbPositionsKHR
_ = Int
4
  peek :: Ptr AabbPositionsKHR -> IO AabbPositionsKHR
peek = Ptr AabbPositionsKHR -> IO AabbPositionsKHR
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr AabbPositionsKHR -> AabbPositionsKHR -> IO ()
poke Ptr AabbPositionsKHR
ptr AabbPositionsKHR
poked = Ptr AabbPositionsKHR -> AabbPositionsKHR -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr AabbPositionsKHR
ptr AabbPositionsKHR
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero AabbPositionsKHR where
  zero :: AabbPositionsKHR
zero = Float
-> Float -> Float -> Float -> Float -> Float -> AabbPositionsKHR
AabbPositionsKHR
           Float
forall a. Zero a => a
zero
           Float
forall a. Zero a => a
zero
           Float
forall a. Zero a => a
zero
           Float
forall a. Zero a => a
zero
           Float
forall a. Zero a => a
zero
           Float
forall a. Zero a => a
zero


-- | VkTransformMatrixKHR - Structure specifying a 3x4 affine transformation
-- matrix
--
-- == Valid Usage
--
-- -   #VUID-VkTransformMatrixKHR-matrix-03799# The first three columns of
--     @matrix@ /must/ define an invertible 3x3 matrix
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_ray_tracing VK_NV_ray_tracing>,
-- 'AccelerationStructureInstanceKHR',
-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMatrixMotionInstanceNV'
data TransformMatrixKHR = TransformMatrixKHR
  { -- No documentation found for Nested "VkTransformMatrixKHR" "matrixRow0"
    TransformMatrixKHR -> (Float, Float, Float, Float)
matrixRow0 :: (Float, Float, Float, Float)
  , -- No documentation found for Nested "VkTransformMatrixKHR" "matrixRow1"
    TransformMatrixKHR -> (Float, Float, Float, Float)
matrixRow1 :: (Float, Float, Float, Float)
  , -- No documentation found for Nested "VkTransformMatrixKHR" "matrixRow2"
    TransformMatrixKHR -> (Float, Float, Float, Float)
matrixRow2 :: (Float, Float, Float, Float)
  }
  deriving (Typeable, TransformMatrixKHR -> TransformMatrixKHR -> Bool
(TransformMatrixKHR -> TransformMatrixKHR -> Bool)
-> (TransformMatrixKHR -> TransformMatrixKHR -> Bool)
-> Eq TransformMatrixKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TransformMatrixKHR -> TransformMatrixKHR -> Bool
$c/= :: TransformMatrixKHR -> TransformMatrixKHR -> Bool
== :: TransformMatrixKHR -> TransformMatrixKHR -> Bool
$c== :: TransformMatrixKHR -> TransformMatrixKHR -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (TransformMatrixKHR)
#endif
deriving instance Show TransformMatrixKHR

instance ToCStruct TransformMatrixKHR where
  withCStruct :: TransformMatrixKHR -> (Ptr TransformMatrixKHR -> IO b) -> IO b
withCStruct TransformMatrixKHR
x Ptr TransformMatrixKHR -> IO b
f = Int -> (Ptr TransformMatrixKHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
48 ((Ptr TransformMatrixKHR -> IO b) -> IO b)
-> (Ptr TransformMatrixKHR -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr TransformMatrixKHR
p -> Ptr TransformMatrixKHR -> TransformMatrixKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr TransformMatrixKHR
p TransformMatrixKHR
x (Ptr TransformMatrixKHR -> IO b
f Ptr TransformMatrixKHR
p)
  pokeCStruct :: Ptr TransformMatrixKHR -> TransformMatrixKHR -> IO b -> IO b
pokeCStruct Ptr TransformMatrixKHR
p TransformMatrixKHR{(Float, Float, Float, Float)
matrixRow2 :: (Float, Float, Float, Float)
matrixRow1 :: (Float, Float, Float, Float)
matrixRow0 :: (Float, Float, Float, Float)
$sel:matrixRow2:TransformMatrixKHR :: TransformMatrixKHR -> (Float, Float, Float, Float)
$sel:matrixRow1:TransformMatrixKHR :: TransformMatrixKHR -> (Float, Float, Float, Float)
$sel:matrixRow0:TransformMatrixKHR :: TransformMatrixKHR -> (Float, Float, Float, Float)
..} IO b
f = do
    let pMatrixRow0' :: Ptr CFloat
pMatrixRow0' = Ptr (FixedArray 4 CFloat) -> Ptr CFloat
forall a (n :: Nat). Ptr (FixedArray n a) -> Ptr a
lowerArrayPtr ((Ptr TransformMatrixKHR
p Ptr TransformMatrixKHR -> Int -> Ptr (FixedArray 4 CFloat)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr (FixedArray 4 CFloat)))
    case ((Float, Float, Float, Float)
matrixRow0) of
      (Float
e0, Float
e1, Float
e2, Float
e3) -> do
        Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CFloat
pMatrixRow0' :: Ptr CFloat) (Float -> CFloat
CFloat (Float
e0))
        Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CFloat
pMatrixRow0' Ptr CFloat -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr CFloat) (Float -> CFloat
CFloat (Float
e1))
        Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CFloat
pMatrixRow0' Ptr CFloat -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr CFloat) (Float -> CFloat
CFloat (Float
e2))
        Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CFloat
pMatrixRow0' Ptr CFloat -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr CFloat) (Float -> CFloat
CFloat (Float
e3))
    let pMatrixRow1' :: Ptr CFloat
pMatrixRow1' = Ptr (FixedArray 4 CFloat) -> Ptr CFloat
forall a (n :: Nat). Ptr (FixedArray n a) -> Ptr a
lowerArrayPtr ((Ptr TransformMatrixKHR
p Ptr TransformMatrixKHR -> Int -> Ptr (FixedArray 4 CFloat)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (FixedArray 4 CFloat)))
    case ((Float, Float, Float, Float)
matrixRow1) of
      (Float
e0, Float
e1, Float
e2, Float
e3) -> do
        Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CFloat
pMatrixRow1' :: Ptr CFloat) (Float -> CFloat
CFloat (Float
e0))
        Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CFloat
pMatrixRow1' Ptr CFloat -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr CFloat) (Float -> CFloat
CFloat (Float
e1))
        Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CFloat
pMatrixRow1' Ptr CFloat -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr CFloat) (Float -> CFloat
CFloat (Float
e2))
        Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CFloat
pMatrixRow1' Ptr CFloat -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr CFloat) (Float -> CFloat
CFloat (Float
e3))
    let pMatrixRow2' :: Ptr CFloat
pMatrixRow2' = Ptr (FixedArray 4 CFloat) -> Ptr CFloat
forall a (n :: Nat). Ptr (FixedArray n a) -> Ptr a
lowerArrayPtr ((Ptr TransformMatrixKHR
p Ptr TransformMatrixKHR -> Int -> Ptr (FixedArray 4 CFloat)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr (FixedArray 4 CFloat)))
    case ((Float, Float, Float, Float)
matrixRow2) of
      (Float
e0, Float
e1, Float
e2, Float
e3) -> do
        Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CFloat
pMatrixRow2' :: Ptr CFloat) (Float -> CFloat
CFloat (Float
e0))
        Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CFloat
pMatrixRow2' Ptr CFloat -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr CFloat) (Float -> CFloat
CFloat (Float
e1))
        Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CFloat
pMatrixRow2' Ptr CFloat -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr CFloat) (Float -> CFloat
CFloat (Float
e2))
        Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CFloat
pMatrixRow2' Ptr CFloat -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr CFloat) (Float -> CFloat
CFloat (Float
e3))
    IO b
f
  cStructSize :: Int
cStructSize = Int
48
  cStructAlignment :: Int
cStructAlignment = Int
4
  pokeZeroCStruct :: Ptr TransformMatrixKHR -> IO b -> IO b
pokeZeroCStruct Ptr TransformMatrixKHR
p IO b
f = do
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr TransformMatrixKHR
p Ptr TransformMatrixKHR -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0) (Float -> CFloat
CFloat Float
1)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr TransformMatrixKHR
p Ptr TransformMatrixKHR -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20) (Float -> CFloat
CFloat Float
1)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr TransformMatrixKHR
p Ptr TransformMatrixKHR -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40) (Float -> CFloat
CFloat Float
1)
    IO b
f

instance FromCStruct TransformMatrixKHR where
  peekCStruct :: Ptr TransformMatrixKHR -> IO TransformMatrixKHR
peekCStruct Ptr TransformMatrixKHR
p = do
    let pmatrixRow0 :: Ptr CFloat
pmatrixRow0 = Ptr (FixedArray 4 CFloat) -> Ptr CFloat
forall a (n :: Nat). Ptr (FixedArray n a) -> Ptr a
lowerArrayPtr @CFloat ((Ptr TransformMatrixKHR
p Ptr TransformMatrixKHR -> Int -> Ptr (FixedArray 4 CFloat)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr (FixedArray 4 CFloat)))
    CFloat
matrixRow00 <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr CFloat
pmatrixRow0 Ptr CFloat -> Int -> Ptr CFloat
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` Int
0 :: Ptr CFloat))
    CFloat
matrixRow01 <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr CFloat
pmatrixRow0 Ptr CFloat -> Int -> Ptr CFloat
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` Int
4 :: Ptr CFloat))
    CFloat
matrixRow02 <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr CFloat
pmatrixRow0 Ptr CFloat -> Int -> Ptr CFloat
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` Int
8 :: Ptr CFloat))
    CFloat
matrixRow03 <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr CFloat
pmatrixRow0 Ptr CFloat -> Int -> Ptr CFloat
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` Int
12 :: Ptr CFloat))
    let pmatrixRow1 :: Ptr CFloat
pmatrixRow1 = Ptr (FixedArray 4 CFloat) -> Ptr CFloat
forall a (n :: Nat). Ptr (FixedArray n a) -> Ptr a
lowerArrayPtr @CFloat ((Ptr TransformMatrixKHR
p Ptr TransformMatrixKHR -> Int -> Ptr (FixedArray 4 CFloat)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (FixedArray 4 CFloat)))
    CFloat
matrixRow10 <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr CFloat
pmatrixRow1 Ptr CFloat -> Int -> Ptr CFloat
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` Int
0 :: Ptr CFloat))
    CFloat
matrixRow11 <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr CFloat
pmatrixRow1 Ptr CFloat -> Int -> Ptr CFloat
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` Int
4 :: Ptr CFloat))
    CFloat
matrixRow12 <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr CFloat
pmatrixRow1 Ptr CFloat -> Int -> Ptr CFloat
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` Int
8 :: Ptr CFloat))
    CFloat
matrixRow13 <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr CFloat
pmatrixRow1 Ptr CFloat -> Int -> Ptr CFloat
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` Int
12 :: Ptr CFloat))
    let pmatrixRow2 :: Ptr CFloat
pmatrixRow2 = Ptr (FixedArray 4 CFloat) -> Ptr CFloat
forall a (n :: Nat). Ptr (FixedArray n a) -> Ptr a
lowerArrayPtr @CFloat ((Ptr TransformMatrixKHR
p Ptr TransformMatrixKHR -> Int -> Ptr (FixedArray 4 CFloat)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr (FixedArray 4 CFloat)))
    CFloat
matrixRow20 <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr CFloat
pmatrixRow2 Ptr CFloat -> Int -> Ptr CFloat
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` Int
0 :: Ptr CFloat))
    CFloat
matrixRow21 <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr CFloat
pmatrixRow2 Ptr CFloat -> Int -> Ptr CFloat
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` Int
4 :: Ptr CFloat))
    CFloat
matrixRow22 <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr CFloat
pmatrixRow2 Ptr CFloat -> Int -> Ptr CFloat
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` Int
8 :: Ptr CFloat))
    CFloat
matrixRow23 <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr CFloat
pmatrixRow2 Ptr CFloat -> Int -> Ptr CFloat
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` Int
12 :: Ptr CFloat))
    TransformMatrixKHR -> IO TransformMatrixKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (TransformMatrixKHR -> IO TransformMatrixKHR)
-> TransformMatrixKHR -> IO TransformMatrixKHR
forall a b. (a -> b) -> a -> b
$ (Float, Float, Float, Float)
-> (Float, Float, Float, Float)
-> (Float, Float, Float, Float)
-> TransformMatrixKHR
TransformMatrixKHR
             (((CFloat -> Float
coerce @CFloat @Float CFloat
matrixRow00), (CFloat -> Float
coerce @CFloat @Float CFloat
matrixRow01), (CFloat -> Float
coerce @CFloat @Float CFloat
matrixRow02), (CFloat -> Float
coerce @CFloat @Float CFloat
matrixRow03))) (((CFloat -> Float
coerce @CFloat @Float CFloat
matrixRow10), (CFloat -> Float
coerce @CFloat @Float CFloat
matrixRow11), (CFloat -> Float
coerce @CFloat @Float CFloat
matrixRow12), (CFloat -> Float
coerce @CFloat @Float CFloat
matrixRow13))) (((CFloat -> Float
coerce @CFloat @Float CFloat
matrixRow20), (CFloat -> Float
coerce @CFloat @Float CFloat
matrixRow21), (CFloat -> Float
coerce @CFloat @Float CFloat
matrixRow22), (CFloat -> Float
coerce @CFloat @Float CFloat
matrixRow23)))

instance Storable TransformMatrixKHR where
  sizeOf :: TransformMatrixKHR -> Int
sizeOf ~TransformMatrixKHR
_ = Int
48
  alignment :: TransformMatrixKHR -> Int
alignment ~TransformMatrixKHR
_ = Int
4
  peek :: Ptr TransformMatrixKHR -> IO TransformMatrixKHR
peek = Ptr TransformMatrixKHR -> IO TransformMatrixKHR
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr TransformMatrixKHR -> TransformMatrixKHR -> IO ()
poke Ptr TransformMatrixKHR
ptr TransformMatrixKHR
poked = Ptr TransformMatrixKHR -> TransformMatrixKHR -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr TransformMatrixKHR
ptr TransformMatrixKHR
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero TransformMatrixKHR where
 zero :: TransformMatrixKHR
zero = (Float, Float, Float, Float)
-> (Float, Float, Float, Float)
-> (Float, Float, Float, Float)
-> TransformMatrixKHR
TransformMatrixKHR
          (Float
1,Float
0,Float
0,Float
0)
          (Float
0,Float
1,Float
0,Float
0)
          (Float
0,Float
0,Float
1,Float
0)


-- | VkAccelerationStructureInstanceKHR - Structure specifying a single
-- acceleration structure instance for building into an acceleration
-- structure geometry
--
-- = Description
--
-- The C language specification does not define the ordering of bit-fields,
-- but in practice, this struct produces the correct layout with existing
-- compilers. The intended bit pattern is for the following:
--
-- If a compiler produces code that diverges from that pattern,
-- applications /must/ employ another method to set values according to the
-- correct bit pattern.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_ray_tracing VK_NV_ray_tracing>,
-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInstanceDataNV',
-- 'GeometryInstanceFlagsKHR', 'TransformMatrixKHR'
data AccelerationStructureInstanceKHR = AccelerationStructureInstanceKHR
  { -- | @transform@ is a 'TransformMatrixKHR' structure describing a
    -- transformation to be applied to the acceleration structure.
    AccelerationStructureInstanceKHR -> TransformMatrixKHR
transform :: TransformMatrixKHR
  , -- | @instanceCustomIndex@ is a 24-bit user-specified index value accessible
    -- to ray shaders in the @InstanceCustomIndexKHR@ built-in.
    --
    -- @instanceCustomIndex@ and @mask@ occupy the same memory as if a single
    -- @uint32_t@ was specified in their place
    --
    -- -   @instanceCustomIndex@ occupies the 24 least significant bits of that
    --     memory
    --
    -- -   @mask@ occupies the 8 most significant bits of that memory
    AccelerationStructureInstanceKHR -> "firstQuery" ::: Word32
instanceCustomIndex :: Word32
  , -- | @mask@ is an 8-bit visibility mask for the geometry. The instance /may/
    -- only be hit if @Cull Mask & instance.mask != 0@
    AccelerationStructureInstanceKHR -> "firstQuery" ::: Word32
mask :: Word32
  , -- | @instanceShaderBindingTableRecordOffset@ is a 24-bit offset used in
    -- calculating the hit shader binding table index.
    --
    -- @instanceShaderBindingTableRecordOffset@ and @flags@ occupy the same
    -- memory as if a single @uint32_t@ was specified in their place
    --
    -- -   @instanceShaderBindingTableRecordOffset@ occupies the 24 least
    --     significant bits of that memory
    --
    -- -   @flags@ occupies the 8 most significant bits of that memory
    AccelerationStructureInstanceKHR -> "firstQuery" ::: Word32
instanceShaderBindingTableRecordOffset :: Word32
  , -- | @flags@ is an 8-bit mask of 'GeometryInstanceFlagBitsKHR' values to
    -- apply to this instance.
    --
    -- #VUID-VkAccelerationStructureInstanceKHR-flags-parameter# @flags@ /must/
    -- be a valid combination of 'GeometryInstanceFlagBitsKHR' values
    AccelerationStructureInstanceKHR -> GeometryInstanceFlagBitsKHR
flags :: GeometryInstanceFlagsKHR
  , -- | @accelerationStructureReference@ is either:
    --
    -- -   a device address containing the value obtained from
    --     'getAccelerationStructureDeviceAddressKHR' or
    --     'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV'
    --     (used by device operations which reference acceleration structures)
    --     or,
    --
    -- -   a 'Vulkan.Extensions.Handles.AccelerationStructureKHR' object (used
    --     by host operations which reference acceleration structures).
    AccelerationStructureInstanceKHR -> "dataSize" ::: Word64
accelerationStructureReference :: Word64
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (AccelerationStructureInstanceKHR)
#endif
deriving instance Show AccelerationStructureInstanceKHR

instance ToCStruct AccelerationStructureInstanceKHR where
  withCStruct :: AccelerationStructureInstanceKHR
-> (Ptr AccelerationStructureInstanceKHR -> IO b) -> IO b
withCStruct AccelerationStructureInstanceKHR
x Ptr AccelerationStructureInstanceKHR -> IO b
f = Int -> (Ptr AccelerationStructureInstanceKHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
64 ((Ptr AccelerationStructureInstanceKHR -> IO b) -> IO b)
-> (Ptr AccelerationStructureInstanceKHR -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr AccelerationStructureInstanceKHR
p -> Ptr AccelerationStructureInstanceKHR
-> AccelerationStructureInstanceKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr AccelerationStructureInstanceKHR
p AccelerationStructureInstanceKHR
x (Ptr AccelerationStructureInstanceKHR -> IO b
f Ptr AccelerationStructureInstanceKHR
p)
  pokeCStruct :: Ptr AccelerationStructureInstanceKHR
-> AccelerationStructureInstanceKHR -> IO b -> IO b
pokeCStruct Ptr AccelerationStructureInstanceKHR
p AccelerationStructureInstanceKHR{"firstQuery" ::: Word32
"dataSize" ::: Word64
GeometryInstanceFlagBitsKHR
TransformMatrixKHR
accelerationStructureReference :: "dataSize" ::: Word64
flags :: GeometryInstanceFlagBitsKHR
instanceShaderBindingTableRecordOffset :: "firstQuery" ::: Word32
mask :: "firstQuery" ::: Word32
instanceCustomIndex :: "firstQuery" ::: Word32
transform :: TransformMatrixKHR
$sel:accelerationStructureReference:AccelerationStructureInstanceKHR :: AccelerationStructureInstanceKHR -> "dataSize" ::: Word64
$sel:flags:AccelerationStructureInstanceKHR :: AccelerationStructureInstanceKHR -> GeometryInstanceFlagBitsKHR
$sel:instanceShaderBindingTableRecordOffset:AccelerationStructureInstanceKHR :: AccelerationStructureInstanceKHR -> "firstQuery" ::: Word32
$sel:mask:AccelerationStructureInstanceKHR :: AccelerationStructureInstanceKHR -> "firstQuery" ::: Word32
$sel:instanceCustomIndex:AccelerationStructureInstanceKHR :: AccelerationStructureInstanceKHR -> "firstQuery" ::: Word32
$sel:transform:AccelerationStructureInstanceKHR :: AccelerationStructureInstanceKHR -> TransformMatrixKHR
..} IO b
f = do
    Ptr TransformMatrixKHR -> TransformMatrixKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AccelerationStructureInstanceKHR
p Ptr AccelerationStructureInstanceKHR
-> Int -> Ptr TransformMatrixKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr TransformMatrixKHR)) (TransformMatrixKHR
transform)
    ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AccelerationStructureInstanceKHR
p Ptr AccelerationStructureInstanceKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32)) (((("firstQuery" ::: Word32) -> "firstQuery" ::: Word32
coerce @_ @Word32 ("firstQuery" ::: Word32
mask)) ("firstQuery" ::: Word32) -> Int -> "firstQuery" ::: Word32
forall a. Bits a => a -> Int -> a
`shiftL` Int
24) ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32) -> "firstQuery" ::: Word32
forall a. Bits a => a -> a -> a
.|. ("firstQuery" ::: Word32
instanceCustomIndex))
    ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> ("firstQuery" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AccelerationStructureInstanceKHR
p Ptr AccelerationStructureInstanceKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr Word32)) (((GeometryInstanceFlagBitsKHR -> "firstQuery" ::: Word32
coerce @_ @Word32 (GeometryInstanceFlagBitsKHR
flags)) ("firstQuery" ::: Word32) -> Int -> "firstQuery" ::: Word32
forall a. Bits a => a -> Int -> a
`shiftL` Int
24) ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32) -> "firstQuery" ::: Word32
forall a. Bits a => a -> a -> a
.|. ("firstQuery" ::: Word32
instanceShaderBindingTableRecordOffset))
    ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AccelerationStructureInstanceKHR
p Ptr AccelerationStructureInstanceKHR
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Word64)) ("dataSize" ::: Word64
accelerationStructureReference)
    IO b
f
  cStructSize :: Int
cStructSize = Int
64
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr AccelerationStructureInstanceKHR -> IO b -> IO b
pokeZeroCStruct Ptr AccelerationStructureInstanceKHR
p IO b
f = do
    Ptr TransformMatrixKHR -> TransformMatrixKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AccelerationStructureInstanceKHR
p Ptr AccelerationStructureInstanceKHR
-> Int -> Ptr TransformMatrixKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr TransformMatrixKHR)) (TransformMatrixKHR
forall a. Zero a => a
zero)
    ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr AccelerationStructureInstanceKHR
p Ptr AccelerationStructureInstanceKHR
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Word64)) ("dataSize" ::: Word64
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct AccelerationStructureInstanceKHR where
  peekCStruct :: Ptr AccelerationStructureInstanceKHR
-> IO AccelerationStructureInstanceKHR
peekCStruct Ptr AccelerationStructureInstanceKHR
p = do
    TransformMatrixKHR
transform <- Ptr TransformMatrixKHR -> IO TransformMatrixKHR
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @TransformMatrixKHR ((Ptr AccelerationStructureInstanceKHR
p Ptr AccelerationStructureInstanceKHR
-> Int -> Ptr TransformMatrixKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr TransformMatrixKHR))
    "firstQuery" ::: Word32
instanceCustomIndex <- ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> IO ("firstQuery" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr AccelerationStructureInstanceKHR
p Ptr AccelerationStructureInstanceKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32))
    let instanceCustomIndex' :: "firstQuery" ::: Word32
instanceCustomIndex' = (("firstQuery" ::: Word32
instanceCustomIndex ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32) -> "firstQuery" ::: Word32
forall a. Bits a => a -> a -> a
.&. ("firstQuery" ::: Word32) -> "firstQuery" ::: Word32
coerce @Word32 "firstQuery" ::: Word32
0xffffff))
    "firstQuery" ::: Word32
mask <- ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> IO ("firstQuery" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr AccelerationStructureInstanceKHR
p Ptr AccelerationStructureInstanceKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32))
    let mask' :: "firstQuery" ::: Word32
mask' = (((("firstQuery" ::: Word32
mask ("firstQuery" ::: Word32) -> Int -> "firstQuery" ::: Word32
forall a. Bits a => a -> Int -> a
`shiftR` Int
24)) ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32) -> "firstQuery" ::: Word32
forall a. Bits a => a -> a -> a
.&. ("firstQuery" ::: Word32) -> "firstQuery" ::: Word32
coerce @Word32 "firstQuery" ::: Word32
0xff))
    "firstQuery" ::: Word32
instanceShaderBindingTableRecordOffset <- ("pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32))
-> IO ("firstQuery" ::: Word32)
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr AccelerationStructureInstanceKHR
p Ptr AccelerationStructureInstanceKHR
-> Int -> "pIndirectStrides" ::: Ptr ("firstQuery" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr Word32))
    let instanceShaderBindingTableRecordOffset' :: "firstQuery" ::: Word32
instanceShaderBindingTableRecordOffset' = (("firstQuery" ::: Word32
instanceShaderBindingTableRecordOffset ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32) -> "firstQuery" ::: Word32
forall a. Bits a => a -> a -> a
.&. ("firstQuery" ::: Word32) -> "firstQuery" ::: Word32
coerce @Word32 "firstQuery" ::: Word32
0xffffff))
    GeometryInstanceFlagBitsKHR
flags <- Ptr GeometryInstanceFlagBitsKHR -> IO GeometryInstanceFlagBitsKHR
forall a. Storable a => Ptr a -> IO a
peek @GeometryInstanceFlagsKHR ((Ptr AccelerationStructureInstanceKHR
p Ptr AccelerationStructureInstanceKHR
-> Int -> Ptr GeometryInstanceFlagBitsKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr GeometryInstanceFlagsKHR))
    let flags' :: GeometryInstanceFlagBitsKHR
flags' = ((((GeometryInstanceFlagBitsKHR
flags GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
forall a. Bits a => a -> Int -> a
`shiftR` Int
24)) GeometryInstanceFlagBitsKHR
-> GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR
forall a. Bits a => a -> a -> a
.&. ("firstQuery" ::: Word32) -> GeometryInstanceFlagBitsKHR
coerce @Word32 "firstQuery" ::: Word32
0xff))
    "dataSize" ::: Word64
accelerationStructureReference <- ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> IO ("dataSize" ::: Word64)
forall a. Storable a => Ptr a -> IO a
peek @Word64 ((Ptr AccelerationStructureInstanceKHR
p Ptr AccelerationStructureInstanceKHR
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Word64))
    AccelerationStructureInstanceKHR
-> IO AccelerationStructureInstanceKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (AccelerationStructureInstanceKHR
 -> IO AccelerationStructureInstanceKHR)
-> AccelerationStructureInstanceKHR
-> IO AccelerationStructureInstanceKHR
forall a b. (a -> b) -> a -> b
$ TransformMatrixKHR
-> ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32)
-> GeometryInstanceFlagBitsKHR
-> ("dataSize" ::: Word64)
-> AccelerationStructureInstanceKHR
AccelerationStructureInstanceKHR
             TransformMatrixKHR
transform "firstQuery" ::: Word32
instanceCustomIndex' "firstQuery" ::: Word32
mask' "firstQuery" ::: Word32
instanceShaderBindingTableRecordOffset' GeometryInstanceFlagBitsKHR
flags' "dataSize" ::: Word64
accelerationStructureReference

instance Storable AccelerationStructureInstanceKHR where
  sizeOf :: AccelerationStructureInstanceKHR -> Int
sizeOf ~AccelerationStructureInstanceKHR
_ = Int
64
  alignment :: AccelerationStructureInstanceKHR -> Int
alignment ~AccelerationStructureInstanceKHR
_ = Int
8
  peek :: Ptr AccelerationStructureInstanceKHR
-> IO AccelerationStructureInstanceKHR
peek = Ptr AccelerationStructureInstanceKHR
-> IO AccelerationStructureInstanceKHR
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr AccelerationStructureInstanceKHR
-> AccelerationStructureInstanceKHR -> IO ()
poke Ptr AccelerationStructureInstanceKHR
ptr AccelerationStructureInstanceKHR
poked = Ptr AccelerationStructureInstanceKHR
-> AccelerationStructureInstanceKHR -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr AccelerationStructureInstanceKHR
ptr AccelerationStructureInstanceKHR
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero AccelerationStructureInstanceKHR where
  zero :: AccelerationStructureInstanceKHR
zero = TransformMatrixKHR
-> ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32)
-> ("firstQuery" ::: Word32)
-> GeometryInstanceFlagBitsKHR
-> ("dataSize" ::: Word64)
-> AccelerationStructureInstanceKHR
AccelerationStructureInstanceKHR
           TransformMatrixKHR
forall a. Zero a => a
zero
           "firstQuery" ::: Word32
forall a. Zero a => a
zero
           "firstQuery" ::: Word32
forall a. Zero a => a
zero
           "firstQuery" ::: Word32
forall a. Zero a => a
zero
           GeometryInstanceFlagBitsKHR
forall a. Zero a => a
zero
           "dataSize" ::: Word64
forall a. Zero a => a
zero


-- | VkAccelerationStructureDeviceAddressInfoKHR - Structure specifying the
-- acceleration structure to query an address for
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getAccelerationStructureDeviceAddressKHR'
data AccelerationStructureDeviceAddressInfoKHR = AccelerationStructureDeviceAddressInfoKHR
  { -- | @accelerationStructure@ specifies the acceleration structure whose
    -- address is being queried.
    --
    -- #VUID-VkAccelerationStructureDeviceAddressInfoKHR-accelerationStructure-parameter#
    -- @accelerationStructure@ /must/ be a valid
    -- 'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
    AccelerationStructureDeviceAddressInfoKHR
-> AccelerationStructureKHR
accelerationStructure :: AccelerationStructureKHR }
  deriving (Typeable, AccelerationStructureDeviceAddressInfoKHR
-> AccelerationStructureDeviceAddressInfoKHR -> Bool
(AccelerationStructureDeviceAddressInfoKHR
 -> AccelerationStructureDeviceAddressInfoKHR -> Bool)
-> (AccelerationStructureDeviceAddressInfoKHR
    -> AccelerationStructureDeviceAddressInfoKHR -> Bool)
-> Eq AccelerationStructureDeviceAddressInfoKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AccelerationStructureDeviceAddressInfoKHR
-> AccelerationStructureDeviceAddressInfoKHR -> Bool
$c/= :: AccelerationStructureDeviceAddressInfoKHR
-> AccelerationStructureDeviceAddressInfoKHR -> Bool
== :: AccelerationStructureDeviceAddressInfoKHR
-> AccelerationStructureDeviceAddressInfoKHR -> Bool
$c== :: AccelerationStructureDeviceAddressInfoKHR
-> AccelerationStructureDeviceAddressInfoKHR -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (AccelerationStructureDeviceAddressInfoKHR)
#endif
deriving instance Show AccelerationStructureDeviceAddressInfoKHR

instance ToCStruct AccelerationStructureDeviceAddressInfoKHR where
  withCStruct :: AccelerationStructureDeviceAddressInfoKHR
-> (("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
    -> IO b)
-> IO b
withCStruct AccelerationStructureDeviceAddressInfoKHR
x ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR) -> IO b
f = Int
-> (("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
  -> IO b)
 -> IO b)
-> (("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
    -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \"pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR
p -> ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
-> AccelerationStructureDeviceAddressInfoKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR
p AccelerationStructureDeviceAddressInfoKHR
x (("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR) -> IO b
f "pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR
p)
  pokeCStruct :: ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
-> AccelerationStructureDeviceAddressInfoKHR -> IO b -> IO b
pokeCStruct "pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR
p AccelerationStructureDeviceAddressInfoKHR{AccelerationStructureKHR
accelerationStructure :: AccelerationStructureKHR
$sel:accelerationStructure:AccelerationStructureDeviceAddressInfoKHR :: AccelerationStructureDeviceAddressInfoKHR
-> AccelerationStructureKHR
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR
p ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR)
    Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR
p ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> AccelerationStructureKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR
p ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
-> Int
-> "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr AccelerationStructureKHR)) (AccelerationStructureKHR
accelerationStructure)
    IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
-> IO b -> IO b
pokeZeroCStruct "pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR
p ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR)
    Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR
p ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> AccelerationStructureKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR
p ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
-> Int
-> "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr AccelerationStructureKHR)) (AccelerationStructureKHR
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct AccelerationStructureDeviceAddressInfoKHR where
  peekCStruct :: ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
-> IO AccelerationStructureDeviceAddressInfoKHR
peekCStruct "pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR
p = do
    AccelerationStructureKHR
accelerationStructure <- ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> IO AccelerationStructureKHR
forall a. Storable a => Ptr a -> IO a
peek @AccelerationStructureKHR (("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR
p ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
-> Int
-> "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr AccelerationStructureKHR))
    AccelerationStructureDeviceAddressInfoKHR
-> IO AccelerationStructureDeviceAddressInfoKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (AccelerationStructureDeviceAddressInfoKHR
 -> IO AccelerationStructureDeviceAddressInfoKHR)
-> AccelerationStructureDeviceAddressInfoKHR
-> IO AccelerationStructureDeviceAddressInfoKHR
forall a b. (a -> b) -> a -> b
$ AccelerationStructureKHR
-> AccelerationStructureDeviceAddressInfoKHR
AccelerationStructureDeviceAddressInfoKHR
             AccelerationStructureKHR
accelerationStructure

instance Storable AccelerationStructureDeviceAddressInfoKHR where
  sizeOf :: AccelerationStructureDeviceAddressInfoKHR -> Int
sizeOf ~AccelerationStructureDeviceAddressInfoKHR
_ = Int
24
  alignment :: AccelerationStructureDeviceAddressInfoKHR -> Int
alignment ~AccelerationStructureDeviceAddressInfoKHR
_ = Int
8
  peek :: ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
-> IO AccelerationStructureDeviceAddressInfoKHR
peek = ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
-> IO AccelerationStructureDeviceAddressInfoKHR
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
-> AccelerationStructureDeviceAddressInfoKHR -> IO ()
poke "pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR
ptr AccelerationStructureDeviceAddressInfoKHR
poked = ("pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR)
-> AccelerationStructureDeviceAddressInfoKHR -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pInfo" ::: Ptr AccelerationStructureDeviceAddressInfoKHR
ptr AccelerationStructureDeviceAddressInfoKHR
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero AccelerationStructureDeviceAddressInfoKHR where
  zero :: AccelerationStructureDeviceAddressInfoKHR
zero = AccelerationStructureKHR
-> AccelerationStructureDeviceAddressInfoKHR
AccelerationStructureDeviceAddressInfoKHR
           AccelerationStructureKHR
forall a. Zero a => a
zero


-- | VkAccelerationStructureVersionInfoKHR - Acceleration structure version
-- information
--
-- = Description
--
-- Note
--
-- @pVersionData@ is a /pointer/ to an array of
-- 2*'Vulkan.Core10.APIConstants.UUID_SIZE' @uint8_t@ values instead of two
-- 'Vulkan.Core10.APIConstants.UUID_SIZE' arrays as the expected use case
-- for this member is to be pointed at the header of an previously
-- serialized acceleration structure (via
-- 'cmdCopyAccelerationStructureToMemoryKHR' or
-- 'copyAccelerationStructureToMemoryKHR') that is loaded in memory. Using
-- arrays would necessitate extra memory copies of the UUIDs.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getDeviceAccelerationStructureCompatibilityKHR'
data AccelerationStructureVersionInfoKHR = AccelerationStructureVersionInfoKHR
  { -- | @pVersionData@ is a pointer to the version header of an acceleration
    -- structure as defined in 'cmdCopyAccelerationStructureToMemoryKHR'
    --
    -- #VUID-VkAccelerationStructureVersionInfoKHR-pVersionData-parameter#
    -- @pVersionData@ /must/ be a valid pointer to an array of
    -- \(2 \times \mathtt{VK\_UUID\_SIZE}\) @uint8_t@ values
    AccelerationStructureVersionInfoKHR -> ByteString
versionData :: ByteString }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (AccelerationStructureVersionInfoKHR)
#endif
deriving instance Show AccelerationStructureVersionInfoKHR

instance ToCStruct AccelerationStructureVersionInfoKHR where
  withCStruct :: AccelerationStructureVersionInfoKHR
-> (("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
    -> IO b)
-> IO b
withCStruct AccelerationStructureVersionInfoKHR
x ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
-> IO b
f = Int
-> (("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
  -> IO b)
 -> IO b)
-> (("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
    -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \"pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR
p -> ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
-> AccelerationStructureVersionInfoKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR
p AccelerationStructureVersionInfoKHR
x (("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
-> IO b
f "pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR
p)
  pokeCStruct :: ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
-> AccelerationStructureVersionInfoKHR -> IO b -> IO b
pokeCStruct "pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR
p AccelerationStructureVersionInfoKHR{ByteString
versionData :: ByteString
$sel:versionData:AccelerationStructureVersionInfoKHR :: AccelerationStructureVersionInfoKHR -> ByteString
..} 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 (("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR
p ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR)
    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 (("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR
p ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    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
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (ByteString -> Int
Data.ByteString.length (ByteString
versionData) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
2 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
forall a. Integral a => a
UUID_SIZE) (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 String
"" String
"AccelerationStructureVersionKHR::versionData must be 2*VK_UUID_SIZE bytes" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
    Ptr Word8
versionData' <- (Ptr CChar -> Ptr Word8)
-> ContT b IO (Ptr CChar) -> ContT b IO (Ptr Word8)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Ptr CChar -> Ptr Word8
forall a b. Ptr a -> Ptr b
castPtr @CChar @Word8) (ContT b IO (Ptr CChar) -> ContT b IO (Ptr Word8))
-> (((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar))
-> ((Ptr CChar -> IO b) -> IO b)
-> ContT b IO (Ptr Word8)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr Word8))
-> ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr Word8)
forall a b. (a -> b) -> a -> b
$ ByteString -> (Ptr CChar -> IO b) -> IO b
forall a. ByteString -> (Ptr CChar -> IO a) -> IO a
unsafeUseAsCString (ByteString
versionData)
    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 Word8) -> Ptr Word8 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR
p ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
-> Int -> Ptr (Ptr Word8)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr Word8))) Ptr Word8
versionData'
    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 = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
-> IO b -> IO b
pokeZeroCStruct "pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR
p ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR)
    Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR
p ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    IO b
f

instance FromCStruct AccelerationStructureVersionInfoKHR where
  peekCStruct :: ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
-> IO AccelerationStructureVersionInfoKHR
peekCStruct "pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR
p = do
    Ptr Word8
versionData <- Ptr (Ptr Word8) -> IO (Ptr Word8)
forall a. Storable a => Ptr a -> IO a
peek @(Ptr Word8) (("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR
p ("pVersionInfo" ::: Ptr AccelerationStructureVersionInfoKHR)
-> Int -> Ptr (Ptr Word8)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr Word8)))
    ByteString
versionData' <- CStringLen -> IO ByteString
packCStringLen (Ptr Word8 -> Ptr CChar
forall a b. Ptr a -> Ptr b
castPtr @Word8 @CChar Ptr Word8
versionData, Int
2 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
forall a. Integral a => a
UUID_SIZE)
    AccelerationStructureVersionInfoKHR
-> IO AccelerationStructureVersionInfoKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (AccelerationStructureVersionInfoKHR
 -> IO AccelerationStructureVersionInfoKHR)
-> AccelerationStructureVersionInfoKHR
-> IO AccelerationStructureVersionInfoKHR
forall a b. (a -> b) -> a -> b
$ ByteString -> AccelerationStructureVersionInfoKHR
AccelerationStructureVersionInfoKHR
             ByteString
versionData'

instance Zero AccelerationStructureVersionInfoKHR where
  zero :: AccelerationStructureVersionInfoKHR
zero = ByteString -> AccelerationStructureVersionInfoKHR
AccelerationStructureVersionInfoKHR
           ByteString
forall a. Monoid a => a
mempty


-- | VkCopyAccelerationStructureInfoKHR - Parameters for copying an
-- acceleration structure
--
-- == Valid Usage
--
-- -   #VUID-VkCopyAccelerationStructureInfoKHR-mode-03410# @mode@ /must/
--     be 'COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR' or
--     'COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR'
--
-- -   #VUID-VkCopyAccelerationStructureInfoKHR-src-04963# The source
--     acceleration structure @src@ /must/ have been constructed prior to
--     the execution of this command
--
-- -   #VUID-VkCopyAccelerationStructureInfoKHR-src-03411# If @mode@ is
--     'COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR', @src@ /must/ have
--     been constructed with
--     'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' in the build
--
-- -   #VUID-VkCopyAccelerationStructureInfoKHR-buffer-03718# The @buffer@
--     used to create @src@ /must/ be bound to device memory
--
-- -   #VUID-VkCopyAccelerationStructureInfoKHR-buffer-03719# The @buffer@
--     used to create @dst@ /must/ be bound to device memory
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkCopyAccelerationStructureInfoKHR-sType-sType# @sType@ /must/
--     be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR'
--
-- -   #VUID-VkCopyAccelerationStructureInfoKHR-pNext-pNext# @pNext@ /must/
--     be @NULL@
--
-- -   #VUID-VkCopyAccelerationStructureInfoKHR-src-parameter# @src@ /must/
--     be a valid 'Vulkan.Extensions.Handles.AccelerationStructureKHR'
--     handle
--
-- -   #VUID-VkCopyAccelerationStructureInfoKHR-dst-parameter# @dst@ /must/
--     be a valid 'Vulkan.Extensions.Handles.AccelerationStructureKHR'
--     handle
--
-- -   #VUID-VkCopyAccelerationStructureInfoKHR-mode-parameter# @mode@
--     /must/ be a valid 'CopyAccelerationStructureModeKHR' value
--
-- -   #VUID-VkCopyAccelerationStructureInfoKHR-commonparent# Both of
--     @dst@, and @src@ /must/ have been created, allocated, or retrieved
--     from the same 'Vulkan.Core10.Handles.Device'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
-- 'CopyAccelerationStructureModeKHR',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'cmdCopyAccelerationStructureKHR', 'copyAccelerationStructureKHR'
data CopyAccelerationStructureInfoKHR = CopyAccelerationStructureInfoKHR
  { -- | @src@ is the source acceleration structure for the copy.
    CopyAccelerationStructureInfoKHR -> AccelerationStructureKHR
src :: AccelerationStructureKHR
  , -- | @dst@ is the target acceleration structure for the copy.
    CopyAccelerationStructureInfoKHR -> AccelerationStructureKHR
dst :: AccelerationStructureKHR
  , -- | @mode@ is a 'CopyAccelerationStructureModeKHR' value specifying
    -- additional operations to perform during the copy.
    CopyAccelerationStructureInfoKHR
-> CopyAccelerationStructureModeKHR
mode :: CopyAccelerationStructureModeKHR
  }
  deriving (Typeable, CopyAccelerationStructureInfoKHR
-> CopyAccelerationStructureInfoKHR -> Bool
(CopyAccelerationStructureInfoKHR
 -> CopyAccelerationStructureInfoKHR -> Bool)
-> (CopyAccelerationStructureInfoKHR
    -> CopyAccelerationStructureInfoKHR -> Bool)
-> Eq CopyAccelerationStructureInfoKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CopyAccelerationStructureInfoKHR
-> CopyAccelerationStructureInfoKHR -> Bool
$c/= :: CopyAccelerationStructureInfoKHR
-> CopyAccelerationStructureInfoKHR -> Bool
== :: CopyAccelerationStructureInfoKHR
-> CopyAccelerationStructureInfoKHR -> Bool
$c== :: CopyAccelerationStructureInfoKHR
-> CopyAccelerationStructureInfoKHR -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (CopyAccelerationStructureInfoKHR)
#endif
deriving instance Show CopyAccelerationStructureInfoKHR

instance ToCStruct CopyAccelerationStructureInfoKHR where
  withCStruct :: CopyAccelerationStructureInfoKHR
-> (("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO b)
-> IO b
withCStruct CopyAccelerationStructureInfoKHR
x ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO b
f = Int
-> (("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 ((("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO b)
 -> IO b)
-> (("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \"pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
p -> ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> CopyAccelerationStructureInfoKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
p CopyAccelerationStructureInfoKHR
x (("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO b
f "pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
p)
  pokeCStruct :: ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> CopyAccelerationStructureInfoKHR -> IO b -> IO b
pokeCStruct "pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
p CopyAccelerationStructureInfoKHR{AccelerationStructureKHR
CopyAccelerationStructureModeKHR
mode :: CopyAccelerationStructureModeKHR
dst :: AccelerationStructureKHR
src :: AccelerationStructureKHR
$sel:mode:CopyAccelerationStructureInfoKHR :: CopyAccelerationStructureInfoKHR
-> CopyAccelerationStructureModeKHR
$sel:dst:CopyAccelerationStructureInfoKHR :: CopyAccelerationStructureInfoKHR -> AccelerationStructureKHR
$sel:src:CopyAccelerationStructureInfoKHR :: CopyAccelerationStructureInfoKHR -> AccelerationStructureKHR
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR)
    Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> AccelerationStructureKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> Int
-> "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr AccelerationStructureKHR)) (AccelerationStructureKHR
src)
    ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> AccelerationStructureKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> Int
-> "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr AccelerationStructureKHR)) (AccelerationStructureKHR
dst)
    Ptr CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> Int -> Ptr CopyAccelerationStructureModeKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr CopyAccelerationStructureModeKHR)) (CopyAccelerationStructureModeKHR
mode)
    IO b
f
  cStructSize :: Int
cStructSize = Int
40
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR) -> IO b -> IO b
pokeZeroCStruct "pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR)
    Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> AccelerationStructureKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> Int
-> "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr AccelerationStructureKHR)) (AccelerationStructureKHR
forall a. Zero a => a
zero)
    ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> AccelerationStructureKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> Int
-> "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr AccelerationStructureKHR)) (AccelerationStructureKHR
forall a. Zero a => a
zero)
    Ptr CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> Int -> Ptr CopyAccelerationStructureModeKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr CopyAccelerationStructureModeKHR)) (CopyAccelerationStructureModeKHR
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct CopyAccelerationStructureInfoKHR where
  peekCStruct :: ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> IO CopyAccelerationStructureInfoKHR
peekCStruct "pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
p = do
    AccelerationStructureKHR
src <- ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> IO AccelerationStructureKHR
forall a. Storable a => Ptr a -> IO a
peek @AccelerationStructureKHR (("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> Int
-> "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr AccelerationStructureKHR))
    AccelerationStructureKHR
dst <- ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> IO AccelerationStructureKHR
forall a. Storable a => Ptr a -> IO a
peek @AccelerationStructureKHR (("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> Int
-> "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr AccelerationStructureKHR))
    CopyAccelerationStructureModeKHR
mode <- Ptr CopyAccelerationStructureModeKHR
-> IO CopyAccelerationStructureModeKHR
forall a. Storable a => Ptr a -> IO a
peek @CopyAccelerationStructureModeKHR (("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> Int -> Ptr CopyAccelerationStructureModeKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr CopyAccelerationStructureModeKHR))
    CopyAccelerationStructureInfoKHR
-> IO CopyAccelerationStructureInfoKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CopyAccelerationStructureInfoKHR
 -> IO CopyAccelerationStructureInfoKHR)
-> CopyAccelerationStructureInfoKHR
-> IO CopyAccelerationStructureInfoKHR
forall a b. (a -> b) -> a -> b
$ AccelerationStructureKHR
-> AccelerationStructureKHR
-> CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureInfoKHR
CopyAccelerationStructureInfoKHR
             AccelerationStructureKHR
src AccelerationStructureKHR
dst CopyAccelerationStructureModeKHR
mode

instance Storable CopyAccelerationStructureInfoKHR where
  sizeOf :: CopyAccelerationStructureInfoKHR -> Int
sizeOf ~CopyAccelerationStructureInfoKHR
_ = Int
40
  alignment :: CopyAccelerationStructureInfoKHR -> Int
alignment ~CopyAccelerationStructureInfoKHR
_ = Int
8
  peek :: ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> IO CopyAccelerationStructureInfoKHR
peek = ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> IO CopyAccelerationStructureInfoKHR
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> CopyAccelerationStructureInfoKHR -> IO ()
poke "pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
ptr CopyAccelerationStructureInfoKHR
poked = ("pInfo" ::: Ptr CopyAccelerationStructureInfoKHR)
-> CopyAccelerationStructureInfoKHR -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pInfo" ::: Ptr CopyAccelerationStructureInfoKHR
ptr CopyAccelerationStructureInfoKHR
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero CopyAccelerationStructureInfoKHR where
  zero :: CopyAccelerationStructureInfoKHR
zero = AccelerationStructureKHR
-> AccelerationStructureKHR
-> CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureInfoKHR
CopyAccelerationStructureInfoKHR
           AccelerationStructureKHR
forall a. Zero a => a
zero
           AccelerationStructureKHR
forall a. Zero a => a
zero
           CopyAccelerationStructureModeKHR
forall a. Zero a => a
zero


-- | VkCopyAccelerationStructureToMemoryInfoKHR - Parameters for serializing
-- an acceleration structure
--
-- == Valid Usage
--
-- -   #VUID-VkCopyAccelerationStructureToMemoryInfoKHR-src-04959# The
--     source acceleration structure @src@ /must/ have been constructed
--     prior to the execution of this command
--
-- -   #VUID-VkCopyAccelerationStructureToMemoryInfoKHR-dst-03561# The
--     memory pointed to by @dst@ /must/ be at least as large as the
--     serialization size of @src@, as reported by
--     'writeAccelerationStructuresPropertiesKHR' or
--     'cmdWriteAccelerationStructuresPropertiesKHR' with a query type of
--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'
--
-- -   #VUID-VkCopyAccelerationStructureToMemoryInfoKHR-mode-03412# @mode@
--     /must/ be 'COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkCopyAccelerationStructureToMemoryInfoKHR-sType-sType#
--     @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR'
--
-- -   #VUID-VkCopyAccelerationStructureToMemoryInfoKHR-pNext-pNext#
--     @pNext@ /must/ be @NULL@
--
-- -   #VUID-VkCopyAccelerationStructureToMemoryInfoKHR-src-parameter#
--     @src@ /must/ be a valid
--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
--
-- -   #VUID-VkCopyAccelerationStructureToMemoryInfoKHR-mode-parameter#
--     @mode@ /must/ be a valid 'CopyAccelerationStructureModeKHR' value
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
-- 'CopyAccelerationStructureModeKHR', 'DeviceOrHostAddressKHR',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'cmdCopyAccelerationStructureToMemoryKHR',
-- 'copyAccelerationStructureToMemoryKHR'
data CopyAccelerationStructureToMemoryInfoKHR = CopyAccelerationStructureToMemoryInfoKHR
  { -- | @src@ is the source acceleration structure for the copy
    CopyAccelerationStructureToMemoryInfoKHR
-> AccelerationStructureKHR
src :: AccelerationStructureKHR
  , -- | @dst@ is the device or host address to memory which is the target for
    -- the copy
    CopyAccelerationStructureToMemoryInfoKHR -> DeviceOrHostAddressKHR
dst :: DeviceOrHostAddressKHR
  , -- | @mode@ is a 'CopyAccelerationStructureModeKHR' value specifying
    -- additional operations to perform during the copy.
    CopyAccelerationStructureToMemoryInfoKHR
-> CopyAccelerationStructureModeKHR
mode :: CopyAccelerationStructureModeKHR
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (CopyAccelerationStructureToMemoryInfoKHR)
#endif
deriving instance Show CopyAccelerationStructureToMemoryInfoKHR

instance ToCStruct CopyAccelerationStructureToMemoryInfoKHR where
  withCStruct :: CopyAccelerationStructureToMemoryInfoKHR
-> (("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
    -> IO b)
-> IO b
withCStruct CopyAccelerationStructureToMemoryInfoKHR
x ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR) -> IO b
f = Int
-> (("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 ((("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
  -> IO b)
 -> IO b)
-> (("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
    -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \"pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR
p -> ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
-> CopyAccelerationStructureToMemoryInfoKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR
p CopyAccelerationStructureToMemoryInfoKHR
x (("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR) -> IO b
f "pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR
p)
  pokeCStruct :: ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
-> CopyAccelerationStructureToMemoryInfoKHR -> IO b -> IO b
pokeCStruct "pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR
p CopyAccelerationStructureToMemoryInfoKHR{AccelerationStructureKHR
CopyAccelerationStructureModeKHR
DeviceOrHostAddressKHR
mode :: CopyAccelerationStructureModeKHR
dst :: DeviceOrHostAddressKHR
src :: AccelerationStructureKHR
$sel:mode:CopyAccelerationStructureToMemoryInfoKHR :: CopyAccelerationStructureToMemoryInfoKHR
-> CopyAccelerationStructureModeKHR
$sel:dst:CopyAccelerationStructureToMemoryInfoKHR :: CopyAccelerationStructureToMemoryInfoKHR -> DeviceOrHostAddressKHR
$sel:src:CopyAccelerationStructureToMemoryInfoKHR :: CopyAccelerationStructureToMemoryInfoKHR
-> AccelerationStructureKHR
..} 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 (("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR)
    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 (("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    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
$ ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> AccelerationStructureKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
-> Int
-> "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr AccelerationStructureKHR)) (AccelerationStructureKHR
src)
    ((() -> 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 DeviceOrHostAddressKHR
-> DeviceOrHostAddressKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
-> Int -> Ptr DeviceOrHostAddressKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DeviceOrHostAddressKHR)) (DeviceOrHostAddressKHR
dst) (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
$ ())
    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 CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
-> Int -> Ptr CopyAccelerationStructureModeKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr CopyAccelerationStructureModeKHR)) (CopyAccelerationStructureModeKHR
mode)
    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 = Int
40
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
-> IO b -> IO b
pokeZeroCStruct "pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (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 (("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR)
    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 (("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    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
$ ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> AccelerationStructureKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
-> Int
-> "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr AccelerationStructureKHR)) (AccelerationStructureKHR
forall a. Zero a => a
zero)
    ((() -> 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 DeviceOrHostAddressKHR
-> DeviceOrHostAddressKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
-> Int -> Ptr DeviceOrHostAddressKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DeviceOrHostAddressKHR)) (DeviceOrHostAddressKHR
forall a. Zero a => a
zero) (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
$ ())
    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 CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR
p ("pInfo" ::: Ptr CopyAccelerationStructureToMemoryInfoKHR)
-> Int -> Ptr CopyAccelerationStructureModeKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr CopyAccelerationStructureModeKHR)) (CopyAccelerationStructureModeKHR
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 Zero CopyAccelerationStructureToMemoryInfoKHR where
  zero :: CopyAccelerationStructureToMemoryInfoKHR
zero = AccelerationStructureKHR
-> DeviceOrHostAddressKHR
-> CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureToMemoryInfoKHR
CopyAccelerationStructureToMemoryInfoKHR
           AccelerationStructureKHR
forall a. Zero a => a
zero
           DeviceOrHostAddressKHR
forall a. Zero a => a
zero
           CopyAccelerationStructureModeKHR
forall a. Zero a => a
zero


-- | VkCopyMemoryToAccelerationStructureInfoKHR - Parameters for
-- deserializing an acceleration structure
--
-- == Valid Usage
--
-- -   #VUID-VkCopyMemoryToAccelerationStructureInfoKHR-src-04960# The
--     source memory pointed to by @src@ /must/ contain data previously
--     serialized using 'cmdCopyAccelerationStructureToMemoryKHR',
--     potentially modified to relocate acceleration structure references
--     as described in that command
--
-- -   #VUID-VkCopyMemoryToAccelerationStructureInfoKHR-mode-03413# @mode@
--     /must/ be 'COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR'
--
-- -   #VUID-VkCopyMemoryToAccelerationStructureInfoKHR-pInfo-03414# The
--     data in @src@ /must/ have a format compatible with the destination
--     physical device as returned by
--     'getDeviceAccelerationStructureCompatibilityKHR'
--
-- -   #VUID-VkCopyMemoryToAccelerationStructureInfoKHR-dst-03746# @dst@
--     /must/ have been created with a @size@ greater than or equal to that
--     used to serialize the data in @src@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkCopyMemoryToAccelerationStructureInfoKHR-sType-sType#
--     @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR'
--
-- -   #VUID-VkCopyMemoryToAccelerationStructureInfoKHR-pNext-pNext#
--     @pNext@ /must/ be @NULL@
--
-- -   #VUID-VkCopyMemoryToAccelerationStructureInfoKHR-dst-parameter#
--     @dst@ /must/ be a valid
--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle
--
-- -   #VUID-VkCopyMemoryToAccelerationStructureInfoKHR-mode-parameter#
--     @mode@ /must/ be a valid 'CopyAccelerationStructureModeKHR' value
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',
-- 'CopyAccelerationStructureModeKHR', 'DeviceOrHostAddressConstKHR',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'cmdCopyMemoryToAccelerationStructureKHR',
-- 'copyMemoryToAccelerationStructureKHR'
data CopyMemoryToAccelerationStructureInfoKHR = CopyMemoryToAccelerationStructureInfoKHR
  { -- | @src@ is the device or host address to memory containing the source data
    -- for the copy.
    CopyMemoryToAccelerationStructureInfoKHR
-> DeviceOrHostAddressConstKHR
src :: DeviceOrHostAddressConstKHR
  , -- | @dst@ is the target acceleration structure for the copy.
    CopyMemoryToAccelerationStructureInfoKHR
-> AccelerationStructureKHR
dst :: AccelerationStructureKHR
  , -- | @mode@ is a 'CopyAccelerationStructureModeKHR' value specifying
    -- additional operations to perform during the copy.
    CopyMemoryToAccelerationStructureInfoKHR
-> CopyAccelerationStructureModeKHR
mode :: CopyAccelerationStructureModeKHR
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (CopyMemoryToAccelerationStructureInfoKHR)
#endif
deriving instance Show CopyMemoryToAccelerationStructureInfoKHR

instance ToCStruct CopyMemoryToAccelerationStructureInfoKHR where
  withCStruct :: CopyMemoryToAccelerationStructureInfoKHR
-> (("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
    -> IO b)
-> IO b
withCStruct CopyMemoryToAccelerationStructureInfoKHR
x ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR) -> IO b
f = Int
-> (("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 ((("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
  -> IO b)
 -> IO b)
-> (("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
    -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \"pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR
p -> ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
-> CopyMemoryToAccelerationStructureInfoKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR
p CopyMemoryToAccelerationStructureInfoKHR
x (("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR) -> IO b
f "pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR
p)
  pokeCStruct :: ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
-> CopyMemoryToAccelerationStructureInfoKHR -> IO b -> IO b
pokeCStruct "pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR
p CopyMemoryToAccelerationStructureInfoKHR{AccelerationStructureKHR
CopyAccelerationStructureModeKHR
DeviceOrHostAddressConstKHR
mode :: CopyAccelerationStructureModeKHR
dst :: AccelerationStructureKHR
src :: DeviceOrHostAddressConstKHR
$sel:mode:CopyMemoryToAccelerationStructureInfoKHR :: CopyMemoryToAccelerationStructureInfoKHR
-> CopyAccelerationStructureModeKHR
$sel:dst:CopyMemoryToAccelerationStructureInfoKHR :: CopyMemoryToAccelerationStructureInfoKHR
-> AccelerationStructureKHR
$sel:src:CopyMemoryToAccelerationStructureInfoKHR :: CopyMemoryToAccelerationStructureInfoKHR
-> DeviceOrHostAddressConstKHR
..} 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 (("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR)
    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 (("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    ((() -> 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 DeviceOrHostAddressConstKHR
-> DeviceOrHostAddressConstKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
-> Int -> Ptr DeviceOrHostAddressConstKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceOrHostAddressConstKHR)) (DeviceOrHostAddressConstKHR
src) (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
$ ())
    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
$ ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> AccelerationStructureKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
-> Int
-> "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr AccelerationStructureKHR)) (AccelerationStructureKHR
dst)
    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 CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
-> Int -> Ptr CopyAccelerationStructureModeKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr CopyAccelerationStructureModeKHR)) (CopyAccelerationStructureModeKHR
mode)
    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 = Int
40
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
-> IO b -> IO b
pokeZeroCStruct "pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (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 (("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR)
    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 (("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    ((() -> 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 DeviceOrHostAddressConstKHR
-> DeviceOrHostAddressConstKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
-> Int -> Ptr DeviceOrHostAddressConstKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceOrHostAddressConstKHR)) (DeviceOrHostAddressConstKHR
forall a. Zero a => a
zero) (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
$ ())
    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
$ ("pAccelerationStructures" ::: Ptr AccelerationStructureKHR)
-> AccelerationStructureKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
-> Int
-> "pAccelerationStructures" ::: Ptr AccelerationStructureKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr AccelerationStructureKHR)) (AccelerationStructureKHR
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 CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR
p ("pInfo" ::: Ptr CopyMemoryToAccelerationStructureInfoKHR)
-> Int -> Ptr CopyAccelerationStructureModeKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr CopyAccelerationStructureModeKHR)) (CopyAccelerationStructureModeKHR
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 Zero CopyMemoryToAccelerationStructureInfoKHR where
  zero :: CopyMemoryToAccelerationStructureInfoKHR
zero = DeviceOrHostAddressConstKHR
-> AccelerationStructureKHR
-> CopyAccelerationStructureModeKHR
-> CopyMemoryToAccelerationStructureInfoKHR
CopyMemoryToAccelerationStructureInfoKHR
           DeviceOrHostAddressConstKHR
forall a. Zero a => a
zero
           AccelerationStructureKHR
forall a. Zero a => a
zero
           CopyAccelerationStructureModeKHR
forall a. Zero a => a
zero


-- | VkAccelerationStructureBuildSizesInfoKHR - Structure specifying build
-- sizes for an acceleration structure
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getAccelerationStructureBuildSizesKHR'
data AccelerationStructureBuildSizesInfoKHR = AccelerationStructureBuildSizesInfoKHR
  { -- | @accelerationStructureSize@ is the size in bytes required in a
    -- 'Vulkan.Extensions.Handles.AccelerationStructureKHR' for a build or
    -- update operation.
    ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> "dataSize" ::: Word64
accelerationStructureSize :: DeviceSize
  , -- | @updateScratchSize@ is the size in bytes required in a scratch buffer
    -- for an update operation.
    ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> "dataSize" ::: Word64
updateScratchSize :: DeviceSize
  , -- | @buildScratchSize@ is the size in bytes required in a scratch buffer for
    -- a build operation.
    ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> "dataSize" ::: Word64
buildScratchSize :: DeviceSize
  }
  deriving (Typeable, ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR) -> Bool
(("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
 -> ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR) -> Bool)
-> (("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
    -> ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR) -> Bool)
-> Eq ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR) -> Bool
$c/= :: ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR) -> Bool
== :: ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR) -> Bool
$c== :: ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR) -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (AccelerationStructureBuildSizesInfoKHR)
#endif
deriving instance Show AccelerationStructureBuildSizesInfoKHR

instance ToCStruct AccelerationStructureBuildSizesInfoKHR where
  withCStruct :: ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> (("pSizeInfo"
     ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
    -> IO b)
-> IO b
withCStruct "sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR
x ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> IO b
f = Int
-> (("pSizeInfo"
     ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 ((("pSizeInfo"
   ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
  -> IO b)
 -> IO b)
-> (("pSizeInfo"
     ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
    -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \"pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
p -> ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> IO b
-> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
p "sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR
x (("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> IO b
f "pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
p)
  pokeCStruct :: ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> IO b
-> IO b
pokeCStruct "pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
p AccelerationStructureBuildSizesInfoKHR{"dataSize" ::: Word64
buildScratchSize :: "dataSize" ::: Word64
updateScratchSize :: "dataSize" ::: Word64
accelerationStructureSize :: "dataSize" ::: Word64
$sel:buildScratchSize:AccelerationStructureBuildSizesInfoKHR :: ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> "dataSize" ::: Word64
$sel:updateScratchSize:AccelerationStructureBuildSizesInfoKHR :: ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> "dataSize" ::: Word64
$sel:accelerationStructureSize:AccelerationStructureBuildSizesInfoKHR :: ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> "dataSize" ::: Word64
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
p ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR)
    Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
p ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
p ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceSize)) ("dataSize" ::: Word64
accelerationStructureSize)
    ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
p ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DeviceSize)) ("dataSize" ::: Word64
updateScratchSize)
    ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
p ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr DeviceSize)) ("dataSize" ::: Word64
buildScratchSize)
    IO b
f
  cStructSize :: Int
cStructSize = Int
40
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> IO b -> IO b
pokeZeroCStruct "pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
p ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR)
    Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
p ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> Int -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) ("data" ::: Ptr ()
forall a. Ptr a
nullPtr)
    ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
p ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceSize)) ("dataSize" ::: Word64
forall a. Zero a => a
zero)
    ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
p ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DeviceSize)) ("dataSize" ::: Word64
forall a. Zero a => a
zero)
    ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
p ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr DeviceSize)) ("dataSize" ::: Word64
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct AccelerationStructureBuildSizesInfoKHR where
  peekCStruct :: ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
peekCStruct "pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
p = do
    "dataSize" ::: Word64
accelerationStructureSize <- ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> IO ("dataSize" ::: Word64)
forall a. Storable a => Ptr a -> IO a
peek @DeviceSize (("pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
p ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceSize))
    "dataSize" ::: Word64
updateScratchSize <- ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> IO ("dataSize" ::: Word64)
forall a. Storable a => Ptr a -> IO a
peek @DeviceSize (("pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
p ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DeviceSize))
    "dataSize" ::: Word64
buildScratchSize <- ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> IO ("dataSize" ::: Word64)
forall a. Storable a => Ptr a -> IO a
peek @DeviceSize (("pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
p ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> Int
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr DeviceSize))
    ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
 -> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
forall a b. (a -> b) -> a -> b
$ ("dataSize" ::: Word64)
-> ("dataSize" ::: Word64)
-> ("dataSize" ::: Word64)
-> "sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR
AccelerationStructureBuildSizesInfoKHR
             "dataSize" ::: Word64
accelerationStructureSize "dataSize" ::: Word64
updateScratchSize "dataSize" ::: Word64
buildScratchSize

instance Storable AccelerationStructureBuildSizesInfoKHR where
  sizeOf :: ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR) -> Int
sizeOf ~"sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR
_ = Int
40
  alignment :: ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR) -> Int
alignment ~"sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR
_ = Int
8
  peek :: ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
peek = ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> IO ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR) -> IO ()
poke "pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
ptr "sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR
poked = ("pSizeInfo"
 ::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR))
-> ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
-> IO ()
-> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pSizeInfo"
::: Ptr ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
ptr "sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero AccelerationStructureBuildSizesInfoKHR where
  zero :: "sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR
zero = ("dataSize" ::: Word64)
-> ("dataSize" ::: Word64)
-> ("dataSize" ::: Word64)
-> "sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR
AccelerationStructureBuildSizesInfoKHR
           "dataSize" ::: Word64
forall a. Zero a => a
zero
           "dataSize" ::: Word64
forall a. Zero a => a
zero
           "dataSize" ::: Word64
forall a. Zero a => a
zero


data DeviceOrHostAddressKHR
  = DeviceAddress DeviceAddress
  | HostAddress (Ptr ())
  deriving (Int -> DeviceOrHostAddressKHR -> ShowS
[DeviceOrHostAddressKHR] -> ShowS
DeviceOrHostAddressKHR -> String
(Int -> DeviceOrHostAddressKHR -> ShowS)
-> (DeviceOrHostAddressKHR -> String)
-> ([DeviceOrHostAddressKHR] -> ShowS)
-> Show DeviceOrHostAddressKHR
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeviceOrHostAddressKHR] -> ShowS
$cshowList :: [DeviceOrHostAddressKHR] -> ShowS
show :: DeviceOrHostAddressKHR -> String
$cshow :: DeviceOrHostAddressKHR -> String
showsPrec :: Int -> DeviceOrHostAddressKHR -> ShowS
$cshowsPrec :: Int -> DeviceOrHostAddressKHR -> ShowS
Show)

instance ToCStruct DeviceOrHostAddressKHR where
  withCStruct :: DeviceOrHostAddressKHR
-> (Ptr DeviceOrHostAddressKHR -> IO b) -> IO b
withCStruct DeviceOrHostAddressKHR
x Ptr DeviceOrHostAddressKHR -> IO b
f = Int -> (Ptr DeviceOrHostAddressKHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
8 ((Ptr DeviceOrHostAddressKHR -> IO b) -> IO b)
-> (Ptr DeviceOrHostAddressKHR -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DeviceOrHostAddressKHR
p -> Ptr DeviceOrHostAddressKHR
-> DeviceOrHostAddressKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DeviceOrHostAddressKHR
p DeviceOrHostAddressKHR
x (Ptr DeviceOrHostAddressKHR -> IO b
f Ptr DeviceOrHostAddressKHR
p)
  pokeCStruct :: Ptr DeviceOrHostAddressKHR -> DeviceOrHostAddressKHR -> IO a -> IO a
  pokeCStruct :: Ptr DeviceOrHostAddressKHR
-> DeviceOrHostAddressKHR -> IO a -> IO a
pokeCStruct Ptr DeviceOrHostAddressKHR
p = (((() -> IO a) -> IO a) -> (IO a -> () -> IO a) -> IO a -> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. IO a -> () -> IO a
forall a b. a -> b -> a
const) (((() -> IO a) -> IO a) -> IO a -> IO a)
-> (DeviceOrHostAddressKHR -> (() -> IO a) -> IO a)
-> DeviceOrHostAddressKHR
-> IO a
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT a IO () -> (() -> IO a) -> IO a
forall k (r :: k) (m :: k -> *) a. ContT r m a -> (a -> m r) -> m r
runContT (ContT a IO () -> (() -> IO a) -> IO a)
-> (DeviceOrHostAddressKHR -> ContT a IO ())
-> DeviceOrHostAddressKHR
-> (() -> IO a)
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  \case
    DeviceAddress "dataSize" ::: Word64
v -> IO () -> ContT a IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT a IO ()) -> IO () -> ContT a IO ()
forall a b. (a -> b) -> a -> b
$ ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr DeviceOrHostAddressKHR
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Ptr b
castPtr @_ @DeviceAddress Ptr DeviceOrHostAddressKHR
p) ("dataSize" ::: Word64
v)
    HostAddress "data" ::: Ptr ()
v -> IO () -> ContT a IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT a IO ()) -> IO () -> ContT a IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr DeviceOrHostAddressKHR -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Ptr b
castPtr @_ @(Ptr ()) Ptr DeviceOrHostAddressKHR
p) ("data" ::: Ptr ()
v)
  pokeZeroCStruct :: Ptr DeviceOrHostAddressKHR -> IO b -> IO b
  pokeZeroCStruct :: Ptr DeviceOrHostAddressKHR -> IO b -> IO b
pokeZeroCStruct Ptr DeviceOrHostAddressKHR
_ IO b
f = IO b
f
  cStructSize :: Int
cStructSize = Int
8
  cStructAlignment :: Int
cStructAlignment = Int
8

instance Zero DeviceOrHostAddressKHR where
  zero :: DeviceOrHostAddressKHR
zero = ("dataSize" ::: Word64) -> DeviceOrHostAddressKHR
DeviceAddress "dataSize" ::: Word64
forall a. Zero a => a
zero


data DeviceOrHostAddressConstKHR
  = DeviceAddressConst DeviceAddress
  | HostAddressConst (Ptr ())
  deriving (Int -> DeviceOrHostAddressConstKHR -> ShowS
[DeviceOrHostAddressConstKHR] -> ShowS
DeviceOrHostAddressConstKHR -> String
(Int -> DeviceOrHostAddressConstKHR -> ShowS)
-> (DeviceOrHostAddressConstKHR -> String)
-> ([DeviceOrHostAddressConstKHR] -> ShowS)
-> Show DeviceOrHostAddressConstKHR
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeviceOrHostAddressConstKHR] -> ShowS
$cshowList :: [DeviceOrHostAddressConstKHR] -> ShowS
show :: DeviceOrHostAddressConstKHR -> String
$cshow :: DeviceOrHostAddressConstKHR -> String
showsPrec :: Int -> DeviceOrHostAddressConstKHR -> ShowS
$cshowsPrec :: Int -> DeviceOrHostAddressConstKHR -> ShowS
Show)

instance ToCStruct DeviceOrHostAddressConstKHR where
  withCStruct :: DeviceOrHostAddressConstKHR
-> (Ptr DeviceOrHostAddressConstKHR -> IO b) -> IO b
withCStruct DeviceOrHostAddressConstKHR
x Ptr DeviceOrHostAddressConstKHR -> IO b
f = Int -> (Ptr DeviceOrHostAddressConstKHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
8 ((Ptr DeviceOrHostAddressConstKHR -> IO b) -> IO b)
-> (Ptr DeviceOrHostAddressConstKHR -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DeviceOrHostAddressConstKHR
p -> Ptr DeviceOrHostAddressConstKHR
-> DeviceOrHostAddressConstKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DeviceOrHostAddressConstKHR
p DeviceOrHostAddressConstKHR
x (Ptr DeviceOrHostAddressConstKHR -> IO b
f Ptr DeviceOrHostAddressConstKHR
p)
  pokeCStruct :: Ptr DeviceOrHostAddressConstKHR -> DeviceOrHostAddressConstKHR -> IO a -> IO a
  pokeCStruct :: Ptr DeviceOrHostAddressConstKHR
-> DeviceOrHostAddressConstKHR -> IO a -> IO a
pokeCStruct Ptr DeviceOrHostAddressConstKHR
p = (((() -> IO a) -> IO a) -> (IO a -> () -> IO a) -> IO a -> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. IO a -> () -> IO a
forall a b. a -> b -> a
const) (((() -> IO a) -> IO a) -> IO a -> IO a)
-> (DeviceOrHostAddressConstKHR -> (() -> IO a) -> IO a)
-> DeviceOrHostAddressConstKHR
-> IO a
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT a IO () -> (() -> IO a) -> IO a
forall k (r :: k) (m :: k -> *) a. ContT r m a -> (a -> m r) -> m r
runContT (ContT a IO () -> (() -> IO a) -> IO a)
-> (DeviceOrHostAddressConstKHR -> ContT a IO ())
-> DeviceOrHostAddressConstKHR
-> (() -> IO a)
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  \case
    DeviceAddressConst "dataSize" ::: Word64
v -> IO () -> ContT a IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT a IO ()) -> IO () -> ContT a IO ()
forall a b. (a -> b) -> a -> b
$ ("pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64))
-> ("dataSize" ::: Word64) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr DeviceOrHostAddressConstKHR
-> "pIndirectDeviceAddresses" ::: Ptr ("dataSize" ::: Word64)
forall a b. Ptr a -> Ptr b
castPtr @_ @DeviceAddress Ptr DeviceOrHostAddressConstKHR
p) ("dataSize" ::: Word64
v)
    HostAddressConst "data" ::: Ptr ()
v -> IO () -> ContT a IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT a IO ()) -> IO () -> ContT a IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ("data" ::: Ptr ()) -> ("data" ::: Ptr ()) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr DeviceOrHostAddressConstKHR -> Ptr ("data" ::: Ptr ())
forall a b. Ptr a -> Ptr b
castPtr @_ @(Ptr ()) Ptr DeviceOrHostAddressConstKHR
p) ("data" ::: Ptr ()
v)
  pokeZeroCStruct :: Ptr DeviceOrHostAddressConstKHR -> IO b -> IO b
  pokeZeroCStruct :: Ptr DeviceOrHostAddressConstKHR -> IO b -> IO b
pokeZeroCStruct Ptr DeviceOrHostAddressConstKHR
_ IO b
f = IO b
f
  cStructSize :: Int
cStructSize = Int
8
  cStructAlignment :: Int
cStructAlignment = Int
8

instance Zero DeviceOrHostAddressConstKHR where
  zero :: DeviceOrHostAddressConstKHR
zero = ("dataSize" ::: Word64) -> DeviceOrHostAddressConstKHR
DeviceAddressConst "dataSize" ::: Word64
forall a. Zero a => a
zero


data AccelerationStructureGeometryDataKHR
  = Triangles (SomeStruct AccelerationStructureGeometryTrianglesDataKHR)
  | Aabbs AccelerationStructureGeometryAabbsDataKHR
  | Instances AccelerationStructureGeometryInstancesDataKHR
  deriving (Int -> AccelerationStructureGeometryDataKHR -> ShowS
[AccelerationStructureGeometryDataKHR] -> ShowS
AccelerationStructureGeometryDataKHR -> String
(Int -> AccelerationStructureGeometryDataKHR -> ShowS)
-> (AccelerationStructureGeometryDataKHR -> String)
-> ([AccelerationStructureGeometryDataKHR] -> ShowS)
-> Show AccelerationStructureGeometryDataKHR
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AccelerationStructureGeometryDataKHR] -> ShowS
$cshowList :: [AccelerationStructureGeometryDataKHR] -> ShowS
show :: AccelerationStructureGeometryDataKHR -> String
$cshow :: AccelerationStructureGeometryDataKHR -> String
showsPrec :: Int -> AccelerationStructureGeometryDataKHR -> ShowS
$cshowsPrec :: Int -> AccelerationStructureGeometryDataKHR -> ShowS
Show)

instance ToCStruct AccelerationStructureGeometryDataKHR where
  withCStruct :: AccelerationStructureGeometryDataKHR
-> (Ptr AccelerationStructureGeometryDataKHR -> IO b) -> IO b
withCStruct AccelerationStructureGeometryDataKHR
x Ptr AccelerationStructureGeometryDataKHR -> IO b
f = Int -> (Ptr AccelerationStructureGeometryDataKHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
64 ((Ptr AccelerationStructureGeometryDataKHR -> IO b) -> IO b)
-> (Ptr AccelerationStructureGeometryDataKHR -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr AccelerationStructureGeometryDataKHR
p -> Ptr AccelerationStructureGeometryDataKHR
-> AccelerationStructureGeometryDataKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr AccelerationStructureGeometryDataKHR
p AccelerationStructureGeometryDataKHR
x (Ptr AccelerationStructureGeometryDataKHR -> IO b
f Ptr AccelerationStructureGeometryDataKHR
p)
  pokeCStruct :: Ptr AccelerationStructureGeometryDataKHR -> AccelerationStructureGeometryDataKHR -> IO a -> IO a
  pokeCStruct :: Ptr AccelerationStructureGeometryDataKHR
-> AccelerationStructureGeometryDataKHR -> IO a -> IO a
pokeCStruct Ptr AccelerationStructureGeometryDataKHR
p = (((() -> IO a) -> IO a) -> (IO a -> () -> IO a) -> IO a -> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. IO a -> () -> IO a
forall a b. a -> b -> a
const) (((() -> IO a) -> IO a) -> IO a -> IO a)
-> (AccelerationStructureGeometryDataKHR -> (() -> IO a) -> IO a)
-> AccelerationStructureGeometryDataKHR
-> IO a
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT a IO () -> (() -> IO a) -> IO a
forall k (r :: k) (m :: k -> *) a. ContT r m a -> (a -> m r) -> m r
runContT (ContT a IO () -> (() -> IO a) -> IO a)
-> (AccelerationStructureGeometryDataKHR -> ContT a IO ())
-> AccelerationStructureGeometryDataKHR
-> (() -> IO a)
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  \case
    Triangles SomeStruct AccelerationStructureGeometryTrianglesDataKHR
v -> ((() -> IO a) -> IO a) -> ContT a IO ()
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO a) -> IO a) -> ContT a IO ())
-> ((() -> IO a) -> IO a) -> ContT a IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (SomeStruct AccelerationStructureGeometryTrianglesDataKHR)
-> SomeStruct AccelerationStructureGeometryTrianglesDataKHR
-> IO a
-> IO a
forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
Ptr (SomeStruct a) -> SomeStruct a -> IO b -> IO b
pokeSomeCStruct (Ptr (AccelerationStructureGeometryTrianglesDataKHR Any)
-> Ptr (SomeStruct AccelerationStructureGeometryTrianglesDataKHR)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr AccelerationStructureGeometryDataKHR
-> Ptr (AccelerationStructureGeometryTrianglesDataKHR Any)
forall a b. Ptr a -> Ptr b
castPtr @_ @(AccelerationStructureGeometryTrianglesDataKHR _) Ptr AccelerationStructureGeometryDataKHR
p)) (SomeStruct AccelerationStructureGeometryTrianglesDataKHR
v) (IO a -> IO a) -> ((() -> IO a) -> IO a) -> (() -> IO a) -> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO a) -> () -> IO a
forall a b. (a -> b) -> a -> b
$ ())
    Aabbs AccelerationStructureGeometryAabbsDataKHR
v -> ((() -> IO a) -> IO a) -> ContT a IO ()
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO a) -> IO a) -> ContT a IO ())
-> ((() -> IO a) -> IO a) -> ContT a IO ()
forall a b. (a -> b) -> a -> b
$ Ptr AccelerationStructureGeometryAabbsDataKHR
-> AccelerationStructureGeometryAabbsDataKHR -> IO a -> IO a
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (Ptr AccelerationStructureGeometryDataKHR
-> Ptr AccelerationStructureGeometryAabbsDataKHR
forall a b. Ptr a -> Ptr b
castPtr @_ @AccelerationStructureGeometryAabbsDataKHR Ptr AccelerationStructureGeometryDataKHR
p) (AccelerationStructureGeometryAabbsDataKHR
v) (IO a -> IO a) -> ((() -> IO a) -> IO a) -> (() -> IO a) -> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO a) -> () -> IO a
forall a b. (a -> b) -> a -> b
$ ())
    Instances AccelerationStructureGeometryInstancesDataKHR
v -> ((() -> IO a) -> IO a) -> ContT a IO ()
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO a) -> IO a) -> ContT a IO ())
-> ((() -> IO a) -> IO a) -> ContT a IO ()
forall a b. (a -> b) -> a -> b
$ Ptr AccelerationStructureGeometryInstancesDataKHR
-> AccelerationStructureGeometryInstancesDataKHR -> IO a -> IO a
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (Ptr AccelerationStructureGeometryDataKHR
-> Ptr AccelerationStructureGeometryInstancesDataKHR
forall a b. Ptr a -> Ptr b
castPtr @_ @AccelerationStructureGeometryInstancesDataKHR Ptr AccelerationStructureGeometryDataKHR
p) (AccelerationStructureGeometryInstancesDataKHR
v) (IO a -> IO a) -> ((() -> IO a) -> IO a) -> (() -> IO a) -> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO a) -> () -> IO a
forall a b. (a -> b) -> a -> b
$ ())
  pokeZeroCStruct :: Ptr AccelerationStructureGeometryDataKHR -> IO b -> IO b
  pokeZeroCStruct :: Ptr AccelerationStructureGeometryDataKHR -> IO b -> IO b
pokeZeroCStruct Ptr AccelerationStructureGeometryDataKHR
_ IO b
f = IO b
f
  cStructSize :: Int
cStructSize = Int
64
  cStructAlignment :: Int
cStructAlignment = Int
8

instance Zero AccelerationStructureGeometryDataKHR where
  zero :: AccelerationStructureGeometryDataKHR
zero = SomeStruct AccelerationStructureGeometryTrianglesDataKHR
-> AccelerationStructureGeometryDataKHR
Triangles (AccelerationStructureGeometryTrianglesDataKHR '[]
-> SomeStruct AccelerationStructureGeometryTrianglesDataKHR
forall (a :: [*] -> *) (es :: [*]).
(Extendss a es, PokeChain es, Show (Chain es)) =>
a es -> SomeStruct a
SomeStruct AccelerationStructureGeometryTrianglesDataKHR '[]
forall a. Zero a => a
zero)


type GeometryInstanceFlagsKHR = GeometryInstanceFlagBitsKHR

-- | VkGeometryInstanceFlagBitsKHR - Instance flag bits
--
-- = Description
--
-- 'GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR' and
-- 'GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR' /must/ not be used in the same
-- flag.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_ray_tracing VK_NV_ray_tracing>,
-- 'GeometryInstanceFlagsKHR'
newtype GeometryInstanceFlagBitsKHR = GeometryInstanceFlagBitsKHR Flags
  deriving newtype (GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR -> Bool
(GeometryInstanceFlagBitsKHR
 -> GeometryInstanceFlagBitsKHR -> Bool)
-> (GeometryInstanceFlagBitsKHR
    -> GeometryInstanceFlagBitsKHR -> Bool)
-> Eq GeometryInstanceFlagBitsKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR -> Bool
$c/= :: GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR -> Bool
== :: GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR -> Bool
$c== :: GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR -> Bool
Eq, Eq GeometryInstanceFlagBitsKHR
Eq GeometryInstanceFlagBitsKHR
-> (GeometryInstanceFlagBitsKHR
    -> GeometryInstanceFlagBitsKHR -> Ordering)
-> (GeometryInstanceFlagBitsKHR
    -> GeometryInstanceFlagBitsKHR -> Bool)
-> (GeometryInstanceFlagBitsKHR
    -> GeometryInstanceFlagBitsKHR -> Bool)
-> (GeometryInstanceFlagBitsKHR
    -> GeometryInstanceFlagBitsKHR -> Bool)
-> (GeometryInstanceFlagBitsKHR
    -> GeometryInstanceFlagBitsKHR -> Bool)
-> (GeometryInstanceFlagBitsKHR
    -> GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR)
-> (GeometryInstanceFlagBitsKHR
    -> GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR)
-> Ord GeometryInstanceFlagBitsKHR
GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR -> Bool
GeometryInstanceFlagBitsKHR
-> GeometryInstanceFlagBitsKHR -> Ordering
GeometryInstanceFlagBitsKHR
-> GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR
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 :: GeometryInstanceFlagBitsKHR
-> GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR
$cmin :: GeometryInstanceFlagBitsKHR
-> GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR
max :: GeometryInstanceFlagBitsKHR
-> GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR
$cmax :: GeometryInstanceFlagBitsKHR
-> GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR
>= :: GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR -> Bool
$c>= :: GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR -> Bool
> :: GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR -> Bool
$c> :: GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR -> Bool
<= :: GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR -> Bool
$c<= :: GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR -> Bool
< :: GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR -> Bool
$c< :: GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR -> Bool
compare :: GeometryInstanceFlagBitsKHR
-> GeometryInstanceFlagBitsKHR -> Ordering
$ccompare :: GeometryInstanceFlagBitsKHR
-> GeometryInstanceFlagBitsKHR -> Ordering
$cp1Ord :: Eq GeometryInstanceFlagBitsKHR
Ord, Ptr b -> Int -> IO GeometryInstanceFlagBitsKHR
Ptr b -> Int -> GeometryInstanceFlagBitsKHR -> IO ()
Ptr GeometryInstanceFlagBitsKHR -> IO GeometryInstanceFlagBitsKHR
Ptr GeometryInstanceFlagBitsKHR
-> Int -> IO GeometryInstanceFlagBitsKHR
Ptr GeometryInstanceFlagBitsKHR
-> Int -> GeometryInstanceFlagBitsKHR -> IO ()
Ptr GeometryInstanceFlagBitsKHR
-> GeometryInstanceFlagBitsKHR -> IO ()
GeometryInstanceFlagBitsKHR -> Int
(GeometryInstanceFlagBitsKHR -> Int)
-> (GeometryInstanceFlagBitsKHR -> Int)
-> (Ptr GeometryInstanceFlagBitsKHR
    -> Int -> IO GeometryInstanceFlagBitsKHR)
-> (Ptr GeometryInstanceFlagBitsKHR
    -> Int -> GeometryInstanceFlagBitsKHR -> IO ())
-> (forall b. Ptr b -> Int -> IO GeometryInstanceFlagBitsKHR)
-> (forall b. Ptr b -> Int -> GeometryInstanceFlagBitsKHR -> IO ())
-> (Ptr GeometryInstanceFlagBitsKHR
    -> IO GeometryInstanceFlagBitsKHR)
-> (Ptr GeometryInstanceFlagBitsKHR
    -> GeometryInstanceFlagBitsKHR -> IO ())
-> Storable GeometryInstanceFlagBitsKHR
forall b. Ptr b -> Int -> IO GeometryInstanceFlagBitsKHR
forall b. Ptr b -> Int -> GeometryInstanceFlagBitsKHR -> 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 GeometryInstanceFlagBitsKHR
-> GeometryInstanceFlagBitsKHR -> IO ()
$cpoke :: Ptr GeometryInstanceFlagBitsKHR
-> GeometryInstanceFlagBitsKHR -> IO ()
peek :: Ptr GeometryInstanceFlagBitsKHR -> IO GeometryInstanceFlagBitsKHR
$cpeek :: Ptr GeometryInstanceFlagBitsKHR -> IO GeometryInstanceFlagBitsKHR
pokeByteOff :: Ptr b -> Int -> GeometryInstanceFlagBitsKHR -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> GeometryInstanceFlagBitsKHR -> IO ()
peekByteOff :: Ptr b -> Int -> IO GeometryInstanceFlagBitsKHR
$cpeekByteOff :: forall b. Ptr b -> Int -> IO GeometryInstanceFlagBitsKHR
pokeElemOff :: Ptr GeometryInstanceFlagBitsKHR
-> Int -> GeometryInstanceFlagBitsKHR -> IO ()
$cpokeElemOff :: Ptr GeometryInstanceFlagBitsKHR
-> Int -> GeometryInstanceFlagBitsKHR -> IO ()
peekElemOff :: Ptr GeometryInstanceFlagBitsKHR
-> Int -> IO GeometryInstanceFlagBitsKHR
$cpeekElemOff :: Ptr GeometryInstanceFlagBitsKHR
-> Int -> IO GeometryInstanceFlagBitsKHR
alignment :: GeometryInstanceFlagBitsKHR -> Int
$calignment :: GeometryInstanceFlagBitsKHR -> Int
sizeOf :: GeometryInstanceFlagBitsKHR -> Int
$csizeOf :: GeometryInstanceFlagBitsKHR -> Int
Storable, GeometryInstanceFlagBitsKHR
GeometryInstanceFlagBitsKHR -> Zero GeometryInstanceFlagBitsKHR
forall a. a -> Zero a
zero :: GeometryInstanceFlagBitsKHR
$czero :: GeometryInstanceFlagBitsKHR
Zero, Eq GeometryInstanceFlagBitsKHR
GeometryInstanceFlagBitsKHR
Eq GeometryInstanceFlagBitsKHR
-> (GeometryInstanceFlagBitsKHR
    -> GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR)
-> (GeometryInstanceFlagBitsKHR
    -> GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR)
-> (GeometryInstanceFlagBitsKHR
    -> GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR)
-> (GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR)
-> (GeometryInstanceFlagBitsKHR
    -> Int -> GeometryInstanceFlagBitsKHR)
-> (GeometryInstanceFlagBitsKHR
    -> Int -> GeometryInstanceFlagBitsKHR)
-> GeometryInstanceFlagBitsKHR
-> (Int -> GeometryInstanceFlagBitsKHR)
-> (GeometryInstanceFlagBitsKHR
    -> Int -> GeometryInstanceFlagBitsKHR)
-> (GeometryInstanceFlagBitsKHR
    -> Int -> GeometryInstanceFlagBitsKHR)
-> (GeometryInstanceFlagBitsKHR
    -> Int -> GeometryInstanceFlagBitsKHR)
-> (GeometryInstanceFlagBitsKHR -> Int -> Bool)
-> (GeometryInstanceFlagBitsKHR -> Maybe Int)
-> (GeometryInstanceFlagBitsKHR -> Int)
-> (GeometryInstanceFlagBitsKHR -> Bool)
-> (GeometryInstanceFlagBitsKHR
    -> Int -> GeometryInstanceFlagBitsKHR)
-> (GeometryInstanceFlagBitsKHR
    -> Int -> GeometryInstanceFlagBitsKHR)
-> (GeometryInstanceFlagBitsKHR
    -> Int -> GeometryInstanceFlagBitsKHR)
-> (GeometryInstanceFlagBitsKHR
    -> Int -> GeometryInstanceFlagBitsKHR)
-> (GeometryInstanceFlagBitsKHR
    -> Int -> GeometryInstanceFlagBitsKHR)
-> (GeometryInstanceFlagBitsKHR
    -> Int -> GeometryInstanceFlagBitsKHR)
-> (GeometryInstanceFlagBitsKHR -> Int)
-> Bits GeometryInstanceFlagBitsKHR
Int -> GeometryInstanceFlagBitsKHR
GeometryInstanceFlagBitsKHR -> Bool
GeometryInstanceFlagBitsKHR -> Int
GeometryInstanceFlagBitsKHR -> Maybe Int
GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR
GeometryInstanceFlagBitsKHR -> Int -> Bool
GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
GeometryInstanceFlagBitsKHR
-> GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR
forall a.
Eq a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
popCount :: GeometryInstanceFlagBitsKHR -> Int
$cpopCount :: GeometryInstanceFlagBitsKHR -> Int
rotateR :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
$crotateR :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
rotateL :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
$crotateL :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
unsafeShiftR :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
$cunsafeShiftR :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
shiftR :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
$cshiftR :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
unsafeShiftL :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
$cunsafeShiftL :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
shiftL :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
$cshiftL :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
isSigned :: GeometryInstanceFlagBitsKHR -> Bool
$cisSigned :: GeometryInstanceFlagBitsKHR -> Bool
bitSize :: GeometryInstanceFlagBitsKHR -> Int
$cbitSize :: GeometryInstanceFlagBitsKHR -> Int
bitSizeMaybe :: GeometryInstanceFlagBitsKHR -> Maybe Int
$cbitSizeMaybe :: GeometryInstanceFlagBitsKHR -> Maybe Int
testBit :: GeometryInstanceFlagBitsKHR -> Int -> Bool
$ctestBit :: GeometryInstanceFlagBitsKHR -> Int -> Bool
complementBit :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
$ccomplementBit :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
clearBit :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
$cclearBit :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
setBit :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
$csetBit :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
bit :: Int -> GeometryInstanceFlagBitsKHR
$cbit :: Int -> GeometryInstanceFlagBitsKHR
zeroBits :: GeometryInstanceFlagBitsKHR
$czeroBits :: GeometryInstanceFlagBitsKHR
rotate :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
$crotate :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
shift :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
$cshift :: GeometryInstanceFlagBitsKHR -> Int -> GeometryInstanceFlagBitsKHR
complement :: GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR
$ccomplement :: GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR
xor :: GeometryInstanceFlagBitsKHR
-> GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR
$cxor :: GeometryInstanceFlagBitsKHR
-> GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR
.|. :: GeometryInstanceFlagBitsKHR
-> GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR
$c.|. :: GeometryInstanceFlagBitsKHR
-> GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR
.&. :: GeometryInstanceFlagBitsKHR
-> GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR
$c.&. :: GeometryInstanceFlagBitsKHR
-> GeometryInstanceFlagBitsKHR -> GeometryInstanceFlagBitsKHR
$cp1Bits :: Eq GeometryInstanceFlagBitsKHR
Bits, Bits GeometryInstanceFlagBitsKHR
Bits GeometryInstanceFlagBitsKHR
-> (GeometryInstanceFlagBitsKHR -> Int)
-> (GeometryInstanceFlagBitsKHR -> Int)
-> (GeometryInstanceFlagBitsKHR -> Int)
-> FiniteBits GeometryInstanceFlagBitsKHR
GeometryInstanceFlagBitsKHR -> Int
forall b.
Bits b -> (b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
countTrailingZeros :: GeometryInstanceFlagBitsKHR -> Int
$ccountTrailingZeros :: GeometryInstanceFlagBitsKHR -> Int
countLeadingZeros :: GeometryInstanceFlagBitsKHR -> Int
$ccountLeadingZeros :: GeometryInstanceFlagBitsKHR -> Int
finiteBitSize :: GeometryInstanceFlagBitsKHR -> Int
$cfiniteBitSize :: GeometryInstanceFlagBitsKHR -> Int
$cp1FiniteBits :: Bits GeometryInstanceFlagBitsKHR
FiniteBits)

-- | 'GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR' disables face
-- culling for this instance.
pattern $bGEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR :: GeometryInstanceFlagBitsKHR
$mGEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR :: forall r.
GeometryInstanceFlagBitsKHR -> (Void# -> r) -> (Void# -> r) -> r
GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR = GeometryInstanceFlagBitsKHR 0x00000001
-- | 'GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR' indicates that the
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-traversal-culling-face facing determination>
-- for geometry in this instance is inverted. Because the facing is
-- determined in object space, an instance transform does not change the
-- winding, but a geometry transform does.
pattern $bGEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR :: GeometryInstanceFlagBitsKHR
$mGEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR :: forall r.
GeometryInstanceFlagBitsKHR -> (Void# -> r) -> (Void# -> r) -> r
GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR         = GeometryInstanceFlagBitsKHR 0x00000002
-- | 'GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR' causes this instance to act as
-- though 'GEOMETRY_OPAQUE_BIT_KHR' were specified on all geometries
-- referenced by this instance. This behavior /can/ be overridden by the
-- SPIR-V @NoOpaqueKHR@ ray flag.
pattern $bGEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR :: GeometryInstanceFlagBitsKHR
$mGEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR :: forall r.
GeometryInstanceFlagBitsKHR -> (Void# -> r) -> (Void# -> r) -> r
GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR                 = GeometryInstanceFlagBitsKHR 0x00000004
-- | 'GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR' causes this instance to act
-- as though 'GEOMETRY_OPAQUE_BIT_KHR' were not specified on all geometries
-- referenced by this instance. This behavior /can/ be overridden by the
-- SPIR-V @OpaqueKHR@ ray flag.
pattern $bGEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR :: GeometryInstanceFlagBitsKHR
$mGEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR :: forall r.
GeometryInstanceFlagBitsKHR -> (Void# -> r) -> (Void# -> r) -> r
GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR              = GeometryInstanceFlagBitsKHR 0x00000008

conNameGeometryInstanceFlagBitsKHR :: String
conNameGeometryInstanceFlagBitsKHR :: String
conNameGeometryInstanceFlagBitsKHR = String
"GeometryInstanceFlagBitsKHR"

enumPrefixGeometryInstanceFlagBitsKHR :: String
enumPrefixGeometryInstanceFlagBitsKHR :: String
enumPrefixGeometryInstanceFlagBitsKHR = String
"GEOMETRY_INSTANCE_"

showTableGeometryInstanceFlagBitsKHR :: [(GeometryInstanceFlagBitsKHR, String)]
showTableGeometryInstanceFlagBitsKHR :: [(GeometryInstanceFlagBitsKHR, String)]
showTableGeometryInstanceFlagBitsKHR =
  [ (GeometryInstanceFlagBitsKHR
GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR, String
"TRIANGLE_FACING_CULL_DISABLE_BIT_KHR")
  , (GeometryInstanceFlagBitsKHR
GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR        , String
"TRIANGLE_FLIP_FACING_BIT_KHR")
  , (GeometryInstanceFlagBitsKHR
GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR                , String
"FORCE_OPAQUE_BIT_KHR")
  , (GeometryInstanceFlagBitsKHR
GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR             , String
"FORCE_NO_OPAQUE_BIT_KHR")
  ]

instance Show GeometryInstanceFlagBitsKHR where
  showsPrec :: Int -> GeometryInstanceFlagBitsKHR -> ShowS
showsPrec = String
-> [(GeometryInstanceFlagBitsKHR, String)]
-> String
-> (GeometryInstanceFlagBitsKHR -> "firstQuery" ::: Word32)
-> (("firstQuery" ::: Word32) -> ShowS)
-> Int
-> GeometryInstanceFlagBitsKHR
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixGeometryInstanceFlagBitsKHR
                            [(GeometryInstanceFlagBitsKHR, String)]
showTableGeometryInstanceFlagBitsKHR
                            String
conNameGeometryInstanceFlagBitsKHR
                            (\(GeometryInstanceFlagBitsKHR "firstQuery" ::: Word32
x) -> "firstQuery" ::: Word32
x)
                            (\"firstQuery" ::: Word32
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ("firstQuery" ::: Word32) -> ShowS
forall a. (Integral a, Show a) => a -> ShowS
showHex "firstQuery" ::: Word32
x)

instance Read GeometryInstanceFlagBitsKHR where
  readPrec :: ReadPrec GeometryInstanceFlagBitsKHR
readPrec = String
-> [(GeometryInstanceFlagBitsKHR, String)]
-> String
-> (("firstQuery" ::: Word32) -> GeometryInstanceFlagBitsKHR)
-> ReadPrec GeometryInstanceFlagBitsKHR
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixGeometryInstanceFlagBitsKHR
                          [(GeometryInstanceFlagBitsKHR, String)]
showTableGeometryInstanceFlagBitsKHR
                          String
conNameGeometryInstanceFlagBitsKHR
                          ("firstQuery" ::: Word32) -> GeometryInstanceFlagBitsKHR
GeometryInstanceFlagBitsKHR


type GeometryFlagsKHR = GeometryFlagBitsKHR

-- | VkGeometryFlagBitsKHR - Bitmask specifying additional parameters for a
-- geometry
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_ray_tracing VK_NV_ray_tracing>,
-- 'GeometryFlagsKHR'
newtype GeometryFlagBitsKHR = GeometryFlagBitsKHR Flags
  deriving newtype (GeometryFlagsKHR -> GeometryFlagsKHR -> Bool
(GeometryFlagsKHR -> GeometryFlagsKHR -> Bool)
-> (GeometryFlagsKHR -> GeometryFlagsKHR -> Bool)
-> Eq GeometryFlagsKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GeometryFlagsKHR -> GeometryFlagsKHR -> Bool
$c/= :: GeometryFlagsKHR -> GeometryFlagsKHR -> Bool
== :: GeometryFlagsKHR -> GeometryFlagsKHR -> Bool
$c== :: GeometryFlagsKHR -> GeometryFlagsKHR -> Bool
Eq, Eq GeometryFlagsKHR
Eq GeometryFlagsKHR
-> (GeometryFlagsKHR -> GeometryFlagsKHR -> Ordering)
-> (GeometryFlagsKHR -> GeometryFlagsKHR -> Bool)
-> (GeometryFlagsKHR -> GeometryFlagsKHR -> Bool)
-> (GeometryFlagsKHR -> GeometryFlagsKHR -> Bool)
-> (GeometryFlagsKHR -> GeometryFlagsKHR -> Bool)
-> (GeometryFlagsKHR -> GeometryFlagsKHR -> GeometryFlagsKHR)
-> (GeometryFlagsKHR -> GeometryFlagsKHR -> GeometryFlagsKHR)
-> Ord GeometryFlagsKHR
GeometryFlagsKHR -> GeometryFlagsKHR -> Bool
GeometryFlagsKHR -> GeometryFlagsKHR -> Ordering
GeometryFlagsKHR -> GeometryFlagsKHR -> GeometryFlagsKHR
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 :: GeometryFlagsKHR -> GeometryFlagsKHR -> GeometryFlagsKHR
$cmin :: GeometryFlagsKHR -> GeometryFlagsKHR -> GeometryFlagsKHR
max :: GeometryFlagsKHR -> GeometryFlagsKHR -> GeometryFlagsKHR
$cmax :: GeometryFlagsKHR -> GeometryFlagsKHR -> GeometryFlagsKHR
>= :: GeometryFlagsKHR -> GeometryFlagsKHR -> Bool
$c>= :: GeometryFlagsKHR -> GeometryFlagsKHR -> Bool
> :: GeometryFlagsKHR -> GeometryFlagsKHR -> Bool
$c> :: GeometryFlagsKHR -> GeometryFlagsKHR -> Bool
<= :: GeometryFlagsKHR -> GeometryFlagsKHR -> Bool
$c<= :: GeometryFlagsKHR -> GeometryFlagsKHR -> Bool
< :: GeometryFlagsKHR -> GeometryFlagsKHR -> Bool
$c< :: GeometryFlagsKHR -> GeometryFlagsKHR -> Bool
compare :: GeometryFlagsKHR -> GeometryFlagsKHR -> Ordering
$ccompare :: GeometryFlagsKHR -> GeometryFlagsKHR -> Ordering
$cp1Ord :: Eq GeometryFlagsKHR
Ord, Ptr b -> Int -> IO GeometryFlagsKHR
Ptr b -> Int -> GeometryFlagsKHR -> IO ()
Ptr GeometryFlagsKHR -> IO GeometryFlagsKHR
Ptr GeometryFlagsKHR -> Int -> IO GeometryFlagsKHR
Ptr GeometryFlagsKHR -> Int -> GeometryFlagsKHR -> IO ()
Ptr GeometryFlagsKHR -> GeometryFlagsKHR -> IO ()
GeometryFlagsKHR -> Int
(GeometryFlagsKHR -> Int)
-> (GeometryFlagsKHR -> Int)
-> (Ptr GeometryFlagsKHR -> Int -> IO GeometryFlagsKHR)
-> (Ptr GeometryFlagsKHR -> Int -> GeometryFlagsKHR -> IO ())
-> (forall b. Ptr b -> Int -> IO GeometryFlagsKHR)
-> (forall b. Ptr b -> Int -> GeometryFlagsKHR -> IO ())
-> (Ptr GeometryFlagsKHR -> IO GeometryFlagsKHR)
-> (Ptr GeometryFlagsKHR -> GeometryFlagsKHR -> IO ())
-> Storable GeometryFlagsKHR
forall b. Ptr b -> Int -> IO GeometryFlagsKHR
forall b. Ptr b -> Int -> GeometryFlagsKHR -> 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 GeometryFlagsKHR -> GeometryFlagsKHR -> IO ()
$cpoke :: Ptr GeometryFlagsKHR -> GeometryFlagsKHR -> IO ()
peek :: Ptr GeometryFlagsKHR -> IO GeometryFlagsKHR
$cpeek :: Ptr GeometryFlagsKHR -> IO GeometryFlagsKHR
pokeByteOff :: Ptr b -> Int -> GeometryFlagsKHR -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> GeometryFlagsKHR -> IO ()
peekByteOff :: Ptr b -> Int -> IO GeometryFlagsKHR
$cpeekByteOff :: forall b. Ptr b -> Int -> IO GeometryFlagsKHR
pokeElemOff :: Ptr GeometryFlagsKHR -> Int -> GeometryFlagsKHR -> IO ()
$cpokeElemOff :: Ptr GeometryFlagsKHR -> Int -> GeometryFlagsKHR -> IO ()
peekElemOff :: Ptr GeometryFlagsKHR -> Int -> IO GeometryFlagsKHR
$cpeekElemOff :: Ptr GeometryFlagsKHR -> Int -> IO GeometryFlagsKHR
alignment :: GeometryFlagsKHR -> Int
$calignment :: GeometryFlagsKHR -> Int
sizeOf :: GeometryFlagsKHR -> Int
$csizeOf :: GeometryFlagsKHR -> Int
Storable, GeometryFlagsKHR
GeometryFlagsKHR -> Zero GeometryFlagsKHR
forall a. a -> Zero a
zero :: GeometryFlagsKHR
$czero :: GeometryFlagsKHR
Zero, Eq GeometryFlagsKHR
GeometryFlagsKHR
Eq GeometryFlagsKHR
-> (GeometryFlagsKHR -> GeometryFlagsKHR -> GeometryFlagsKHR)
-> (GeometryFlagsKHR -> GeometryFlagsKHR -> GeometryFlagsKHR)
-> (GeometryFlagsKHR -> GeometryFlagsKHR -> GeometryFlagsKHR)
-> (GeometryFlagsKHR -> GeometryFlagsKHR)
-> (GeometryFlagsKHR -> Int -> GeometryFlagsKHR)
-> (GeometryFlagsKHR -> Int -> GeometryFlagsKHR)
-> GeometryFlagsKHR
-> (Int -> GeometryFlagsKHR)
-> (GeometryFlagsKHR -> Int -> GeometryFlagsKHR)
-> (GeometryFlagsKHR -> Int -> GeometryFlagsKHR)
-> (GeometryFlagsKHR -> Int -> GeometryFlagsKHR)
-> (GeometryFlagsKHR -> Int -> Bool)
-> (GeometryFlagsKHR -> Maybe Int)
-> (GeometryFlagsKHR -> Int)
-> (GeometryFlagsKHR -> Bool)
-> (GeometryFlagsKHR -> Int -> GeometryFlagsKHR)
-> (GeometryFlagsKHR -> Int -> GeometryFlagsKHR)
-> (GeometryFlagsKHR -> Int -> GeometryFlagsKHR)
-> (GeometryFlagsKHR -> Int -> GeometryFlagsKHR)
-> (GeometryFlagsKHR -> Int -> GeometryFlagsKHR)
-> (GeometryFlagsKHR -> Int -> GeometryFlagsKHR)
-> (GeometryFlagsKHR -> Int)
-> Bits GeometryFlagsKHR
Int -> GeometryFlagsKHR
GeometryFlagsKHR -> Bool
GeometryFlagsKHR -> Int
GeometryFlagsKHR -> Maybe Int
GeometryFlagsKHR -> GeometryFlagsKHR
GeometryFlagsKHR -> Int -> Bool
GeometryFlagsKHR -> Int -> GeometryFlagsKHR
GeometryFlagsKHR -> GeometryFlagsKHR -> GeometryFlagsKHR
forall a.
Eq a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
popCount :: GeometryFlagsKHR -> Int
$cpopCount :: GeometryFlagsKHR -> Int
rotateR :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
$crotateR :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
rotateL :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
$crotateL :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
unsafeShiftR :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
$cunsafeShiftR :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
shiftR :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
$cshiftR :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
unsafeShiftL :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
$cunsafeShiftL :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
shiftL :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
$cshiftL :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
isSigned :: GeometryFlagsKHR -> Bool
$cisSigned :: GeometryFlagsKHR -> Bool
bitSize :: GeometryFlagsKHR -> Int
$cbitSize :: GeometryFlagsKHR -> Int
bitSizeMaybe :: GeometryFlagsKHR -> Maybe Int
$cbitSizeMaybe :: GeometryFlagsKHR -> Maybe Int
testBit :: GeometryFlagsKHR -> Int -> Bool
$ctestBit :: GeometryFlagsKHR -> Int -> Bool
complementBit :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
$ccomplementBit :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
clearBit :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
$cclearBit :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
setBit :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
$csetBit :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
bit :: Int -> GeometryFlagsKHR
$cbit :: Int -> GeometryFlagsKHR
zeroBits :: GeometryFlagsKHR
$czeroBits :: GeometryFlagsKHR
rotate :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
$crotate :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
shift :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
$cshift :: GeometryFlagsKHR -> Int -> GeometryFlagsKHR
complement :: GeometryFlagsKHR -> GeometryFlagsKHR
$ccomplement :: GeometryFlagsKHR -> GeometryFlagsKHR
xor :: GeometryFlagsKHR -> GeometryFlagsKHR -> GeometryFlagsKHR
$cxor :: GeometryFlagsKHR -> GeometryFlagsKHR -> GeometryFlagsKHR
.|. :: GeometryFlagsKHR -> GeometryFlagsKHR -> GeometryFlagsKHR
$c.|. :: GeometryFlagsKHR -> GeometryFlagsKHR -> GeometryFlagsKHR
.&. :: GeometryFlagsKHR -> GeometryFlagsKHR -> GeometryFlagsKHR
$c.&. :: GeometryFlagsKHR -> GeometryFlagsKHR -> GeometryFlagsKHR
$cp1Bits :: Eq GeometryFlagsKHR
Bits, Bits GeometryFlagsKHR
Bits GeometryFlagsKHR
-> (GeometryFlagsKHR -> Int)
-> (GeometryFlagsKHR -> Int)
-> (GeometryFlagsKHR -> Int)
-> FiniteBits GeometryFlagsKHR
GeometryFlagsKHR -> Int
forall b.
Bits b -> (b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
countTrailingZeros :: GeometryFlagsKHR -> Int
$ccountTrailingZeros :: GeometryFlagsKHR -> Int
countLeadingZeros :: GeometryFlagsKHR -> Int
$ccountLeadingZeros :: GeometryFlagsKHR -> Int
finiteBitSize :: GeometryFlagsKHR -> Int
$cfiniteBitSize :: GeometryFlagsKHR -> Int
$cp1FiniteBits :: Bits GeometryFlagsKHR
FiniteBits)

-- | 'GEOMETRY_OPAQUE_BIT_KHR' indicates that this geometry does not invoke
-- the any-hit shaders even if present in a hit group.
pattern $bGEOMETRY_OPAQUE_BIT_KHR :: GeometryFlagsKHR
$mGEOMETRY_OPAQUE_BIT_KHR :: forall r. GeometryFlagsKHR -> (Void# -> r) -> (Void# -> r) -> r
GEOMETRY_OPAQUE_BIT_KHR                          = GeometryFlagBitsKHR 0x00000001
-- | 'GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR' indicates that the
-- implementation /must/ only call the any-hit shader a single time for
-- each primitive in this geometry. If this bit is absent an implementation
-- /may/ invoke the any-hit shader more than once for this geometry.
pattern $bGEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR :: GeometryFlagsKHR
$mGEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR :: forall r. GeometryFlagsKHR -> (Void# -> r) -> (Void# -> r) -> r
GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR = GeometryFlagBitsKHR 0x00000002

conNameGeometryFlagBitsKHR :: String
conNameGeometryFlagBitsKHR :: String
conNameGeometryFlagBitsKHR = String
"GeometryFlagBitsKHR"

enumPrefixGeometryFlagBitsKHR :: String
enumPrefixGeometryFlagBitsKHR :: String
enumPrefixGeometryFlagBitsKHR = String
"GEOMETRY_"

showTableGeometryFlagBitsKHR :: [(GeometryFlagBitsKHR, String)]
showTableGeometryFlagBitsKHR :: [(GeometryFlagsKHR, String)]
showTableGeometryFlagBitsKHR =
  [ (GeometryFlagsKHR
GEOMETRY_OPAQUE_BIT_KHR                         , String
"OPAQUE_BIT_KHR")
  , (GeometryFlagsKHR
GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR, String
"NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR")
  ]

instance Show GeometryFlagBitsKHR where
  showsPrec :: Int -> GeometryFlagsKHR -> ShowS
showsPrec = String
-> [(GeometryFlagsKHR, String)]
-> String
-> (GeometryFlagsKHR -> "firstQuery" ::: Word32)
-> (("firstQuery" ::: Word32) -> ShowS)
-> Int
-> GeometryFlagsKHR
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixGeometryFlagBitsKHR
                            [(GeometryFlagsKHR, String)]
showTableGeometryFlagBitsKHR
                            String
conNameGeometryFlagBitsKHR
                            (\(GeometryFlagBitsKHR "firstQuery" ::: Word32
x) -> "firstQuery" ::: Word32
x)
                            (\"firstQuery" ::: Word32
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ("firstQuery" ::: Word32) -> ShowS
forall a. (Integral a, Show a) => a -> ShowS
showHex "firstQuery" ::: Word32
x)

instance Read GeometryFlagBitsKHR where
  readPrec :: ReadPrec GeometryFlagsKHR
readPrec = String
-> [(GeometryFlagsKHR, String)]
-> String
-> (("firstQuery" ::: Word32) -> GeometryFlagsKHR)
-> ReadPrec GeometryFlagsKHR
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixGeometryFlagBitsKHR
                          [(GeometryFlagsKHR, String)]
showTableGeometryFlagBitsKHR
                          String
conNameGeometryFlagBitsKHR
                          ("firstQuery" ::: Word32) -> GeometryFlagsKHR
GeometryFlagBitsKHR


type BuildAccelerationStructureFlagsKHR = BuildAccelerationStructureFlagBitsKHR

-- | VkBuildAccelerationStructureFlagBitsKHR - Bitmask specifying additional
-- parameters for acceleration structure builds
--
-- = Description
--
-- Note
--
-- 'BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR' and
-- 'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' /may/ take more
-- time and memory than a normal build, and so /should/ only be used when
-- those features are needed.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_ray_tracing VK_NV_ray_tracing>,
-- 'BuildAccelerationStructureFlagsKHR'
newtype BuildAccelerationStructureFlagBitsKHR = BuildAccelerationStructureFlagBitsKHR Flags
  deriving newtype (BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR -> Bool
(BuildAccelerationStructureFlagsKHR
 -> BuildAccelerationStructureFlagsKHR -> Bool)
-> (BuildAccelerationStructureFlagsKHR
    -> BuildAccelerationStructureFlagsKHR -> Bool)
-> Eq BuildAccelerationStructureFlagsKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR -> Bool
$c/= :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR -> Bool
== :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR -> Bool
$c== :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR -> Bool
Eq, Eq BuildAccelerationStructureFlagsKHR
Eq BuildAccelerationStructureFlagsKHR
-> (BuildAccelerationStructureFlagsKHR
    -> BuildAccelerationStructureFlagsKHR -> Ordering)
-> (BuildAccelerationStructureFlagsKHR
    -> BuildAccelerationStructureFlagsKHR -> Bool)
-> (BuildAccelerationStructureFlagsKHR
    -> BuildAccelerationStructureFlagsKHR -> Bool)
-> (BuildAccelerationStructureFlagsKHR
    -> BuildAccelerationStructureFlagsKHR -> Bool)
-> (BuildAccelerationStructureFlagsKHR
    -> BuildAccelerationStructureFlagsKHR -> Bool)
-> (BuildAccelerationStructureFlagsKHR
    -> BuildAccelerationStructureFlagsKHR
    -> BuildAccelerationStructureFlagsKHR)
-> (BuildAccelerationStructureFlagsKHR
    -> BuildAccelerationStructureFlagsKHR
    -> BuildAccelerationStructureFlagsKHR)
-> Ord BuildAccelerationStructureFlagsKHR
BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR -> Bool
BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR -> Ordering
BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
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 :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
$cmin :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
max :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
$cmax :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
>= :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR -> Bool
$c>= :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR -> Bool
> :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR -> Bool
$c> :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR -> Bool
<= :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR -> Bool
$c<= :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR -> Bool
< :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR -> Bool
$c< :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR -> Bool
compare :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR -> Ordering
$ccompare :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR -> Ordering
$cp1Ord :: Eq BuildAccelerationStructureFlagsKHR
Ord, Ptr b -> Int -> IO BuildAccelerationStructureFlagsKHR
Ptr b -> Int -> BuildAccelerationStructureFlagsKHR -> IO ()
Ptr BuildAccelerationStructureFlagsKHR
-> IO BuildAccelerationStructureFlagsKHR
Ptr BuildAccelerationStructureFlagsKHR
-> Int -> IO BuildAccelerationStructureFlagsKHR
Ptr BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR -> IO ()
Ptr BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR -> IO ()
BuildAccelerationStructureFlagsKHR -> Int
(BuildAccelerationStructureFlagsKHR -> Int)
-> (BuildAccelerationStructureFlagsKHR -> Int)
-> (Ptr BuildAccelerationStructureFlagsKHR
    -> Int -> IO BuildAccelerationStructureFlagsKHR)
-> (Ptr BuildAccelerationStructureFlagsKHR
    -> Int -> BuildAccelerationStructureFlagsKHR -> IO ())
-> (forall b.
    Ptr b -> Int -> IO BuildAccelerationStructureFlagsKHR)
-> (forall b.
    Ptr b -> Int -> BuildAccelerationStructureFlagsKHR -> IO ())
-> (Ptr BuildAccelerationStructureFlagsKHR
    -> IO BuildAccelerationStructureFlagsKHR)
-> (Ptr BuildAccelerationStructureFlagsKHR
    -> BuildAccelerationStructureFlagsKHR -> IO ())
-> Storable BuildAccelerationStructureFlagsKHR
forall b. Ptr b -> Int -> IO BuildAccelerationStructureFlagsKHR
forall b.
Ptr b -> Int -> BuildAccelerationStructureFlagsKHR -> 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 BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR -> IO ()
$cpoke :: Ptr BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR -> IO ()
peek :: Ptr BuildAccelerationStructureFlagsKHR
-> IO BuildAccelerationStructureFlagsKHR
$cpeek :: Ptr BuildAccelerationStructureFlagsKHR
-> IO BuildAccelerationStructureFlagsKHR
pokeByteOff :: Ptr b -> Int -> BuildAccelerationStructureFlagsKHR -> IO ()
$cpokeByteOff :: forall b.
Ptr b -> Int -> BuildAccelerationStructureFlagsKHR -> IO ()
peekByteOff :: Ptr b -> Int -> IO BuildAccelerationStructureFlagsKHR
$cpeekByteOff :: forall b. Ptr b -> Int -> IO BuildAccelerationStructureFlagsKHR
pokeElemOff :: Ptr BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR -> IO ()
$cpokeElemOff :: Ptr BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR -> IO ()
peekElemOff :: Ptr BuildAccelerationStructureFlagsKHR
-> Int -> IO BuildAccelerationStructureFlagsKHR
$cpeekElemOff :: Ptr BuildAccelerationStructureFlagsKHR
-> Int -> IO BuildAccelerationStructureFlagsKHR
alignment :: BuildAccelerationStructureFlagsKHR -> Int
$calignment :: BuildAccelerationStructureFlagsKHR -> Int
sizeOf :: BuildAccelerationStructureFlagsKHR -> Int
$csizeOf :: BuildAccelerationStructureFlagsKHR -> Int
Storable, BuildAccelerationStructureFlagsKHR
BuildAccelerationStructureFlagsKHR
-> Zero BuildAccelerationStructureFlagsKHR
forall a. a -> Zero a
zero :: BuildAccelerationStructureFlagsKHR
$czero :: BuildAccelerationStructureFlagsKHR
Zero, Eq BuildAccelerationStructureFlagsKHR
BuildAccelerationStructureFlagsKHR
Eq BuildAccelerationStructureFlagsKHR
-> (BuildAccelerationStructureFlagsKHR
    -> BuildAccelerationStructureFlagsKHR
    -> BuildAccelerationStructureFlagsKHR)
-> (BuildAccelerationStructureFlagsKHR
    -> BuildAccelerationStructureFlagsKHR
    -> BuildAccelerationStructureFlagsKHR)
-> (BuildAccelerationStructureFlagsKHR
    -> BuildAccelerationStructureFlagsKHR
    -> BuildAccelerationStructureFlagsKHR)
-> (BuildAccelerationStructureFlagsKHR
    -> BuildAccelerationStructureFlagsKHR)
-> (BuildAccelerationStructureFlagsKHR
    -> Int -> BuildAccelerationStructureFlagsKHR)
-> (BuildAccelerationStructureFlagsKHR
    -> Int -> BuildAccelerationStructureFlagsKHR)
-> BuildAccelerationStructureFlagsKHR
-> (Int -> BuildAccelerationStructureFlagsKHR)
-> (BuildAccelerationStructureFlagsKHR
    -> Int -> BuildAccelerationStructureFlagsKHR)
-> (BuildAccelerationStructureFlagsKHR
    -> Int -> BuildAccelerationStructureFlagsKHR)
-> (BuildAccelerationStructureFlagsKHR
    -> Int -> BuildAccelerationStructureFlagsKHR)
-> (BuildAccelerationStructureFlagsKHR -> Int -> Bool)
-> (BuildAccelerationStructureFlagsKHR -> Maybe Int)
-> (BuildAccelerationStructureFlagsKHR -> Int)
-> (BuildAccelerationStructureFlagsKHR -> Bool)
-> (BuildAccelerationStructureFlagsKHR
    -> Int -> BuildAccelerationStructureFlagsKHR)
-> (BuildAccelerationStructureFlagsKHR
    -> Int -> BuildAccelerationStructureFlagsKHR)
-> (BuildAccelerationStructureFlagsKHR
    -> Int -> BuildAccelerationStructureFlagsKHR)
-> (BuildAccelerationStructureFlagsKHR
    -> Int -> BuildAccelerationStructureFlagsKHR)
-> (BuildAccelerationStructureFlagsKHR
    -> Int -> BuildAccelerationStructureFlagsKHR)
-> (BuildAccelerationStructureFlagsKHR
    -> Int -> BuildAccelerationStructureFlagsKHR)
-> (BuildAccelerationStructureFlagsKHR -> Int)
-> Bits BuildAccelerationStructureFlagsKHR
Int -> BuildAccelerationStructureFlagsKHR
BuildAccelerationStructureFlagsKHR -> Bool
BuildAccelerationStructureFlagsKHR -> Int
BuildAccelerationStructureFlagsKHR -> Maybe Int
BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
BuildAccelerationStructureFlagsKHR -> Int -> Bool
BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
forall a.
Eq a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
popCount :: BuildAccelerationStructureFlagsKHR -> Int
$cpopCount :: BuildAccelerationStructureFlagsKHR -> Int
rotateR :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
$crotateR :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
rotateL :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
$crotateL :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
unsafeShiftR :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
$cunsafeShiftR :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
shiftR :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
$cshiftR :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
unsafeShiftL :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
$cunsafeShiftL :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
shiftL :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
$cshiftL :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
isSigned :: BuildAccelerationStructureFlagsKHR -> Bool
$cisSigned :: BuildAccelerationStructureFlagsKHR -> Bool
bitSize :: BuildAccelerationStructureFlagsKHR -> Int
$cbitSize :: BuildAccelerationStructureFlagsKHR -> Int
bitSizeMaybe :: BuildAccelerationStructureFlagsKHR -> Maybe Int
$cbitSizeMaybe :: BuildAccelerationStructureFlagsKHR -> Maybe Int
testBit :: BuildAccelerationStructureFlagsKHR -> Int -> Bool
$ctestBit :: BuildAccelerationStructureFlagsKHR -> Int -> Bool
complementBit :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
$ccomplementBit :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
clearBit :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
$cclearBit :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
setBit :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
$csetBit :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
bit :: Int -> BuildAccelerationStructureFlagsKHR
$cbit :: Int -> BuildAccelerationStructureFlagsKHR
zeroBits :: BuildAccelerationStructureFlagsKHR
$czeroBits :: BuildAccelerationStructureFlagsKHR
rotate :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
$crotate :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
shift :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
$cshift :: BuildAccelerationStructureFlagsKHR
-> Int -> BuildAccelerationStructureFlagsKHR
complement :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
$ccomplement :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
xor :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
$cxor :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
.|. :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
$c.|. :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
.&. :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
$c.&. :: BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
-> BuildAccelerationStructureFlagsKHR
$cp1Bits :: Eq BuildAccelerationStructureFlagsKHR
Bits, Bits BuildAccelerationStructureFlagsKHR
Bits BuildAccelerationStructureFlagsKHR
-> (BuildAccelerationStructureFlagsKHR -> Int)
-> (BuildAccelerationStructureFlagsKHR -> Int)
-> (BuildAccelerationStructureFlagsKHR -> Int)
-> FiniteBits BuildAccelerationStructureFlagsKHR
BuildAccelerationStructureFlagsKHR -> Int
forall b.
Bits b -> (b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
countTrailingZeros :: BuildAccelerationStructureFlagsKHR -> Int
$ccountTrailingZeros :: BuildAccelerationStructureFlagsKHR -> Int
countLeadingZeros :: BuildAccelerationStructureFlagsKHR -> Int
$ccountLeadingZeros :: BuildAccelerationStructureFlagsKHR -> Int
finiteBitSize :: BuildAccelerationStructureFlagsKHR -> Int
$cfiniteBitSize :: BuildAccelerationStructureFlagsKHR -> Int
$cp1FiniteBits :: Bits BuildAccelerationStructureFlagsKHR
FiniteBits)

-- | 'BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR' indicates that the
-- specified acceleration structure /can/ be updated with a @mode@ of
-- 'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR' in
-- 'AccelerationStructureBuildGeometryInfoKHR' or an @update@ of
-- 'Vulkan.Core10.FundamentalTypes.TRUE' in
-- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdBuildAccelerationStructureNV' .
pattern $bBUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR :: BuildAccelerationStructureFlagsKHR
$mBUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR :: forall r.
BuildAccelerationStructureFlagsKHR
-> (Void# -> r) -> (Void# -> r) -> r
BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR      = BuildAccelerationStructureFlagBitsKHR 0x00000001
-- | 'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' indicates that
-- the specified acceleration structure /can/ act as the source for a copy
-- acceleration structure command with @mode@ of
-- 'COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR' to produce a compacted
-- acceleration structure.
pattern $bBUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR :: BuildAccelerationStructureFlagsKHR
$mBUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR :: forall r.
BuildAccelerationStructureFlagsKHR
-> (Void# -> r) -> (Void# -> r) -> r
BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR  = BuildAccelerationStructureFlagBitsKHR 0x00000002
-- | 'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR' indicates that
-- the given acceleration structure build /should/ prioritize trace
-- performance over build time.
pattern $bBUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR :: BuildAccelerationStructureFlagsKHR
$mBUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR :: forall r.
BuildAccelerationStructureFlagsKHR
-> (Void# -> r) -> (Void# -> r) -> r
BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR = BuildAccelerationStructureFlagBitsKHR 0x00000004
-- | 'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR' indicates that
-- the given acceleration structure build /should/ prioritize build time
-- over trace performance.
pattern $bBUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR :: BuildAccelerationStructureFlagsKHR
$mBUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR :: forall r.
BuildAccelerationStructureFlagsKHR
-> (Void# -> r) -> (Void# -> r) -> r
BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR = BuildAccelerationStructureFlagBitsKHR 0x00000008
-- | 'BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR' indicates that this
-- acceleration structure /should/ minimize the size of the scratch memory
-- and the final result acceleration structure, potentially at the expense
-- of build time or trace performance.
pattern $bBUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR :: BuildAccelerationStructureFlagsKHR
$mBUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR :: forall r.
BuildAccelerationStructureFlagsKHR
-> (Void# -> r) -> (Void# -> r) -> r
BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR        = BuildAccelerationStructureFlagBitsKHR 0x00000010
-- No documentation found for Nested "VkBuildAccelerationStructureFlagBitsKHR" "VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV"
pattern $bBUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV :: BuildAccelerationStructureFlagsKHR
$mBUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV :: forall r.
BuildAccelerationStructureFlagsKHR
-> (Void# -> r) -> (Void# -> r) -> r
BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV             = BuildAccelerationStructureFlagBitsKHR 0x00000020

conNameBuildAccelerationStructureFlagBitsKHR :: String
conNameBuildAccelerationStructureFlagBitsKHR :: String
conNameBuildAccelerationStructureFlagBitsKHR = String
"BuildAccelerationStructureFlagBitsKHR"

enumPrefixBuildAccelerationStructureFlagBitsKHR :: String
enumPrefixBuildAccelerationStructureFlagBitsKHR :: String
enumPrefixBuildAccelerationStructureFlagBitsKHR = String
"BUILD_ACCELERATION_STRUCTURE_"

showTableBuildAccelerationStructureFlagBitsKHR :: [(BuildAccelerationStructureFlagBitsKHR, String)]
showTableBuildAccelerationStructureFlagBitsKHR :: [(BuildAccelerationStructureFlagsKHR, String)]
showTableBuildAccelerationStructureFlagBitsKHR =
  [ (BuildAccelerationStructureFlagsKHR
BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR     , String
"ALLOW_UPDATE_BIT_KHR")
  , (BuildAccelerationStructureFlagsKHR
BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR , String
"ALLOW_COMPACTION_BIT_KHR")
  , (BuildAccelerationStructureFlagsKHR
BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR, String
"PREFER_FAST_TRACE_BIT_KHR")
  , (BuildAccelerationStructureFlagsKHR
BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR, String
"PREFER_FAST_BUILD_BIT_KHR")
  , (BuildAccelerationStructureFlagsKHR
BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR       , String
"LOW_MEMORY_BIT_KHR")
  , (BuildAccelerationStructureFlagsKHR
BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV            , String
"MOTION_BIT_NV")
  ]

instance Show BuildAccelerationStructureFlagBitsKHR where
  showsPrec :: Int -> BuildAccelerationStructureFlagsKHR -> ShowS
showsPrec = String
-> [(BuildAccelerationStructureFlagsKHR, String)]
-> String
-> (BuildAccelerationStructureFlagsKHR -> "firstQuery" ::: Word32)
-> (("firstQuery" ::: Word32) -> ShowS)
-> Int
-> BuildAccelerationStructureFlagsKHR
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixBuildAccelerationStructureFlagBitsKHR
                            [(BuildAccelerationStructureFlagsKHR, String)]
showTableBuildAccelerationStructureFlagBitsKHR
                            String
conNameBuildAccelerationStructureFlagBitsKHR
                            (\(BuildAccelerationStructureFlagBitsKHR "firstQuery" ::: Word32
x) -> "firstQuery" ::: Word32
x)
                            (\"firstQuery" ::: Word32
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ("firstQuery" ::: Word32) -> ShowS
forall a. (Integral a, Show a) => a -> ShowS
showHex "firstQuery" ::: Word32
x)

instance Read BuildAccelerationStructureFlagBitsKHR where
  readPrec :: ReadPrec BuildAccelerationStructureFlagsKHR
readPrec = String
-> [(BuildAccelerationStructureFlagsKHR, String)]
-> String
-> (("firstQuery" ::: Word32)
    -> BuildAccelerationStructureFlagsKHR)
-> ReadPrec BuildAccelerationStructureFlagsKHR
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixBuildAccelerationStructureFlagBitsKHR
                          [(BuildAccelerationStructureFlagsKHR, String)]
showTableBuildAccelerationStructureFlagBitsKHR
                          String
conNameBuildAccelerationStructureFlagBitsKHR
                          ("firstQuery" ::: Word32) -> BuildAccelerationStructureFlagsKHR
BuildAccelerationStructureFlagBitsKHR


type AccelerationStructureCreateFlagsKHR = AccelerationStructureCreateFlagBitsKHR

-- | VkAccelerationStructureCreateFlagBitsKHR - Bitmask specifying additional
-- creation parameters for acceleration structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'AccelerationStructureCreateFlagsKHR'
newtype AccelerationStructureCreateFlagBitsKHR = AccelerationStructureCreateFlagBitsKHR Flags
  deriving newtype (AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR -> Bool
(AccelerationStructureCreateFlagsKHR
 -> AccelerationStructureCreateFlagsKHR -> Bool)
-> (AccelerationStructureCreateFlagsKHR
    -> AccelerationStructureCreateFlagsKHR -> Bool)
-> Eq AccelerationStructureCreateFlagsKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR -> Bool
$c/= :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR -> Bool
== :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR -> Bool
$c== :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR -> Bool
Eq, Eq AccelerationStructureCreateFlagsKHR
Eq AccelerationStructureCreateFlagsKHR
-> (AccelerationStructureCreateFlagsKHR
    -> AccelerationStructureCreateFlagsKHR -> Ordering)
-> (AccelerationStructureCreateFlagsKHR
    -> AccelerationStructureCreateFlagsKHR -> Bool)
-> (AccelerationStructureCreateFlagsKHR
    -> AccelerationStructureCreateFlagsKHR -> Bool)
-> (AccelerationStructureCreateFlagsKHR
    -> AccelerationStructureCreateFlagsKHR -> Bool)
-> (AccelerationStructureCreateFlagsKHR
    -> AccelerationStructureCreateFlagsKHR -> Bool)
-> (AccelerationStructureCreateFlagsKHR
    -> AccelerationStructureCreateFlagsKHR
    -> AccelerationStructureCreateFlagsKHR)
-> (AccelerationStructureCreateFlagsKHR
    -> AccelerationStructureCreateFlagsKHR
    -> AccelerationStructureCreateFlagsKHR)
-> Ord AccelerationStructureCreateFlagsKHR
AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR -> Bool
AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR -> Ordering
AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
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 :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
$cmin :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
max :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
$cmax :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
>= :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR -> Bool
$c>= :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR -> Bool
> :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR -> Bool
$c> :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR -> Bool
<= :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR -> Bool
$c<= :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR -> Bool
< :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR -> Bool
$c< :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR -> Bool
compare :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR -> Ordering
$ccompare :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR -> Ordering
$cp1Ord :: Eq AccelerationStructureCreateFlagsKHR
Ord, Ptr b -> Int -> IO AccelerationStructureCreateFlagsKHR
Ptr b -> Int -> AccelerationStructureCreateFlagsKHR -> IO ()
Ptr AccelerationStructureCreateFlagsKHR
-> IO AccelerationStructureCreateFlagsKHR
Ptr AccelerationStructureCreateFlagsKHR
-> Int -> IO AccelerationStructureCreateFlagsKHR
Ptr AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR -> IO ()
Ptr AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR -> IO ()
AccelerationStructureCreateFlagsKHR -> Int
(AccelerationStructureCreateFlagsKHR -> Int)
-> (AccelerationStructureCreateFlagsKHR -> Int)
-> (Ptr AccelerationStructureCreateFlagsKHR
    -> Int -> IO AccelerationStructureCreateFlagsKHR)
-> (Ptr AccelerationStructureCreateFlagsKHR
    -> Int -> AccelerationStructureCreateFlagsKHR -> IO ())
-> (forall b.
    Ptr b -> Int -> IO AccelerationStructureCreateFlagsKHR)
-> (forall b.
    Ptr b -> Int -> AccelerationStructureCreateFlagsKHR -> IO ())
-> (Ptr AccelerationStructureCreateFlagsKHR
    -> IO AccelerationStructureCreateFlagsKHR)
-> (Ptr AccelerationStructureCreateFlagsKHR
    -> AccelerationStructureCreateFlagsKHR -> IO ())
-> Storable AccelerationStructureCreateFlagsKHR
forall b. Ptr b -> Int -> IO AccelerationStructureCreateFlagsKHR
forall b.
Ptr b -> Int -> AccelerationStructureCreateFlagsKHR -> 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 AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR -> IO ()
$cpoke :: Ptr AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR -> IO ()
peek :: Ptr AccelerationStructureCreateFlagsKHR
-> IO AccelerationStructureCreateFlagsKHR
$cpeek :: Ptr AccelerationStructureCreateFlagsKHR
-> IO AccelerationStructureCreateFlagsKHR
pokeByteOff :: Ptr b -> Int -> AccelerationStructureCreateFlagsKHR -> IO ()
$cpokeByteOff :: forall b.
Ptr b -> Int -> AccelerationStructureCreateFlagsKHR -> IO ()
peekByteOff :: Ptr b -> Int -> IO AccelerationStructureCreateFlagsKHR
$cpeekByteOff :: forall b. Ptr b -> Int -> IO AccelerationStructureCreateFlagsKHR
pokeElemOff :: Ptr AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR -> IO ()
$cpokeElemOff :: Ptr AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR -> IO ()
peekElemOff :: Ptr AccelerationStructureCreateFlagsKHR
-> Int -> IO AccelerationStructureCreateFlagsKHR
$cpeekElemOff :: Ptr AccelerationStructureCreateFlagsKHR
-> Int -> IO AccelerationStructureCreateFlagsKHR
alignment :: AccelerationStructureCreateFlagsKHR -> Int
$calignment :: AccelerationStructureCreateFlagsKHR -> Int
sizeOf :: AccelerationStructureCreateFlagsKHR -> Int
$csizeOf :: AccelerationStructureCreateFlagsKHR -> Int
Storable, AccelerationStructureCreateFlagsKHR
AccelerationStructureCreateFlagsKHR
-> Zero AccelerationStructureCreateFlagsKHR
forall a. a -> Zero a
zero :: AccelerationStructureCreateFlagsKHR
$czero :: AccelerationStructureCreateFlagsKHR
Zero, Eq AccelerationStructureCreateFlagsKHR
AccelerationStructureCreateFlagsKHR
Eq AccelerationStructureCreateFlagsKHR
-> (AccelerationStructureCreateFlagsKHR
    -> AccelerationStructureCreateFlagsKHR
    -> AccelerationStructureCreateFlagsKHR)
-> (AccelerationStructureCreateFlagsKHR
    -> AccelerationStructureCreateFlagsKHR
    -> AccelerationStructureCreateFlagsKHR)
-> (AccelerationStructureCreateFlagsKHR
    -> AccelerationStructureCreateFlagsKHR
    -> AccelerationStructureCreateFlagsKHR)
-> (AccelerationStructureCreateFlagsKHR
    -> AccelerationStructureCreateFlagsKHR)
-> (AccelerationStructureCreateFlagsKHR
    -> Int -> AccelerationStructureCreateFlagsKHR)
-> (AccelerationStructureCreateFlagsKHR
    -> Int -> AccelerationStructureCreateFlagsKHR)
-> AccelerationStructureCreateFlagsKHR
-> (Int -> AccelerationStructureCreateFlagsKHR)
-> (AccelerationStructureCreateFlagsKHR
    -> Int -> AccelerationStructureCreateFlagsKHR)
-> (AccelerationStructureCreateFlagsKHR
    -> Int -> AccelerationStructureCreateFlagsKHR)
-> (AccelerationStructureCreateFlagsKHR
    -> Int -> AccelerationStructureCreateFlagsKHR)
-> (AccelerationStructureCreateFlagsKHR -> Int -> Bool)
-> (AccelerationStructureCreateFlagsKHR -> Maybe Int)
-> (AccelerationStructureCreateFlagsKHR -> Int)
-> (AccelerationStructureCreateFlagsKHR -> Bool)
-> (AccelerationStructureCreateFlagsKHR
    -> Int -> AccelerationStructureCreateFlagsKHR)
-> (AccelerationStructureCreateFlagsKHR
    -> Int -> AccelerationStructureCreateFlagsKHR)
-> (AccelerationStructureCreateFlagsKHR
    -> Int -> AccelerationStructureCreateFlagsKHR)
-> (AccelerationStructureCreateFlagsKHR
    -> Int -> AccelerationStructureCreateFlagsKHR)
-> (AccelerationStructureCreateFlagsKHR
    -> Int -> AccelerationStructureCreateFlagsKHR)
-> (AccelerationStructureCreateFlagsKHR
    -> Int -> AccelerationStructureCreateFlagsKHR)
-> (AccelerationStructureCreateFlagsKHR -> Int)
-> Bits AccelerationStructureCreateFlagsKHR
Int -> AccelerationStructureCreateFlagsKHR
AccelerationStructureCreateFlagsKHR -> Bool
AccelerationStructureCreateFlagsKHR -> Int
AccelerationStructureCreateFlagsKHR -> Maybe Int
AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
AccelerationStructureCreateFlagsKHR -> Int -> Bool
AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
forall a.
Eq a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
popCount :: AccelerationStructureCreateFlagsKHR -> Int
$cpopCount :: AccelerationStructureCreateFlagsKHR -> Int
rotateR :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
$crotateR :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
rotateL :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
$crotateL :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
unsafeShiftR :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
$cunsafeShiftR :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
shiftR :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
$cshiftR :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
unsafeShiftL :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
$cunsafeShiftL :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
shiftL :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
$cshiftL :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
isSigned :: AccelerationStructureCreateFlagsKHR -> Bool
$cisSigned :: AccelerationStructureCreateFlagsKHR -> Bool
bitSize :: AccelerationStructureCreateFlagsKHR -> Int
$cbitSize :: AccelerationStructureCreateFlagsKHR -> Int
bitSizeMaybe :: AccelerationStructureCreateFlagsKHR -> Maybe Int
$cbitSizeMaybe :: AccelerationStructureCreateFlagsKHR -> Maybe Int
testBit :: AccelerationStructureCreateFlagsKHR -> Int -> Bool
$ctestBit :: AccelerationStructureCreateFlagsKHR -> Int -> Bool
complementBit :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
$ccomplementBit :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
clearBit :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
$cclearBit :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
setBit :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
$csetBit :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
bit :: Int -> AccelerationStructureCreateFlagsKHR
$cbit :: Int -> AccelerationStructureCreateFlagsKHR
zeroBits :: AccelerationStructureCreateFlagsKHR
$czeroBits :: AccelerationStructureCreateFlagsKHR
rotate :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
$crotate :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
shift :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
$cshift :: AccelerationStructureCreateFlagsKHR
-> Int -> AccelerationStructureCreateFlagsKHR
complement :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
$ccomplement :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
xor :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
$cxor :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
.|. :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
$c.|. :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
.&. :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
$c.&. :: AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
-> AccelerationStructureCreateFlagsKHR
$cp1Bits :: Eq AccelerationStructureCreateFlagsKHR
Bits, Bits AccelerationStructureCreateFlagsKHR
Bits AccelerationStructureCreateFlagsKHR
-> (AccelerationStructureCreateFlagsKHR -> Int)
-> (AccelerationStructureCreateFlagsKHR -> Int)
-> (AccelerationStructureCreateFlagsKHR -> Int)
-> FiniteBits AccelerationStructureCreateFlagsKHR
AccelerationStructureCreateFlagsKHR -> Int
forall b.
Bits b -> (b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
countTrailingZeros :: AccelerationStructureCreateFlagsKHR -> Int
$ccountTrailingZeros :: AccelerationStructureCreateFlagsKHR -> Int
countLeadingZeros :: AccelerationStructureCreateFlagsKHR -> Int
$ccountLeadingZeros :: AccelerationStructureCreateFlagsKHR -> Int
finiteBitSize :: AccelerationStructureCreateFlagsKHR -> Int
$cfiniteBitSize :: AccelerationStructureCreateFlagsKHR -> Int
$cp1FiniteBits :: Bits AccelerationStructureCreateFlagsKHR
FiniteBits)

-- | 'ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR'
-- specifies that the acceleration structure’s address /can/ be saved and
-- reused on a subsequent run.
pattern $bACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR :: AccelerationStructureCreateFlagsKHR
$mACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR :: forall r.
AccelerationStructureCreateFlagsKHR
-> (Void# -> r) -> (Void# -> r) -> r
ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR =
  AccelerationStructureCreateFlagBitsKHR 0x00000001
-- No documentation found for Nested "VkAccelerationStructureCreateFlagBitsKHR" "VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV"
pattern $bACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV :: AccelerationStructureCreateFlagsKHR
$mACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV :: forall r.
AccelerationStructureCreateFlagsKHR
-> (Void# -> r) -> (Void# -> r) -> r
ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV = AccelerationStructureCreateFlagBitsKHR 0x00000004

conNameAccelerationStructureCreateFlagBitsKHR :: String
conNameAccelerationStructureCreateFlagBitsKHR :: String
conNameAccelerationStructureCreateFlagBitsKHR = String
"AccelerationStructureCreateFlagBitsKHR"

enumPrefixAccelerationStructureCreateFlagBitsKHR :: String
enumPrefixAccelerationStructureCreateFlagBitsKHR :: String
enumPrefixAccelerationStructureCreateFlagBitsKHR = String
"ACCELERATION_STRUCTURE_CREATE_"

showTableAccelerationStructureCreateFlagBitsKHR :: [(AccelerationStructureCreateFlagBitsKHR, String)]
showTableAccelerationStructureCreateFlagBitsKHR :: [(AccelerationStructureCreateFlagsKHR, String)]
showTableAccelerationStructureCreateFlagBitsKHR =
  [ (AccelerationStructureCreateFlagsKHR
ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR, String
"DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR")
  , (AccelerationStructureCreateFlagsKHR
ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV                        , String
"MOTION_BIT_NV")
  ]

instance Show AccelerationStructureCreateFlagBitsKHR where
  showsPrec :: Int -> AccelerationStructureCreateFlagsKHR -> ShowS
showsPrec = String
-> [(AccelerationStructureCreateFlagsKHR, String)]
-> String
-> (AccelerationStructureCreateFlagsKHR -> "firstQuery" ::: Word32)
-> (("firstQuery" ::: Word32) -> ShowS)
-> Int
-> AccelerationStructureCreateFlagsKHR
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixAccelerationStructureCreateFlagBitsKHR
                            [(AccelerationStructureCreateFlagsKHR, String)]
showTableAccelerationStructureCreateFlagBitsKHR
                            String
conNameAccelerationStructureCreateFlagBitsKHR
                            (\(AccelerationStructureCreateFlagBitsKHR "firstQuery" ::: Word32
x) -> "firstQuery" ::: Word32
x)
                            (\"firstQuery" ::: Word32
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ("firstQuery" ::: Word32) -> ShowS
forall a. (Integral a, Show a) => a -> ShowS
showHex "firstQuery" ::: Word32
x)

instance Read AccelerationStructureCreateFlagBitsKHR where
  readPrec :: ReadPrec AccelerationStructureCreateFlagsKHR
readPrec = String
-> [(AccelerationStructureCreateFlagsKHR, String)]
-> String
-> (("firstQuery" ::: Word32)
    -> AccelerationStructureCreateFlagsKHR)
-> ReadPrec AccelerationStructureCreateFlagsKHR
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixAccelerationStructureCreateFlagBitsKHR
                          [(AccelerationStructureCreateFlagsKHR, String)]
showTableAccelerationStructureCreateFlagBitsKHR
                          String
conNameAccelerationStructureCreateFlagBitsKHR
                          ("firstQuery" ::: Word32) -> AccelerationStructureCreateFlagsKHR
AccelerationStructureCreateFlagBitsKHR


-- | VkCopyAccelerationStructureModeKHR - Acceleration structure copy mode
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_ray_tracing VK_NV_ray_tracing>,
-- 'CopyAccelerationStructureInfoKHR',
-- 'CopyAccelerationStructureToMemoryInfoKHR',
-- 'CopyMemoryToAccelerationStructureInfoKHR',
-- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdCopyAccelerationStructureNV'
newtype CopyAccelerationStructureModeKHR = CopyAccelerationStructureModeKHR Int32
  deriving newtype (CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> Bool
(CopyAccelerationStructureModeKHR
 -> CopyAccelerationStructureModeKHR -> Bool)
-> (CopyAccelerationStructureModeKHR
    -> CopyAccelerationStructureModeKHR -> Bool)
-> Eq CopyAccelerationStructureModeKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> Bool
$c/= :: CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> Bool
== :: CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> Bool
$c== :: CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> Bool
Eq, Eq CopyAccelerationStructureModeKHR
Eq CopyAccelerationStructureModeKHR
-> (CopyAccelerationStructureModeKHR
    -> CopyAccelerationStructureModeKHR -> Ordering)
-> (CopyAccelerationStructureModeKHR
    -> CopyAccelerationStructureModeKHR -> Bool)
-> (CopyAccelerationStructureModeKHR
    -> CopyAccelerationStructureModeKHR -> Bool)
-> (CopyAccelerationStructureModeKHR
    -> CopyAccelerationStructureModeKHR -> Bool)
-> (CopyAccelerationStructureModeKHR
    -> CopyAccelerationStructureModeKHR -> Bool)
-> (CopyAccelerationStructureModeKHR
    -> CopyAccelerationStructureModeKHR
    -> CopyAccelerationStructureModeKHR)
-> (CopyAccelerationStructureModeKHR
    -> CopyAccelerationStructureModeKHR
    -> CopyAccelerationStructureModeKHR)
-> Ord CopyAccelerationStructureModeKHR
CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> Bool
CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> Ordering
CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR
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 :: CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR
$cmin :: CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR
max :: CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR
$cmax :: CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR
>= :: CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> Bool
$c>= :: CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> Bool
> :: CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> Bool
$c> :: CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> Bool
<= :: CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> Bool
$c<= :: CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> Bool
< :: CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> Bool
$c< :: CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> Bool
compare :: CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> Ordering
$ccompare :: CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> Ordering
$cp1Ord :: Eq CopyAccelerationStructureModeKHR
Ord, Ptr b -> Int -> IO CopyAccelerationStructureModeKHR
Ptr b -> Int -> CopyAccelerationStructureModeKHR -> IO ()
Ptr CopyAccelerationStructureModeKHR
-> IO CopyAccelerationStructureModeKHR
Ptr CopyAccelerationStructureModeKHR
-> Int -> IO CopyAccelerationStructureModeKHR
Ptr CopyAccelerationStructureModeKHR
-> Int -> CopyAccelerationStructureModeKHR -> IO ()
Ptr CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> IO ()
CopyAccelerationStructureModeKHR -> Int
(CopyAccelerationStructureModeKHR -> Int)
-> (CopyAccelerationStructureModeKHR -> Int)
-> (Ptr CopyAccelerationStructureModeKHR
    -> Int -> IO CopyAccelerationStructureModeKHR)
-> (Ptr CopyAccelerationStructureModeKHR
    -> Int -> CopyAccelerationStructureModeKHR -> IO ())
-> (forall b. Ptr b -> Int -> IO CopyAccelerationStructureModeKHR)
-> (forall b.
    Ptr b -> Int -> CopyAccelerationStructureModeKHR -> IO ())
-> (Ptr CopyAccelerationStructureModeKHR
    -> IO CopyAccelerationStructureModeKHR)
-> (Ptr CopyAccelerationStructureModeKHR
    -> CopyAccelerationStructureModeKHR -> IO ())
-> Storable CopyAccelerationStructureModeKHR
forall b. Ptr b -> Int -> IO CopyAccelerationStructureModeKHR
forall b. Ptr b -> Int -> CopyAccelerationStructureModeKHR -> 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 CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> IO ()
$cpoke :: Ptr CopyAccelerationStructureModeKHR
-> CopyAccelerationStructureModeKHR -> IO ()
peek :: Ptr CopyAccelerationStructureModeKHR
-> IO CopyAccelerationStructureModeKHR
$cpeek :: Ptr CopyAccelerationStructureModeKHR
-> IO CopyAccelerationStructureModeKHR
pokeByteOff :: Ptr b -> Int -> CopyAccelerationStructureModeKHR -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> CopyAccelerationStructureModeKHR -> IO ()
peekByteOff :: Ptr b -> Int -> IO CopyAccelerationStructureModeKHR
$cpeekByteOff :: forall b. Ptr b -> Int -> IO CopyAccelerationStructureModeKHR
pokeElemOff :: Ptr CopyAccelerationStructureModeKHR
-> Int -> CopyAccelerationStructureModeKHR -> IO ()
$cpokeElemOff :: Ptr CopyAccelerationStructureModeKHR
-> Int -> CopyAccelerationStructureModeKHR -> IO ()
peekElemOff :: Ptr CopyAccelerationStructureModeKHR
-> Int -> IO CopyAccelerationStructureModeKHR
$cpeekElemOff :: Ptr CopyAccelerationStructureModeKHR
-> Int -> IO CopyAccelerationStructureModeKHR
alignment :: CopyAccelerationStructureModeKHR -> Int
$calignment :: CopyAccelerationStructureModeKHR -> Int
sizeOf :: CopyAccelerationStructureModeKHR -> Int
$csizeOf :: CopyAccelerationStructureModeKHR -> Int
Storable, CopyAccelerationStructureModeKHR
CopyAccelerationStructureModeKHR
-> Zero CopyAccelerationStructureModeKHR
forall a. a -> Zero a
zero :: CopyAccelerationStructureModeKHR
$czero :: CopyAccelerationStructureModeKHR
Zero)

-- | 'COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR' creates a direct copy of
-- the acceleration structure specified in @src@ into the one specified by
-- @dst@. The @dst@ acceleration structure /must/ have been created with
-- the same parameters as @src@. If @src@ contains references to other
-- acceleration structures, @dst@ will reference the same acceleration
-- structures.
pattern $bCOPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR :: CopyAccelerationStructureModeKHR
$mCOPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR :: forall r.
CopyAccelerationStructureModeKHR
-> (Void# -> r) -> (Void# -> r) -> r
COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR       = CopyAccelerationStructureModeKHR 0
-- | 'COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR' creates a more compact
-- version of an acceleration structure @src@ into @dst@. The acceleration
-- structure @dst@ /must/ have been created with a size at least as large
-- as that returned by 'cmdWriteAccelerationStructuresPropertiesKHR' or
-- 'writeAccelerationStructuresPropertiesKHR' after the build of the
-- acceleration structure specified by @src@. If @src@ contains references
-- to other acceleration structures, @dst@ will reference the same
-- acceleration structures.
pattern $bCOPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR :: CopyAccelerationStructureModeKHR
$mCOPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR :: forall r.
CopyAccelerationStructureModeKHR
-> (Void# -> r) -> (Void# -> r) -> r
COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR     = CopyAccelerationStructureModeKHR 1
-- | 'COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR' serializes the
-- acceleration structure to a semi-opaque format which can be reloaded on
-- a compatible implementation.
pattern $bCOPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR :: CopyAccelerationStructureModeKHR
$mCOPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR :: forall r.
CopyAccelerationStructureModeKHR
-> (Void# -> r) -> (Void# -> r) -> r
COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR   = CopyAccelerationStructureModeKHR 2
-- | 'COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR' deserializes the
-- semi-opaque serialization format in the buffer to the acceleration
-- structure.
pattern $bCOPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR :: CopyAccelerationStructureModeKHR
$mCOPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR :: forall r.
CopyAccelerationStructureModeKHR
-> (Void# -> r) -> (Void# -> r) -> r
COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR = CopyAccelerationStructureModeKHR 3
{-# complete COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR,
             COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR,
             COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR,
             COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR :: CopyAccelerationStructureModeKHR #-}

conNameCopyAccelerationStructureModeKHR :: String
conNameCopyAccelerationStructureModeKHR :: String
conNameCopyAccelerationStructureModeKHR = String
"CopyAccelerationStructureModeKHR"

enumPrefixCopyAccelerationStructureModeKHR :: String
enumPrefixCopyAccelerationStructureModeKHR :: String
enumPrefixCopyAccelerationStructureModeKHR = String
"COPY_ACCELERATION_STRUCTURE_MODE_"

showTableCopyAccelerationStructureModeKHR :: [(CopyAccelerationStructureModeKHR, String)]
showTableCopyAccelerationStructureModeKHR :: [(CopyAccelerationStructureModeKHR, String)]
showTableCopyAccelerationStructureModeKHR =
  [ (CopyAccelerationStructureModeKHR
COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR      , String
"CLONE_KHR")
  , (CopyAccelerationStructureModeKHR
COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR    , String
"COMPACT_KHR")
  , (CopyAccelerationStructureModeKHR
COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR  , String
"SERIALIZE_KHR")
  , (CopyAccelerationStructureModeKHR
COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR, String
"DESERIALIZE_KHR")
  ]

instance Show CopyAccelerationStructureModeKHR where
  showsPrec :: Int -> CopyAccelerationStructureModeKHR -> ShowS
showsPrec = String
-> [(CopyAccelerationStructureModeKHR, String)]
-> String
-> (CopyAccelerationStructureModeKHR -> Int32)
-> (Int32 -> ShowS)
-> Int
-> CopyAccelerationStructureModeKHR
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixCopyAccelerationStructureModeKHR
                            [(CopyAccelerationStructureModeKHR, String)]
showTableCopyAccelerationStructureModeKHR
                            String
conNameCopyAccelerationStructureModeKHR
                            (\(CopyAccelerationStructureModeKHR Int32
x) -> Int32
x)
                            (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11)

instance Read CopyAccelerationStructureModeKHR where
  readPrec :: ReadPrec CopyAccelerationStructureModeKHR
readPrec = String
-> [(CopyAccelerationStructureModeKHR, String)]
-> String
-> (Int32 -> CopyAccelerationStructureModeKHR)
-> ReadPrec CopyAccelerationStructureModeKHR
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixCopyAccelerationStructureModeKHR
                          [(CopyAccelerationStructureModeKHR, String)]
showTableCopyAccelerationStructureModeKHR
                          String
conNameCopyAccelerationStructureModeKHR
                          Int32 -> CopyAccelerationStructureModeKHR
CopyAccelerationStructureModeKHR


-- | VkBuildAccelerationStructureModeKHR - Enum specifying the type of build
-- operation to perform
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'AccelerationStructureBuildGeometryInfoKHR'
newtype BuildAccelerationStructureModeKHR = BuildAccelerationStructureModeKHR Int32
  deriving newtype (BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> Bool
(BuildAccelerationStructureModeKHR
 -> BuildAccelerationStructureModeKHR -> Bool)
-> (BuildAccelerationStructureModeKHR
    -> BuildAccelerationStructureModeKHR -> Bool)
-> Eq BuildAccelerationStructureModeKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> Bool
$c/= :: BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> Bool
== :: BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> Bool
$c== :: BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> Bool
Eq, Eq BuildAccelerationStructureModeKHR
Eq BuildAccelerationStructureModeKHR
-> (BuildAccelerationStructureModeKHR
    -> BuildAccelerationStructureModeKHR -> Ordering)
-> (BuildAccelerationStructureModeKHR
    -> BuildAccelerationStructureModeKHR -> Bool)
-> (BuildAccelerationStructureModeKHR
    -> BuildAccelerationStructureModeKHR -> Bool)
-> (BuildAccelerationStructureModeKHR
    -> BuildAccelerationStructureModeKHR -> Bool)
-> (BuildAccelerationStructureModeKHR
    -> BuildAccelerationStructureModeKHR -> Bool)
-> (BuildAccelerationStructureModeKHR
    -> BuildAccelerationStructureModeKHR
    -> BuildAccelerationStructureModeKHR)
-> (BuildAccelerationStructureModeKHR
    -> BuildAccelerationStructureModeKHR
    -> BuildAccelerationStructureModeKHR)
-> Ord BuildAccelerationStructureModeKHR
BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> Bool
BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> Ordering
BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR
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 :: BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR
$cmin :: BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR
max :: BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR
$cmax :: BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR
>= :: BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> Bool
$c>= :: BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> Bool
> :: BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> Bool
$c> :: BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> Bool
<= :: BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> Bool
$c<= :: BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> Bool
< :: BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> Bool
$c< :: BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> Bool
compare :: BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> Ordering
$ccompare :: BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> Ordering
$cp1Ord :: Eq BuildAccelerationStructureModeKHR
Ord, Ptr b -> Int -> IO BuildAccelerationStructureModeKHR
Ptr b -> Int -> BuildAccelerationStructureModeKHR -> IO ()
Ptr BuildAccelerationStructureModeKHR
-> IO BuildAccelerationStructureModeKHR
Ptr BuildAccelerationStructureModeKHR
-> Int -> IO BuildAccelerationStructureModeKHR
Ptr BuildAccelerationStructureModeKHR
-> Int -> BuildAccelerationStructureModeKHR -> IO ()
Ptr BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> IO ()
BuildAccelerationStructureModeKHR -> Int
(BuildAccelerationStructureModeKHR -> Int)
-> (BuildAccelerationStructureModeKHR -> Int)
-> (Ptr BuildAccelerationStructureModeKHR
    -> Int -> IO BuildAccelerationStructureModeKHR)
-> (Ptr BuildAccelerationStructureModeKHR
    -> Int -> BuildAccelerationStructureModeKHR -> IO ())
-> (forall b. Ptr b -> Int -> IO BuildAccelerationStructureModeKHR)
-> (forall b.
    Ptr b -> Int -> BuildAccelerationStructureModeKHR -> IO ())
-> (Ptr BuildAccelerationStructureModeKHR
    -> IO BuildAccelerationStructureModeKHR)
-> (Ptr BuildAccelerationStructureModeKHR
    -> BuildAccelerationStructureModeKHR -> IO ())
-> Storable BuildAccelerationStructureModeKHR
forall b. Ptr b -> Int -> IO BuildAccelerationStructureModeKHR
forall b.
Ptr b -> Int -> BuildAccelerationStructureModeKHR -> 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 BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> IO ()
$cpoke :: Ptr BuildAccelerationStructureModeKHR
-> BuildAccelerationStructureModeKHR -> IO ()
peek :: Ptr BuildAccelerationStructureModeKHR
-> IO BuildAccelerationStructureModeKHR
$cpeek :: Ptr BuildAccelerationStructureModeKHR
-> IO BuildAccelerationStructureModeKHR
pokeByteOff :: Ptr b -> Int -> BuildAccelerationStructureModeKHR -> IO ()
$cpokeByteOff :: forall b.
Ptr b -> Int -> BuildAccelerationStructureModeKHR -> IO ()
peekByteOff :: Ptr b -> Int -> IO BuildAccelerationStructureModeKHR
$cpeekByteOff :: forall b. Ptr b -> Int -> IO BuildAccelerationStructureModeKHR
pokeElemOff :: Ptr BuildAccelerationStructureModeKHR
-> Int -> BuildAccelerationStructureModeKHR -> IO ()
$cpokeElemOff :: Ptr BuildAccelerationStructureModeKHR
-> Int -> BuildAccelerationStructureModeKHR -> IO ()
peekElemOff :: Ptr BuildAccelerationStructureModeKHR
-> Int -> IO BuildAccelerationStructureModeKHR
$cpeekElemOff :: Ptr BuildAccelerationStructureModeKHR
-> Int -> IO BuildAccelerationStructureModeKHR
alignment :: BuildAccelerationStructureModeKHR -> Int
$calignment :: BuildAccelerationStructureModeKHR -> Int
sizeOf :: BuildAccelerationStructureModeKHR -> Int
$csizeOf :: BuildAccelerationStructureModeKHR -> Int
Storable, BuildAccelerationStructureModeKHR
BuildAccelerationStructureModeKHR
-> Zero BuildAccelerationStructureModeKHR
forall a. a -> Zero a
zero :: BuildAccelerationStructureModeKHR
$czero :: BuildAccelerationStructureModeKHR
Zero)

-- | 'BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR' specifies that the
-- destination acceleration structure will be built using the specified
-- geometries.
pattern $bBUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR :: BuildAccelerationStructureModeKHR
$mBUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR :: forall r.
BuildAccelerationStructureModeKHR
-> (Void# -> r) -> (Void# -> r) -> r
BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR  = BuildAccelerationStructureModeKHR 0
-- | 'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR' specifies that the
-- destination acceleration structure will be built using data in a source
-- acceleration structure, updated by the specified geometries.
pattern $bBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR :: BuildAccelerationStructureModeKHR
$mBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR :: forall r.
BuildAccelerationStructureModeKHR
-> (Void# -> r) -> (Void# -> r) -> r
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR = BuildAccelerationStructureModeKHR 1
{-# complete BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR,
             BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR :: BuildAccelerationStructureModeKHR #-}

conNameBuildAccelerationStructureModeKHR :: String
conNameBuildAccelerationStructureModeKHR :: String
conNameBuildAccelerationStructureModeKHR = String
"BuildAccelerationStructureModeKHR"

enumPrefixBuildAccelerationStructureModeKHR :: String
enumPrefixBuildAccelerationStructureModeKHR :: String
enumPrefixBuildAccelerationStructureModeKHR = String
"BUILD_ACCELERATION_STRUCTURE_MODE_"

showTableBuildAccelerationStructureModeKHR :: [(BuildAccelerationStructureModeKHR, String)]
showTableBuildAccelerationStructureModeKHR :: [(BuildAccelerationStructureModeKHR, String)]
showTableBuildAccelerationStructureModeKHR =
  [ (BuildAccelerationStructureModeKHR
BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR , String
"BUILD_KHR")
  , (BuildAccelerationStructureModeKHR
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, String
"UPDATE_KHR")
  ]

instance Show BuildAccelerationStructureModeKHR where
  showsPrec :: Int -> BuildAccelerationStructureModeKHR -> ShowS
showsPrec = String
-> [(BuildAccelerationStructureModeKHR, String)]
-> String
-> (BuildAccelerationStructureModeKHR -> Int32)
-> (Int32 -> ShowS)
-> Int
-> BuildAccelerationStructureModeKHR
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixBuildAccelerationStructureModeKHR
                            [(BuildAccelerationStructureModeKHR, String)]
showTableBuildAccelerationStructureModeKHR
                            String
conNameBuildAccelerationStructureModeKHR
                            (\(BuildAccelerationStructureModeKHR Int32
x) -> Int32
x)
                            (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11)

instance Read BuildAccelerationStructureModeKHR where
  readPrec :: ReadPrec BuildAccelerationStructureModeKHR
readPrec = String
-> [(BuildAccelerationStructureModeKHR, String)]
-> String
-> (Int32 -> BuildAccelerationStructureModeKHR)
-> ReadPrec BuildAccelerationStructureModeKHR
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixBuildAccelerationStructureModeKHR
                          [(BuildAccelerationStructureModeKHR, String)]
showTableBuildAccelerationStructureModeKHR
                          String
conNameBuildAccelerationStructureModeKHR
                          Int32 -> BuildAccelerationStructureModeKHR
BuildAccelerationStructureModeKHR


-- | VkAccelerationStructureTypeKHR - Type of acceleration structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_ray_tracing VK_NV_ray_tracing>,
-- 'AccelerationStructureBuildGeometryInfoKHR',
-- 'AccelerationStructureCreateInfoKHR',
-- 'Vulkan.Extensions.VK_NV_ray_tracing.AccelerationStructureInfoNV'
newtype AccelerationStructureTypeKHR = AccelerationStructureTypeKHR Int32
  deriving newtype (AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> Bool
(AccelerationStructureTypeKHR
 -> AccelerationStructureTypeKHR -> Bool)
-> (AccelerationStructureTypeKHR
    -> AccelerationStructureTypeKHR -> Bool)
-> Eq AccelerationStructureTypeKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> Bool
$c/= :: AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> Bool
== :: AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> Bool
$c== :: AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> Bool
Eq, Eq AccelerationStructureTypeKHR
Eq AccelerationStructureTypeKHR
-> (AccelerationStructureTypeKHR
    -> AccelerationStructureTypeKHR -> Ordering)
-> (AccelerationStructureTypeKHR
    -> AccelerationStructureTypeKHR -> Bool)
-> (AccelerationStructureTypeKHR
    -> AccelerationStructureTypeKHR -> Bool)
-> (AccelerationStructureTypeKHR
    -> AccelerationStructureTypeKHR -> Bool)
-> (AccelerationStructureTypeKHR
    -> AccelerationStructureTypeKHR -> Bool)
-> (AccelerationStructureTypeKHR
    -> AccelerationStructureTypeKHR -> AccelerationStructureTypeKHR)
-> (AccelerationStructureTypeKHR
    -> AccelerationStructureTypeKHR -> AccelerationStructureTypeKHR)
-> Ord AccelerationStructureTypeKHR
AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> Bool
AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> Ordering
AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> AccelerationStructureTypeKHR
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 :: AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> AccelerationStructureTypeKHR
$cmin :: AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> AccelerationStructureTypeKHR
max :: AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> AccelerationStructureTypeKHR
$cmax :: AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> AccelerationStructureTypeKHR
>= :: AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> Bool
$c>= :: AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> Bool
> :: AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> Bool
$c> :: AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> Bool
<= :: AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> Bool
$c<= :: AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> Bool
< :: AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> Bool
$c< :: AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> Bool
compare :: AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> Ordering
$ccompare :: AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> Ordering
$cp1Ord :: Eq AccelerationStructureTypeKHR
Ord, Ptr b -> Int -> IO AccelerationStructureTypeKHR
Ptr b -> Int -> AccelerationStructureTypeKHR -> IO ()
Ptr AccelerationStructureTypeKHR -> IO AccelerationStructureTypeKHR
Ptr AccelerationStructureTypeKHR
-> Int -> IO AccelerationStructureTypeKHR
Ptr AccelerationStructureTypeKHR
-> Int -> AccelerationStructureTypeKHR -> IO ()
Ptr AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> IO ()
AccelerationStructureTypeKHR -> Int
(AccelerationStructureTypeKHR -> Int)
-> (AccelerationStructureTypeKHR -> Int)
-> (Ptr AccelerationStructureTypeKHR
    -> Int -> IO AccelerationStructureTypeKHR)
-> (Ptr AccelerationStructureTypeKHR
    -> Int -> AccelerationStructureTypeKHR -> IO ())
-> (forall b. Ptr b -> Int -> IO AccelerationStructureTypeKHR)
-> (forall b.
    Ptr b -> Int -> AccelerationStructureTypeKHR -> IO ())
-> (Ptr AccelerationStructureTypeKHR
    -> IO AccelerationStructureTypeKHR)
-> (Ptr AccelerationStructureTypeKHR
    -> AccelerationStructureTypeKHR -> IO ())
-> Storable AccelerationStructureTypeKHR
forall b. Ptr b -> Int -> IO AccelerationStructureTypeKHR
forall b. Ptr b -> Int -> AccelerationStructureTypeKHR -> 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 AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> IO ()
$cpoke :: Ptr AccelerationStructureTypeKHR
-> AccelerationStructureTypeKHR -> IO ()
peek :: Ptr AccelerationStructureTypeKHR -> IO AccelerationStructureTypeKHR
$cpeek :: Ptr AccelerationStructureTypeKHR -> IO AccelerationStructureTypeKHR
pokeByteOff :: Ptr b -> Int -> AccelerationStructureTypeKHR -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> AccelerationStructureTypeKHR -> IO ()
peekByteOff :: Ptr b -> Int -> IO AccelerationStructureTypeKHR
$cpeekByteOff :: forall b. Ptr b -> Int -> IO AccelerationStructureTypeKHR
pokeElemOff :: Ptr AccelerationStructureTypeKHR
-> Int -> AccelerationStructureTypeKHR -> IO ()
$cpokeElemOff :: Ptr AccelerationStructureTypeKHR
-> Int -> AccelerationStructureTypeKHR -> IO ()
peekElemOff :: Ptr AccelerationStructureTypeKHR
-> Int -> IO AccelerationStructureTypeKHR
$cpeekElemOff :: Ptr AccelerationStructureTypeKHR
-> Int -> IO AccelerationStructureTypeKHR
alignment :: AccelerationStructureTypeKHR -> Int
$calignment :: AccelerationStructureTypeKHR -> Int
sizeOf :: AccelerationStructureTypeKHR -> Int
$csizeOf :: AccelerationStructureTypeKHR -> Int
Storable, AccelerationStructureTypeKHR
AccelerationStructureTypeKHR -> Zero AccelerationStructureTypeKHR
forall a. a -> Zero a
zero :: AccelerationStructureTypeKHR
$czero :: AccelerationStructureTypeKHR
Zero)

-- | 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR' is a top-level acceleration
-- structure containing instance data referring to bottom-level
-- acceleration structures.
pattern $bACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR :: AccelerationStructureTypeKHR
$mACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR :: forall r.
AccelerationStructureTypeKHR -> (Void# -> r) -> (Void# -> r) -> r
ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR    = AccelerationStructureTypeKHR 0
-- | 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' is a bottom-level
-- acceleration structure containing the AABBs or geometry to be
-- intersected.
pattern $bACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR :: AccelerationStructureTypeKHR
$mACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR :: forall r.
AccelerationStructureTypeKHR -> (Void# -> r) -> (Void# -> r) -> r
ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR = AccelerationStructureTypeKHR 1
-- | 'ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR' is an acceleration structure
-- whose type is determined at build time used for special circumstances.
pattern $bACCELERATION_STRUCTURE_TYPE_GENERIC_KHR :: AccelerationStructureTypeKHR
$mACCELERATION_STRUCTURE_TYPE_GENERIC_KHR :: forall r.
AccelerationStructureTypeKHR -> (Void# -> r) -> (Void# -> r) -> r
ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR      = AccelerationStructureTypeKHR 2
{-# complete ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR,
             ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR,
             ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR :: AccelerationStructureTypeKHR #-}

conNameAccelerationStructureTypeKHR :: String
conNameAccelerationStructureTypeKHR :: String
conNameAccelerationStructureTypeKHR = String
"AccelerationStructureTypeKHR"

enumPrefixAccelerationStructureTypeKHR :: String
enumPrefixAccelerationStructureTypeKHR :: String
enumPrefixAccelerationStructureTypeKHR = String
"ACCELERATION_STRUCTURE_TYPE_"

showTableAccelerationStructureTypeKHR :: [(AccelerationStructureTypeKHR, String)]
showTableAccelerationStructureTypeKHR :: [(AccelerationStructureTypeKHR, String)]
showTableAccelerationStructureTypeKHR =
  [ (AccelerationStructureTypeKHR
ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR   , String
"TOP_LEVEL_KHR")
  , (AccelerationStructureTypeKHR
ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR, String
"BOTTOM_LEVEL_KHR")
  , (AccelerationStructureTypeKHR
ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR     , String
"GENERIC_KHR")
  ]

instance Show AccelerationStructureTypeKHR where
  showsPrec :: Int -> AccelerationStructureTypeKHR -> ShowS
showsPrec = String
-> [(AccelerationStructureTypeKHR, String)]
-> String
-> (AccelerationStructureTypeKHR -> Int32)
-> (Int32 -> ShowS)
-> Int
-> AccelerationStructureTypeKHR
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixAccelerationStructureTypeKHR
                            [(AccelerationStructureTypeKHR, String)]
showTableAccelerationStructureTypeKHR
                            String
conNameAccelerationStructureTypeKHR
                            (\(AccelerationStructureTypeKHR Int32
x) -> Int32
x)
                            (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11)

instance Read AccelerationStructureTypeKHR where
  readPrec :: ReadPrec AccelerationStructureTypeKHR
readPrec = String
-> [(AccelerationStructureTypeKHR, String)]
-> String
-> (Int32 -> AccelerationStructureTypeKHR)
-> ReadPrec AccelerationStructureTypeKHR
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixAccelerationStructureTypeKHR
                          [(AccelerationStructureTypeKHR, String)]
showTableAccelerationStructureTypeKHR
                          String
conNameAccelerationStructureTypeKHR
                          Int32 -> AccelerationStructureTypeKHR
AccelerationStructureTypeKHR


-- | VkGeometryTypeKHR - Enum specifying which type of geometry is provided
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_ray_tracing VK_NV_ray_tracing>,
-- 'AccelerationStructureGeometryKHR',
-- 'Vulkan.Extensions.VK_NV_ray_tracing.GeometryNV'
newtype GeometryTypeKHR = GeometryTypeKHR Int32
  deriving newtype (GeometryTypeKHR -> GeometryTypeKHR -> Bool
(GeometryTypeKHR -> GeometryTypeKHR -> Bool)
-> (GeometryTypeKHR -> GeometryTypeKHR -> Bool)
-> Eq GeometryTypeKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GeometryTypeKHR -> GeometryTypeKHR -> Bool
$c/= :: GeometryTypeKHR -> GeometryTypeKHR -> Bool
== :: GeometryTypeKHR -> GeometryTypeKHR -> Bool
$c== :: GeometryTypeKHR -> GeometryTypeKHR -> Bool
Eq, Eq GeometryTypeKHR
Eq GeometryTypeKHR
-> (GeometryTypeKHR -> GeometryTypeKHR -> Ordering)
-> (GeometryTypeKHR -> GeometryTypeKHR -> Bool)
-> (GeometryTypeKHR -> GeometryTypeKHR -> Bool)
-> (GeometryTypeKHR -> GeometryTypeKHR -> Bool)
-> (GeometryTypeKHR -> GeometryTypeKHR -> Bool)
-> (GeometryTypeKHR -> GeometryTypeKHR -> GeometryTypeKHR)
-> (GeometryTypeKHR -> GeometryTypeKHR -> GeometryTypeKHR)
-> Ord GeometryTypeKHR
GeometryTypeKHR -> GeometryTypeKHR -> Bool
GeometryTypeKHR -> GeometryTypeKHR -> Ordering
GeometryTypeKHR -> GeometryTypeKHR -> GeometryTypeKHR
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 :: GeometryTypeKHR -> GeometryTypeKHR -> GeometryTypeKHR
$cmin :: GeometryTypeKHR -> GeometryTypeKHR -> GeometryTypeKHR
max :: GeometryTypeKHR -> GeometryTypeKHR -> GeometryTypeKHR
$cmax :: GeometryTypeKHR -> GeometryTypeKHR -> GeometryTypeKHR
>= :: GeometryTypeKHR -> GeometryTypeKHR -> Bool
$c>= :: GeometryTypeKHR -> GeometryTypeKHR -> Bool
> :: GeometryTypeKHR -> GeometryTypeKHR -> Bool
$c> :: GeometryTypeKHR -> GeometryTypeKHR -> Bool
<= :: GeometryTypeKHR -> GeometryTypeKHR -> Bool
$c<= :: GeometryTypeKHR -> GeometryTypeKHR -> Bool
< :: GeometryTypeKHR -> GeometryTypeKHR -> Bool
$c< :: GeometryTypeKHR -> GeometryTypeKHR -> Bool
compare :: GeometryTypeKHR -> GeometryTypeKHR -> Ordering
$ccompare :: GeometryTypeKHR -> GeometryTypeKHR -> Ordering
$cp1Ord :: Eq GeometryTypeKHR
Ord, Ptr b -> Int -> IO GeometryTypeKHR
Ptr b -> Int -> GeometryTypeKHR -> IO ()
Ptr GeometryTypeKHR -> IO GeometryTypeKHR
Ptr GeometryTypeKHR -> Int -> IO GeometryTypeKHR
Ptr GeometryTypeKHR -> Int -> GeometryTypeKHR -> IO ()
Ptr GeometryTypeKHR -> GeometryTypeKHR -> IO ()
GeometryTypeKHR -> Int
(GeometryTypeKHR -> Int)
-> (GeometryTypeKHR -> Int)
-> (Ptr GeometryTypeKHR -> Int -> IO GeometryTypeKHR)
-> (Ptr GeometryTypeKHR -> Int -> GeometryTypeKHR -> IO ())
-> (forall b. Ptr b -> Int -> IO GeometryTypeKHR)
-> (forall b. Ptr b -> Int -> GeometryTypeKHR -> IO ())
-> (Ptr GeometryTypeKHR -> IO GeometryTypeKHR)
-> (Ptr GeometryTypeKHR -> GeometryTypeKHR -> IO ())
-> Storable GeometryTypeKHR
forall b. Ptr b -> Int -> IO GeometryTypeKHR
forall b. Ptr b -> Int -> GeometryTypeKHR -> 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 GeometryTypeKHR -> GeometryTypeKHR -> IO ()
$cpoke :: Ptr GeometryTypeKHR -> GeometryTypeKHR -> IO ()
peek :: Ptr GeometryTypeKHR -> IO GeometryTypeKHR
$cpeek :: Ptr GeometryTypeKHR -> IO GeometryTypeKHR
pokeByteOff :: Ptr b -> Int -> GeometryTypeKHR -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> GeometryTypeKHR -> IO ()
peekByteOff :: Ptr b -> Int -> IO GeometryTypeKHR
$cpeekByteOff :: forall b. Ptr b -> Int -> IO GeometryTypeKHR
pokeElemOff :: Ptr GeometryTypeKHR -> Int -> GeometryTypeKHR -> IO ()
$cpokeElemOff :: Ptr GeometryTypeKHR -> Int -> GeometryTypeKHR -> IO ()
peekElemOff :: Ptr GeometryTypeKHR -> Int -> IO GeometryTypeKHR
$cpeekElemOff :: Ptr GeometryTypeKHR -> Int -> IO GeometryTypeKHR
alignment :: GeometryTypeKHR -> Int
$calignment :: GeometryTypeKHR -> Int
sizeOf :: GeometryTypeKHR -> Int
$csizeOf :: GeometryTypeKHR -> Int
Storable, GeometryTypeKHR
GeometryTypeKHR -> Zero GeometryTypeKHR
forall a. a -> Zero a
zero :: GeometryTypeKHR
$czero :: GeometryTypeKHR
Zero)

-- | 'GEOMETRY_TYPE_TRIANGLES_KHR' specifies a geometry type consisting of
-- triangles.
pattern $bGEOMETRY_TYPE_TRIANGLES_KHR :: GeometryTypeKHR
$mGEOMETRY_TYPE_TRIANGLES_KHR :: forall r. GeometryTypeKHR -> (Void# -> r) -> (Void# -> r) -> r
GEOMETRY_TYPE_TRIANGLES_KHR = GeometryTypeKHR 0
-- | 'GEOMETRY_TYPE_AABBS_KHR' specifies a geometry type consisting of
-- axis-aligned bounding boxes.
pattern $bGEOMETRY_TYPE_AABBS_KHR :: GeometryTypeKHR
$mGEOMETRY_TYPE_AABBS_KHR :: forall r. GeometryTypeKHR -> (Void# -> r) -> (Void# -> r) -> r
GEOMETRY_TYPE_AABBS_KHR     = GeometryTypeKHR 1
-- | 'GEOMETRY_TYPE_INSTANCES_KHR' specifies a geometry type consisting of
-- acceleration structure instances.
pattern $bGEOMETRY_TYPE_INSTANCES_KHR :: GeometryTypeKHR
$mGEOMETRY_TYPE_INSTANCES_KHR :: forall r. GeometryTypeKHR -> (Void# -> r) -> (Void# -> r) -> r
GEOMETRY_TYPE_INSTANCES_KHR = GeometryTypeKHR 2
{-# complete GEOMETRY_TYPE_TRIANGLES_KHR,
             GEOMETRY_TYPE_AABBS_KHR,
             GEOMETRY_TYPE_INSTANCES_KHR :: GeometryTypeKHR #-}

conNameGeometryTypeKHR :: String
conNameGeometryTypeKHR :: String
conNameGeometryTypeKHR = String
"GeometryTypeKHR"

enumPrefixGeometryTypeKHR :: String
enumPrefixGeometryTypeKHR :: String
enumPrefixGeometryTypeKHR = String
"GEOMETRY_TYPE_"

showTableGeometryTypeKHR :: [(GeometryTypeKHR, String)]
showTableGeometryTypeKHR :: [(GeometryTypeKHR, String)]
showTableGeometryTypeKHR =
  [ (GeometryTypeKHR
GEOMETRY_TYPE_TRIANGLES_KHR, String
"TRIANGLES_KHR")
  , (GeometryTypeKHR
GEOMETRY_TYPE_AABBS_KHR    , String
"AABBS_KHR")
  , (GeometryTypeKHR
GEOMETRY_TYPE_INSTANCES_KHR, String
"INSTANCES_KHR")
  ]

instance Show GeometryTypeKHR where
  showsPrec :: Int -> GeometryTypeKHR -> ShowS
showsPrec = String
-> [(GeometryTypeKHR, String)]
-> String
-> (GeometryTypeKHR -> Int32)
-> (Int32 -> ShowS)
-> Int
-> GeometryTypeKHR
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixGeometryTypeKHR
                            [(GeometryTypeKHR, String)]
showTableGeometryTypeKHR
                            String
conNameGeometryTypeKHR
                            (\(GeometryTypeKHR Int32
x) -> Int32
x)
                            (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11)

instance Read GeometryTypeKHR where
  readPrec :: ReadPrec GeometryTypeKHR
readPrec = String
-> [(GeometryTypeKHR, String)]
-> String
-> (Int32 -> GeometryTypeKHR)
-> ReadPrec GeometryTypeKHR
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixGeometryTypeKHR [(GeometryTypeKHR, String)]
showTableGeometryTypeKHR String
conNameGeometryTypeKHR Int32 -> GeometryTypeKHR
GeometryTypeKHR


-- | VkAccelerationStructureBuildTypeKHR - Acceleration structure build type
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'getAccelerationStructureBuildSizesKHR'
newtype AccelerationStructureBuildTypeKHR = AccelerationStructureBuildTypeKHR Int32
  deriving newtype (AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR -> Bool
(AccelerationStructureBuildTypeKHR
 -> AccelerationStructureBuildTypeKHR -> Bool)
-> (AccelerationStructureBuildTypeKHR
    -> AccelerationStructureBuildTypeKHR -> Bool)
-> Eq AccelerationStructureBuildTypeKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR -> Bool
$c/= :: AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR -> Bool
== :: AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR -> Bool
$c== :: AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR -> Bool
Eq, Eq AccelerationStructureBuildTypeKHR
Eq AccelerationStructureBuildTypeKHR
-> (AccelerationStructureBuildTypeKHR
    -> AccelerationStructureBuildTypeKHR -> Ordering)
-> (AccelerationStructureBuildTypeKHR
    -> AccelerationStructureBuildTypeKHR -> Bool)
-> (AccelerationStructureBuildTypeKHR
    -> AccelerationStructureBuildTypeKHR -> Bool)
-> (AccelerationStructureBuildTypeKHR
    -> AccelerationStructureBuildTypeKHR -> Bool)
-> (AccelerationStructureBuildTypeKHR
    -> AccelerationStructureBuildTypeKHR -> Bool)
-> (AccelerationStructureBuildTypeKHR
    -> AccelerationStructureBuildTypeKHR
    -> AccelerationStructureBuildTypeKHR)
-> (AccelerationStructureBuildTypeKHR
    -> AccelerationStructureBuildTypeKHR
    -> AccelerationStructureBuildTypeKHR)
-> Ord AccelerationStructureBuildTypeKHR
AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR -> Bool
AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR -> Ordering
AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR
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 :: AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR
$cmin :: AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR
max :: AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR
$cmax :: AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR
>= :: AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR -> Bool
$c>= :: AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR -> Bool
> :: AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR -> Bool
$c> :: AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR -> Bool
<= :: AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR -> Bool
$c<= :: AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR -> Bool
< :: AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR -> Bool
$c< :: AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR -> Bool
compare :: AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR -> Ordering
$ccompare :: AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR -> Ordering
$cp1Ord :: Eq AccelerationStructureBuildTypeKHR
Ord, Ptr b -> Int -> IO AccelerationStructureBuildTypeKHR
Ptr b -> Int -> AccelerationStructureBuildTypeKHR -> IO ()
Ptr AccelerationStructureBuildTypeKHR
-> IO AccelerationStructureBuildTypeKHR
Ptr AccelerationStructureBuildTypeKHR
-> Int -> IO AccelerationStructureBuildTypeKHR
Ptr AccelerationStructureBuildTypeKHR
-> Int -> AccelerationStructureBuildTypeKHR -> IO ()
Ptr AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR -> IO ()
AccelerationStructureBuildTypeKHR -> Int
(AccelerationStructureBuildTypeKHR -> Int)
-> (AccelerationStructureBuildTypeKHR -> Int)
-> (Ptr AccelerationStructureBuildTypeKHR
    -> Int -> IO AccelerationStructureBuildTypeKHR)
-> (Ptr AccelerationStructureBuildTypeKHR
    -> Int -> AccelerationStructureBuildTypeKHR -> IO ())
-> (forall b. Ptr b -> Int -> IO AccelerationStructureBuildTypeKHR)
-> (forall b.
    Ptr b -> Int -> AccelerationStructureBuildTypeKHR -> IO ())
-> (Ptr AccelerationStructureBuildTypeKHR
    -> IO AccelerationStructureBuildTypeKHR)
-> (Ptr AccelerationStructureBuildTypeKHR
    -> AccelerationStructureBuildTypeKHR -> IO ())
-> Storable AccelerationStructureBuildTypeKHR
forall b. Ptr b -> Int -> IO AccelerationStructureBuildTypeKHR
forall b.
Ptr b -> Int -> AccelerationStructureBuildTypeKHR -> 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 AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR -> IO ()
$cpoke :: Ptr AccelerationStructureBuildTypeKHR
-> AccelerationStructureBuildTypeKHR -> IO ()
peek :: Ptr AccelerationStructureBuildTypeKHR
-> IO AccelerationStructureBuildTypeKHR
$cpeek :: Ptr AccelerationStructureBuildTypeKHR
-> IO AccelerationStructureBuildTypeKHR
pokeByteOff :: Ptr b -> Int -> AccelerationStructureBuildTypeKHR -> IO ()
$cpokeByteOff :: forall b.
Ptr b -> Int -> AccelerationStructureBuildTypeKHR -> IO ()
peekByteOff :: Ptr b -> Int -> IO AccelerationStructureBuildTypeKHR
$cpeekByteOff :: forall b. Ptr b -> Int -> IO AccelerationStructureBuildTypeKHR
pokeElemOff :: Ptr AccelerationStructureBuildTypeKHR
-> Int -> AccelerationStructureBuildTypeKHR -> IO ()
$cpokeElemOff :: Ptr AccelerationStructureBuildTypeKHR
-> Int -> AccelerationStructureBuildTypeKHR -> IO ()
peekElemOff :: Ptr AccelerationStructureBuildTypeKHR
-> Int -> IO AccelerationStructureBuildTypeKHR
$cpeekElemOff :: Ptr AccelerationStructureBuildTypeKHR
-> Int -> IO AccelerationStructureBuildTypeKHR
alignment :: AccelerationStructureBuildTypeKHR -> Int
$calignment :: AccelerationStructureBuildTypeKHR -> Int
sizeOf :: AccelerationStructureBuildTypeKHR -> Int
$csizeOf :: AccelerationStructureBuildTypeKHR -> Int
Storable, AccelerationStructureBuildTypeKHR
AccelerationStructureBuildTypeKHR
-> Zero AccelerationStructureBuildTypeKHR
forall a. a -> Zero a
zero :: AccelerationStructureBuildTypeKHR
$czero :: AccelerationStructureBuildTypeKHR
Zero)

-- | 'ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR' requests the memory
-- requirement for operations performed by the host.
pattern $bACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR :: AccelerationStructureBuildTypeKHR
$mACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR :: forall r.
AccelerationStructureBuildTypeKHR
-> (Void# -> r) -> (Void# -> r) -> r
ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR           = AccelerationStructureBuildTypeKHR 0
-- | 'ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR' requests the memory
-- requirement for operations performed by the device.
pattern $bACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR :: AccelerationStructureBuildTypeKHR
$mACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR :: forall r.
AccelerationStructureBuildTypeKHR
-> (Void# -> r) -> (Void# -> r) -> r
ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR         = AccelerationStructureBuildTypeKHR 1
-- | 'ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR' requests the
-- memory requirement for operations performed by either the host, or the
-- device.
pattern $bACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR :: AccelerationStructureBuildTypeKHR
$mACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR :: forall r.
AccelerationStructureBuildTypeKHR
-> (Void# -> r) -> (Void# -> r) -> r
ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR = AccelerationStructureBuildTypeKHR 2
{-# complete ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR,
             ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR,
             ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR :: AccelerationStructureBuildTypeKHR #-}

conNameAccelerationStructureBuildTypeKHR :: String
conNameAccelerationStructureBuildTypeKHR :: String
conNameAccelerationStructureBuildTypeKHR = String
"AccelerationStructureBuildTypeKHR"

enumPrefixAccelerationStructureBuildTypeKHR :: String
enumPrefixAccelerationStructureBuildTypeKHR :: String
enumPrefixAccelerationStructureBuildTypeKHR = String
"ACCELERATION_STRUCTURE_BUILD_TYPE_"

showTableAccelerationStructureBuildTypeKHR :: [(AccelerationStructureBuildTypeKHR, String)]
showTableAccelerationStructureBuildTypeKHR :: [(AccelerationStructureBuildTypeKHR, String)]
showTableAccelerationStructureBuildTypeKHR =
  [ (AccelerationStructureBuildTypeKHR
ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR          , String
"HOST_KHR")
  , (AccelerationStructureBuildTypeKHR
ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR        , String
"DEVICE_KHR")
  , (AccelerationStructureBuildTypeKHR
ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR, String
"HOST_OR_DEVICE_KHR")
  ]

instance Show AccelerationStructureBuildTypeKHR where
  showsPrec :: Int -> AccelerationStructureBuildTypeKHR -> ShowS
showsPrec = String
-> [(AccelerationStructureBuildTypeKHR, String)]
-> String
-> (AccelerationStructureBuildTypeKHR -> Int32)
-> (Int32 -> ShowS)
-> Int
-> AccelerationStructureBuildTypeKHR
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixAccelerationStructureBuildTypeKHR
                            [(AccelerationStructureBuildTypeKHR, String)]
showTableAccelerationStructureBuildTypeKHR
                            String
conNameAccelerationStructureBuildTypeKHR
                            (\(AccelerationStructureBuildTypeKHR Int32
x) -> Int32
x)
                            (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11)

instance Read AccelerationStructureBuildTypeKHR where
  readPrec :: ReadPrec AccelerationStructureBuildTypeKHR
readPrec = String
-> [(AccelerationStructureBuildTypeKHR, String)]
-> String
-> (Int32 -> AccelerationStructureBuildTypeKHR)
-> ReadPrec AccelerationStructureBuildTypeKHR
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixAccelerationStructureBuildTypeKHR
                          [(AccelerationStructureBuildTypeKHR, String)]
showTableAccelerationStructureBuildTypeKHR
                          String
conNameAccelerationStructureBuildTypeKHR
                          Int32 -> AccelerationStructureBuildTypeKHR
AccelerationStructureBuildTypeKHR


-- | VkAccelerationStructureCompatibilityKHR - Acceleration structure
-- compatibility
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>,
-- 'getDeviceAccelerationStructureCompatibilityKHR'
newtype AccelerationStructureCompatibilityKHR = AccelerationStructureCompatibilityKHR Int32
  deriving newtype (AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR -> Bool
(AccelerationStructureCompatibilityKHR
 -> AccelerationStructureCompatibilityKHR -> Bool)
-> (AccelerationStructureCompatibilityKHR
    -> AccelerationStructureCompatibilityKHR -> Bool)
-> Eq AccelerationStructureCompatibilityKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR -> Bool
$c/= :: AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR -> Bool
== :: AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR -> Bool
$c== :: AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR -> Bool
Eq, Eq AccelerationStructureCompatibilityKHR
Eq AccelerationStructureCompatibilityKHR
-> (AccelerationStructureCompatibilityKHR
    -> AccelerationStructureCompatibilityKHR -> Ordering)
-> (AccelerationStructureCompatibilityKHR
    -> AccelerationStructureCompatibilityKHR -> Bool)
-> (AccelerationStructureCompatibilityKHR
    -> AccelerationStructureCompatibilityKHR -> Bool)
-> (AccelerationStructureCompatibilityKHR
    -> AccelerationStructureCompatibilityKHR -> Bool)
-> (AccelerationStructureCompatibilityKHR
    -> AccelerationStructureCompatibilityKHR -> Bool)
-> (AccelerationStructureCompatibilityKHR
    -> AccelerationStructureCompatibilityKHR
    -> AccelerationStructureCompatibilityKHR)
-> (AccelerationStructureCompatibilityKHR
    -> AccelerationStructureCompatibilityKHR
    -> AccelerationStructureCompatibilityKHR)
-> Ord AccelerationStructureCompatibilityKHR
AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR -> Bool
AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR -> Ordering
AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR
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 :: AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR
$cmin :: AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR
max :: AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR
$cmax :: AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR
>= :: AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR -> Bool
$c>= :: AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR -> Bool
> :: AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR -> Bool
$c> :: AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR -> Bool
<= :: AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR -> Bool
$c<= :: AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR -> Bool
< :: AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR -> Bool
$c< :: AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR -> Bool
compare :: AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR -> Ordering
$ccompare :: AccelerationStructureCompatibilityKHR
-> AccelerationStructureCompatibilityKHR -> Ordering
$cp1Ord :: Eq AccelerationStructureCompatibilityKHR
Ord, Ptr b -> Int -> IO AccelerationStructureCompatibilityKHR
Ptr b -> Int -> AccelerationStructureCompatibilityKHR -> IO ()
("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
-> IO AccelerationStructureCompatibilityKHR
("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
-> Int -> IO AccelerationStructureCompatibilityKHR
("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
-> Int -> AccelerationStructureCompatibilityKHR -> IO ()
("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
-> AccelerationStructureCompatibilityKHR -> IO ()
AccelerationStructureCompatibilityKHR -> Int
(AccelerationStructureCompatibilityKHR -> Int)
-> (AccelerationStructureCompatibilityKHR -> Int)
-> (("pCompatibility"
     ::: Ptr AccelerationStructureCompatibilityKHR)
    -> Int -> IO AccelerationStructureCompatibilityKHR)
-> (("pCompatibility"
     ::: Ptr AccelerationStructureCompatibilityKHR)
    -> Int -> AccelerationStructureCompatibilityKHR -> IO ())
-> (forall b.
    Ptr b -> Int -> IO AccelerationStructureCompatibilityKHR)
-> (forall b.
    Ptr b -> Int -> AccelerationStructureCompatibilityKHR -> IO ())
-> (("pCompatibility"
     ::: Ptr AccelerationStructureCompatibilityKHR)
    -> IO AccelerationStructureCompatibilityKHR)
-> (("pCompatibility"
     ::: Ptr AccelerationStructureCompatibilityKHR)
    -> AccelerationStructureCompatibilityKHR -> IO ())
-> Storable AccelerationStructureCompatibilityKHR
forall b. Ptr b -> Int -> IO AccelerationStructureCompatibilityKHR
forall b.
Ptr b -> Int -> AccelerationStructureCompatibilityKHR -> 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 :: ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
-> AccelerationStructureCompatibilityKHR -> IO ()
$cpoke :: ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
-> AccelerationStructureCompatibilityKHR -> IO ()
peek :: ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
-> IO AccelerationStructureCompatibilityKHR
$cpeek :: ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
-> IO AccelerationStructureCompatibilityKHR
pokeByteOff :: Ptr b -> Int -> AccelerationStructureCompatibilityKHR -> IO ()
$cpokeByteOff :: forall b.
Ptr b -> Int -> AccelerationStructureCompatibilityKHR -> IO ()
peekByteOff :: Ptr b -> Int -> IO AccelerationStructureCompatibilityKHR
$cpeekByteOff :: forall b. Ptr b -> Int -> IO AccelerationStructureCompatibilityKHR
pokeElemOff :: ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
-> Int -> AccelerationStructureCompatibilityKHR -> IO ()
$cpokeElemOff :: ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
-> Int -> AccelerationStructureCompatibilityKHR -> IO ()
peekElemOff :: ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
-> Int -> IO AccelerationStructureCompatibilityKHR
$cpeekElemOff :: ("pCompatibility" ::: Ptr AccelerationStructureCompatibilityKHR)
-> Int -> IO AccelerationStructureCompatibilityKHR
alignment :: AccelerationStructureCompatibilityKHR -> Int
$calignment :: AccelerationStructureCompatibilityKHR -> Int
sizeOf :: AccelerationStructureCompatibilityKHR -> Int
$csizeOf :: AccelerationStructureCompatibilityKHR -> Int
Storable, AccelerationStructureCompatibilityKHR
AccelerationStructureCompatibilityKHR
-> Zero AccelerationStructureCompatibilityKHR
forall a. a -> Zero a
zero :: AccelerationStructureCompatibilityKHR
$czero :: AccelerationStructureCompatibilityKHR
Zero)

-- | 'ACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR' if the
-- @pVersionData@ version acceleration structure is compatible with
-- @device@.
pattern $bACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR :: AccelerationStructureCompatibilityKHR
$mACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR :: forall r.
AccelerationStructureCompatibilityKHR
-> (Void# -> r) -> (Void# -> r) -> r
ACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR   = AccelerationStructureCompatibilityKHR 0
-- | 'ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR' if the
-- @pVersionData@ version acceleration structure is not compatible with
-- @device@.
pattern $bACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR :: AccelerationStructureCompatibilityKHR
$mACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR :: forall r.
AccelerationStructureCompatibilityKHR
-> (Void# -> r) -> (Void# -> r) -> r
ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR = AccelerationStructureCompatibilityKHR 1
{-# complete ACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR,
             ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR :: AccelerationStructureCompatibilityKHR #-}

conNameAccelerationStructureCompatibilityKHR :: String
conNameAccelerationStructureCompatibilityKHR :: String
conNameAccelerationStructureCompatibilityKHR = String
"AccelerationStructureCompatibilityKHR"

enumPrefixAccelerationStructureCompatibilityKHR :: String
enumPrefixAccelerationStructureCompatibilityKHR :: String
enumPrefixAccelerationStructureCompatibilityKHR = String
"ACCELERATION_STRUCTURE_COMPATIBILITY_"

showTableAccelerationStructureCompatibilityKHR :: [(AccelerationStructureCompatibilityKHR, String)]
showTableAccelerationStructureCompatibilityKHR :: [(AccelerationStructureCompatibilityKHR, String)]
showTableAccelerationStructureCompatibilityKHR =
  [ (AccelerationStructureCompatibilityKHR
ACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR  , String
"COMPATIBLE_KHR")
  , (AccelerationStructureCompatibilityKHR
ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR, String
"INCOMPATIBLE_KHR")
  ]

instance Show AccelerationStructureCompatibilityKHR where
  showsPrec :: Int -> AccelerationStructureCompatibilityKHR -> ShowS
showsPrec = String
-> [(AccelerationStructureCompatibilityKHR, String)]
-> String
-> (AccelerationStructureCompatibilityKHR -> Int32)
-> (Int32 -> ShowS)
-> Int
-> AccelerationStructureCompatibilityKHR
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixAccelerationStructureCompatibilityKHR
                            [(AccelerationStructureCompatibilityKHR, String)]
showTableAccelerationStructureCompatibilityKHR
                            String
conNameAccelerationStructureCompatibilityKHR
                            (\(AccelerationStructureCompatibilityKHR Int32
x) -> Int32
x)
                            (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11)

instance Read AccelerationStructureCompatibilityKHR where
  readPrec :: ReadPrec AccelerationStructureCompatibilityKHR
readPrec = String
-> [(AccelerationStructureCompatibilityKHR, String)]
-> String
-> (Int32 -> AccelerationStructureCompatibilityKHR)
-> ReadPrec AccelerationStructureCompatibilityKHR
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixAccelerationStructureCompatibilityKHR
                          [(AccelerationStructureCompatibilityKHR, String)]
showTableAccelerationStructureCompatibilityKHR
                          String
conNameAccelerationStructureCompatibilityKHR
                          Int32 -> AccelerationStructureCompatibilityKHR
AccelerationStructureCompatibilityKHR


type FormatFeatureFlags2KHR = FormatFeatureFlagBits2KHR

-- | VkFormatFeatureFlagBits2KHR - Bitmask specifying features supported by a
-- buffer
--
-- = Description
--
-- The following bits /may/ be set in @linearTilingFeatures@ and
-- @optimalTilingFeatures@, specifying that the features are supported by
-- <VkImage.html images> or <VkImageView.html image views> or
-- <VkSamplerYcbcrConversion.html sampler Y′CBCR conversion objects>
-- created with the queried
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2'::@format@:
--
-- -   'FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR' specifies that an image
--     view /can/ be
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage sampled from>.
--
-- -   'FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR' specifies that an image
--     view /can/ be used as a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage storage image>.
--
-- -   'FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR' specifies that an
--     image view /can/ be used as storage image that supports atomic
--     operations.
--
-- -   'FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR' specifies that an image
--     view /can/ be used as a framebuffer color attachment and as an input
--     attachment.
--
-- -   'FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR' specifies that an
--     image view /can/ be used as a framebuffer color attachment that
--     supports blending and as an input attachment.
--
-- -   'FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR' specifies that
--     an image view /can/ be used as a framebuffer depth\/stencil
--     attachment and as an input attachment.
--
-- -   'FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR' specifies that an image /can/ be
--     used as @srcImage@ for the
--     'Vulkan.Extensions.VK_KHR_copy_commands2.cmdBlitImage2KHR' and
--     'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' commands.
--
-- -   'FORMAT_FEATURE_2_BLIT_DST_BIT_KHR' specifies that an image /can/ be
--     used as @dstImage@ for the
--     'Vulkan.Extensions.VK_KHR_copy_commands2.cmdBlitImage2KHR' and
--     'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' commands.
--
-- -   'FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR' specifies
--     that if 'FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR' is also set, an
--     image view /can/ be used with a sampler that has either of
--     @magFilter@ or @minFilter@ set to
--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR', or @mipmapMode@ set to
--     'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'.
--     If 'FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR' is also set, an image can be
--     used as the @srcImage@ to
--     'Vulkan.Extensions.VK_KHR_copy_commands2.cmdBlitImage2KHR' and
--     'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' with a @filter@
--     of 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR'. This bit /must/ only
--     be exposed for formats that also support the
--     'FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR' or
--     'FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR'.
--
--     If the format being queried is a depth\/stencil format, this bit
--     only specifies that the depth aspect (not the stencil aspect) of an
--     image of this format supports linear filtering. Where depth
--     comparison is supported it /may/ be linear filtered whether this bit
--     is present or not, but where this bit is not present the filtered
--     value /may/ be computed in an implementation-dependent manner which
--     differs from the normal rules of linear filtering. The resulting
--     value /must/ be in the range [0,1] and /should/ be proportional to,
--     or a weighted average of, the number of comparison passes or
--     failures.
--
-- -   'FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR' specifies that an image
--     /can/ be used as a source image for
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy commands>.
--
-- -   'FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR' specifies that an image
--     /can/ be used as a destination image for
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy commands>
--     and
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears clear commands>.
--
-- -   'FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR' specifies
--     'Vulkan.Core10.Handles.Image' /can/ be used as a sampled image with
--     a min or max
--     'Vulkan.Core12.Enums.SamplerReductionMode.SamplerReductionMode'.
--     This bit /must/ only be exposed for formats that also support the
--     'FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR'.
--
-- -   'FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT' specifies that
--     'Vulkan.Core10.Handles.Image' /can/ be used with a sampler that has
--     either of @magFilter@ or @minFilter@ set to
--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT', or be the
--     source image for a blit with @filter@ set to
--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT'. This bit
--     /must/ only be exposed for formats that also support the
--     'FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR'. If the format being
--     queried is a depth\/stencil format, this only specifies that the
--     depth aspect is cubic filterable.
--
-- -   'FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR' specifies that an
--     application /can/ define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
--     using this format as a source, and that an image of this format
--     /can/ be used with a
--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
--     @xChromaOffset@ and\/or @yChromaOffset@ of
--     'Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_MIDPOINT'.
--     Otherwise both @xChromaOffset@ and @yChromaOffset@ /must/ be
--     'Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_COSITED_EVEN'.
--     If a format does not incorporate chroma downsampling (it is not a
--     “422” or “420” format) but the implementation supports sampler
--     Y′CBCR conversion for this format, the implementation /must/ set
--     'FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR'.
--
-- -   'FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR' specifies that an
--     application /can/ define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
--     using this format as a source, and that an image of this format
--     /can/ be used with a
--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
--     @xChromaOffset@ and\/or @yChromaOffset@ of
--     'Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_COSITED_EVEN'.
--     Otherwise both @xChromaOffset@ and @yChromaOffset@ /must/ be
--     'Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_MIDPOINT'. If
--     neither 'FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR' nor
--     'FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR' is set, the
--     application /must/ not define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
--     using this format as a source.
--
-- -   'FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR'
--     specifies that an application /can/ define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
--     using this format as a source with @chromaFilter@ set to
--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR'.
--
-- -   'FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR'
--     specifies that the format can have different chroma, min, and mag
--     filters.
--
-- -   'FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR'
--     specifies that reconstruction is explicit, as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-chroma-reconstruction>.
--     If this bit is not present, reconstruction is implicit by default.
--
-- -   'FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR'
--     specifies that reconstruction /can/ be forcibly made explicit by
--     setting
--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'::@forceExplicitReconstruction@
--     to 'Vulkan.Core10.FundamentalTypes.TRUE'. If the format being
--     queried supports
--     'FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR'
--     it /must/ also support
--     'FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR'.
--
-- -   'FORMAT_FEATURE_2_DISJOINT_BIT_KHR' specifies that a multi-planar
--     image /can/ have the
--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
--     set during image creation. An implementation /must/ not set
--     'FORMAT_FEATURE_2_DISJOINT_BIT_KHR' for /single-plane formats/.
--
-- -   'FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT' specifies that an
--     image view /can/ be used as a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-fragmentdensitymapattachment fragment density map attachment>.
--
-- -   'FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'
--     specifies that an image view /can/ be used as a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-attachment fragment shading rate attachment>.
--     An implementation /must/ not set this feature for formats with
--     numeric type other than @*UINT@, or set it as a buffer feature.
--
-- -   'FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR' specifies
--     that image views created with this format /can/ be used as
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage storage images>
--     for read operations without specifying a format.
--
-- -   'FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR' specifies
--     that image views created with this format /can/ be used as
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage storage images>
--     for write operations without specifying a format.
--
-- -   'FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR' specifies
--     that image views created with this format /can/ be used for depth
--     comparison performed by @OpImage*Dref@ instructions.
--
-- The following bits /may/ be set in @bufferFeatures@, specifying that the
-- features are supported by <VkBuffer.html buffers> or
-- <VkBufferView.html buffer views> created with the queried
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2'::@format@:
--
-- -   'FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR' specifies that the
--     format /can/ be used to create a buffer view that /can/ be bound to
--     a
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
--     descriptor.
--
-- -   'FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR' specifies that the
--     format /can/ be used to create a buffer view that /can/ be bound to
--     a
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
--     descriptor.
--
-- -   'FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR' specifies
--     that atomic operations are supported on
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
--     with this format.
--
-- -   'FORMAT_FEATURE_2_VERTEX_BUFFER_BIT_KHR' specifies that the format
--     /can/ be used as a vertex attribute format
--     ('Vulkan.Core10.Pipeline.VertexInputAttributeDescription'::@format@).
--
-- -   'FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR'
--     specifies that the format /can/ be used as the vertex format when
--     creating an
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure acceleration structure>
--     ('AccelerationStructureGeometryTrianglesDataKHR'::@vertexFormat@).
--     This format /can/ also be used as the vertex format in host memory
--     when doing
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#host-acceleration-structure host acceleration structure>
--     builds.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_format_feature_flags2 VK_KHR_format_feature_flags2>
newtype FormatFeatureFlagBits2KHR = FormatFeatureFlagBits2KHR Flags64
  deriving newtype (FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Bool
(FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Bool)
-> (FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Bool)
-> Eq FormatFeatureFlagBits2KHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Bool
$c/= :: FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Bool
== :: FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Bool
$c== :: FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Bool
Eq, Eq FormatFeatureFlagBits2KHR
Eq FormatFeatureFlagBits2KHR
-> (FormatFeatureFlagBits2KHR
    -> FormatFeatureFlagBits2KHR -> Ordering)
-> (FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Bool)
-> (FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Bool)
-> (FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Bool)
-> (FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Bool)
-> (FormatFeatureFlagBits2KHR
    -> FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR)
-> (FormatFeatureFlagBits2KHR
    -> FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR)
-> Ord FormatFeatureFlagBits2KHR
FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Bool
FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Ordering
FormatFeatureFlagBits2KHR
-> FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR
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 :: FormatFeatureFlagBits2KHR
-> FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR
$cmin :: FormatFeatureFlagBits2KHR
-> FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR
max :: FormatFeatureFlagBits2KHR
-> FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR
$cmax :: FormatFeatureFlagBits2KHR
-> FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR
>= :: FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Bool
$c>= :: FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Bool
> :: FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Bool
$c> :: FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Bool
<= :: FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Bool
$c<= :: FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Bool
< :: FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Bool
$c< :: FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Bool
compare :: FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Ordering
$ccompare :: FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> Ordering
$cp1Ord :: Eq FormatFeatureFlagBits2KHR
Ord, Ptr b -> Int -> IO FormatFeatureFlagBits2KHR
Ptr b -> Int -> FormatFeatureFlagBits2KHR -> IO ()
Ptr FormatFeatureFlagBits2KHR -> IO FormatFeatureFlagBits2KHR
Ptr FormatFeatureFlagBits2KHR
-> Int -> IO FormatFeatureFlagBits2KHR
Ptr FormatFeatureFlagBits2KHR
-> Int -> FormatFeatureFlagBits2KHR -> IO ()
Ptr FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> IO ()
FormatFeatureFlagBits2KHR -> Int
(FormatFeatureFlagBits2KHR -> Int)
-> (FormatFeatureFlagBits2KHR -> Int)
-> (Ptr FormatFeatureFlagBits2KHR
    -> Int -> IO FormatFeatureFlagBits2KHR)
-> (Ptr FormatFeatureFlagBits2KHR
    -> Int -> FormatFeatureFlagBits2KHR -> IO ())
-> (forall b. Ptr b -> Int -> IO FormatFeatureFlagBits2KHR)
-> (forall b. Ptr b -> Int -> FormatFeatureFlagBits2KHR -> IO ())
-> (Ptr FormatFeatureFlagBits2KHR -> IO FormatFeatureFlagBits2KHR)
-> (Ptr FormatFeatureFlagBits2KHR
    -> FormatFeatureFlagBits2KHR -> IO ())
-> Storable FormatFeatureFlagBits2KHR
forall b. Ptr b -> Int -> IO FormatFeatureFlagBits2KHR
forall b. Ptr b -> Int -> FormatFeatureFlagBits2KHR -> 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 FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> IO ()
$cpoke :: Ptr FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR -> IO ()
peek :: Ptr FormatFeatureFlagBits2KHR -> IO FormatFeatureFlagBits2KHR
$cpeek :: Ptr FormatFeatureFlagBits2KHR -> IO FormatFeatureFlagBits2KHR
pokeByteOff :: Ptr b -> Int -> FormatFeatureFlagBits2KHR -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> FormatFeatureFlagBits2KHR -> IO ()
peekByteOff :: Ptr b -> Int -> IO FormatFeatureFlagBits2KHR
$cpeekByteOff :: forall b. Ptr b -> Int -> IO FormatFeatureFlagBits2KHR
pokeElemOff :: Ptr FormatFeatureFlagBits2KHR
-> Int -> FormatFeatureFlagBits2KHR -> IO ()
$cpokeElemOff :: Ptr FormatFeatureFlagBits2KHR
-> Int -> FormatFeatureFlagBits2KHR -> IO ()
peekElemOff :: Ptr FormatFeatureFlagBits2KHR
-> Int -> IO FormatFeatureFlagBits2KHR
$cpeekElemOff :: Ptr FormatFeatureFlagBits2KHR
-> Int -> IO FormatFeatureFlagBits2KHR
alignment :: FormatFeatureFlagBits2KHR -> Int
$calignment :: FormatFeatureFlagBits2KHR -> Int
sizeOf :: FormatFeatureFlagBits2KHR -> Int
$csizeOf :: FormatFeatureFlagBits2KHR -> Int
Storable, FormatFeatureFlagBits2KHR
FormatFeatureFlagBits2KHR -> Zero FormatFeatureFlagBits2KHR
forall a. a -> Zero a
zero :: FormatFeatureFlagBits2KHR
$czero :: FormatFeatureFlagBits2KHR
Zero, Eq FormatFeatureFlagBits2KHR
FormatFeatureFlagBits2KHR
Eq FormatFeatureFlagBits2KHR
-> (FormatFeatureFlagBits2KHR
    -> FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR)
-> (FormatFeatureFlagBits2KHR
    -> FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR)
-> (FormatFeatureFlagBits2KHR
    -> FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR)
-> (FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR)
-> (FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR)
-> (FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR)
-> FormatFeatureFlagBits2KHR
-> (Int -> FormatFeatureFlagBits2KHR)
-> (FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR)
-> (FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR)
-> (FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR)
-> (FormatFeatureFlagBits2KHR -> Int -> Bool)
-> (FormatFeatureFlagBits2KHR -> Maybe Int)
-> (FormatFeatureFlagBits2KHR -> Int)
-> (FormatFeatureFlagBits2KHR -> Bool)
-> (FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR)
-> (FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR)
-> (FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR)
-> (FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR)
-> (FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR)
-> (FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR)
-> (FormatFeatureFlagBits2KHR -> Int)
-> Bits FormatFeatureFlagBits2KHR
Int -> FormatFeatureFlagBits2KHR
FormatFeatureFlagBits2KHR -> Bool
FormatFeatureFlagBits2KHR -> Int
FormatFeatureFlagBits2KHR -> Maybe Int
FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR
FormatFeatureFlagBits2KHR -> Int -> Bool
FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
FormatFeatureFlagBits2KHR
-> FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR
forall a.
Eq a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
popCount :: FormatFeatureFlagBits2KHR -> Int
$cpopCount :: FormatFeatureFlagBits2KHR -> Int
rotateR :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
$crotateR :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
rotateL :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
$crotateL :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
unsafeShiftR :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
$cunsafeShiftR :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
shiftR :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
$cshiftR :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
unsafeShiftL :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
$cunsafeShiftL :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
shiftL :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
$cshiftL :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
isSigned :: FormatFeatureFlagBits2KHR -> Bool
$cisSigned :: FormatFeatureFlagBits2KHR -> Bool
bitSize :: FormatFeatureFlagBits2KHR -> Int
$cbitSize :: FormatFeatureFlagBits2KHR -> Int
bitSizeMaybe :: FormatFeatureFlagBits2KHR -> Maybe Int
$cbitSizeMaybe :: FormatFeatureFlagBits2KHR -> Maybe Int
testBit :: FormatFeatureFlagBits2KHR -> Int -> Bool
$ctestBit :: FormatFeatureFlagBits2KHR -> Int -> Bool
complementBit :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
$ccomplementBit :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
clearBit :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
$cclearBit :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
setBit :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
$csetBit :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
bit :: Int -> FormatFeatureFlagBits2KHR
$cbit :: Int -> FormatFeatureFlagBits2KHR
zeroBits :: FormatFeatureFlagBits2KHR
$czeroBits :: FormatFeatureFlagBits2KHR
rotate :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
$crotate :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
shift :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
$cshift :: FormatFeatureFlagBits2KHR -> Int -> FormatFeatureFlagBits2KHR
complement :: FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR
$ccomplement :: FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR
xor :: FormatFeatureFlagBits2KHR
-> FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR
$cxor :: FormatFeatureFlagBits2KHR
-> FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR
.|. :: FormatFeatureFlagBits2KHR
-> FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR
$c.|. :: FormatFeatureFlagBits2KHR
-> FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR
.&. :: FormatFeatureFlagBits2KHR
-> FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR
$c.&. :: FormatFeatureFlagBits2KHR
-> FormatFeatureFlagBits2KHR -> FormatFeatureFlagBits2KHR
$cp1Bits :: Eq FormatFeatureFlagBits2KHR
Bits, Bits FormatFeatureFlagBits2KHR
Bits FormatFeatureFlagBits2KHR
-> (FormatFeatureFlagBits2KHR -> Int)
-> (FormatFeatureFlagBits2KHR -> Int)
-> (FormatFeatureFlagBits2KHR -> Int)
-> FiniteBits FormatFeatureFlagBits2KHR
FormatFeatureFlagBits2KHR -> Int
forall b.
Bits b -> (b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
countTrailingZeros :: FormatFeatureFlagBits2KHR -> Int
$ccountTrailingZeros :: FormatFeatureFlagBits2KHR -> Int
countLeadingZeros :: FormatFeatureFlagBits2KHR -> Int
$ccountLeadingZeros :: FormatFeatureFlagBits2KHR -> Int
finiteBitSize :: FormatFeatureFlagBits2KHR -> Int
$cfiniteBitSize :: FormatFeatureFlagBits2KHR -> Int
$cp1FiniteBits :: Bits FormatFeatureFlagBits2KHR
FiniteBits)

-- | 'FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR' specifies that an image view
-- /can/ be
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage sampled from>.
pattern $bFORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR               = FormatFeatureFlagBits2KHR 0x0000000000000001
-- | 'FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR' specifies that an image view
-- /can/ be used as a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage storage image>.
pattern $bFORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR               = FormatFeatureFlagBits2KHR 0x0000000000000002
-- | 'FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR' specifies that an image
-- view /can/ be used as storage image that supports atomic operations.
pattern $bFORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR        = FormatFeatureFlagBits2KHR 0x0000000000000004
-- | 'FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR' specifies that the
-- format /can/ be used to create a buffer view that /can/ be bound to a
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
-- descriptor.
pattern $bFORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR        = FormatFeatureFlagBits2KHR 0x0000000000000008
-- | 'FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR' specifies that the
-- format /can/ be used to create a buffer view that /can/ be bound to a
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
-- descriptor.
pattern $bFORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR        = FormatFeatureFlagBits2KHR 0x0000000000000010
-- | 'FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR' specifies that
-- atomic operations are supported on
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
-- with this format.
pattern $bFORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR = FormatFeatureFlagBits2KHR 0x0000000000000020
-- | 'FORMAT_FEATURE_2_VERTEX_BUFFER_BIT_KHR' specifies that the format /can/
-- be used as a vertex attribute format
-- ('Vulkan.Core10.Pipeline.VertexInputAttributeDescription'::@format@).
pattern $bFORMAT_FEATURE_2_VERTEX_BUFFER_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_VERTEX_BUFFER_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_VERTEX_BUFFER_BIT_KHR               = FormatFeatureFlagBits2KHR 0x0000000000000040
-- | 'FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR' specifies that an image view
-- /can/ be used as a framebuffer color attachment and as an input
-- attachment.
pattern $bFORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR            = FormatFeatureFlagBits2KHR 0x0000000000000080
-- | 'FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR' specifies that an
-- image view /can/ be used as a framebuffer color attachment that supports
-- blending and as an input attachment.
pattern $bFORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR      = FormatFeatureFlagBits2KHR 0x0000000000000100
-- | 'FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR' specifies that an
-- image view /can/ be used as a framebuffer depth\/stencil attachment and
-- as an input attachment.
pattern $bFORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR    = FormatFeatureFlagBits2KHR 0x0000000000000200
-- | 'FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR' specifies that an image /can/ be
-- used as @srcImage@ for the
-- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdBlitImage2KHR' and
-- 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' commands.
pattern $bFORMAT_FEATURE_2_BLIT_SRC_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_BLIT_SRC_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR                    = FormatFeatureFlagBits2KHR 0x0000000000000400
-- | 'FORMAT_FEATURE_2_BLIT_DST_BIT_KHR' specifies that an image /can/ be
-- used as @dstImage@ for the
-- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdBlitImage2KHR' and
-- 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' commands.
pattern $bFORMAT_FEATURE_2_BLIT_DST_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_BLIT_DST_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_BLIT_DST_BIT_KHR                    = FormatFeatureFlagBits2KHR 0x0000000000000800
-- | 'FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR' specifies that if
-- 'FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR' is also set, an image view
-- /can/ be used with a sampler that has either of @magFilter@ or
-- @minFilter@ set to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR', or
-- @mipmapMode@ set to
-- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'. If
-- 'FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR' is also set, an image can be used as
-- the @srcImage@ to
-- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdBlitImage2KHR' and
-- 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage' with a @filter@ of
-- 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR'. This bit /must/ only be
-- exposed for formats that also support the
-- 'FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR' or
-- 'FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR'.
--
-- If the format being queried is a depth\/stencil format, this bit only
-- specifies that the depth aspect (not the stencil aspect) of an image of
-- this format supports linear filtering. Where depth comparison is
-- supported it /may/ be linear filtered whether this bit is present or
-- not, but where this bit is not present the filtered value /may/ be
-- computed in an implementation-dependent manner which differs from the
-- normal rules of linear filtering. The resulting value /must/ be in the
-- range [0,1] and /should/ be proportional to, or a weighted average of,
-- the number of comparison passes or failures.
pattern $bFORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR = FormatFeatureFlagBits2KHR 0x0000000000001000
-- | 'FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT' specifies that
-- 'Vulkan.Core10.Handles.Image' /can/ be used with a sampler that has
-- either of @magFilter@ or @minFilter@ set to
-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT', or be the
-- source image for a blit with @filter@ set to
-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT'. This bit
-- /must/ only be exposed for formats that also support the
-- 'FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR'. If the format being queried is
-- a depth\/stencil format, this only specifies that the depth aspect is
-- cubic filterable.
pattern $bFORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT  = FormatFeatureFlagBits2KHR 0x0000000000002000
-- | 'FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR' specifies that an image /can/ be
-- used as a source image for
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy commands>.
pattern $bFORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR                = FormatFeatureFlagBits2KHR 0x0000000000004000
-- | 'FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR' specifies that an image /can/ be
-- used as a destination image for
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy commands>
-- and
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears clear commands>.
pattern $bFORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR                = FormatFeatureFlagBits2KHR 0x0000000000008000
-- | 'FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR' specifies
-- 'Vulkan.Core10.Handles.Image' /can/ be used as a sampled image with a
-- min or max
-- 'Vulkan.Core12.Enums.SamplerReductionMode.SamplerReductionMode'. This
-- bit /must/ only be exposed for formats that also support the
-- 'FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR'.
pattern $bFORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR = FormatFeatureFlagBits2KHR 0x0000000000010000
-- | 'FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR' specifies that an
-- application /can/ define a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
-- using this format as a source, and that an image of this format /can/ be
-- used with a
-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
-- @xChromaOffset@ and\/or @yChromaOffset@ of
-- 'Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_MIDPOINT'. Otherwise
-- both @xChromaOffset@ and @yChromaOffset@ /must/ be
-- 'Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_COSITED_EVEN'. If a
-- format does not incorporate chroma downsampling (it is not a “422” or
-- “420” format) but the implementation supports sampler Y′CBCR conversion
-- for this format, the implementation /must/ set
-- 'FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR'.
pattern $bFORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR     = FormatFeatureFlagBits2KHR 0x0000000000020000
-- | 'FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR'
-- specifies that an application /can/ define a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
-- using this format as a source with @chromaFilter@ set to
-- 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR'.
pattern $bFORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR =
  FormatFeatureFlagBits2KHR 0x0000000000040000
-- | 'FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR'
-- specifies that the format can have different chroma, min, and mag
-- filters.
pattern $bFORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR =
  FormatFeatureFlagBits2KHR 0x0000000000080000
-- | 'FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR'
-- specifies that reconstruction is explicit, as described in
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-chroma-reconstruction>.
-- If this bit is not present, reconstruction is implicit by default.
pattern $bFORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR =
  FormatFeatureFlagBits2KHR 0x0000000000100000
-- | 'FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR'
-- specifies that reconstruction /can/ be forcibly made explicit by setting
-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'::@forceExplicitReconstruction@
-- to 'Vulkan.Core10.FundamentalTypes.TRUE'. If the format being queried
-- supports
-- 'FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR'
-- it /must/ also support
-- 'FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR'.
pattern $bFORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR =
  FormatFeatureFlagBits2KHR 0x0000000000200000
-- | 'FORMAT_FEATURE_2_DISJOINT_BIT_KHR' specifies that a multi-planar image
-- /can/ have the
-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT' set
-- during image creation. An implementation /must/ not set
-- 'FORMAT_FEATURE_2_DISJOINT_BIT_KHR' for /single-plane formats/.
pattern $bFORMAT_FEATURE_2_DISJOINT_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_DISJOINT_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_DISJOINT_BIT_KHR                             = FormatFeatureFlagBits2KHR 0x0000000000400000
-- | 'FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR' specifies that an
-- application /can/ define a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
-- using this format as a source, and that an image of this format /can/ be
-- used with a
-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo'
-- @xChromaOffset@ and\/or @yChromaOffset@ of
-- 'Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_COSITED_EVEN'.
-- Otherwise both @xChromaOffset@ and @yChromaOffset@ /must/ be
-- 'Vulkan.Core11.Enums.ChromaLocation.CHROMA_LOCATION_MIDPOINT'. If
-- neither 'FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR' nor
-- 'FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR' is set, the
-- application /must/ not define a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>
-- using this format as a source.
pattern $bFORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR               = FormatFeatureFlagBits2KHR 0x0000000000800000
-- | 'FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR' specifies that
-- image views created with this format /can/ be used as
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage storage images>
-- for read operations without specifying a format.
pattern $bFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR          = FormatFeatureFlagBits2KHR 0x0000000080000000
-- | 'FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR' specifies that
-- image views created with this format /can/ be used as
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage storage images>
-- for write operations without specifying a format.
pattern $bFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR         = FormatFeatureFlagBits2KHR 0x0000000100000000
-- | 'FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR' specifies that
-- image views created with this format /can/ be used for depth comparison
-- performed by @OpImage*Dref@ instructions.
pattern $bFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR       = FormatFeatureFlagBits2KHR 0x0000000200000000
-- | 'FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR' specifies
-- that an image view /can/ be used as a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-attachment fragment shading rate attachment>.
-- An implementation /must/ not set this feature for formats with numeric
-- type other than @*UINT@, or set it as a buffer feature.
pattern $bFORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR     = FormatFeatureFlagBits2KHR 0x0000000040000000
-- | 'FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT' specifies that an image
-- view /can/ be used as a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-fragmentdensitymapattachment fragment density map attachment>.
pattern $bFORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT                 = FormatFeatureFlagBits2KHR 0x0000000001000000
-- | 'FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR'
-- specifies that the format /can/ be used as the vertex format when
-- creating an
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure acceleration structure>
-- ('AccelerationStructureGeometryTrianglesDataKHR'::@vertexFormat@). This
-- format /can/ also be used as the vertex format in host memory when doing
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#host-acceleration-structure host acceleration structure>
-- builds.
pattern $bFORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR :: FormatFeatureFlagBits2KHR
$mFORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR :: forall r.
FormatFeatureFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR = FormatFeatureFlagBits2KHR 0x0000000020000000

conNameFormatFeatureFlagBits2KHR :: String
conNameFormatFeatureFlagBits2KHR :: String
conNameFormatFeatureFlagBits2KHR = String
"FormatFeatureFlagBits2KHR"

enumPrefixFormatFeatureFlagBits2KHR :: String
enumPrefixFormatFeatureFlagBits2KHR :: String
enumPrefixFormatFeatureFlagBits2KHR = String
"FORMAT_FEATURE_2_"

showTableFormatFeatureFlagBits2KHR :: [(FormatFeatureFlagBits2KHR, String)]
showTableFormatFeatureFlagBits2KHR :: [(FormatFeatureFlagBits2KHR, String)]
showTableFormatFeatureFlagBits2KHR =
  [ (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR              , String
"SAMPLED_IMAGE_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR              , String
"STORAGE_IMAGE_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR       , String
"STORAGE_IMAGE_ATOMIC_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR       , String
"UNIFORM_TEXEL_BUFFER_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR       , String
"STORAGE_TEXEL_BUFFER_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR, String
"STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_VERTEX_BUFFER_BIT_KHR              , String
"VERTEX_BUFFER_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR           , String
"COLOR_ATTACHMENT_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR     , String
"COLOR_ATTACHMENT_BLEND_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR   , String
"DEPTH_STENCIL_ATTACHMENT_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR                   , String
"BLIT_SRC_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_BLIT_DST_BIT_KHR                   , String
"BLIT_DST_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR, String
"SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT , String
"SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR               , String
"TRANSFER_SRC_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR               , String
"TRANSFER_DST_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR, String
"SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR    , String
"MIDPOINT_CHROMA_SAMPLES_BIT_KHR")
  , ( FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR
    , String
"SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR"
    )
  , ( FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR
    , String
"SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR"
    )
  , ( FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR
    , String
"SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR"
    )
  , ( FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR
    , String
"SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR"
    )
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_DISJOINT_BIT_KHR                            , String
"DISJOINT_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR              , String
"COSITED_CHROMA_SAMPLES_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR         , String
"STORAGE_READ_WITHOUT_FORMAT_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR        , String
"STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR      , String
"SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR    , String
"FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT                , String
"FRAGMENT_DENSITY_MAP_BIT_EXT")
  , (FormatFeatureFlagBits2KHR
FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR, String
"ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR")
  ]

instance Show FormatFeatureFlagBits2KHR where
  showsPrec :: Int -> FormatFeatureFlagBits2KHR -> ShowS
showsPrec = String
-> [(FormatFeatureFlagBits2KHR, String)]
-> String
-> (FormatFeatureFlagBits2KHR -> "dataSize" ::: Word64)
-> (("dataSize" ::: Word64) -> ShowS)
-> Int
-> FormatFeatureFlagBits2KHR
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixFormatFeatureFlagBits2KHR
                            [(FormatFeatureFlagBits2KHR, String)]
showTableFormatFeatureFlagBits2KHR
                            String
conNameFormatFeatureFlagBits2KHR
                            (\(FormatFeatureFlagBits2KHR "dataSize" ::: Word64
x) -> "dataSize" ::: Word64
x)
                            (\"dataSize" ::: Word64
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ("dataSize" ::: Word64) -> ShowS
forall a. (Integral a, Show a) => a -> ShowS
showHex "dataSize" ::: Word64
x)

instance Read FormatFeatureFlagBits2KHR where
  readPrec :: ReadPrec FormatFeatureFlagBits2KHR
readPrec = String
-> [(FormatFeatureFlagBits2KHR, String)]
-> String
-> (("dataSize" ::: Word64) -> FormatFeatureFlagBits2KHR)
-> ReadPrec FormatFeatureFlagBits2KHR
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixFormatFeatureFlagBits2KHR
                          [(FormatFeatureFlagBits2KHR, String)]
showTableFormatFeatureFlagBits2KHR
                          String
conNameFormatFeatureFlagBits2KHR
                          ("dataSize" ::: Word64) -> FormatFeatureFlagBits2KHR
FormatFeatureFlagBits2KHR


type KHR_ACCELERATION_STRUCTURE_SPEC_VERSION = 13

-- No documentation found for TopLevel "VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION"
pattern KHR_ACCELERATION_STRUCTURE_SPEC_VERSION :: forall a . Integral a => a
pattern $bKHR_ACCELERATION_STRUCTURE_SPEC_VERSION :: a
$mKHR_ACCELERATION_STRUCTURE_SPEC_VERSION :: forall r a. Integral a => a -> (Void# -> r) -> (Void# -> r) -> r
KHR_ACCELERATION_STRUCTURE_SPEC_VERSION = 13


type KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME = "VK_KHR_acceleration_structure"

-- No documentation found for TopLevel "VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME"
pattern KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bKHR_ACCELERATION_STRUCTURE_EXTENSION_NAME :: a
$mKHR_ACCELERATION_STRUCTURE_EXTENSION_NAME :: forall r a.
(Eq a, IsString a) =>
a -> (Void# -> r) -> (Void# -> r) -> r
KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME = "VK_KHR_acceleration_structure"