{-# language CPP #-}
-- | = Name
--
-- VK_EXT_descriptor_heap - device extension
--
-- = VK_EXT_descriptor_heap
--
-- [__Name String__]
--     @VK_EXT_descriptor_heap@
--
-- [__Extension Type__]
--     Device extension
--
-- [__Registered Extension Number__]
--     136
--
-- [__Revision__]
--     1
--
-- [__Ratification Status__]
--     Ratified
--
-- [__Extension and Version Dependencies__]
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_maintenance5 VK_KHR_maintenance5>
--     and
--         
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_buffer_device_address VK_KHR_buffer_device_address>
--          or
--         
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#versions-1.2 Vulkan Version 1.2>
--
-- [__API Interactions__]
--
--     -   Interacts with VK_ARM_tensors
--
--     -   Interacts with VK_EXT_custom_border_color
--
--     -   Interacts with VK_EXT_device_generated_commands
--
--     -   Interacts with VK_EXT_fragment_density_map
--
--     -   Interacts with VK_EXT_shader_object
--
--     -   Interacts with VK_KHR_ray_tracing_pipeline
--
--     -   Interacts with VK_NV_device_generated_commands
--
--     -   Interacts with VK_NV_ray_tracing
--
-- [__SPIR-V Dependencies__]
--
--     -   <https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/EXT/SPV_EXT_descriptor_heap.html SPV_EXT_descriptor_heap>
--
-- [__Contact__]
--
--     -   Tobias Hector
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_EXT_descriptor_heap] @tobski%0A*Here describe the issue or question you have about the VK_EXT_descriptor_heap extension* >
--
-- [__Extension Proposal__]
--     <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_EXT_descriptor_heap.adoc VK_EXT_descriptor_heap>
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2024-06-12
--
-- [__IP Status__]
--     No known IP claims.
--
-- [__Contributors__]
--
--     -   Tobias Hector, AMD
--
--     -   Jan-Harald Fredriksen, Arm
--
--     -   Daniel Story, Nintendo
--
--     -   Connor Abbot, Valve
--
--     -   Hans-Kristian Arntzen, Valve
--
--     -   Matthew Netsch, Qualcomm
--
--     -   Jeff Bolz, NVIDIA
--
--     -   Alyssa Rosenzweig, Valve
--
--     -   Lionel Landerwerlin, Intel
--
--     -   Baldur Karlsson, Valve
--
--     -   Faith Ekstrand, Collabora
--
--     -   Slawomir Grajewski, Intel
--
--     -   Mike Blumenkrantz, Valve
--
--     -   Yiwei Zhang, Google
--
--     -   Stu Smith, AMD
--
--     -   Piers Daniell, NVIDIA
--
--     -   Jon Leech, Khronos
--
--     -   Rodrigo Locatti, NVIDIA
--
--     -   Krzysztof Niski, NVIDIA
--
--     -   Alan Baker, Google
--
--     -   James Fitzpatrick, Imagination
--
--     -   Samuel (Sheng-Wen) Huang, Mediatek
--
--     -   Hai Nguyen, Google
--
--     -   Jeff Leger, Qualcomm
--
--     -   Marty Johnson, Khronos
--
--     -   Tom Olson, Arm
--
--     -   Chris Glover, Google
--
--     -   Daniel Koch, NVIDIA
--
--     -   Robert Simpson, Qualcomm
--
--     -   Dan Ginsburg, Valve
--
--     -   Andreas Süßenbach, NVIDIA
--
--     -   Anna Maniscalco, Valve
--
--     -   Artem Kharytoniuk, LunarG
--
--     -   Younggwan Kim, Arm
--
--     -   Konstantin Seurer, Valve
--
--     -   Catarina Shablia, Collabora
--
--     -   Spencer Fricke, LunarG
--
--     -   Chris Bieneman, Microsoft
--
--     -   Ting Wei, Arm
--
--     -   Boris Zanin, AMD
--
--     -   Samuel Pitoiset, Valve
--
--     -   Erik Hogeman, Arm
--
--     -   Jesse Natalie, Microsoft
--
--     -   Guang Xu, AMD
--
--     -   Embla Flatlandsmo, Arm
--
-- [__Interactions and External Dependencies__]
--
--     -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_shader_untyped_pointers VK_KHR_shader_untyped_pointers>
--         must be supported, but it does not need to be enabled for
--         applications using only the
--         <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#descriptorheaps-bindings binding interface>.
--
-- == Description
--
-- This extension allows explicit management of descriptors, and the memory
-- used to store descriptors, conceptualised as descriptor heaps.
-- Descriptor heap memory can be accessed as any other memory, enabling
-- management of descriptors on both CPU and the GPU.
--
-- This extension was developed based on issues discovered with
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_buffer VK_EXT_descriptor_buffer>.
-- There are more constraints on how it is implemented, to provide more
-- portable guarantees and more predictable performance characteristics.
-- For instance, rather than an arbitrary number of sampler or resource
-- buffers, there is exactly one sampler heap and exactly one resource
-- heap.
--
-- This extension also eliminates descriptor sets and pipeline layouts
-- completely; instead applications can look descriptors up solely by their
-- offset into a heap. Shaders still using descriptor set and binding
-- decorations can still be mapped to heaps through an API that maps set
-- and binding decorations to heap offsets, either as constants or through
-- push data. This new mapping API also enables a much more straightforward
-- mapping to HLSL shaders using the root signature and descriptor table
-- interfaces.
--
-- The push constant API has also been replaced with the /push data/
-- interface, which aims to provide much more clarity about how data is
-- passed to the shader, without requiring any mapping information to be
-- provided during pipeline or shader creation. Mappings are still
-- available for shaders written for the legacy interface.
--
-- There is also a much clearer path for mapping shader constant data, with
-- two recommended options for mapping constant data through push data;
-- either directly in push data, or through a device address stored in push
-- data, both of which can be mapped to shaders with set and binding
-- interfaces.
--
-- == New Object Types
--
-- -   'Vulkan.Extensions.Handles.TensorARM'
--
-- == New Commands
--
-- -   'cmdBindResourceHeapEXT'
--
-- -   'cmdBindSamplerHeapEXT'
--
-- -   'cmdPushDataEXT'
--
-- -   'getImageOpaqueCaptureDataEXT'
--
-- -   'getPhysicalDeviceDescriptorSizeEXT'
--
-- -   'writeResourceDescriptorsEXT'
--
-- -   'writeSamplerDescriptorsEXT'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_tensors VK_ARM_tensors>
-- is supported:
--
-- -   'getTensorOpaqueCaptureDataARM'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_custom_border_color VK_EXT_custom_border_color>
-- is supported:
--
-- -   'registerCustomBorderColorEXT'
--
-- -   'unregisterCustomBorderColorEXT'
--
-- == New Structures
--
-- -   'BindHeapInfoEXT'
--
-- -   'DescriptorMappingSourceConstantOffsetEXT'
--
-- -   'DescriptorMappingSourceHeapDataEXT'
--
-- -   'DescriptorMappingSourceIndirectAddressEXT'
--
-- -   'DescriptorMappingSourceIndirectIndexArrayEXT'
--
-- -   'DescriptorMappingSourceIndirectIndexEXT'
--
-- -   'DescriptorMappingSourcePushIndexEXT'
--
-- -   'DescriptorMappingSourceShaderRecordIndexEXT'
--
-- -   'DescriptorSetAndBindingMappingEXT'
--
-- -   'DeviceAddressRangeEXT'
--
-- -   'HostAddressRangeConstEXT'
--
-- -   'HostAddressRangeEXT'
--
-- -   'ImageDescriptorInfoEXT'
--
-- -   'PushDataInfoEXT'
--
-- -   'ResourceDescriptorInfoEXT'
--
-- -   'Vulkan.Extensions.VK_ARM_tensors.TensorViewCreateInfoARM'
--
-- -   'TexelBufferDescriptorInfoEXT'
--
-- -   Extending
--     'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo':
--
--     -   'CommandBufferInheritanceDescriptorHeapInfoEXT'
--
-- -   Extending 'Vulkan.Core10.Image.ImageCreateInfo',
--     'Vulkan.Extensions.VK_ARM_tensors.TensorCreateInfoARM':
--
--     -   'OpaqueCaptureDataCreateInfoEXT'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--     'Vulkan.Core10.Device.DeviceCreateInfo':
--
--     -   'PhysicalDeviceDescriptorHeapFeaturesEXT'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2':
--
--     -   'PhysicalDeviceDescriptorHeapPropertiesEXT'
--
-- -   Extending
--     'Vulkan.Core10.ComputePipeline.PipelineShaderStageCreateInfo',
--     'Vulkan.Extensions.VK_EXT_shader_object.ShaderCreateInfoEXT':
--
--     -   'ShaderDescriptorSetAndBindingMappingInfoEXT'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_tensors VK_ARM_tensors>
-- is supported:
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2':
--
--     -   'PhysicalDeviceDescriptorHeapTensorPropertiesARM'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_custom_border_color VK_EXT_custom_border_color>
-- is supported:
--
-- -   Extending 'Vulkan.Core10.Sampler.SamplerCreateInfo':
--
--     -   'SamplerCustomBorderColorIndexCreateInfoEXT'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_fragment_density_map VK_EXT_fragment_density_map>
-- is supported:
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.ImageFormatProperties2':
--
--     -   'SubsampledImageFormatPropertiesEXT'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_device_generated_commands VK_NV_device_generated_commands>
-- is supported:
--
-- -   Extending
--     'Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsLayoutTokenNV':
--
--     -   'IndirectCommandsLayoutPushDataTokenNV'
--
-- == New Unions
--
-- -   'DescriptorMappingSourceDataEXT'
--
-- -   'ResourceDescriptorDataEXT'
--
-- == New Enums
--
-- -   'DescriptorMappingSourceEXT'
--
-- -   'SpirvResourceTypeFlagBitsEXT'
--
-- == New Bitmasks
--
-- -   'SpirvResourceTypeFlagsEXT'
--
-- -   'Vulkan.Extensions.VK_ARM_tensors.TensorViewCreateFlagsARM'
--
-- == New Enum Constants
--
-- -   'EXT_DESCRIPTOR_HEAP_EXTENSION_NAME'
--
-- -   'EXT_DESCRIPTOR_HEAP_SPEC_VERSION'
--
-- -   Extending 'Vulkan.Core13.Enums.AccessFlags2.AccessFlagBits2':
--
--     -   'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_RESOURCE_HEAP_READ_BIT_EXT'
--
--     -   'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_SAMPLER_HEAP_READ_BIT_EXT'
--
-- -   Extending
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BufferUsageFlagBits':
--
--     -   'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_DESCRIPTOR_HEAP_BIT_EXT'
--
-- -   Extending
--     'Vulkan.Core14.Enums.BufferUsageFlags2.BufferUsageFlagBits2':
--
--     -   'Vulkan.Core14.Enums.BufferUsageFlags2.BUFFER_USAGE_2_DESCRIPTOR_HEAP_BIT_EXT'
--
-- -   Extending
--     'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits':
--
--     -   'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DESCRIPTOR_HEAP_CAPTURE_REPLAY_BIT_EXT'
--
-- -   Extending
--     'Vulkan.Core14.Enums.PipelineCreateFlags2.PipelineCreateFlagBits2':
--
--     -   'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_HEAP_INFO_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_DESCRIPTOR_HEAP_INFO_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_AND_BINDING_MAPPING_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_DESCRIPTOR_INFO_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_OPAQUE_CAPTURE_DATA_CREATE_INFO_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_HEAP_FEATURES_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_HEAP_PROPERTIES_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PUSH_DATA_INFO_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RESOURCE_DESCRIPTOR_INFO_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SHADER_DESCRIPTOR_SET_AND_BINDING_MAPPING_INFO_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_TEXEL_BUFFER_DESCRIPTOR_INFO_EXT'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_tensors VK_ARM_tensors>
-- is supported:
--
-- -   Extending 'SpirvResourceTypeFlagBitsEXT':
--
--     -   'SPIRV_RESOURCE_TYPE_TENSOR_BIT_ARM'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_HEAP_TENSOR_PROPERTIES_ARM'
--
-- -   Extending
--     'Vulkan.Extensions.VK_ARM_tensors.TensorCreateFlagBitsARM':
--
--     -   'Vulkan.Extensions.VK_ARM_tensors.TENSOR_CREATE_DESCRIPTOR_HEAP_CAPTURE_REPLAY_BIT_ARM'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_custom_border_color VK_EXT_custom_border_color>
-- is supported:
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_INDEX_CREATE_INFO_EXT'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>
-- is supported:
--
-- -   Extending
--     'Vulkan.Extensions.VK_EXT_device_generated_commands.IndirectCommandsTokenTypeEXT':
--
--     -   'Vulkan.Extensions.VK_EXT_device_generated_commands.INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_DATA_EXT'
--
--     -   'Vulkan.Extensions.VK_EXT_device_generated_commands.INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_DATA_SEQUENCE_INDEX_EXT'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_fragment_density_map VK_EXT_fragment_density_map>
-- is supported:
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SUBSAMPLED_IMAGE_FORMAT_PROPERTIES_EXT'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_shader_object VK_EXT_shader_object>
-- is supported:
--
-- -   Extending
--     'Vulkan.Extensions.VK_EXT_shader_object.ShaderCreateFlagBitsEXT':
--
--     -   'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_ray_tracing_pipeline VK_KHR_ray_tracing_pipeline>
-- or
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_ray_tracing VK_NV_ray_tracing>
-- is supported:
--
-- -   Extending 'DescriptorMappingSourceEXT':
--
--     -   'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT'
--
--     -   'DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT'
--
--     -   'DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT'
--
-- -   Extending 'SpirvResourceTypeFlagBitsEXT':
--
--     -   'SPIRV_RESOURCE_TYPE_ACCELERATION_STRUCTURE_BIT_EXT'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_device_generated_commands VK_NV_device_generated_commands>
-- is supported:
--
-- -   Extending
--     'Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsTokenTypeNV':
--
--     -   'Vulkan.Extensions.VK_NV_device_generated_commands.INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_DATA_NV'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_PUSH_DATA_TOKEN_NV'
--
-- == Version History
--
-- -   Revision 1, 2024-06-12 (Tobias Hector)
--
--     -   Initial revision.
--
-- == See Also
--
-- No cross-references are available
--
-- == Document Notes
--
-- For more information, see the
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VK_EXT_descriptor_heap Vulkan Specification>.
--
-- This page is a generated document. Fixes and changes should be made to
-- the generator scripts, not directly.
module Vulkan.Extensions.VK_EXT_descriptor_heap  ( writeSamplerDescriptorsEXT
                                                 , writeResourceDescriptorsEXT
                                                 , cmdBindSamplerHeapEXT
                                                 , cmdBindResourceHeapEXT
                                                 , cmdPushDataEXT
                                                 , registerCustomBorderColorEXT
                                                 , unregisterCustomBorderColorEXT
                                                 , getImageOpaqueCaptureDataEXT
                                                 , getPhysicalDeviceDescriptorSizeEXT
                                                 , getTensorOpaqueCaptureDataARM
                                                 , HostAddressRangeEXT(..)
                                                 , HostAddressRangeConstEXT(..)
                                                 , DeviceAddressRangeEXT(..)
                                                 , TexelBufferDescriptorInfoEXT(..)
                                                 , ImageDescriptorInfoEXT(..)
                                                 , ResourceDescriptorInfoEXT(..)
                                                 , BindHeapInfoEXT(..)
                                                 , PushDataInfoEXT(..)
                                                 , DescriptorMappingSourceConstantOffsetEXT(..)
                                                 , DescriptorMappingSourcePushIndexEXT(..)
                                                 , DescriptorMappingSourceIndirectIndexEXT(..)
                                                 , DescriptorMappingSourceIndirectIndexArrayEXT(..)
                                                 , DescriptorMappingSourceHeapDataEXT(..)
                                                 , DescriptorMappingSourceShaderRecordIndexEXT(..)
                                                 , DescriptorMappingSourceIndirectAddressEXT(..)
                                                 , DescriptorSetAndBindingMappingEXT(..)
                                                 , ShaderDescriptorSetAndBindingMappingInfoEXT(..)
                                                 , SamplerCustomBorderColorIndexCreateInfoEXT(..)
                                                 , OpaqueCaptureDataCreateInfoEXT(..)
                                                 , IndirectCommandsLayoutPushDataTokenNV(..)
                                                 , SubsampledImageFormatPropertiesEXT(..)
                                                 , PhysicalDeviceDescriptorHeapFeaturesEXT(..)
                                                 , PhysicalDeviceDescriptorHeapPropertiesEXT(..)
                                                 , CommandBufferInheritanceDescriptorHeapInfoEXT(..)
                                                 , PhysicalDeviceDescriptorHeapTensorPropertiesARM(..)
                                                 , ResourceDescriptorDataEXT(..)
                                                 , DescriptorMappingSourceDataEXT(..)
                                                 , DescriptorMappingSourceEXT( DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_CONSTANT_OFFSET_EXT
                                                                             , DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT
                                                                             , DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT
                                                                             , DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT
                                                                             , DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT
                                                                             , DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT
                                                                             , DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT
                                                                             , DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT
                                                                             , DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT
                                                                             , DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT
                                                                             , DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT
                                                                             , ..
                                                                             )
                                                 , SpirvResourceTypeFlagsEXT
                                                 , SpirvResourceTypeFlagBitsEXT( SPIRV_RESOURCE_TYPE_ALL_EXT
                                                                               , SPIRV_RESOURCE_TYPE_SAMPLER_BIT_EXT
                                                                               , SPIRV_RESOURCE_TYPE_SAMPLED_IMAGE_BIT_EXT
                                                                               , SPIRV_RESOURCE_TYPE_READ_ONLY_IMAGE_BIT_EXT
                                                                               , SPIRV_RESOURCE_TYPE_READ_WRITE_IMAGE_BIT_EXT
                                                                               , SPIRV_RESOURCE_TYPE_COMBINED_SAMPLED_IMAGE_BIT_EXT
                                                                               , SPIRV_RESOURCE_TYPE_UNIFORM_BUFFER_BIT_EXT
                                                                               , SPIRV_RESOURCE_TYPE_READ_ONLY_STORAGE_BUFFER_BIT_EXT
                                                                               , SPIRV_RESOURCE_TYPE_READ_WRITE_STORAGE_BUFFER_BIT_EXT
                                                                               , SPIRV_RESOURCE_TYPE_TENSOR_BIT_ARM
                                                                               , SPIRV_RESOURCE_TYPE_ACCELERATION_STRUCTURE_BIT_EXT
                                                                               , ..
                                                                               )
                                                 , EXT_DESCRIPTOR_HEAP_SPEC_VERSION
                                                 , pattern EXT_DESCRIPTOR_HEAP_SPEC_VERSION
                                                 , EXT_DESCRIPTOR_HEAP_EXTENSION_NAME
                                                 , pattern EXT_DESCRIPTOR_HEAP_EXTENSION_NAME
                                                 , TensorARM(..)
                                                 , SamplerCustomBorderColorCreateInfoEXT(..)
                                                 , TensorViewCreateInfoARM(..)
                                                 , IndirectCommandsTokenTypeNV(..)
                                                 , IndirectCommandsTokenTypeEXT(..)
                                                 , ShaderCreateFlagBitsEXT(..)
                                                 , ShaderCreateFlagsEXT
                                                 , TensorCreateFlagBitsARM(..)
                                                 , TensorCreateFlagsARM
                                                 , TensorViewCreateFlagBitsARM(..)
                                                 , TensorViewCreateFlagsARM
                                                 ) where

import Data.Bits (Bits)
import Data.Bits (FiniteBits)
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.Typeable (eqT)
import Foreign.Marshal.Alloc (allocaBytes)
import Foreign.Marshal.Alloc (callocBytes)
import Foreign.Marshal.Alloc (free)
import Foreign.Marshal.Utils (maybePeek)
import GHC.Base (when)
import GHC.IO (throwIO)
import GHC.Ptr (castPtr)
import GHC.Ptr (nullFunPtr)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import GHC.Show (showString)
import GHC.Show (showsPrec)
import Numeric (showHex)
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 Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero)
import Vulkan.Zero (Zero(..))
import Control.Monad.IO.Class (MonadIO)
import Data.String (IsString)
import Data.Type.Equality ((:~:)(Refl))
import Data.Typeable (Typeable)
import Foreign.C.Types (CSize)
import Foreign.C.Types (CSize(..))
import Foreign.C.Types (CSize(CSize))
import Foreign.Storable (Storable)
import Foreign.Storable (Storable(peek))
import Foreign.Storable (Storable(poke))
import qualified Foreign.Storable (Storable(..))
import GHC.Generics (Generic)
import GHC.IO.Exception (IOErrorType(..))
import GHC.IO.Exception (IOException(..))
import Data.Int (Int32)
import Foreign.Ptr (FunPtr)
import Foreign.Ptr (Ptr)
import GHC.Read (Read(readPrec))
import GHC.Show (Show(showsPrec))
import Data.Word (Word32)
import Data.Word (Word64)
import Data.Kind (Type)
import Control.Monad.Trans.Cont (ContT(..))
import Data.Vector (Vector)
import Vulkan.CStruct.Utils (advancePtrBytes)
import Vulkan.Core10.FundamentalTypes (bool32ToBool)
import Vulkan.Core10.FundamentalTypes (boolToBool32)
import Vulkan.CStruct.Extends (forgetExtensions)
import Vulkan.CStruct.Extends (peekSomeCStruct)
import Vulkan.CStruct.Extends (pokeSomeCStruct)
import Vulkan.CStruct.Extends (withSomeCStruct)
import Vulkan.NamedType ((:::))
import Vulkan.Core10.FundamentalTypes (Bool32)
import Vulkan.Core10.FundamentalTypes (Bool32(..))
import Vulkan.CStruct.Extends (Chain)
import Vulkan.Core10.Handles (CommandBuffer)
import Vulkan.Core10.Handles (CommandBuffer(..))
import Vulkan.Core10.Handles (CommandBuffer(CommandBuffer))
import Vulkan.Core10.Handles (CommandBuffer_T)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_debug_utils (DebugUtilsObjectNameInfoEXT)
import Vulkan.Core10.Enums.DescriptorType (DescriptorType)
import Vulkan.Core10.Enums.DescriptorType (DescriptorType(..))
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(pVkCmdBindResourceHeapEXT))
import Vulkan.Dynamic (DeviceCmds(pVkCmdBindSamplerHeapEXT))
import Vulkan.Dynamic (DeviceCmds(pVkCmdPushDataEXT))
import Vulkan.Dynamic (DeviceCmds(pVkGetImageOpaqueCaptureDataEXT))
import Vulkan.Dynamic (DeviceCmds(pVkGetTensorOpaqueCaptureDataARM))
import Vulkan.Dynamic (DeviceCmds(pVkRegisterCustomBorderColorEXT))
import Vulkan.Dynamic (DeviceCmds(pVkUnregisterCustomBorderColorEXT))
import Vulkan.Dynamic (DeviceCmds(pVkWriteResourceDescriptorsEXT))
import Vulkan.Dynamic (DeviceCmds(pVkWriteSamplerDescriptorsEXT))
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.Enums.Format (Format)
import Vulkan.Core10.Handles (Image)
import Vulkan.Core10.Handles (Image(..))
import Vulkan.Core10.Enums.ImageLayout (ImageLayout)
import Vulkan.Core10.ImageView (ImageViewCreateInfo)
import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceDescriptorSizeEXT))
import Vulkan.CStruct.Extends (PeekChain)
import Vulkan.CStruct.Extends (PeekChain(..))
import Vulkan.Core10.Handles (PhysicalDevice)
import Vulkan.Core10.Handles (PhysicalDevice(..))
import Vulkan.Core10.Handles (PhysicalDevice(PhysicalDevice))
import Vulkan.Core10.Handles (PhysicalDevice_T)
import Vulkan.CStruct.Extends (PokeChain)
import Vulkan.CStruct.Extends (PokeChain(..))
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_push_constant_bank (PushConstantBankInfoNV)
import Vulkan.Core10.Enums.Result (Result)
import Vulkan.Core10.Enums.Result (Result(..))
import Vulkan.Core10.Sampler (SamplerCreateInfo)
import Vulkan.Extensions.VK_EXT_custom_border_color (SamplerCustomBorderColorCreateInfoEXT)
import Vulkan.CStruct.Extends (SomeStruct)
import Vulkan.CStruct.Extends (SomeStruct(..))
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Extensions.Handles (TensorARM)
import Vulkan.Extensions.Handles (TensorARM(..))
import Vulkan.Extensions.VK_ARM_tensors (TensorViewCreateInfoARM)
import Vulkan.Exception (VulkanException(..))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_HEAP_INFO_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_DESCRIPTOR_HEAP_INFO_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_SET_AND_BINDING_MAPPING_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_DESCRIPTOR_INFO_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_PUSH_DATA_TOKEN_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_OPAQUE_CAPTURE_DATA_CREATE_INFO_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_HEAP_FEATURES_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_HEAP_PROPERTIES_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_HEAP_TENSOR_PROPERTIES_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PUSH_DATA_INFO_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RESOURCE_DESCRIPTOR_INFO_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_INDEX_CREATE_INFO_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SHADER_DESCRIPTOR_SET_AND_BINDING_MAPPING_INFO_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBSAMPLED_IMAGE_FORMAT_PROPERTIES_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_TEXEL_BUFFER_DESCRIPTOR_INFO_EXT))
import Vulkan.Core10.Enums.Result (Result(SUCCESS))
import Vulkan.Extensions.VK_EXT_device_generated_commands (IndirectCommandsTokenTypeEXT(..))
import Vulkan.Extensions.VK_NV_device_generated_commands (IndirectCommandsTokenTypeNV(..))
import Vulkan.Extensions.VK_EXT_custom_border_color (SamplerCustomBorderColorCreateInfoEXT(..))
import Vulkan.Extensions.VK_EXT_shader_object (ShaderCreateFlagBitsEXT(..))
import Vulkan.Extensions.VK_EXT_shader_object (ShaderCreateFlagsEXT)
import Vulkan.Extensions.Handles (TensorARM(..))
import Vulkan.Extensions.VK_ARM_tensors (TensorCreateFlagBitsARM(..))
import Vulkan.Extensions.VK_ARM_tensors (TensorCreateFlagsARM)
import Vulkan.Extensions.VK_ARM_tensors (TensorViewCreateFlagBitsARM(..))
import Vulkan.Extensions.VK_ARM_tensors (TensorViewCreateFlagsARM)
import Vulkan.Extensions.VK_ARM_tensors (TensorViewCreateInfoARM(..))
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkWriteSamplerDescriptorsEXT
  :: FunPtr (Ptr Device_T -> Word32 -> Ptr (SomeStruct SamplerCreateInfo) -> Ptr HostAddressRangeEXT -> IO Result) -> Ptr Device_T -> Word32 -> Ptr (SomeStruct SamplerCreateInfo) -> Ptr HostAddressRangeEXT -> IO Result

-- | vkWriteSamplerDescriptorsEXT - Write sampler descriptors to memory
--
-- = Description
--
-- Each descriptor will be written to @pDescriptors@[i].@address@ where i
-- is the index of its create info in @pSamplers@.
--
-- Descriptors written using a fully identical
-- 'Vulkan.Core10.Sampler.SamplerCreateInfo' structure on the same
-- 'Vulkan.Core10.Handles.Device' will always return the same bit pattern.
-- If the
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-descriptorHeapCaptureReplay descriptorHeapCaptureReplay>
-- feature is enabled, descriptors written using a fully identical
-- 'Vulkan.Core10.Sampler.SamplerCreateInfo' structure on a
-- 'Vulkan.Core10.Handles.Device' created from the same
-- 'Vulkan.Core10.Handles.PhysicalDevice' with identical parameters will
-- always return the same bit pattern.
--
-- YCBCR samplers must be embedded in a shader by using
-- 'ShaderDescriptorSetAndBindingMappingInfoEXT', they cannot be specified
-- here.
--
-- == Valid Usage
--
-- -   #VUID-vkWriteSamplerDescriptorsEXT-descriptorHeap-11202# The
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-descriptorHeap descriptorHeap>
--     feature /must/ be enabled
--
-- -   #VUID-vkWriteSamplerDescriptorsEXT-size-11203# The @size@ member of
--     each element of @pDescriptors@ /must/ be greater than or equal to
--     the value returned by 'getPhysicalDeviceDescriptorSizeEXT' with a
--     @descriptorType@ equal to
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER'
--
-- -   #VUID-vkWriteSamplerDescriptorsEXT-pSamplers-11204# Elements of
--     @pSamplers@ /must/ not include
--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
--     structures in their @pNext@ chains
--
-- -   #VUID-vkWriteSamplerDescriptorsEXT-borderColor-11444# If the
--     @borderColor@ of any element of @pSamplers@ is
--     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_FLOAT_CUSTOM_EXT' or
--     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_INT_CUSTOM_EXT',
--     'SamplerCustomBorderColorIndexCreateInfoEXT' /must/ be included in
--     the @pNext@ chain of that element
--
-- -   #VUID-vkWriteSamplerDescriptorsEXT-borderColor-11205# If the
--     @borderColor@ of any element of @pSamplers@ is
--     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_FLOAT_CUSTOM_EXT' or
--     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_INT_CUSTOM_EXT',
--     'SamplerCustomBorderColorIndexCreateInfoEXT'::@index@ /must/ be a
--     value less than
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-maxCustomBorderColorSamplers maxCustomBorderColorSamplers>
--
-- -   #VUID-vkWriteSamplerDescriptorsEXT-pNext-11400# If there is a
--     'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsObjectNameInfoEXT'
--     structure in the @pNext@ chain of any element of @pSamplers@, its
--     @objectType@ /must/ be
--     'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkWriteSamplerDescriptorsEXT-device-parameter# @device@ /must/
--     be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkWriteSamplerDescriptorsEXT-pSamplers-parameter# @pSamplers@
--     /must/ be a valid pointer to an array of @samplerCount@ valid
--     'Vulkan.Core10.Sampler.SamplerCreateInfo' structures
--
-- -   #VUID-vkWriteSamplerDescriptorsEXT-pDescriptors-parameter#
--     @pDescriptors@ /must/ be a valid pointer to an array of
--     @samplerCount@ valid 'HostAddressRangeEXT' structures
--
-- -   #VUID-vkWriteSamplerDescriptorsEXT-samplerCount-arraylength#
--     @samplerCount@ /must/ be greater than @0@
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_VALIDATION_FAILED'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'Vulkan.Core10.Handles.Device', 'HostAddressRangeEXT',
-- 'Vulkan.Core10.Sampler.SamplerCreateInfo'
writeSamplerDescriptorsEXT :: forall io
                            . (MonadIO io)
                           => -- | @device@ is the logical device that the descriptors are for.
                              Device
                           -> -- | @pSamplers@ is a pointer to an array of
                              -- 'Vulkan.Core10.Sampler.SamplerCreateInfo' structures defining properties
                              -- of the sampler descriptors that will be written.
                              ("samplers" ::: Vector (SomeStruct SamplerCreateInfo))
                           -> -- | @pDescriptors@ is a pointer to an array of 'HostAddressRangeEXT'
                              -- structures defining the host address ranges that will be written to for
                              -- each descriptor.
                              ("descriptors" ::: Vector HostAddressRangeEXT)
                           -> io ()
writeSamplerDescriptorsEXT :: forall (io :: * -> *).
MonadIO io =>
Device
-> ("samplers" ::: Vector (SomeStruct SamplerCreateInfo))
-> ("descriptors" ::: Vector HostAddressRangeEXT)
-> io ()
writeSamplerDescriptorsEXT Device
device "samplers" ::: Vector (SomeStruct SamplerCreateInfo)
samplers "descriptors" ::: Vector HostAddressRangeEXT
descriptors = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkWriteSamplerDescriptorsEXTPtr :: FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr (SomeStruct SamplerCreateInfo)
   -> Ptr HostAddressRangeEXT
   -> IO Result)
vkWriteSamplerDescriptorsEXTPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> Word32
      -> Ptr (SomeStruct SamplerCreateInfo)
      -> Ptr HostAddressRangeEXT
      -> IO Result)
pVkWriteSamplerDescriptorsEXT (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr (SomeStruct SamplerCreateInfo)
   -> Ptr HostAddressRangeEXT
   -> IO Result)
vkWriteSamplerDescriptorsEXTPtr FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr (SomeStruct SamplerCreateInfo)
   -> Ptr HostAddressRangeEXT
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> Word32
      -> Ptr (SomeStruct SamplerCreateInfo)
      -> Ptr HostAddressRangeEXT
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr (SomeStruct SamplerCreateInfo)
   -> Ptr HostAddressRangeEXT
   -> IO Result)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkWriteSamplerDescriptorsEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkWriteSamplerDescriptorsEXT' :: Ptr Device_T
-> Word32
-> Ptr (SomeStruct SamplerCreateInfo)
-> Ptr HostAddressRangeEXT
-> IO Result
vkWriteSamplerDescriptorsEXT' = FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr (SomeStruct SamplerCreateInfo)
   -> Ptr HostAddressRangeEXT
   -> IO Result)
-> Ptr Device_T
-> Word32
-> Ptr (SomeStruct SamplerCreateInfo)
-> Ptr HostAddressRangeEXT
-> IO Result
mkVkWriteSamplerDescriptorsEXT FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr (SomeStruct SamplerCreateInfo)
   -> Ptr HostAddressRangeEXT
   -> IO Result)
vkWriteSamplerDescriptorsEXTPtr
  let pSamplersLength :: Int
pSamplersLength = ("samplers" ::: Vector (SomeStruct SamplerCreateInfo)) -> Int
forall a. Vector a -> Int
Data.Vector.length (("samplers" ::: Vector (SomeStruct SamplerCreateInfo)) -> Int)
-> ("samplers" ::: Vector (SomeStruct SamplerCreateInfo)) -> Int
forall a b. (a -> b) -> a -> b
$ ("samplers" ::: Vector (SomeStruct SamplerCreateInfo)
samplers)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless ((("descriptors" ::: Vector HostAddressRangeEXT) -> Int
forall a. Vector a -> Int
Data.Vector.length (("descriptors" ::: Vector HostAddressRangeEXT) -> Int)
-> ("descriptors" ::: Vector HostAddressRangeEXT) -> Int
forall a b. (a -> b) -> a -> b
$ ("descriptors" ::: Vector HostAddressRangeEXT
descriptors)) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
pSamplersLength) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"pDescriptors and pSamplers must have the same length" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  pPSamplers <- ((Ptr (SamplerCreateInfo (ZonkAny 2)) -> IO ()) -> IO ())
-> ContT () IO (Ptr (SamplerCreateInfo (ZonkAny 2)))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (SamplerCreateInfo (ZonkAny 2)) -> IO ()) -> IO ())
 -> ContT () IO (Ptr (SamplerCreateInfo (ZonkAny 2))))
-> ((Ptr (SamplerCreateInfo (ZonkAny 2)) -> IO ()) -> IO ())
-> ContT () IO (Ptr (SamplerCreateInfo (ZonkAny 2)))
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @(SamplerCreateInfo _) ((("samplers" ::: Vector (SomeStruct SamplerCreateInfo)) -> Int
forall a. Vector a -> Int
Data.Vector.length ("samplers" ::: Vector (SomeStruct SamplerCreateInfo)
samplers)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
80)
  Data.Vector.imapM_ (\Int
i SomeStruct SamplerCreateInfo
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
$ Ptr (SomeStruct SamplerCreateInfo)
-> SomeStruct SamplerCreateInfo -> IO () -> IO ()
forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
Ptr (SomeStruct a) -> SomeStruct a -> IO b -> IO b
pokeSomeCStruct (Ptr (SamplerCreateInfo (ZonkAny 3))
-> Ptr (SomeStruct SamplerCreateInfo)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (SamplerCreateInfo (ZonkAny 2))
pPSamplers Ptr (SamplerCreateInfo (ZonkAny 2))
-> Int -> Ptr (SamplerCreateInfo w)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
80 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (SamplerCreateInfo _))) (SomeStruct SamplerCreateInfo
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
$ ())) (samplers)
  pPDescriptors <- ContT $ allocaBytes @HostAddressRangeEXT ((Data.Vector.length (descriptors)) * 16)
  lift $ Data.Vector.imapM_ (\Int
i HostAddressRangeEXT
e -> Ptr HostAddressRangeEXT -> HostAddressRangeEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr HostAddressRangeEXT
pPDescriptors Ptr HostAddressRangeEXT -> Int -> Ptr HostAddressRangeEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
16 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr HostAddressRangeEXT) (HostAddressRangeEXT
e)) (descriptors)
  r <- lift $ traceAroundEvent "vkWriteSamplerDescriptorsEXT" (vkWriteSamplerDescriptorsEXT'
                                                                 (deviceHandle (device))
                                                                 ((fromIntegral pSamplersLength :: Word32))
                                                                 (forgetExtensions (pPSamplers))
                                                                 (pPDescriptors))
  lift $ when (r < SUCCESS) (throwIO (VulkanException r))


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkWriteResourceDescriptorsEXT
  :: FunPtr (Ptr Device_T -> Word32 -> Ptr (SomeStruct ResourceDescriptorInfoEXT) -> Ptr HostAddressRangeEXT -> IO Result) -> Ptr Device_T -> Word32 -> Ptr (SomeStruct ResourceDescriptorInfoEXT) -> Ptr HostAddressRangeEXT -> IO Result

-- | vkWriteResourceDescriptorsEXT - Write resource descriptors to memory
--
-- = Description
--
-- Each descriptor will be written to @pDescriptors@[i].address where i is
-- the index of its create info in @pResources@.
--
-- If any image descriptor written by this command includes a
-- 'Vulkan.Core11.Handles.SamplerYcbcrConversion', multiple descriptors
-- will be written adjacent to each other for that descriptor, equal to
-- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionImageFormatProperties'::combinedImageSamplerDescriptorCount
-- for the image.
--
-- If any image descriptor written by this command is for an image created
-- with @flags@ containing
-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT',
-- multiple descriptors will be written adjacent to each other for that
-- descriptor, equal to
-- 'SubsampledImageFormatPropertiesEXT'::subsampledImageDescriptorCount for
-- the image.
--
-- Descriptors using the same @type@ and written using a fully identical
-- 'TexelBufferDescriptorInfoEXT' or 'DeviceAddressRangeEXT' structure on
-- the same 'Vulkan.Core10.Handles.Device' will always return the same bit
-- pattern. If the
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-descriptorHeapCaptureReplay descriptorHeapCaptureReplay>
-- feature is enabled, this applies to any 'Vulkan.Core10.Handles.Device'
-- created with identical parameters from the same
-- 'Vulkan.Core10.Handles.PhysicalDevice'.
--
-- Recreating the same buffer descriptor during replay of a prior capture
-- requires that the device address is the same, which requires additional
-- data to be captured and provided during replay when creating a buffer
-- and allocating memory for it.
--
-- Image descriptors using the same @type@ and written using a fully
-- identical 'ImageDescriptorInfoEXT' other than
-- 'ImageDescriptorInfoEXT'::@pView->image@, where image was successfully
-- created with
-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DESCRIPTOR_HEAP_CAPTURE_REPLAY_BIT_EXT'
-- and a 'OpaqueCaptureDataCreateInfoEXT' with data captured via
-- 'getImageOpaqueCaptureDataEXT' from an image used previously, will write
-- a descriptor with the same bit pattern if possible; if the same bit
-- pattern cannot be generated,
-- 'Vulkan.Core10.Enums.Result.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS' will
-- be returned instead.
--
-- Tensor descriptors using the same @type@ and written using a fully
-- identical 'Vulkan.Extensions.VK_ARM_tensors.TensorViewCreateInfoARM'
-- other than
-- 'Vulkan.Extensions.VK_ARM_tensors.TensorViewCreateInfoARM'::@tensor@,
-- where tensor was successfully created with
-- 'OpaqueCaptureDataCreateInfoEXT' with
-- 'Vulkan.Extensions.VK_ARM_tensors.TENSOR_CREATE_DESCRIPTOR_HEAP_CAPTURE_REPLAY_BIT_ARM'
-- and a 'OpaqueCaptureDataCreateInfoEXT' with data captured via
-- 'getTensorOpaqueCaptureDataARM' from a tensor used previously, will
-- write a descriptor with the same bit pattern if possible; if the same
-- bit pattern cannot be generated,
-- 'Vulkan.Core10.Enums.Result.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS' will
-- be returned instead.
--
-- Image creation is sufficiently complex that it may not be possible to
-- recreate all possible descriptors from an image during replay, even if
-- the image itself was successfully recreated. The conditions for this
-- happening will be largely the same as those which could cause allocating
-- a buffer with the same device address during replay to fail. Replay
-- tools are advised to recreate captured descriptors for an image
-- immediately after recreating the image itself wherever possible. The
-- same is true for tensors.
--
-- == Valid Usage
--
-- -   #VUID-vkWriteResourceDescriptorsEXT-descriptorHeap-11206# The
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-descriptorHeap descriptorHeap>
--     feature /must/ be enabled
--
-- -   #VUID-vkWriteResourceDescriptorsEXT-size-11207# The @size@ member of
--     each element of @pDescriptors@ /must/ be greater than or equal to
--     the value returned by 'getPhysicalDeviceDescriptorSizeEXT' with a
--     @descriptorType@ equal to @type@
--
-- -   #VUID-vkWriteResourceDescriptorsEXT-pResources-11208# If any element
--     of @pResources@ specifies a
--     'Vulkan.Core10.ImageView.ImageViewCreateInfo' structure with a
--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo'
--     structure in its @pNext@ chain, the corresponding element of
--     @pDescriptors@ /must/ have a @size@ member that is greater than or
--     equal to the product of the value returned by
--     'getPhysicalDeviceDescriptorSizeEXT' with a @descriptorType@ equal
--     to @type@ and
--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionImageFormatProperties'::combinedImageSamplerDescriptorCount,
--     as queried from
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'
--     with image format info equivalent to the image view the descriptor
--     is being created for
--
-- -   #VUID-vkWriteResourceDescriptorsEXT-pResources-11209# If any element
--     of @pResources@ specifies a
--     'Vulkan.Core10.ImageView.ImageViewCreateInfo' structure with an
--     @image@ created with @flags@ containing
--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT',
--     the corresponding element of @pDescriptors@ /must/ have a @size@
--     member that is greater than or equal to the product of the value
--     returned by 'getPhysicalDeviceDescriptorSizeEXT' with a
--     @descriptorType@ equal to @type@ and
--     'SubsampledImageFormatPropertiesEXT'::subsampledImageDescriptorCount,
--     as queried from
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'
--     with image format info equivalent to the image view the descriptor
--     is being created for
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkWriteResourceDescriptorsEXT-device-parameter# @device@
--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkWriteResourceDescriptorsEXT-pResources-parameter#
--     @pResources@ /must/ be a valid pointer to an array of
--     @resourceCount@ valid 'ResourceDescriptorInfoEXT' structures
--
-- -   #VUID-vkWriteResourceDescriptorsEXT-pDescriptors-parameter#
--     @pDescriptors@ /must/ be a valid pointer to an array of
--     @resourceCount@ valid 'HostAddressRangeEXT' structures
--
-- -   #VUID-vkWriteResourceDescriptorsEXT-resourceCount-arraylength#
--     @resourceCount@ /must/ be greater than @0@
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_VALIDATION_FAILED'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'Vulkan.Core10.Handles.Device', 'HostAddressRangeEXT',
-- 'ResourceDescriptorInfoEXT'
writeResourceDescriptorsEXT :: forall io
                             . (MonadIO io)
                            => -- | @device@ is the logical device that the descriptors are for.
                               Device
                            -> -- | @pResources@ is a pointer to an array of 'ResourceDescriptorInfoEXT'
                               -- structures defining properties of the resource descriptors that will be
                               -- written.
                               ("resources" ::: Vector (SomeStruct ResourceDescriptorInfoEXT))
                            -> -- | @pDescriptors@ is a pointer to an array of 'HostAddressRangeEXT'
                               -- structures defining the host address ranges that will be written to for
                               -- each descriptor.
                               ("descriptors" ::: Vector HostAddressRangeEXT)
                            -> io ()
writeResourceDescriptorsEXT :: forall (io :: * -> *).
MonadIO io =>
Device
-> ("resources" ::: Vector (SomeStruct ResourceDescriptorInfoEXT))
-> ("descriptors" ::: Vector HostAddressRangeEXT)
-> io ()
writeResourceDescriptorsEXT Device
device
                              "resources" ::: Vector (SomeStruct ResourceDescriptorInfoEXT)
resources
                              "descriptors" ::: Vector HostAddressRangeEXT
descriptors = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkWriteResourceDescriptorsEXTPtr :: FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr (SomeStruct ResourceDescriptorInfoEXT)
   -> Ptr HostAddressRangeEXT
   -> IO Result)
vkWriteResourceDescriptorsEXTPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> Word32
      -> Ptr (SomeStruct ResourceDescriptorInfoEXT)
      -> Ptr HostAddressRangeEXT
      -> IO Result)
pVkWriteResourceDescriptorsEXT (case Device
device of Device{DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr (SomeStruct ResourceDescriptorInfoEXT)
   -> Ptr HostAddressRangeEXT
   -> IO Result)
vkWriteResourceDescriptorsEXTPtr FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr (SomeStruct ResourceDescriptorInfoEXT)
   -> Ptr HostAddressRangeEXT
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> Word32
      -> Ptr (SomeStruct ResourceDescriptorInfoEXT)
      -> Ptr HostAddressRangeEXT
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr (SomeStruct ResourceDescriptorInfoEXT)
   -> Ptr HostAddressRangeEXT
   -> IO Result)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkWriteResourceDescriptorsEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkWriteResourceDescriptorsEXT' :: Ptr Device_T
-> Word32
-> Ptr (SomeStruct ResourceDescriptorInfoEXT)
-> Ptr HostAddressRangeEXT
-> IO Result
vkWriteResourceDescriptorsEXT' = FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr (SomeStruct ResourceDescriptorInfoEXT)
   -> Ptr HostAddressRangeEXT
   -> IO Result)
-> Ptr Device_T
-> Word32
-> Ptr (SomeStruct ResourceDescriptorInfoEXT)
-> Ptr HostAddressRangeEXT
-> IO Result
mkVkWriteResourceDescriptorsEXT FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr (SomeStruct ResourceDescriptorInfoEXT)
   -> Ptr HostAddressRangeEXT
   -> IO Result)
vkWriteResourceDescriptorsEXTPtr
  let pResourcesLength :: Int
pResourcesLength = ("resources" ::: Vector (SomeStruct ResourceDescriptorInfoEXT))
-> Int
forall a. Vector a -> Int
Data.Vector.length (("resources" ::: Vector (SomeStruct ResourceDescriptorInfoEXT))
 -> Int)
-> ("resources" ::: Vector (SomeStruct ResourceDescriptorInfoEXT))
-> Int
forall a b. (a -> b) -> a -> b
$ ("resources" ::: Vector (SomeStruct ResourceDescriptorInfoEXT)
resources)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless ((("descriptors" ::: Vector HostAddressRangeEXT) -> Int
forall a. Vector a -> Int
Data.Vector.length (("descriptors" ::: Vector HostAddressRangeEXT) -> Int)
-> ("descriptors" ::: Vector HostAddressRangeEXT) -> Int
forall a b. (a -> b) -> a -> b
$ ("descriptors" ::: Vector HostAddressRangeEXT
descriptors)) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
pResourcesLength) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"pDescriptors and pResources must have the same length" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  pPResources <- ((Ptr (ResourceDescriptorInfoEXT (ZonkAny 0)) -> IO ()) -> IO ())
-> ContT () IO (Ptr (ResourceDescriptorInfoEXT (ZonkAny 0)))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (ResourceDescriptorInfoEXT (ZonkAny 0)) -> IO ()) -> IO ())
 -> ContT () IO (Ptr (ResourceDescriptorInfoEXT (ZonkAny 0))))
-> ((Ptr (ResourceDescriptorInfoEXT (ZonkAny 0)) -> IO ())
    -> IO ())
-> ContT () IO (Ptr (ResourceDescriptorInfoEXT (ZonkAny 0)))
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @(ResourceDescriptorInfoEXT _) ((("resources" ::: Vector (SomeStruct ResourceDescriptorInfoEXT))
-> Int
forall a. Vector a -> Int
Data.Vector.length ("resources" ::: Vector (SomeStruct ResourceDescriptorInfoEXT)
resources)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
32)
  Data.Vector.imapM_ (\Int
i SomeStruct ResourceDescriptorInfoEXT
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
$ Ptr (SomeStruct ResourceDescriptorInfoEXT)
-> SomeStruct ResourceDescriptorInfoEXT -> IO () -> IO ()
forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
Ptr (SomeStruct a) -> SomeStruct a -> IO b -> IO b
pokeSomeCStruct (Ptr (ResourceDescriptorInfoEXT (ZonkAny 1))
-> Ptr (SomeStruct ResourceDescriptorInfoEXT)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (ResourceDescriptorInfoEXT (ZonkAny 0))
pPResources Ptr (ResourceDescriptorInfoEXT (ZonkAny 0))
-> Int -> Ptr (ResourceDescriptorInfoEXT w)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
32 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (ResourceDescriptorInfoEXT _))) (SomeStruct ResourceDescriptorInfoEXT
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
$ ())) (resources)
  pPDescriptors <- ContT $ allocaBytes @HostAddressRangeEXT ((Data.Vector.length (descriptors)) * 16)
  lift $ Data.Vector.imapM_ (\Int
i HostAddressRangeEXT
e -> Ptr HostAddressRangeEXT -> HostAddressRangeEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr HostAddressRangeEXT
pPDescriptors Ptr HostAddressRangeEXT -> Int -> Ptr HostAddressRangeEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
16 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr HostAddressRangeEXT) (HostAddressRangeEXT
e)) (descriptors)
  r <- lift $ traceAroundEvent "vkWriteResourceDescriptorsEXT" (vkWriteResourceDescriptorsEXT'
                                                                  (deviceHandle (device))
                                                                  ((fromIntegral pResourcesLength :: Word32))
                                                                  (forgetExtensions (pPResources))
                                                                  (pPDescriptors))
  lift $ when (r < SUCCESS) (throwIO (VulkanException r))


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

-- | vkCmdBindSamplerHeapEXT - Binds a sampler heap to a command buffer
--
-- = Description
--
-- Addresses in the range defined by @pBindInfo->heapRange@ are bound as
-- the sampler heap. The application /can/ access samplers and data through
-- this heap anywhere except for the reserved range specified by
-- @pBindInfo->reservedRangeOffset@. Addresses in the range
-- [@pBindInfo->reservedRangeOffset@, @pBindInfo->reservedRangeOffset@ +
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-minSamplerHeapReservedRange minSamplerHeapReservedRange>),
-- or in the range [@pBindInfo->reservedRangeOffset@,
-- @pBindInfo->reservedRangeOffset@ +
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-minSamplerHeapReservedRangeWithEmbedded minSamplerHeapReservedRangeWithEmbedded>)
-- if embedded samplers will be used, are reserved for the implementation
-- and /must/ not be accessed by the application at any time from when this
-- command is recorded until all command buffers with that range bound
-- (even invalid ones) have been reset or freed.
--
-- Implementations may require a larger sampler heap reservation to store
-- embedded sampler descriptors when used in a mapping, as advertised by
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-minSamplerHeapReservedRangeWithEmbedded minSamplerHeapReservedRangeWithEmbedded>.
--
-- Shaders executed by commands recorded after this command /can/ use the
-- specified sampler heap to access resources.
-- @pBindInfo->heapRange.address@ will be available to shaders to access
-- samplers and data through the @SamplerHeapEXT@ @BuiltIn@ or via
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#descriptorheaps-bindings shader bindings>.
--
-- When 'cmdBindSamplerHeapEXT' is recorded, it
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#descriptorheaps-invalidate-sets immediately invalidates all non-heap descriptor state>.
-- Similarly, recording any non-heap descriptor state commands immediately
-- invalidates state set by this command.
--
-- == Valid Usage
--
-- -   #VUID-vkCmdBindSamplerHeapEXT-pBindInfo-11223# The sum of
--     @pBindInfo->reservedRangeOffset@ and @pBindInfo->reservedRangeSize@
--     /must/ be less than or equal to @pBindInfo->heapRange.size@
--
-- -   #VUID-vkCmdBindSamplerHeapEXT-pBindInfo-11224#
--     @pBindInfo->reservedRangeSize@ /must/ be greater than or equal to
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-minSamplerHeapReservedRange minSamplerHeapReservedRange>
--
-- -   #VUID-vkCmdBindSamplerHeapEXT-pBindInfo-11225#
--     @pBindInfo->heapRange.size@ /must/ less than or equal to
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-maxSamplerHeapSize maxSamplerHeapSize>
--
-- -   #VUID-vkCmdBindSamplerHeapEXT-pBindInfo-11226#
--     @pBindInfo->heapRange.address@ /must/ be a multiple of
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-samplerHeapAlignment samplerHeapAlignment>
--
-- -   #VUID-vkCmdBindSamplerHeapEXT-pBindInfo-11434#
--     @pBindInfo->reservedRangeOffset@ /must/ be a multiple of
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-samplerDescriptorAlignment samplerDescriptorAlignment>
--
-- -   #VUID-vkCmdBindSamplerHeapEXT-pBindInfo-11228# Memory bound to
--     addresses in the range [@pBindInfo->heapRange.address@ +
--     @pBindInfo->reservedRangeOffset@, @pBindInfo->heapRange.address@ +
--     @pBindInfo->reservedRangeOffset@ + @pBindInfo->reservedRangeSize@)
--     /must/ not be
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#descriptorheaps-reservedranges bound to any other command buffer as a reserved range>
--     for any heap unless the reserved range matches exactly and it is the
--     same heap type
--
-- -   #VUID-vkCmdBindSamplerHeapEXT-heapRange-11230# @heapRange@ /must/ be
--     a device address range allocated to the application from a buffer
--     created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_DESCRIPTOR_HEAP_BIT_EXT'
--     usage flag set
--
-- -   #VUID-vkCmdBindSamplerHeapEXT-commandBuffer-11231# If
--     @commandBuffer@ is a secondary command buffer, it /must/ have begun
--     with
--     'CommandBufferInheritanceDescriptorHeapInfoEXT'::@pSamplerHeapBindInfo@
--     equal to @NULL@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdBindSamplerHeapEXT-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdBindSamplerHeapEXT-pBindInfo-parameter# @pBindInfo@
--     /must/ be a valid pointer to a valid 'BindHeapInfoEXT' structure
--
-- -   #VUID-vkCmdBindSamplerHeapEXT-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-vkCmdBindSamplerHeapEXT-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support
--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', or
--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' operations
--
-- -   #VUID-vkCmdBindSamplerHeapEXT-videocoding# This command /must/ only
--     be called outside of a video coding scope
--
-- == Host Synchronization
--
-- -   Host access to @commandBuffer@ /must/ be externally synchronized
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginVideoCodingKHR Video Coding Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-queueoperation-command-types Command Type> |
-- +============================================================================================================================+========================================================================================================================+=============================================================================================================================+=======================================================================================================================+========================================================================================================================================+
-- | Primary                                                                                                                    | Both                                                                                                                   | Outside                                                                                                                     | VK_QUEUE_COMPUTE_BIT                                                                                                  | State                                                                                                                                  |
-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                             | VK_QUEUE_GRAPHICS_BIT                                                                                                 |                                                                                                                                        |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
--
-- == Conditional Rendering
--
-- vkCmdBindSamplerHeapEXT is not affected by
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-conditional-rendering conditional rendering>
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'BindHeapInfoEXT', 'Vulkan.Core10.Handles.CommandBuffer'
cmdBindSamplerHeapEXT :: forall io
                       . (MonadIO io)
                      => -- | @commandBuffer@ is the command buffer that the sampler heap will be
                         -- bound to.
                         CommandBuffer
                      -> -- | @pBindInfo@ is a 'BindHeapInfoEXT' specifying the device address range
                         -- used for the heap and any implementation reservations.
                         ("bindInfo" ::: BindHeapInfoEXT)
                      -> io ()
cmdBindSamplerHeapEXT :: forall (io :: * -> *).
MonadIO io =>
CommandBuffer -> ("bindInfo" ::: BindHeapInfoEXT) -> io ()
cmdBindSamplerHeapEXT CommandBuffer
commandBuffer "bindInfo" ::: BindHeapInfoEXT
bindInfo = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdBindSamplerHeapEXTPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ())
vkCmdBindSamplerHeapEXTPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ())
pVkCmdBindSamplerHeapEXT (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds :: CommandBuffer -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr CommandBuffer_T
   -> Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ())
vkCmdBindSamplerHeapEXTPtr FunPtr
  (Ptr CommandBuffer_T
   -> Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCmdBindSamplerHeapEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdBindSamplerHeapEXT' :: Ptr CommandBuffer_T
-> Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ()
vkCmdBindSamplerHeapEXT' = FunPtr
  (Ptr CommandBuffer_T
   -> Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ())
-> Ptr CommandBuffer_T
-> Ptr ("bindInfo" ::: BindHeapInfoEXT)
-> IO ()
mkVkCmdBindSamplerHeapEXT FunPtr
  (Ptr CommandBuffer_T
   -> Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ())
vkCmdBindSamplerHeapEXTPtr
  pBindInfo <- ((Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ()) -> IO ())
-> ContT () IO (Ptr ("bindInfo" ::: BindHeapInfoEXT))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ()) -> IO ())
 -> ContT () IO (Ptr ("bindInfo" ::: BindHeapInfoEXT)))
-> ((Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ()) -> IO ())
-> ContT () IO (Ptr ("bindInfo" ::: BindHeapInfoEXT))
forall a b. (a -> b) -> a -> b
$ ("bindInfo" ::: BindHeapInfoEXT)
-> (Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ()) -> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
("bindInfo" ::: BindHeapInfoEXT)
-> (Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO b) -> IO b
withCStruct ("bindInfo" ::: BindHeapInfoEXT
bindInfo)
  lift $ traceAroundEvent "vkCmdBindSamplerHeapEXT" (vkCmdBindSamplerHeapEXT'
                                                       (commandBufferHandle (commandBuffer))
                                                       pBindInfo)
  pure $ ()


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

-- | vkCmdBindResourceHeapEXT - Binds a resource heap to a command buffer
--
-- = Description
--
-- Addresses in the range defined by @pBindInfo->heapRange@ are bound as
-- the resource heap. The application /can/ access resources and data
-- through this heap anywhere except for the reserved range specified by
-- @pBindInfo->reservedRangeOffset@. Addresses in the range
-- [@pBindInfo->reservedRangeOffset@, @pBindInfo->reservedRangeOffset@ +
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-minResourceHeapReservedRange minResourceHeapReservedRange>)
-- are reserved for the implementation and /must/ not be accessed by the
-- application at any time from when this command is recorded until there
-- are no command buffers with that range bound.
--
-- Shaders executed by commands recorded after this command /can/ use the
-- specified resource heap to access resources.
-- @pBindInfo->heapRange.address@ will be available to shaders to access
-- resources through the @ResourceHeapEXT@ @BuiltIn@ or via
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#descriptorheaps-bindings shader bindings>.
--
-- When 'cmdBindResourceHeapEXT' is recorded, it
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#descriptorheaps-invalidate-sets immediately invalidates all non-heap descriptor state>.
-- Similarly, recording any non-heap descriptor state commands immediately
-- invalidates state set by this command.
--
-- == Valid Usage
--
-- -   #VUID-vkCmdBindResourceHeapEXT-pBindInfo-11232# The sum of
--     @pBindInfo->reservedRangeOffset@ and @pBindInfo->reservedRangeSize@
--     /must/ be less than or equal to @pBindInfo->heapRange.size@
--
-- -   #VUID-vkCmdBindResourceHeapEXT-pBindInfo-11233#
--     @pBindInfo->reservedRangeSize@ /must/ be greater than or equal to
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-minResourceHeapReservedRange minResourceHeapReservedRange>
--
-- -   #VUID-vkCmdBindResourceHeapEXT-pBindInfo-11234#
--     @pBindInfo->heapRange.size@ /must/ less than or equal to
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-maxResourceHeapSize maxResourceHeapSize>
--
-- -   #VUID-vkCmdBindResourceHeapEXT-pBindInfo-11235#
--     @pBindInfo->heapRange.address@ /must/ be a multiple of
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-resourceHeapAlignment resourceHeapAlignment>
--
-- -   #VUID-vkCmdBindResourceHeapEXT-pBindInfo-11435#
--     @pBindInfo->reservedRangeOffset@ /must/ be a multiple of
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-bufferDescriptorAlignment bufferDescriptorAlignment>
--
-- -   #VUID-vkCmdBindResourceHeapEXT-pBindInfo-11436#
--     @pBindInfo->reservedRangeOffset@ /must/ be a multiple of
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-imageDescriptorAlignment imageDescriptorAlignment>
--
-- -   #VUID-vkCmdBindResourceHeapEXT-pBindInfo-11236# Memory bound to
--     addresses in the range [@pBindInfo->heapRange.address@ +
--     @pBindInfo->reservedRangeOffset@, @pBindInfo->heapRange.address@ +
--     @pBindInfo->reservedRangeOffset@ + @pBindInfo->reservedRangeSize@)
--     /must/ not be
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#descriptorheaps-reservedranges bound to any other command buffer as a reserved range>
--     for any heap unless the reserved range matches exactly and it is the
--     same heap type
--
-- -   #VUID-vkCmdBindResourceHeapEXT-heapRange-11237# @heapRange@ /must/
--     be a device address range allocated to the application from a buffer
--     created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_DESCRIPTOR_HEAP_BIT_EXT'
--     usage flag set
--
-- -   #VUID-vkCmdBindResourceHeapEXT-commandBuffer-11238# If
--     @commandBuffer@ is a secondary command buffer, it /must/ have begun
--     with
--     'CommandBufferInheritanceDescriptorHeapInfoEXT'::@pResourceHeapBindInfo@
--     equal to @NULL@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdBindResourceHeapEXT-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdBindResourceHeapEXT-pBindInfo-parameter# @pBindInfo@
--     /must/ be a valid pointer to a valid 'BindHeapInfoEXT' structure
--
-- -   #VUID-vkCmdBindResourceHeapEXT-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-vkCmdBindResourceHeapEXT-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support
--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', or
--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' operations
--
-- -   #VUID-vkCmdBindResourceHeapEXT-videocoding# This command /must/ only
--     be called outside of a video coding scope
--
-- == Host Synchronization
--
-- -   Host access to @commandBuffer@ /must/ be externally synchronized
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginVideoCodingKHR Video Coding Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-queueoperation-command-types Command Type> |
-- +============================================================================================================================+========================================================================================================================+=============================================================================================================================+=======================================================================================================================+========================================================================================================================================+
-- | Primary                                                                                                                    | Both                                                                                                                   | Outside                                                                                                                     | VK_QUEUE_COMPUTE_BIT                                                                                                  | State                                                                                                                                  |
-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                             | VK_QUEUE_GRAPHICS_BIT                                                                                                 |                                                                                                                                        |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
--
-- == Conditional Rendering
--
-- vkCmdBindResourceHeapEXT is not affected by
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-conditional-rendering conditional rendering>
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'BindHeapInfoEXT', 'Vulkan.Core10.Handles.CommandBuffer'
cmdBindResourceHeapEXT :: forall io
                        . (MonadIO io)
                       => -- | @commandBuffer@ is the command buffer that the resource heap will be
                          -- bound to.
                          CommandBuffer
                       -> -- | @pBindInfo@ is a 'BindHeapInfoEXT' specifying the device address range
                          -- used for the heap and any implementation reservations.
                          ("bindInfo" ::: BindHeapInfoEXT)
                       -> io ()
cmdBindResourceHeapEXT :: forall (io :: * -> *).
MonadIO io =>
CommandBuffer -> ("bindInfo" ::: BindHeapInfoEXT) -> io ()
cmdBindResourceHeapEXT CommandBuffer
commandBuffer "bindInfo" ::: BindHeapInfoEXT
bindInfo = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdBindResourceHeapEXTPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ())
vkCmdBindResourceHeapEXTPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ())
pVkCmdBindResourceHeapEXT (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: CommandBuffer -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr CommandBuffer_T
   -> Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ())
vkCmdBindResourceHeapEXTPtr FunPtr
  (Ptr CommandBuffer_T
   -> Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCmdBindResourceHeapEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdBindResourceHeapEXT' :: Ptr CommandBuffer_T
-> Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ()
vkCmdBindResourceHeapEXT' = FunPtr
  (Ptr CommandBuffer_T
   -> Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ())
-> Ptr CommandBuffer_T
-> Ptr ("bindInfo" ::: BindHeapInfoEXT)
-> IO ()
mkVkCmdBindResourceHeapEXT FunPtr
  (Ptr CommandBuffer_T
   -> Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ())
vkCmdBindResourceHeapEXTPtr
  pBindInfo <- ((Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ()) -> IO ())
-> ContT () IO (Ptr ("bindInfo" ::: BindHeapInfoEXT))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ()) -> IO ())
 -> ContT () IO (Ptr ("bindInfo" ::: BindHeapInfoEXT)))
-> ((Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ()) -> IO ())
-> ContT () IO (Ptr ("bindInfo" ::: BindHeapInfoEXT))
forall a b. (a -> b) -> a -> b
$ ("bindInfo" ::: BindHeapInfoEXT)
-> (Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO ()) -> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
("bindInfo" ::: BindHeapInfoEXT)
-> (Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO b) -> IO b
withCStruct ("bindInfo" ::: BindHeapInfoEXT
bindInfo)
  lift $ traceAroundEvent "vkCmdBindResourceHeapEXT" (vkCmdBindResourceHeapEXT'
                                                        (commandBufferHandle (commandBuffer))
                                                        pBindInfo)
  pure $ ()


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

-- | vkCmdPushDataEXT - Update the values of push data
--
-- = Description
--
-- When 'cmdPushDataEXT' is recorded, it
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#descriptorheaps-invalidate-sets immediately invalidates all non-heap descriptor state>.
-- Similarly, recording any non-heap descriptor state commands immediately
-- invalidates state set by this command.
--
-- All push data is available to all shaders using the existing
-- @PushConstant@ @Storage@ @Class@.
--
-- Device addresses in push data are intended as the fast path for
-- shader-constant data that does not fit into push data directly. In order
-- to maximize performance of constant data inputs, addresses should be
-- aligned to
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-minUniformBufferOffsetAlignment minUniformBufferOffsetAlignment>,
-- and decorated with @Alignment@ and @NonWritable@ in the shader when
-- using physical pointers.
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdPushDataEXT-commandBuffer-parameter# @commandBuffer@
--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdPushDataEXT-pPushDataInfo-parameter# @pPushDataInfo@
--     /must/ be a valid pointer to a valid 'PushDataInfoEXT' structure
--
-- -   #VUID-vkCmdPushDataEXT-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-vkCmdPushDataEXT-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support
--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', or
--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' operations
--
-- -   #VUID-vkCmdPushDataEXT-videocoding# This command /must/ only be
--     called outside of a video coding scope
--
-- == Host Synchronization
--
-- -   Host access to @commandBuffer@ /must/ be externally synchronized
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginVideoCodingKHR Video Coding Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-queueoperation-command-types Command Type> |
-- +============================================================================================================================+========================================================================================================================+=============================================================================================================================+=======================================================================================================================+========================================================================================================================================+
-- | Primary                                                                                                                    | Both                                                                                                                   | Outside                                                                                                                     | VK_QUEUE_COMPUTE_BIT                                                                                                  | State                                                                                                                                  |
-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                             | VK_QUEUE_GRAPHICS_BIT                                                                                                 |                                                                                                                                        |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
--
-- == Conditional Rendering
--
-- vkCmdPushDataEXT is not affected by
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-conditional-rendering conditional rendering>
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'Vulkan.Core10.Handles.CommandBuffer', 'PushDataInfoEXT'
cmdPushDataEXT :: forall a io
                . (Extendss PushDataInfoEXT a, PokeChain a, MonadIO io)
               => -- | @commandBuffer@ is the command buffer in which the push data update will
                  -- be recorded.
                  CommandBuffer
               -> -- | @pPushDataInfo@ is a pointer to a 'PushDataInfoEXT' structure.
                  (PushDataInfoEXT a)
               -> io ()
cmdPushDataEXT :: forall (a :: [*]) (io :: * -> *).
(Extendss PushDataInfoEXT a, PokeChain a, MonadIO io) =>
CommandBuffer -> PushDataInfoEXT a -> io ()
cmdPushDataEXT CommandBuffer
commandBuffer PushDataInfoEXT a
pushDataInfo = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdPushDataEXTPtr :: FunPtr
  (Ptr CommandBuffer_T -> Ptr (SomeStruct PushDataInfoEXT) -> IO ())
vkCmdPushDataEXTPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T -> Ptr (SomeStruct PushDataInfoEXT) -> IO ())
pVkCmdPushDataEXT (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: CommandBuffer -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr CommandBuffer_T -> Ptr (SomeStruct PushDataInfoEXT) -> IO ())
vkCmdPushDataEXTPtr FunPtr
  (Ptr CommandBuffer_T -> Ptr (SomeStruct PushDataInfoEXT) -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T -> Ptr (SomeStruct PushDataInfoEXT) -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T -> Ptr (SomeStruct PushDataInfoEXT) -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCmdPushDataEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdPushDataEXT' :: Ptr CommandBuffer_T -> Ptr (SomeStruct PushDataInfoEXT) -> IO ()
vkCmdPushDataEXT' = FunPtr
  (Ptr CommandBuffer_T -> Ptr (SomeStruct PushDataInfoEXT) -> IO ())
-> Ptr CommandBuffer_T -> Ptr (SomeStruct PushDataInfoEXT) -> IO ()
mkVkCmdPushDataEXT FunPtr
  (Ptr CommandBuffer_T -> Ptr (SomeStruct PushDataInfoEXT) -> IO ())
vkCmdPushDataEXTPtr
  pPushDataInfo <- ((Ptr (PushDataInfoEXT a) -> IO ()) -> IO ())
-> ContT () IO (Ptr (PushDataInfoEXT a))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (PushDataInfoEXT a) -> IO ()) -> IO ())
 -> ContT () IO (Ptr (PushDataInfoEXT a)))
-> ((Ptr (PushDataInfoEXT a) -> IO ()) -> IO ())
-> ContT () IO (Ptr (PushDataInfoEXT a))
forall a b. (a -> b) -> a -> b
$ PushDataInfoEXT a -> (Ptr (PushDataInfoEXT a) -> IO ()) -> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
PushDataInfoEXT a -> (Ptr (PushDataInfoEXT a) -> IO b) -> IO b
withCStruct (PushDataInfoEXT a
pushDataInfo)
  lift $ traceAroundEvent "vkCmdPushDataEXT" (vkCmdPushDataEXT'
                                                (commandBufferHandle (commandBuffer))
                                                (forgetExtensions pPushDataInfo))
  pure $ ()


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkRegisterCustomBorderColorEXT
  :: FunPtr (Ptr Device_T -> Ptr SamplerCustomBorderColorCreateInfoEXT -> Bool32 -> Ptr Word32 -> IO Result) -> Ptr Device_T -> Ptr SamplerCustomBorderColorCreateInfoEXT -> Bool32 -> Ptr Word32 -> IO Result

-- | vkRegisterCustomBorderColorEXT - Register a custom border color
--
-- = Description
--
-- If @requestIndex@ is 'Vulkan.Core10.FundamentalTypes.TRUE', the value
-- present in @pIndex@ when passed to the command is a requested index, and
-- rather than returning a new index, the implementation will attempt to
-- register that index, leaving the value intact. If the implementation is
-- unable to register a requested index,
-- 'Vulkan.Core10.Enums.Result.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS' will
-- be returned. If an index has not been registered (either explicitly or
-- implicitly by creating a sampler object), or if it has been subsequently
-- unregistered, the implementation /must/ register that index
-- successfully.
--
-- If @requestIndex@ is 'Vulkan.Core10.FundamentalTypes.FALSE', the value
-- stored in @pIndex@ is ignored, and a new index will be returned if the
-- implementation is able to register a new index. If the implementation is
-- unable to register a new index,
-- 'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS' will be returned.
--
-- If an index is successfully registered, it /can/ be used when writing a
-- sampler descriptor or creating a sampler object to use with the custom
-- border color, via 'SamplerCustomBorderColorIndexCreateInfoEXT'.
--
-- The type of border color is not specified by this command
-- ('Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_FLOAT_CUSTOM_EXT' vs.
-- 'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_INT_CUSTOM_EXT'); the data
-- will be interpreted at the point the border color is sampled with an
-- actual sampler. Implementations are expected to store the data as raw
-- bytes if they do not need the format to be specified.
--
-- == Valid Usage
--
-- -   #VUID-vkRegisterCustomBorderColorEXT-requestIndex-11287# If
--     @requestIndex@ is 'Vulkan.Core10.FundamentalTypes.TRUE', the value
--     stored in @pIndex@ /must/ be less than
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-maxCustomBorderColorSamplers maxCustomBorderColorSamplers>
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkRegisterCustomBorderColorEXT-device-parameter# @device@
--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkRegisterCustomBorderColorEXT-pBorderColor-parameter#
--     @pBorderColor@ /must/ be a valid pointer to a valid
--     'Vulkan.Extensions.VK_EXT_custom_border_color.SamplerCustomBorderColorCreateInfoEXT'
--     structure
--
-- -   #VUID-vkRegisterCustomBorderColorEXT-pIndex-parameter# @pIndex@
--     /must/ be a valid pointer to a @uint32_t@ value
--
-- == 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_INVALID_OPAQUE_CAPTURE_ADDRESS'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_VALIDATION_FAILED'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_custom_border_color VK_EXT_custom_border_color>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32', 'Vulkan.Core10.Handles.Device',
-- 'Vulkan.Extensions.VK_EXT_custom_border_color.SamplerCustomBorderColorCreateInfoEXT'
registerCustomBorderColorEXT :: forall io
                              . (MonadIO io)
                             => -- | @device@ is the logical device where the border color is registered.
                                Device
                             -> -- | @pBorderColor@ is a pointer to a
                                -- 'Vulkan.Extensions.VK_EXT_custom_border_color.SamplerCustomBorderColorCreateInfoEXT'
                                -- structure specifying the custom border color value to register.
                                SamplerCustomBorderColorCreateInfoEXT
                             -> -- | @requestIndex@ is a Boolean value indicating if a specific index is
                                -- requested or not.
                                ("requestIndex" ::: Bool)
                             -> io (("index" ::: Word32))
registerCustomBorderColorEXT :: forall (io :: * -> *).
MonadIO io =>
Device
-> SamplerCustomBorderColorCreateInfoEXT -> Bool -> io Word32
registerCustomBorderColorEXT Device
device
                               SamplerCustomBorderColorCreateInfoEXT
borderColor
                               Bool
requestIndex = IO Word32 -> io Word32
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Word32 -> io Word32)
-> (ContT Word32 IO Word32 -> IO Word32)
-> ContT Word32 IO Word32
-> io Word32
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT Word32 IO Word32 -> IO Word32
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Word32 IO Word32 -> io Word32)
-> ContT Word32 IO Word32 -> io Word32
forall a b. (a -> b) -> a -> b
$ do
  let vkRegisterCustomBorderColorEXTPtr :: FunPtr
  (Ptr Device_T
   -> Ptr SamplerCustomBorderColorCreateInfoEXT
   -> Bool32
   -> Ptr Word32
   -> IO Result)
vkRegisterCustomBorderColorEXTPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> Ptr SamplerCustomBorderColorCreateInfoEXT
      -> Bool32
      -> Ptr Word32
      -> IO Result)
pVkRegisterCustomBorderColorEXT (case Device
device of Device{DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT Word32 IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT Word32 m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT Word32 IO ()) -> IO () -> ContT Word32 IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> Ptr SamplerCustomBorderColorCreateInfoEXT
   -> Bool32
   -> Ptr Word32
   -> IO Result)
vkRegisterCustomBorderColorEXTPtr FunPtr
  (Ptr Device_T
   -> Ptr SamplerCustomBorderColorCreateInfoEXT
   -> Bool32
   -> Ptr Word32
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> Ptr SamplerCustomBorderColorCreateInfoEXT
      -> Bool32
      -> Ptr Word32
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> Ptr SamplerCustomBorderColorCreateInfoEXT
   -> Bool32
   -> Ptr Word32
   -> IO Result)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkRegisterCustomBorderColorEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkRegisterCustomBorderColorEXT' :: Ptr Device_T
-> Ptr SamplerCustomBorderColorCreateInfoEXT
-> Bool32
-> Ptr Word32
-> IO Result
vkRegisterCustomBorderColorEXT' = FunPtr
  (Ptr Device_T
   -> Ptr SamplerCustomBorderColorCreateInfoEXT
   -> Bool32
   -> Ptr Word32
   -> IO Result)
-> Ptr Device_T
-> Ptr SamplerCustomBorderColorCreateInfoEXT
-> Bool32
-> Ptr Word32
-> IO Result
mkVkRegisterCustomBorderColorEXT FunPtr
  (Ptr Device_T
   -> Ptr SamplerCustomBorderColorCreateInfoEXT
   -> Bool32
   -> Ptr Word32
   -> IO Result)
vkRegisterCustomBorderColorEXTPtr
  pBorderColor <- ((Ptr SamplerCustomBorderColorCreateInfoEXT -> IO Word32)
 -> IO Word32)
-> ContT Word32 IO (Ptr SamplerCustomBorderColorCreateInfoEXT)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr SamplerCustomBorderColorCreateInfoEXT -> IO Word32)
  -> IO Word32)
 -> ContT Word32 IO (Ptr SamplerCustomBorderColorCreateInfoEXT))
-> ((Ptr SamplerCustomBorderColorCreateInfoEXT -> IO Word32)
    -> IO Word32)
-> ContT Word32 IO (Ptr SamplerCustomBorderColorCreateInfoEXT)
forall a b. (a -> b) -> a -> b
$ SamplerCustomBorderColorCreateInfoEXT
-> (Ptr SamplerCustomBorderColorCreateInfoEXT -> IO Word32)
-> IO Word32
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
SamplerCustomBorderColorCreateInfoEXT
-> (Ptr SamplerCustomBorderColorCreateInfoEXT -> IO b) -> IO b
withCStruct (SamplerCustomBorderColorCreateInfoEXT
borderColor)
  pPIndex <- ContT $ bracket (callocBytes @Word32 4) free
  r <- lift $ traceAroundEvent "vkRegisterCustomBorderColorEXT" (vkRegisterCustomBorderColorEXT'
                                                                   (deviceHandle (device))
                                                                   pBorderColor
                                                                   (boolToBool32 (requestIndex))
                                                                   (pPIndex))
  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
  pIndex <- lift $ peek @Word32 pPIndex
  pure $ (pIndex)


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

-- | vkUnregisterCustomBorderColorEXT - Unregister a custom border color
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_custom_border_color VK_EXT_custom_border_color>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'Vulkan.Core10.Handles.Device'
unregisterCustomBorderColorEXT :: forall io
                                . (MonadIO io)
                               => -- | @device@ is the logical device where the border color is registered.
                                  --
                                  -- #VUID-vkUnregisterCustomBorderColorEXT-device-parameter# @device@ /must/
                                  -- be a valid 'Vulkan.Core10.Handles.Device' handle
                                  Device
                               -> -- | @index@ is the @uint32_t@ index value to unregister.
                                  --
                                  -- #VUID-vkUnregisterCustomBorderColorEXT-index-11288# @index@ /must/ be
                                  -- less than
                                  -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-maxCustomBorderColorSamplers maxCustomBorderColorSamplers>
                                  ("index" ::: Word32)
                               -> io ()
unregisterCustomBorderColorEXT :: forall (io :: * -> *). MonadIO io => Device -> Word32 -> io ()
unregisterCustomBorderColorEXT Device
device Word32
index = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ()) -> IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkUnregisterCustomBorderColorEXTPtr :: FunPtr (Ptr Device_T -> Word32 -> IO ())
vkUnregisterCustomBorderColorEXTPtr = DeviceCmds -> FunPtr (Ptr Device_T -> Word32 -> IO ())
pVkUnregisterCustomBorderColorEXT (case Device
device of Device{DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr (Ptr Device_T -> Word32 -> IO ())
vkUnregisterCustomBorderColorEXTPtr FunPtr (Ptr Device_T -> Word32 -> IO ())
-> FunPtr (Ptr Device_T -> Word32 -> IO ()) -> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr (Ptr Device_T -> Word32 -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkUnregisterCustomBorderColorEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkUnregisterCustomBorderColorEXT' :: Ptr Device_T -> Word32 -> IO ()
vkUnregisterCustomBorderColorEXT' = FunPtr (Ptr Device_T -> Word32 -> IO ())
-> Ptr Device_T -> Word32 -> IO ()
mkVkUnregisterCustomBorderColorEXT FunPtr (Ptr Device_T -> Word32 -> IO ())
vkUnregisterCustomBorderColorEXTPtr
  String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkUnregisterCustomBorderColorEXT" (Ptr Device_T -> Word32 -> IO ()
vkUnregisterCustomBorderColorEXT'
                                                         (Device -> Ptr Device_T
deviceHandle (Device
device))
                                                         (Word32
index))
  () -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> IO ()) -> () -> IO ()
forall a b. (a -> b) -> a -> b
$ ()


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkGetImageOpaqueCaptureDataEXT
  :: FunPtr (Ptr Device_T -> Word32 -> Ptr Image -> Ptr HostAddressRangeEXT -> IO Result) -> Ptr Device_T -> Word32 -> Ptr Image -> Ptr HostAddressRangeEXT -> IO Result

-- | vkGetImageOpaqueCaptureDataEXT - Get image opaque capture descriptor
-- data for descriptor heap replay
--
-- == Valid Usage
--
-- -   #VUID-vkGetImageOpaqueCaptureDataEXT-descriptorHeapCaptureReplay-11282#
--     The
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-descriptorHeapCaptureReplay descriptorHeapCaptureReplay>
--     feature /must/ be enabled
--
-- -   #VUID-vkGetImageOpaqueCaptureDataEXT-size-11283# The @size@ member
--     of each element of @pDatas@ /must/ be equal to
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-imageCaptureReplayOpaqueDataSize imageCaptureReplayOpaqueDataSize>
--
-- -   #VUID-vkGetImageOpaqueCaptureDataEXT-device-11284# If @device@ was
--     created with multiple physical devices, then the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice>
--     feature /must/ be enabled
--
-- -   #VUID-vkGetImageOpaqueCaptureDataEXT-pImages-11285# Each element of
--     @pImages@ /must/ have been created with
--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DESCRIPTOR_HEAP_CAPTURE_REPLAY_BIT_EXT'
--     set in 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkGetImageOpaqueCaptureDataEXT-device-parameter# @device@
--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkGetImageOpaqueCaptureDataEXT-pImages-parameter# @pImages@
--     /must/ be a valid pointer to an array of @imageCount@ valid
--     'Vulkan.Core10.Handles.Image' handles
--
-- -   #VUID-vkGetImageOpaqueCaptureDataEXT-pDatas-parameter# @pDatas@
--     /must/ be a valid pointer to an array of @imageCount@
--     'HostAddressRangeEXT' structures
--
-- -   #VUID-vkGetImageOpaqueCaptureDataEXT-imageCount-arraylength#
--     @imageCount@ /must/ be greater than @0@
--
-- -   #VUID-vkGetImageOpaqueCaptureDataEXT-pImages-parent# Each element of
--     @pImages@ /must/ have been created, allocated, or retrieved from
--     @device@
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_VALIDATION_FAILED'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'Vulkan.Core10.Handles.Device', 'HostAddressRangeEXT',
-- 'Vulkan.Core10.Handles.Image'
getImageOpaqueCaptureDataEXT :: forall io
                              . (MonadIO io)
                             => -- | @device@ is the logical device that gets the data.
                                Device
                             -> -- | @pImages@ is a pointer to an array of 'Vulkan.Core10.Handles.Image'
                                -- objects to retrieve the opaque capture data from.
                                ("images" ::: Vector Image)
                             -> io (("datas" ::: Vector HostAddressRangeEXT))
getImageOpaqueCaptureDataEXT :: forall (io :: * -> *).
MonadIO io =>
Device
-> ("images" ::: Vector Image)
-> io ("descriptors" ::: Vector HostAddressRangeEXT)
getImageOpaqueCaptureDataEXT Device
device "images" ::: Vector Image
images = IO ("descriptors" ::: Vector HostAddressRangeEXT)
-> io ("descriptors" ::: Vector HostAddressRangeEXT)
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ("descriptors" ::: Vector HostAddressRangeEXT)
 -> io ("descriptors" ::: Vector HostAddressRangeEXT))
-> (ContT
      ("descriptors" ::: Vector HostAddressRangeEXT)
      IO
      ("descriptors" ::: Vector HostAddressRangeEXT)
    -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
-> ContT
     ("descriptors" ::: Vector HostAddressRangeEXT)
     IO
     ("descriptors" ::: Vector HostAddressRangeEXT)
-> io ("descriptors" ::: Vector HostAddressRangeEXT)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT
  ("descriptors" ::: Vector HostAddressRangeEXT)
  IO
  ("descriptors" ::: Vector HostAddressRangeEXT)
-> IO ("descriptors" ::: Vector HostAddressRangeEXT)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   ("descriptors" ::: Vector HostAddressRangeEXT)
   IO
   ("descriptors" ::: Vector HostAddressRangeEXT)
 -> io ("descriptors" ::: Vector HostAddressRangeEXT))
-> ContT
     ("descriptors" ::: Vector HostAddressRangeEXT)
     IO
     ("descriptors" ::: Vector HostAddressRangeEXT)
-> io ("descriptors" ::: Vector HostAddressRangeEXT)
forall a b. (a -> b) -> a -> b
$ do
  let vkGetImageOpaqueCaptureDataEXTPtr :: FunPtr
  (Ptr Device_T
   -> Word32 -> Ptr Image -> Ptr HostAddressRangeEXT -> IO Result)
vkGetImageOpaqueCaptureDataEXTPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> Word32 -> Ptr Image -> Ptr HostAddressRangeEXT -> IO Result)
pVkGetImageOpaqueCaptureDataEXT (case Device
device of Device{DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT ("descriptors" ::: Vector HostAddressRangeEXT) IO ()
forall (m :: * -> *) a.
Monad m =>
m a -> ContT ("descriptors" ::: Vector HostAddressRangeEXT) m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT ("descriptors" ::: Vector HostAddressRangeEXT) IO ())
-> IO ()
-> ContT ("descriptors" ::: Vector HostAddressRangeEXT) IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> Word32 -> Ptr Image -> Ptr HostAddressRangeEXT -> IO Result)
vkGetImageOpaqueCaptureDataEXTPtr FunPtr
  (Ptr Device_T
   -> Word32 -> Ptr Image -> Ptr HostAddressRangeEXT -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> Word32 -> Ptr Image -> Ptr HostAddressRangeEXT -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> Word32 -> Ptr Image -> Ptr HostAddressRangeEXT -> IO Result)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkGetImageOpaqueCaptureDataEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetImageOpaqueCaptureDataEXT' :: Ptr Device_T
-> Word32 -> Ptr Image -> Ptr HostAddressRangeEXT -> IO Result
vkGetImageOpaqueCaptureDataEXT' = FunPtr
  (Ptr Device_T
   -> Word32 -> Ptr Image -> Ptr HostAddressRangeEXT -> IO Result)
-> Ptr Device_T
-> Word32
-> Ptr Image
-> Ptr HostAddressRangeEXT
-> IO Result
mkVkGetImageOpaqueCaptureDataEXT FunPtr
  (Ptr Device_T
   -> Word32 -> Ptr Image -> Ptr HostAddressRangeEXT -> IO Result)
vkGetImageOpaqueCaptureDataEXTPtr
  pPImages <- ((Ptr Image -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
 -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
-> ContT
     ("descriptors" ::: Vector HostAddressRangeEXT) IO (Ptr Image)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr Image -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
  -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
 -> ContT
      ("descriptors" ::: Vector HostAddressRangeEXT) IO (Ptr Image))
-> ((Ptr Image
     -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
    -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
-> ContT
     ("descriptors" ::: Vector HostAddressRangeEXT) IO (Ptr Image)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @Image ((("images" ::: Vector Image) -> Int
forall a. Vector a -> Int
Data.Vector.length ("images" ::: Vector Image
images)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
8)
  lift $ Data.Vector.imapM_ (\Int
i Image
e -> Ptr Image -> Image -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Image
pPImages Ptr Image -> Int -> Ptr Image
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Image) (Image
e)) (images)
  pPDatas <- ContT $ bracket (callocBytes @HostAddressRangeEXT ((fromIntegral ((fromIntegral (Data.Vector.length $ (images)) :: Word32))) * 16)) free
  _ <- traverse (\Int
i -> ((() -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
 -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
-> ContT ("descriptors" ::: Vector HostAddressRangeEXT) IO ()
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
  -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
 -> ContT ("descriptors" ::: Vector HostAddressRangeEXT) IO ())
-> ((() -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
    -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
-> ContT ("descriptors" ::: Vector HostAddressRangeEXT) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr HostAddressRangeEXT
-> IO ("descriptors" ::: Vector HostAddressRangeEXT)
-> IO ("descriptors" ::: Vector HostAddressRangeEXT)
forall b. Ptr HostAddressRangeEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> IO b -> IO b
pokeZeroCStruct (Ptr HostAddressRangeEXT
pPDatas Ptr HostAddressRangeEXT -> Int -> Ptr HostAddressRangeEXT
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
16) :: Ptr HostAddressRangeEXT) (IO ("descriptors" ::: Vector HostAddressRangeEXT)
 -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
-> ((() -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
    -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
-> (() -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
-> IO ("descriptors" ::: Vector HostAddressRangeEXT)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
-> () -> IO ("descriptors" ::: Vector HostAddressRangeEXT)
forall a b. (a -> b) -> a -> b
$ ())) [0..(fromIntegral ((fromIntegral (Data.Vector.length $ (images)) :: Word32))) - 1]
  r <- lift $ traceAroundEvent "vkGetImageOpaqueCaptureDataEXT" (vkGetImageOpaqueCaptureDataEXT'
                                                                   (deviceHandle (device))
                                                                   ((fromIntegral (Data.Vector.length $ (images)) :: Word32))
                                                                   (pPImages)
                                                                   ((pPDatas)))
  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
  pDatas <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (images)) :: Word32))) (\Int
i -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @HostAddressRangeEXT (((Ptr HostAddressRangeEXT
pPDatas) Ptr HostAddressRangeEXT -> Int -> Ptr HostAddressRangeEXT
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
16 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr HostAddressRangeEXT)))
  pure $ (pDatas)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkGetPhysicalDeviceDescriptorSizeEXT
  :: FunPtr (Ptr PhysicalDevice_T -> DescriptorType -> IO DeviceSize) -> Ptr PhysicalDevice_T -> DescriptorType -> IO DeviceSize

-- | vkGetPhysicalDeviceDescriptorSizeEXT - Report specific descriptor sizes
-- for each descriptor type
--
-- = Description
--
-- The return value of this function will be a
-- 'Vulkan.Core10.FundamentalTypes.DeviceSize' indicating the size in bytes
-- (N) of a heap descriptor with a type equal to @descriptorType@. When a
-- descriptor of this type is written by 'writeResourceDescriptorsEXT' or
-- 'writeSamplerDescriptorsEXT', only the first N bytes are written; the
-- rest will not be accessed and /can/ be safely discarded when copying
-- descriptors around. Additionally, those first N bytes are the only bytes
-- that will be accessed when the descriptor is accessed in the shader. N
-- will never be larger than the applicable limits in
-- 'PhysicalDeviceDescriptorHeapTensorPropertiesARM' or
-- 'PhysicalDeviceDescriptorHeapPropertiesEXT'.
--
-- Values returned by this function have other requirements, so for example
-- may not be power-of-two values.
--
-- This command is not intended for general use, and is for tools that
-- already take advantage of tighter packing with other similar features
-- (e.g. @VK_EXT_descriptor_buffer@) to optimize accesses in some cases.
-- Applications can safely ignore this function and are advised to do so,
-- to avoid depending on non-portable packing.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'Vulkan.Core10.Enums.DescriptorType.DescriptorType',
-- 'Vulkan.Core10.Handles.PhysicalDevice'
getPhysicalDeviceDescriptorSizeEXT :: forall io
                                    . (MonadIO io)
                                   => -- | @physicalDevice@ is the physical device from which to query the
                                      -- descriptor sizes.
                                      --
                                      -- #VUID-vkGetPhysicalDeviceDescriptorSizeEXT-physicalDevice-parameter#
                                      -- @physicalDevice@ /must/ be a valid
                                      -- 'Vulkan.Core10.Handles.PhysicalDevice' handle
                                      PhysicalDevice
                                   -> -- | @descriptorType@ is a
                                      -- 'Vulkan.Core10.Enums.DescriptorType.DescriptorType' specifying the type
                                      -- of heap descriptor to query the size for.
                                      --
                                      -- #VUID-vkGetPhysicalDeviceDescriptorSizeEXT-descriptorType-parameter#
                                      -- @descriptorType@ /must/ be a valid
                                      -- 'Vulkan.Core10.Enums.DescriptorType.DescriptorType' value
                                      DescriptorType
                                   -> io (DeviceSize)
getPhysicalDeviceDescriptorSizeEXT :: forall (io :: * -> *).
MonadIO io =>
PhysicalDevice -> DescriptorType -> io DeviceSize
getPhysicalDeviceDescriptorSizeEXT PhysicalDevice
physicalDevice DescriptorType
descriptorType = IO DeviceSize -> io DeviceSize
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO DeviceSize -> io DeviceSize) -> IO DeviceSize -> io DeviceSize
forall a b. (a -> b) -> a -> b
$ do
  let vkGetPhysicalDeviceDescriptorSizeEXTPtr :: FunPtr (Ptr PhysicalDevice_T -> DescriptorType -> IO DeviceSize)
vkGetPhysicalDeviceDescriptorSizeEXTPtr = InstanceCmds
-> FunPtr (Ptr PhysicalDevice_T -> DescriptorType -> IO DeviceSize)
pVkGetPhysicalDeviceDescriptorSizeEXT (case PhysicalDevice
physicalDevice of PhysicalDevice{InstanceCmds
instanceCmds :: InstanceCmds
instanceCmds :: PhysicalDevice -> InstanceCmds
instanceCmds} -> InstanceCmds
instanceCmds)
  Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr (Ptr PhysicalDevice_T -> DescriptorType -> IO DeviceSize)
vkGetPhysicalDeviceDescriptorSizeEXTPtr FunPtr (Ptr PhysicalDevice_T -> DescriptorType -> IO DeviceSize)
-> FunPtr (Ptr PhysicalDevice_T -> DescriptorType -> IO DeviceSize)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr (Ptr PhysicalDevice_T -> DescriptorType -> IO DeviceSize)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkGetPhysicalDeviceDescriptorSizeEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetPhysicalDeviceDescriptorSizeEXT' :: Ptr PhysicalDevice_T -> DescriptorType -> IO DeviceSize
vkGetPhysicalDeviceDescriptorSizeEXT' = FunPtr (Ptr PhysicalDevice_T -> DescriptorType -> IO DeviceSize)
-> Ptr PhysicalDevice_T -> DescriptorType -> IO DeviceSize
mkVkGetPhysicalDeviceDescriptorSizeEXT FunPtr (Ptr PhysicalDevice_T -> DescriptorType -> IO DeviceSize)
vkGetPhysicalDeviceDescriptorSizeEXTPtr
  r <- String -> IO DeviceSize -> IO DeviceSize
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetPhysicalDeviceDescriptorSizeEXT" (Ptr PhysicalDevice_T -> DescriptorType -> IO DeviceSize
vkGetPhysicalDeviceDescriptorSizeEXT'
                                                                  (PhysicalDevice -> Ptr PhysicalDevice_T
physicalDeviceHandle (PhysicalDevice
physicalDevice))
                                                                  (DescriptorType
descriptorType))
  pure $ (r)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkGetTensorOpaqueCaptureDataARM
  :: FunPtr (Ptr Device_T -> Word32 -> Ptr TensorARM -> Ptr HostAddressRangeEXT -> IO Result) -> Ptr Device_T -> Word32 -> Ptr TensorARM -> Ptr HostAddressRangeEXT -> IO Result

-- | vkGetTensorOpaqueCaptureDataARM - Get tensor opaque capture descriptor
-- data for descriptor heap replay
--
-- == Valid Usage
--
-- -   #VUID-vkGetTensorOpaqueCaptureDataARM-descriptorHeapCaptureReplay-11391#
--     The
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-descriptorHeapCaptureReplay descriptorHeapCaptureReplay>
--     feature /must/ be enabled
--
-- -   #VUID-vkGetTensorOpaqueCaptureDataARM-size-11392# The @size@ member
--     of each element of @pDatas@ /must/ be equal to
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-tensorCaptureReplayOpaqueDataSize tensorCaptureReplayOpaqueDataSize>
--
-- -   #VUID-vkGetTensorOpaqueCaptureDataARM-device-11393# If @device@ was
--     created with multiple physical devices, then the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice>
--     feature /must/ be enabled
--
-- -   #VUID-vkGetTensorOpaqueCaptureDataARM-pTensors-11394# Each element
--     of @pTensors@ /must/ have been created with
--     'Vulkan.Extensions.VK_ARM_tensors.TENSOR_CREATE_DESCRIPTOR_HEAP_CAPTURE_REPLAY_BIT_ARM'
--     set in
--     'Vulkan.Extensions.VK_ARM_tensors.TensorCreateInfoARM'::@flags@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkGetTensorOpaqueCaptureDataARM-device-parameter# @device@
--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkGetTensorOpaqueCaptureDataARM-pTensors-parameter# @pTensors@
--     /must/ be a valid pointer to an array of @tensorCount@ valid
--     'Vulkan.Extensions.Handles.TensorARM' handles
--
-- -   #VUID-vkGetTensorOpaqueCaptureDataARM-pDatas-parameter# @pDatas@
--     /must/ be a valid pointer to an array of @tensorCount@
--     'HostAddressRangeEXT' structures
--
-- -   #VUID-vkGetTensorOpaqueCaptureDataARM-tensorCount-arraylength#
--     @tensorCount@ /must/ be greater than @0@
--
-- -   #VUID-vkGetTensorOpaqueCaptureDataARM-pTensors-parent# Each element
--     of @pTensors@ /must/ have been created, allocated, or retrieved from
--     @device@
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_VALIDATION_FAILED'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_tensors VK_ARM_tensors>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'Vulkan.Core10.Handles.Device', 'HostAddressRangeEXT',
-- 'Vulkan.Extensions.Handles.TensorARM'
getTensorOpaqueCaptureDataARM :: forall io
                               . (MonadIO io)
                              => -- | @device@ is the logical device that gets the data.
                                 Device
                              -> -- | @pTensors@ is a pointer to an array of
                                 -- 'Vulkan.Extensions.Handles.TensorARM' objects to retrieve the opaque
                                 -- capture data from.
                                 ("tensors" ::: Vector TensorARM)
                              -> io (("datas" ::: Vector HostAddressRangeEXT))
getTensorOpaqueCaptureDataARM :: forall (io :: * -> *).
MonadIO io =>
Device
-> ("tensors" ::: Vector TensorARM)
-> io ("descriptors" ::: Vector HostAddressRangeEXT)
getTensorOpaqueCaptureDataARM Device
device "tensors" ::: Vector TensorARM
tensors = IO ("descriptors" ::: Vector HostAddressRangeEXT)
-> io ("descriptors" ::: Vector HostAddressRangeEXT)
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ("descriptors" ::: Vector HostAddressRangeEXT)
 -> io ("descriptors" ::: Vector HostAddressRangeEXT))
-> (ContT
      ("descriptors" ::: Vector HostAddressRangeEXT)
      IO
      ("descriptors" ::: Vector HostAddressRangeEXT)
    -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
-> ContT
     ("descriptors" ::: Vector HostAddressRangeEXT)
     IO
     ("descriptors" ::: Vector HostAddressRangeEXT)
-> io ("descriptors" ::: Vector HostAddressRangeEXT)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT
  ("descriptors" ::: Vector HostAddressRangeEXT)
  IO
  ("descriptors" ::: Vector HostAddressRangeEXT)
-> IO ("descriptors" ::: Vector HostAddressRangeEXT)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   ("descriptors" ::: Vector HostAddressRangeEXT)
   IO
   ("descriptors" ::: Vector HostAddressRangeEXT)
 -> io ("descriptors" ::: Vector HostAddressRangeEXT))
-> ContT
     ("descriptors" ::: Vector HostAddressRangeEXT)
     IO
     ("descriptors" ::: Vector HostAddressRangeEXT)
-> io ("descriptors" ::: Vector HostAddressRangeEXT)
forall a b. (a -> b) -> a -> b
$ do
  let vkGetTensorOpaqueCaptureDataARMPtr :: FunPtr
  (Ptr Device_T
   -> Word32 -> Ptr TensorARM -> Ptr HostAddressRangeEXT -> IO Result)
vkGetTensorOpaqueCaptureDataARMPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> Word32 -> Ptr TensorARM -> Ptr HostAddressRangeEXT -> IO Result)
pVkGetTensorOpaqueCaptureDataARM (case Device
device of Device{DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT ("descriptors" ::: Vector HostAddressRangeEXT) IO ()
forall (m :: * -> *) a.
Monad m =>
m a -> ContT ("descriptors" ::: Vector HostAddressRangeEXT) m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT ("descriptors" ::: Vector HostAddressRangeEXT) IO ())
-> IO ()
-> ContT ("descriptors" ::: Vector HostAddressRangeEXT) IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> Word32 -> Ptr TensorARM -> Ptr HostAddressRangeEXT -> IO Result)
vkGetTensorOpaqueCaptureDataARMPtr FunPtr
  (Ptr Device_T
   -> Word32 -> Ptr TensorARM -> Ptr HostAddressRangeEXT -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> Word32 -> Ptr TensorARM -> Ptr HostAddressRangeEXT -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> Word32 -> Ptr TensorARM -> Ptr HostAddressRangeEXT -> IO Result)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkGetTensorOpaqueCaptureDataARM is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetTensorOpaqueCaptureDataARM' :: Ptr Device_T
-> Word32 -> Ptr TensorARM -> Ptr HostAddressRangeEXT -> IO Result
vkGetTensorOpaqueCaptureDataARM' = FunPtr
  (Ptr Device_T
   -> Word32 -> Ptr TensorARM -> Ptr HostAddressRangeEXT -> IO Result)
-> Ptr Device_T
-> Word32
-> Ptr TensorARM
-> Ptr HostAddressRangeEXT
-> IO Result
mkVkGetTensorOpaqueCaptureDataARM FunPtr
  (Ptr Device_T
   -> Word32 -> Ptr TensorARM -> Ptr HostAddressRangeEXT -> IO Result)
vkGetTensorOpaqueCaptureDataARMPtr
  pPTensors <- ((Ptr TensorARM
  -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
 -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
-> ContT
     ("descriptors" ::: Vector HostAddressRangeEXT) IO (Ptr TensorARM)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr TensorARM
   -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
  -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
 -> ContT
      ("descriptors" ::: Vector HostAddressRangeEXT) IO (Ptr TensorARM))
-> ((Ptr TensorARM
     -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
    -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
-> ContT
     ("descriptors" ::: Vector HostAddressRangeEXT) IO (Ptr TensorARM)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @TensorARM ((("tensors" ::: Vector TensorARM) -> Int
forall a. Vector a -> Int
Data.Vector.length ("tensors" ::: Vector TensorARM
tensors)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
8)
  lift $ Data.Vector.imapM_ (\Int
i TensorARM
e -> Ptr TensorARM -> TensorARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr TensorARM
pPTensors Ptr TensorARM -> Int -> Ptr TensorARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr TensorARM) (TensorARM
e)) (tensors)
  pPDatas <- ContT $ bracket (callocBytes @HostAddressRangeEXT ((fromIntegral ((fromIntegral (Data.Vector.length $ (tensors)) :: Word32))) * 16)) free
  _ <- traverse (\Int
i -> ((() -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
 -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
-> ContT ("descriptors" ::: Vector HostAddressRangeEXT) IO ()
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
  -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
 -> ContT ("descriptors" ::: Vector HostAddressRangeEXT) IO ())
-> ((() -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
    -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
-> ContT ("descriptors" ::: Vector HostAddressRangeEXT) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr HostAddressRangeEXT
-> IO ("descriptors" ::: Vector HostAddressRangeEXT)
-> IO ("descriptors" ::: Vector HostAddressRangeEXT)
forall b. Ptr HostAddressRangeEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> IO b -> IO b
pokeZeroCStruct (Ptr HostAddressRangeEXT
pPDatas Ptr HostAddressRangeEXT -> Int -> Ptr HostAddressRangeEXT
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
16) :: Ptr HostAddressRangeEXT) (IO ("descriptors" ::: Vector HostAddressRangeEXT)
 -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
-> ((() -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
    -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
-> (() -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
-> IO ("descriptors" ::: Vector HostAddressRangeEXT)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO ("descriptors" ::: Vector HostAddressRangeEXT))
-> () -> IO ("descriptors" ::: Vector HostAddressRangeEXT)
forall a b. (a -> b) -> a -> b
$ ())) [0..(fromIntegral ((fromIntegral (Data.Vector.length $ (tensors)) :: Word32))) - 1]
  r <- lift $ traceAroundEvent "vkGetTensorOpaqueCaptureDataARM" (vkGetTensorOpaqueCaptureDataARM'
                                                                    (deviceHandle (device))
                                                                    ((fromIntegral (Data.Vector.length $ (tensors)) :: Word32))
                                                                    (pPTensors)
                                                                    ((pPDatas)))
  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
  pDatas <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (tensors)) :: Word32))) (\Int
i -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @HostAddressRangeEXT (((Ptr HostAddressRangeEXT
pPDatas) Ptr HostAddressRangeEXT -> Int -> Ptr HostAddressRangeEXT
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
16 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr HostAddressRangeEXT)))
  pure $ (pDatas)


-- | VkHostAddressRangeEXT - Structure specifying a host address range
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'getImageOpaqueCaptureDataEXT', 'getTensorOpaqueCaptureDataARM',
-- 'writeResourceDescriptorsEXT', 'writeSamplerDescriptorsEXT'
data HostAddressRangeEXT = HostAddressRangeEXT
  { -- | @address@ is a host memory address.
    --
    -- #VUID-VkHostAddressRangeEXT-address-parameter# @address@ /must/ be a
    -- valid pointer to an array of @size@ bytes
    HostAddressRangeEXT -> Ptr ()
address :: Ptr ()
  , -- | @size@ is the size of the range.
    --
    -- #VUID-VkHostAddressRangeEXT-size-arraylength# @size@ /must/ be greater
    -- than @0@
    HostAddressRangeEXT -> DeviceSize
size :: Word64
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (HostAddressRangeEXT)
#endif
deriving instance Show HostAddressRangeEXT

instance ToCStruct HostAddressRangeEXT where
  withCStruct :: forall b.
HostAddressRangeEXT -> (Ptr HostAddressRangeEXT -> IO b) -> IO b
withCStruct HostAddressRangeEXT
x Ptr HostAddressRangeEXT -> IO b
f = Int -> (Ptr HostAddressRangeEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
16 ((Ptr HostAddressRangeEXT -> IO b) -> IO b)
-> (Ptr HostAddressRangeEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr HostAddressRangeEXT
p -> Ptr HostAddressRangeEXT -> HostAddressRangeEXT -> IO b -> IO b
forall b.
Ptr HostAddressRangeEXT -> HostAddressRangeEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr HostAddressRangeEXT
p HostAddressRangeEXT
x (Ptr HostAddressRangeEXT -> IO b
f Ptr HostAddressRangeEXT
p)
  pokeCStruct :: forall b.
Ptr HostAddressRangeEXT -> HostAddressRangeEXT -> IO b -> IO b
pokeCStruct Ptr HostAddressRangeEXT
p HostAddressRangeEXT{DeviceSize
Ptr ()
address :: HostAddressRangeEXT -> Ptr ()
size :: HostAddressRangeEXT -> DeviceSize
address :: Ptr ()
size :: DeviceSize
..} IO b
f = do
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr HostAddressRangeEXT
p Ptr HostAddressRangeEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr (Ptr ()))) (Ptr ()
address)
    Ptr CSize -> CSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr HostAddressRangeEXT
p Ptr HostAddressRangeEXT -> Int -> Ptr CSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr CSize)) (DeviceSize -> CSize
CSize (DeviceSize
size))
    IO b
f
  cStructSize :: Int
cStructSize = Int
16
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr HostAddressRangeEXT -> IO b -> IO b
pokeZeroCStruct Ptr HostAddressRangeEXT
p IO b
f = do
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr HostAddressRangeEXT
p Ptr HostAddressRangeEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr (Ptr ()))) (Ptr ()
forall a. Zero a => a
zero)
    Ptr CSize -> CSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr HostAddressRangeEXT
p Ptr HostAddressRangeEXT -> Int -> Ptr CSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr CSize)) (DeviceSize -> CSize
CSize (DeviceSize
forall a. Zero a => a
zero))
    IO b
f

instance FromCStruct HostAddressRangeEXT where
  peekCStruct :: Ptr HostAddressRangeEXT -> IO HostAddressRangeEXT
peekCStruct Ptr HostAddressRangeEXT
p = do
    address <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr HostAddressRangeEXT
p Ptr HostAddressRangeEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr (Ptr ())))
    size <- peek @CSize ((p `plusPtr` 8 :: Ptr CSize))
    pure $ HostAddressRangeEXT
             address (coerce @CSize @Word64 size)

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

instance Zero HostAddressRangeEXT where
  zero :: HostAddressRangeEXT
zero = Ptr () -> DeviceSize -> HostAddressRangeEXT
HostAddressRangeEXT
           Ptr ()
forall a. Zero a => a
zero
           DeviceSize
forall a. Zero a => a
zero


-- | VkHostAddressRangeConstEXT - Structure specifying a constant host
-- address range
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'OpaqueCaptureDataCreateInfoEXT', 'PushDataInfoEXT'
data HostAddressRangeConstEXT = HostAddressRangeConstEXT
  { -- | @address@ is a read-only host memory address.
    --
    -- #VUID-VkHostAddressRangeConstEXT-address-parameter# @address@ /must/ be
    -- a valid pointer to an array of @size@ bytes
    HostAddressRangeConstEXT -> Ptr ()
address :: Ptr ()
  , -- | @size@ is the size of the range.
    --
    -- #VUID-VkHostAddressRangeConstEXT-size-arraylength# @size@ /must/ be
    -- greater than @0@
    HostAddressRangeConstEXT -> DeviceSize
size :: Word64
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (HostAddressRangeConstEXT)
#endif
deriving instance Show HostAddressRangeConstEXT

instance ToCStruct HostAddressRangeConstEXT where
  withCStruct :: forall b.
HostAddressRangeConstEXT
-> (Ptr HostAddressRangeConstEXT -> IO b) -> IO b
withCStruct HostAddressRangeConstEXT
x Ptr HostAddressRangeConstEXT -> IO b
f = Int -> (Ptr HostAddressRangeConstEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
16 ((Ptr HostAddressRangeConstEXT -> IO b) -> IO b)
-> (Ptr HostAddressRangeConstEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr HostAddressRangeConstEXT
p -> Ptr HostAddressRangeConstEXT
-> HostAddressRangeConstEXT -> IO b -> IO b
forall b.
Ptr HostAddressRangeConstEXT
-> HostAddressRangeConstEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr HostAddressRangeConstEXT
p HostAddressRangeConstEXT
x (Ptr HostAddressRangeConstEXT -> IO b
f Ptr HostAddressRangeConstEXT
p)
  pokeCStruct :: forall b.
Ptr HostAddressRangeConstEXT
-> HostAddressRangeConstEXT -> IO b -> IO b
pokeCStruct Ptr HostAddressRangeConstEXT
p HostAddressRangeConstEXT{DeviceSize
Ptr ()
address :: HostAddressRangeConstEXT -> Ptr ()
size :: HostAddressRangeConstEXT -> DeviceSize
address :: Ptr ()
size :: DeviceSize
..} IO b
f = do
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr HostAddressRangeConstEXT
p Ptr HostAddressRangeConstEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr (Ptr ()))) (Ptr ()
address)
    Ptr CSize -> CSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr HostAddressRangeConstEXT
p Ptr HostAddressRangeConstEXT -> Int -> Ptr CSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr CSize)) (DeviceSize -> CSize
CSize (DeviceSize
size))
    IO b
f
  cStructSize :: Int
cStructSize = Int
16
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr HostAddressRangeConstEXT -> IO b -> IO b
pokeZeroCStruct Ptr HostAddressRangeConstEXT
p IO b
f = do
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr HostAddressRangeConstEXT
p Ptr HostAddressRangeConstEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr (Ptr ()))) (Ptr ()
forall a. Zero a => a
zero)
    Ptr CSize -> CSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr HostAddressRangeConstEXT
p Ptr HostAddressRangeConstEXT -> Int -> Ptr CSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr CSize)) (DeviceSize -> CSize
CSize (DeviceSize
forall a. Zero a => a
zero))
    IO b
f

instance FromCStruct HostAddressRangeConstEXT where
  peekCStruct :: Ptr HostAddressRangeConstEXT -> IO HostAddressRangeConstEXT
peekCStruct Ptr HostAddressRangeConstEXT
p = do
    address <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr HostAddressRangeConstEXT
p Ptr HostAddressRangeConstEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr (Ptr ())))
    size <- peek @CSize ((p `plusPtr` 8 :: Ptr CSize))
    pure $ HostAddressRangeConstEXT
             address (coerce @CSize @Word64 size)

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

instance Zero HostAddressRangeConstEXT where
  zero :: HostAddressRangeConstEXT
zero = Ptr () -> DeviceSize -> HostAddressRangeConstEXT
HostAddressRangeConstEXT
           Ptr ()
forall a. Zero a => a
zero
           DeviceSize
forall a. Zero a => a
zero


-- | VkDeviceAddressRangeEXT - Structure specifying a device address range
--
-- == Valid Usage
--
-- -   #VUID-VkDeviceAddressRangeEXT-size-11411# If @size@ is not 0,
--     @address@ /must/ not be 0
--
-- -   #VUID-VkDeviceAddressRangeEXT-address-11365# The sum of @address@
--     and @size@ /must/ be less than or equal to the sum of an address
--     retrieved from a 'Vulkan.Core10.Handles.Buffer' and the value of
--     'Vulkan.Core10.Buffer.BufferCreateInfo'::@size@ used to create that
--     'Vulkan.Core10.Handles.Buffer'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDeviceAddressRangeEXT-address-parameter# If @address@ is not
--     @0@, @address@ /must/ be a valid
--     'Vulkan.Core10.FundamentalTypes.DeviceAddress' value
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'BindHeapInfoEXT', 'Vulkan.Core10.FundamentalTypes.DeviceAddress',
-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',
-- 'ResourceDescriptorDataEXT', 'TexelBufferDescriptorInfoEXT'
data DeviceAddressRangeEXT = DeviceAddressRangeEXT
  { -- | @address@ is a 'Vulkan.Core10.FundamentalTypes.DeviceAddress' specifying
    -- the start of the range.
    DeviceAddressRangeEXT -> DeviceSize
address :: DeviceAddress
  , -- | @size@ is a 'Vulkan.Core10.FundamentalTypes.DeviceSize' specifying the
    -- size of the range.
    DeviceAddressRangeEXT -> DeviceSize
size :: DeviceSize
  }
  deriving (Typeable, DeviceAddressRangeEXT -> DeviceAddressRangeEXT -> Bool
(DeviceAddressRangeEXT -> DeviceAddressRangeEXT -> Bool)
-> (DeviceAddressRangeEXT -> DeviceAddressRangeEXT -> Bool)
-> Eq DeviceAddressRangeEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DeviceAddressRangeEXT -> DeviceAddressRangeEXT -> Bool
== :: DeviceAddressRangeEXT -> DeviceAddressRangeEXT -> Bool
$c/= :: DeviceAddressRangeEXT -> DeviceAddressRangeEXT -> Bool
/= :: DeviceAddressRangeEXT -> DeviceAddressRangeEXT -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DeviceAddressRangeEXT)
#endif
deriving instance Show DeviceAddressRangeEXT

instance ToCStruct DeviceAddressRangeEXT where
  withCStruct :: forall b.
DeviceAddressRangeEXT
-> (Ptr DeviceAddressRangeEXT -> IO b) -> IO b
withCStruct DeviceAddressRangeEXT
x Ptr DeviceAddressRangeEXT -> IO b
f = Int -> (Ptr DeviceAddressRangeEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
16 ((Ptr DeviceAddressRangeEXT -> IO b) -> IO b)
-> (Ptr DeviceAddressRangeEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DeviceAddressRangeEXT
p -> Ptr DeviceAddressRangeEXT -> DeviceAddressRangeEXT -> IO b -> IO b
forall b.
Ptr DeviceAddressRangeEXT -> DeviceAddressRangeEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DeviceAddressRangeEXT
p DeviceAddressRangeEXT
x (Ptr DeviceAddressRangeEXT -> IO b
f Ptr DeviceAddressRangeEXT
p)
  pokeCStruct :: forall b.
Ptr DeviceAddressRangeEXT -> DeviceAddressRangeEXT -> IO b -> IO b
pokeCStruct Ptr DeviceAddressRangeEXT
p DeviceAddressRangeEXT{DeviceSize
address :: DeviceAddressRangeEXT -> DeviceSize
size :: DeviceAddressRangeEXT -> DeviceSize
address :: DeviceSize
size :: DeviceSize
..} IO b
f = do
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceAddressRangeEXT
p Ptr DeviceAddressRangeEXT -> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr DeviceAddress)) (DeviceSize
address)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceAddressRangeEXT
p Ptr DeviceAddressRangeEXT -> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr DeviceSize)) (DeviceSize
size)
    IO b
f
  cStructSize :: Int
cStructSize = Int
16
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr DeviceAddressRangeEXT -> IO b -> IO b
pokeZeroCStruct Ptr DeviceAddressRangeEXT
p IO b
f = do
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DeviceAddressRangeEXT
p Ptr DeviceAddressRangeEXT -> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr DeviceSize)) (DeviceSize
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct DeviceAddressRangeEXT where
  peekCStruct :: Ptr DeviceAddressRangeEXT -> IO DeviceAddressRangeEXT
peekCStruct Ptr DeviceAddressRangeEXT
p = do
    address <- forall a. Storable a => Ptr a -> IO a
peek @DeviceAddress ((Ptr DeviceAddressRangeEXT
p Ptr DeviceAddressRangeEXT -> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr DeviceAddress))
    size <- peek @DeviceSize ((p `plusPtr` 8 :: Ptr DeviceSize))
    pure $ DeviceAddressRangeEXT
             address size

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

instance Zero DeviceAddressRangeEXT where
  zero :: DeviceAddressRangeEXT
zero = DeviceSize -> DeviceSize -> DeviceAddressRangeEXT
DeviceAddressRangeEXT
           DeviceSize
forall a. Zero a => a
zero
           DeviceSize
forall a. Zero a => a
zero


-- | VkTexelBufferDescriptorInfoEXT - Structure describing an image
-- descriptor created from a buffer
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'DeviceAddressRangeEXT', 'Vulkan.Core10.Enums.Format.Format',
-- 'ResourceDescriptorDataEXT',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data TexelBufferDescriptorInfoEXT = TexelBufferDescriptorInfoEXT
  { -- | @format@ is the 'Vulkan.Core10.Enums.Format.Format' of the descriptor.
    --
    -- #VUID-VkTexelBufferDescriptorInfoEXT-format-parameter# @format@ /must/
    -- be a valid 'Vulkan.Core10.Enums.Format.Format' value
    TexelBufferDescriptorInfoEXT -> Format
format :: Format
  , -- | @addressRange@ is a 'DeviceAddressRangeEXT' defining the range of data
    -- backing the descriptor.
    TexelBufferDescriptorInfoEXT -> DeviceAddressRangeEXT
addressRange :: DeviceAddressRangeEXT
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (TexelBufferDescriptorInfoEXT)
#endif
deriving instance Show TexelBufferDescriptorInfoEXT

instance ToCStruct TexelBufferDescriptorInfoEXT where
  withCStruct :: forall b.
TexelBufferDescriptorInfoEXT
-> (Ptr TexelBufferDescriptorInfoEXT -> IO b) -> IO b
withCStruct TexelBufferDescriptorInfoEXT
x Ptr TexelBufferDescriptorInfoEXT -> IO b
f = Int -> (Ptr TexelBufferDescriptorInfoEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 ((Ptr TexelBufferDescriptorInfoEXT -> IO b) -> IO b)
-> (Ptr TexelBufferDescriptorInfoEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr TexelBufferDescriptorInfoEXT
p -> Ptr TexelBufferDescriptorInfoEXT
-> TexelBufferDescriptorInfoEXT -> IO b -> IO b
forall b.
Ptr TexelBufferDescriptorInfoEXT
-> TexelBufferDescriptorInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr TexelBufferDescriptorInfoEXT
p TexelBufferDescriptorInfoEXT
x (Ptr TexelBufferDescriptorInfoEXT -> IO b
f Ptr TexelBufferDescriptorInfoEXT
p)
  pokeCStruct :: forall b.
Ptr TexelBufferDescriptorInfoEXT
-> TexelBufferDescriptorInfoEXT -> IO b -> IO b
pokeCStruct Ptr TexelBufferDescriptorInfoEXT
p TexelBufferDescriptorInfoEXT{Format
DeviceAddressRangeEXT
format :: TexelBufferDescriptorInfoEXT -> Format
addressRange :: TexelBufferDescriptorInfoEXT -> DeviceAddressRangeEXT
format :: Format
addressRange :: DeviceAddressRangeEXT
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr TexelBufferDescriptorInfoEXT
p Ptr TexelBufferDescriptorInfoEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_TEXEL_BUFFER_DESCRIPTOR_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr TexelBufferDescriptorInfoEXT
p Ptr TexelBufferDescriptorInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Format -> Format -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr TexelBufferDescriptorInfoEXT
p Ptr TexelBufferDescriptorInfoEXT -> Int -> Ptr Format
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Format)) (Format
format)
    Ptr DeviceAddressRangeEXT -> DeviceAddressRangeEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr TexelBufferDescriptorInfoEXT
p Ptr TexelBufferDescriptorInfoEXT
-> Int -> Ptr DeviceAddressRangeEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DeviceAddressRangeEXT)) (DeviceAddressRangeEXT
addressRange)
    IO b
f
  cStructSize :: Int
cStructSize = Int
40
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr TexelBufferDescriptorInfoEXT -> IO b -> IO b
pokeZeroCStruct Ptr TexelBufferDescriptorInfoEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr TexelBufferDescriptorInfoEXT
p Ptr TexelBufferDescriptorInfoEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_TEXEL_BUFFER_DESCRIPTOR_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr TexelBufferDescriptorInfoEXT
p Ptr TexelBufferDescriptorInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Format -> Format -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr TexelBufferDescriptorInfoEXT
p Ptr TexelBufferDescriptorInfoEXT -> Int -> Ptr Format
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Format)) (Format
forall a. Zero a => a
zero)
    Ptr DeviceAddressRangeEXT -> DeviceAddressRangeEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr TexelBufferDescriptorInfoEXT
p Ptr TexelBufferDescriptorInfoEXT
-> Int -> Ptr DeviceAddressRangeEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DeviceAddressRangeEXT)) (DeviceAddressRangeEXT
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct TexelBufferDescriptorInfoEXT where
  peekCStruct :: Ptr TexelBufferDescriptorInfoEXT -> IO TexelBufferDescriptorInfoEXT
peekCStruct Ptr TexelBufferDescriptorInfoEXT
p = do
    format <- forall a. Storable a => Ptr a -> IO a
peek @Format ((Ptr TexelBufferDescriptorInfoEXT
p Ptr TexelBufferDescriptorInfoEXT -> Int -> Ptr Format
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Format))
    addressRange <- peekCStruct @DeviceAddressRangeEXT ((p `plusPtr` 24 :: Ptr DeviceAddressRangeEXT))
    pure $ TexelBufferDescriptorInfoEXT
             format addressRange

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

instance Zero TexelBufferDescriptorInfoEXT where
  zero :: TexelBufferDescriptorInfoEXT
zero = Format -> DeviceAddressRangeEXT -> TexelBufferDescriptorInfoEXT
TexelBufferDescriptorInfoEXT
           Format
forall a. Zero a => a
zero
           DeviceAddressRangeEXT
forall a. Zero a => a
zero


-- | VkImageDescriptorInfoEXT - Structure describing an image descriptor
-- created from an image
--
-- == Valid Usage
--
-- -   #VUID-VkImageDescriptorInfoEXT-pView-11426# @pView->viewType@ /must/
--     not be 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY'
--     if @pView->image@ was created with an @imageType@ of
--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'
--
-- -   #VUID-VkImageDescriptorInfoEXT-pView-11427# If @pView->viewType@ is
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' and
--     @pView->image@ was created with an @imageType@ of
--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', @pView->image@ /must/
--     have been created with
--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT'
--     set
--
-- -   #VUID-VkImageDescriptorInfoEXT-layout-11219# @layout@ /must/ be
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL',
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL',
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_READ_ONLY_OPTIMAL',
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering_local_read.IMAGE_LAYOUT_RENDERING_LOCAL_READ_KHR',
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT',
--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
--
-- -   #VUID-VkImageDescriptorInfoEXT-layout-11221# If @layout@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL',
--     or
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',
--     then @pView->aspectMask@ /must/ not include
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
--
-- -   #VUID-VkImageDescriptorInfoEXT-pView-11430# If @pView->image@ is a
--     depth\/stencil image, @pView->subresourceRange.aspectMask@ /must/
--     include either
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
--     but not both
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkImageDescriptorInfoEXT-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_DESCRIPTOR_INFO_EXT'
--
-- -   #VUID-VkImageDescriptorInfoEXT-pNext-pNext# @pNext@ /must/ be @NULL@
--
-- -   #VUID-VkImageDescriptorInfoEXT-pView-parameter# @pView@ /must/ be a
--     valid pointer to a valid
--     'Vulkan.Core10.ImageView.ImageViewCreateInfo' structure
--
-- -   #VUID-VkImageDescriptorInfoEXT-layout-parameter# @layout@ /must/ be
--     a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',
-- 'Vulkan.Core10.ImageView.ImageViewCreateInfo',
-- 'ResourceDescriptorDataEXT',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data ImageDescriptorInfoEXT = ImageDescriptorInfoEXT
  { -- | @pView@ is an 'Vulkan.Core10.ImageView.ImageViewCreateInfo' describing
    -- the descriptor.
    ImageDescriptorInfoEXT -> SomeStruct ImageViewCreateInfo
view :: SomeStruct ImageViewCreateInfo
  , -- | @layout@ is the 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' that the
    -- image view will be in when accessed as a descriptor.
    ImageDescriptorInfoEXT -> ImageLayout
layout :: ImageLayout
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (ImageDescriptorInfoEXT)
#endif
deriving instance Show ImageDescriptorInfoEXT

instance ToCStruct ImageDescriptorInfoEXT where
  withCStruct :: forall b.
ImageDescriptorInfoEXT
-> (Ptr ImageDescriptorInfoEXT -> IO b) -> IO b
withCStruct ImageDescriptorInfoEXT
x Ptr ImageDescriptorInfoEXT -> IO b
f = Int -> (Ptr ImageDescriptorInfoEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr ImageDescriptorInfoEXT -> IO b) -> IO b)
-> (Ptr ImageDescriptorInfoEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr ImageDescriptorInfoEXT
p -> Ptr ImageDescriptorInfoEXT
-> ImageDescriptorInfoEXT -> IO b -> IO b
forall b.
Ptr ImageDescriptorInfoEXT
-> ImageDescriptorInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr ImageDescriptorInfoEXT
p ImageDescriptorInfoEXT
x (Ptr ImageDescriptorInfoEXT -> IO b
f Ptr ImageDescriptorInfoEXT
p)
  pokeCStruct :: forall b.
Ptr ImageDescriptorInfoEXT
-> ImageDescriptorInfoEXT -> IO b -> IO b
pokeCStruct Ptr ImageDescriptorInfoEXT
p ImageDescriptorInfoEXT{ImageLayout
SomeStruct ImageViewCreateInfo
view :: ImageDescriptorInfoEXT -> SomeStruct ImageViewCreateInfo
layout :: ImageDescriptorInfoEXT -> ImageLayout
view :: SomeStruct ImageViewCreateInfo
layout :: ImageLayout
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImageDescriptorInfoEXT
p Ptr ImageDescriptorInfoEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_IMAGE_DESCRIPTOR_INFO_EXT)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImageDescriptorInfoEXT
p Ptr ImageDescriptorInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    pView'' <- forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
forall r (m :: * -> *) a. ((a -> m r) -> m r) -> ContT r m a
ContT @_ @_ @(Ptr (ImageViewCreateInfo '[])) (((Ptr (ImageViewCreateInfo '[]) -> IO b) -> IO b)
 -> ContT b IO (Ptr (ImageViewCreateInfo '[])))
-> ((Ptr (ImageViewCreateInfo '[]) -> IO b) -> IO b)
-> ContT b IO (Ptr (ImageViewCreateInfo '[]))
forall a b. (a -> b) -> a -> b
$ \Ptr (ImageViewCreateInfo '[]) -> IO b
cont -> forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
SomeStruct a
-> (forall (es :: [*]).
    (Extendss a es, PokeChain es) =>
    Ptr (a es) -> IO b)
-> IO b
withSomeCStruct @ImageViewCreateInfo (SomeStruct ImageViewCreateInfo
view) (Ptr (ImageViewCreateInfo '[]) -> IO b
cont (Ptr (ImageViewCreateInfo '[]) -> IO b)
-> (Ptr (ImageViewCreateInfo es) -> Ptr (ImageViewCreateInfo '[]))
-> Ptr (ImageViewCreateInfo es)
-> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (ImageViewCreateInfo es) -> Ptr (ImageViewCreateInfo '[])
forall a b. Ptr a -> Ptr b
castPtr)
    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr (ImageViewCreateInfo _)))) pView''
    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (layout)
    lift $ f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr ImageDescriptorInfoEXT -> IO b -> IO b
pokeZeroCStruct Ptr ImageDescriptorInfoEXT
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImageDescriptorInfoEXT
p Ptr ImageDescriptorInfoEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_IMAGE_DESCRIPTOR_INFO_EXT)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImageDescriptorInfoEXT
p Ptr ImageDescriptorInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    pView'' <- forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
forall r (m :: * -> *) a. ((a -> m r) -> m r) -> ContT r m a
ContT @_ @_ @(Ptr (ImageViewCreateInfo '[])) (((Ptr (ImageViewCreateInfo '[]) -> IO b) -> IO b)
 -> ContT b IO (Ptr (ImageViewCreateInfo '[])))
-> ((Ptr (ImageViewCreateInfo '[]) -> IO b) -> IO b)
-> ContT b IO (Ptr (ImageViewCreateInfo '[]))
forall a b. (a -> b) -> a -> b
$ \Ptr (ImageViewCreateInfo '[]) -> IO b
cont -> forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
SomeStruct a
-> (forall (es :: [*]).
    (Extendss a es, PokeChain es) =>
    Ptr (a es) -> IO b)
-> IO b
withSomeCStruct @ImageViewCreateInfo ((ImageViewCreateInfo '[] -> SomeStruct ImageViewCreateInfo
forall (a :: [*] -> *) (es :: [*]).
(Extendss a es, PokeChain es, Show (Chain es)) =>
a es -> SomeStruct a
SomeStruct ImageViewCreateInfo '[]
forall a. Zero a => a
zero)) (Ptr (ImageViewCreateInfo '[]) -> IO b
cont (Ptr (ImageViewCreateInfo '[]) -> IO b)
-> (Ptr (ImageViewCreateInfo es) -> Ptr (ImageViewCreateInfo '[]))
-> Ptr (ImageViewCreateInfo es)
-> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (ImageViewCreateInfo es) -> Ptr (ImageViewCreateInfo '[])
forall a b. Ptr a -> Ptr b
castPtr)
    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr (ImageViewCreateInfo _)))) pView''
    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (zero)
    lift $ f

instance FromCStruct ImageDescriptorInfoEXT where
  peekCStruct :: Ptr ImageDescriptorInfoEXT -> IO ImageDescriptorInfoEXT
peekCStruct Ptr ImageDescriptorInfoEXT
p = do
    pView <- Ptr (SomeStruct ImageViewCreateInfo)
-> IO (SomeStruct ImageViewCreateInfo)
forall (a :: [*] -> *).
(Extensible a,
 forall (es :: [*]).
 (Extendss a es, PeekChain es) =>
 FromCStruct (a es)) =>
Ptr (SomeStruct a) -> IO (SomeStruct a)
peekSomeCStruct (Ptr (SomeStruct ImageViewCreateInfo)
 -> IO (SomeStruct ImageViewCreateInfo))
-> (Ptr (ImageViewCreateInfo (ZonkAny 4))
    -> Ptr (SomeStruct ImageViewCreateInfo))
-> Ptr (ImageViewCreateInfo (ZonkAny 4))
-> IO (SomeStruct ImageViewCreateInfo)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (ImageViewCreateInfo (ZonkAny 4))
-> Ptr (SomeStruct ImageViewCreateInfo)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (ImageViewCreateInfo (ZonkAny 4))
 -> IO (SomeStruct ImageViewCreateInfo))
-> IO (Ptr (ImageViewCreateInfo (ZonkAny 4)))
-> IO (SomeStruct ImageViewCreateInfo)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr (Ptr (ImageViewCreateInfo (ZonkAny 4)))
-> IO (Ptr (ImageViewCreateInfo (ZonkAny 4)))
forall a. Storable a => Ptr a -> IO a
peek ((Ptr ImageDescriptorInfoEXT
p Ptr ImageDescriptorInfoEXT
-> Int -> Ptr (Ptr (ImageViewCreateInfo w))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr (ImageViewCreateInfo _))))
    layout <- peek @ImageLayout ((p `plusPtr` 24 :: Ptr ImageLayout))
    pure $ ImageDescriptorInfoEXT
             pView layout

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


-- | VkResourceDescriptorInfoEXT - Structure describing a resource descriptor
--
-- = Description
--
-- If @type@ is
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
-- or
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER',
-- @data->pTexelBuffer@ is used to construct the descriptor.
--
-- If @type@ is
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR',
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV',
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkDescriptorType VK_DESCRIPTOR_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_NV>,
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER', or
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER',
-- @data->pAddressRange@ is used to construct the descriptor. For
-- acceleration structures, the size of the range is not used by the
-- descriptor, and /can/ be set to 0. If a non-zero size is provided
-- though, it /must/ be a valid range.
--
-- Applications may wish to provide a valid range as a way to check their
-- own assumptions about the range they are binding; but it has no bearing
-- on anything except validation. Implementations cannot make any
-- assumptions based on the size of the provided range.
--
-- If @type@ is
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM',
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM',
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE', or
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT',
-- @data->pImage@ is used to construct the descriptor. If @type@ is
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_TENSOR_ARM',
-- @data->pTensorARM@ is used to construct the descriptor.
--
-- If the
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-nullDescriptor nullDescriptor>
-- feature is enabled, the corresponding element of @data@ /may/ be @NULL@
-- to generate a null descriptor.
--
-- Applications /can/ give resource descriptors a debug name in a similar
-- way to naming an object, via the
-- 'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsObjectNameInfoEXT'
-- structure. However, as there is no actual object, this structure /must/
-- be passed via the @pNext@ chain of this structure, with a @objectType@
-- of 'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN' and a
-- @objectHandle@ of 'Vulkan.Core10.APIConstants.NULL_HANDLE'. The name is
-- attached to the unique set of descriptor bits written by the
-- implementation, and writing the same bits again with new debug info
-- /may/ rename the original descriptor.
--
-- Implementations are not prevented from returning the same bits for
-- different descriptors. This can result in multiple different resources
-- mapping to the same name. A common case for this might be something like
-- a uniform buffer and storage buffer with the same device address range.
--
-- If a descriptor becomes invalid due to the underlying resource becoming
-- invalid, implementations /may/ remove the name association.
--
-- == Valid Usage
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-11210# @type@ /must/ be one
--     of
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER',
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER',
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER',
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER',
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM',
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM',
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR',
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV',
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkDescriptorType VK_DESCRIPTOR_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_NV>,
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_TENSOR_ARM', or
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'
--
-- -   #VUID-VkResourceDescriptorInfoEXT-None-11211# If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-nullDescriptor nullDescriptor>
--     feature is not enabled, and @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE'
--     or
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
--     @data->pImage@ /must/ not be @NULL@
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-11469# If @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM',
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM',
--     or
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT',
--     @data->pImage@ /must/ not be @NULL@
--
-- -   #VUID-VkResourceDescriptorInfoEXT-None-11212# If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-nullDescriptor nullDescriptor>
--     feature is not enabled, and @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
--     or
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER',
--     @data->pTexelBuffer@ /must/ not be @NULL@
--
-- -   #VUID-VkResourceDescriptorInfoEXT-None-11213# If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-nullDescriptor nullDescriptor>
--     feature is not enabled, and @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR',
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV',
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkDescriptorType VK_DESCRIPTOR_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_NV>,
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_TENSOR_ARM',
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER',
--     or
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER',
--     @data->pAddressRange@ /must/ not be @NULL@
--
-- -   #VUID-VkResourceDescriptorInfoEXT-None-11457# If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-nullDescriptor nullDescriptor>
--     feature is not enabled, and @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_TENSOR_ARM',
--     @data->pTensorARM@ /must/ not be @NULL@
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-12349# If @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
--     or
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER',
--     @data->pTexelBuffer->addressRange.address@ /must/ be a multiple of
--     the effective alignment requirement of @data->pTexelBuffer->format@
--     as determined by
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-minTexelBufferOffsetAlignment minTexelBufferOffsetAlignment>
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-12350# If @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER',
--     @data->pAddressRange->address@ /must/ be a multiple of
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-minUniformBufferOffsetAlignment minUniformBufferOffsetAlignment>
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-12351# If @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER',
--     @data->pAddressRange->address@ /must/ be a multiple of
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-minStorageBufferOffsetAlignment minStorageBufferOffsetAlignment>
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-11454# If @type@ is one of
--
--     -   'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR'
--
--     -   'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV'
--
--     -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkDescriptorType VK_DESCRIPTOR_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_NV>
--
--         @data->pAddressRange->address@ /must/ be a multiple of 256
--
-- -   #VUID-VkResourceDescriptorInfoEXT-pNext-11401# If there is a
--     'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsObjectNameInfoEXT'
--     structure in the @pNext@ chain, its @objectType@ /must/ be
--     'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN'
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-11422# If @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM',
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM',
--     or
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT',
--     @data.pImage->pView->image@ /must/ not have been created with an
--     @imageType@ of 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-11424# If @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
--     @data.pImage->pView->viewType@ is
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D', and the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-image2DViewOf3D image2DViewOf3D>
--     feature is not enabled, @data.pImage->pView->image@ /must/ not have
--     been created with an @imageType@ of
--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-11425# If @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
--     @data.pImage->pView->viewType@ is
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D', and the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-sampler2DViewOf3D sampler2DViewOf3D>
--     feature is not enabled, @data.pImage->pView->image@ /must/ not have
--     been created with an @imageType@ of
--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-11433# If @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
--     or
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER',
--     @data.pAddressRange->size@ /must/ not be 0
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-11458# If @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE'
--     and @data.pImage@ is not @NULL@, @data.pImage->pView->image@ /must/
--     have been created with the
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT'
--     usage flag set
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-11459# If @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE'
--     and @data.pImage@ is not @NULL@, @data.pImage->pView->image@ /must/
--     have been created with the
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT'
--     usage flag set
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-11460# If @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'
--     and @data.pImage@ is not @NULL@, @data.pImage->pView->image@ /must/
--     have been created with the
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
--     usage flag set
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-11461# If @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
--     and @data.pAddressRange@ is not @NULL@, @data.pAddressRange@ /must/
--     be a device address range allocated to the application from a buffer
--     created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_BUFFER_BIT'
--     usage flag set
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-11462# If @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
--     and @data.pAddressRange@ is not @NULL@, @data.pAddressRange@ /must/
--     be a device address range allocated to the application from a buffer
--     created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_BUFFER_BIT'
--     usage flag set
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-11463# If @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
--     and @data.pTexelBuffer@ is not @NULL@,
--     @data.pTexelBuffer->addressRange@ /must/ be a device address range
--     allocated to the application from a buffer created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT'
--     usage flag set
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-11464# If @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
--     and @data.pTexelBuffer@ is not @NULL@,
--     @data.pTexelBuffer->addressRange@ /must/ be a device address range
--     allocated to the application from a buffer created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT'
--     usage flag set
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-11483# If @type@ is
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkDescriptorType VK_DESCRIPTOR_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_NV>
--     or
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR',
--     and @data.pAddressRange@ is not @NULL@,
--     @data.pAddressRange->address@ /must/ be an acceleration structure
--     address retrieved from a
--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' object via
--     'Vulkan.Extensions.VK_KHR_acceleration_structure.getAccelerationStructureDeviceAddressKHR'
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-11484# If @type@ is
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkDescriptorType VK_DESCRIPTOR_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_NV>
--     or
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR',
--     @data.pAddressRange@ is not @NULL@, and @data.pAddressRange->size@
--     is not 0, @data.pAddressRange@ /must/ be a device address range
--     allocated to the application from the buffer used to create the
--     acceleration structure that @data.pAddressRange->address@ was
--     retrieved from, and within the buffer range bound to that
--     acceleration structure
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-11467# If @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV'
--     and @data.pAddressRange@ is not @NULL@,
--     @data.pAddressRange->address@ /must/ be an acceleration structure
--     handle retrieved from a
--     'Vulkan.Extensions.Handles.AccelerationStructureNV' object via
--     'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV'
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-11468# If @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV'
--     and @data.pAddressRange@ is not @NULL@, @data.pAddressRange->size@
--     /must/ be 0
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkResourceDescriptorInfoEXT-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RESOURCE_DESCRIPTOR_INFO_EXT'
--
-- -   #VUID-VkResourceDescriptorInfoEXT-pNext-pNext# @pNext@ /must/ be
--     @NULL@ or a pointer to a valid instance of
--     'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsObjectNameInfoEXT'
--
-- -   #VUID-VkResourceDescriptorInfoEXT-sType-unique# The @sType@ value of
--     each structure in the @pNext@ chain /must/ be unique
--
-- -   #VUID-VkResourceDescriptorInfoEXT-type-parameter# @type@ /must/ be a
--     valid 'Vulkan.Core10.Enums.DescriptorType.DescriptorType' value
--
-- -   #VUID-VkResourceDescriptorInfoEXT-pImage-parameter# If @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT',
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM',
--     or
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM',
--     and if @pImage@ is not @NULL@, the @pImage@ member of @data@ /must/
--     be a valid pointer to a valid 'ImageDescriptorInfoEXT' structure
--
-- -   #VUID-VkResourceDescriptorInfoEXT-pTexelBuffer-parameter# If @type@
--     is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
--     or
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER',
--     and if @pTexelBuffer@ is not @NULL@, the @pTexelBuffer@ member of
--     @data@ /must/ be a valid pointer to a valid
--     'TexelBufferDescriptorInfoEXT' structure
--
-- -   #VUID-VkResourceDescriptorInfoEXT-pAddressRange-parameter# If @type@
--     is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR',
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER',
--     or
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER',
--     and if @pAddressRange@ is not @NULL@, the @pAddressRange@ member of
--     @data@ /must/ be a valid pointer to a valid 'DeviceAddressRangeEXT'
--     structure
--
-- -   #VUID-VkResourceDescriptorInfoEXT-pTensorARM-parameter# If @type@ is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_TENSOR_ARM', and
--     if @pTensorARM@ is not @NULL@, the @pTensorARM@ member of @data@
--     /must/ be a valid pointer to a valid
--     'Vulkan.Extensions.VK_ARM_tensors.TensorViewCreateInfoARM' structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'Vulkan.Core10.Enums.DescriptorType.DescriptorType',
-- 'ResourceDescriptorDataEXT',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'writeResourceDescriptorsEXT'
data ResourceDescriptorInfoEXT (es :: [Type]) = ResourceDescriptorInfoEXT
  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
    forall (es :: [*]). ResourceDescriptorInfoEXT es -> Chain es
next :: Chain es
  , -- | @type@ is the type of descriptor to get.
    forall (es :: [*]). ResourceDescriptorInfoEXT es -> DescriptorType
type' :: DescriptorType
  , -- | @data@ is a 'ResourceDescriptorDataEXT' union defining the properties of
    -- a resource descriptor according to @type@
    forall (es :: [*]).
ResourceDescriptorInfoEXT es -> ResourceDescriptorDataEXT
data' :: ResourceDescriptorDataEXT
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (ResourceDescriptorInfoEXT (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (ResourceDescriptorInfoEXT es)

instance Extensible ResourceDescriptorInfoEXT where
  extensibleTypeName :: String
extensibleTypeName = String
"ResourceDescriptorInfoEXT"
  setNext :: forall (ds :: [*]) (es :: [*]).
ResourceDescriptorInfoEXT ds
-> Chain es -> ResourceDescriptorInfoEXT es
setNext ResourceDescriptorInfoEXT{DescriptorType
Chain ds
ResourceDescriptorDataEXT
next :: forall (es :: [*]). ResourceDescriptorInfoEXT es -> Chain es
type' :: forall (es :: [*]). ResourceDescriptorInfoEXT es -> DescriptorType
data' :: forall (es :: [*]).
ResourceDescriptorInfoEXT es -> ResourceDescriptorDataEXT
next :: Chain ds
type' :: DescriptorType
data' :: ResourceDescriptorDataEXT
..} Chain es
next' = ResourceDescriptorInfoEXT{next :: Chain es
next = Chain es
next', DescriptorType
ResourceDescriptorDataEXT
type' :: DescriptorType
data' :: ResourceDescriptorDataEXT
type' :: DescriptorType
data' :: ResourceDescriptorDataEXT
..}
  getNext :: forall (es :: [*]). ResourceDescriptorInfoEXT es -> Chain es
getNext ResourceDescriptorInfoEXT{DescriptorType
Chain es
ResourceDescriptorDataEXT
next :: forall (es :: [*]). ResourceDescriptorInfoEXT es -> Chain es
type' :: forall (es :: [*]). ResourceDescriptorInfoEXT es -> DescriptorType
data' :: forall (es :: [*]).
ResourceDescriptorInfoEXT es -> ResourceDescriptorDataEXT
next :: Chain es
type' :: DescriptorType
data' :: ResourceDescriptorDataEXT
..} = Chain es
next
  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ResourceDescriptorInfoEXT e => b) -> Maybe b
  extends :: forall e b (proxy :: * -> *).
Typeable e =>
proxy e -> (Extends ResourceDescriptorInfoEXT e => b) -> Maybe b
extends proxy e
_ Extends ResourceDescriptorInfoEXT e => b
f
    | Just e :~: DebugUtilsObjectNameInfoEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @DebugUtilsObjectNameInfoEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends ResourceDescriptorInfoEXT e => b
f
    | Bool
otherwise = Maybe b
forall a. Maybe a
Nothing

instance ( Extendss ResourceDescriptorInfoEXT es
         , PokeChain es ) => ToCStruct (ResourceDescriptorInfoEXT es) where
  withCStruct :: forall b.
ResourceDescriptorInfoEXT es
-> (Ptr (ResourceDescriptorInfoEXT es) -> IO b) -> IO b
withCStruct ResourceDescriptorInfoEXT es
x Ptr (ResourceDescriptorInfoEXT es) -> IO b
f = Int -> (Ptr (ResourceDescriptorInfoEXT es) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr (ResourceDescriptorInfoEXT es) -> IO b) -> IO b)
-> (Ptr (ResourceDescriptorInfoEXT es) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (ResourceDescriptorInfoEXT es)
p -> Ptr (ResourceDescriptorInfoEXT es)
-> ResourceDescriptorInfoEXT es -> IO b -> IO b
forall b.
Ptr (ResourceDescriptorInfoEXT es)
-> ResourceDescriptorInfoEXT es -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (ResourceDescriptorInfoEXT es)
p ResourceDescriptorInfoEXT es
x (Ptr (ResourceDescriptorInfoEXT es) -> IO b
f Ptr (ResourceDescriptorInfoEXT es)
p)
  pokeCStruct :: forall b.
Ptr (ResourceDescriptorInfoEXT es)
-> ResourceDescriptorInfoEXT es -> IO b -> IO b
pokeCStruct Ptr (ResourceDescriptorInfoEXT es)
p ResourceDescriptorInfoEXT{DescriptorType
Chain es
ResourceDescriptorDataEXT
next :: forall (es :: [*]). ResourceDescriptorInfoEXT es -> Chain es
type' :: forall (es :: [*]). ResourceDescriptorInfoEXT es -> DescriptorType
data' :: forall (es :: [*]).
ResourceDescriptorInfoEXT es -> ResourceDescriptorDataEXT
next :: Chain es
type' :: DescriptorType
data' :: ResourceDescriptorDataEXT
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ResourceDescriptorInfoEXT es)
p Ptr (ResourceDescriptorInfoEXT es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_RESOURCE_DESCRIPTOR_INFO_EXT)
    pNext'' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (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 (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ Chain es -> (Ptr (Chain es) -> IO b) -> IO b
forall (es :: [*]) a.
PokeChain es =>
Chain es -> (Ptr (Chain es) -> IO a) -> IO a
forall a. Chain es -> (Ptr (Chain es) -> IO a) -> IO a
withChain (Chain es
next)
    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
    lift $ poke ((p `plusPtr` 16 :: Ptr DescriptorType)) (type')
    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr ResourceDescriptorDataEXT)) (data') . ($ ())
    lift $ f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr (ResourceDescriptorInfoEXT es) -> IO b -> IO b
pokeZeroCStruct Ptr (ResourceDescriptorInfoEXT es)
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ResourceDescriptorInfoEXT es)
p Ptr (ResourceDescriptorInfoEXT es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_RESOURCE_DESCRIPTOR_INFO_EXT)
    pNext' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (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 (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ forall (es :: [*]) a.
PokeChain es =>
(Ptr (Chain es) -> IO a) -> IO a
withZeroChain @es
    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
    lift $ poke ((p `plusPtr` 16 :: Ptr DescriptorType)) (zero)
    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr ResourceDescriptorDataEXT)) (zero) . ($ ())
    lift $ f

instance es ~ '[] => Zero (ResourceDescriptorInfoEXT es) where
  zero :: ResourceDescriptorInfoEXT es
zero = Chain es
-> DescriptorType
-> ResourceDescriptorDataEXT
-> ResourceDescriptorInfoEXT es
forall (es :: [*]).
Chain es
-> DescriptorType
-> ResourceDescriptorDataEXT
-> ResourceDescriptorInfoEXT es
ResourceDescriptorInfoEXT
           ()
           DescriptorType
forall a. Zero a => a
zero
           ResourceDescriptorDataEXT
forall a. Zero a => a
zero


-- | VkBindHeapInfoEXT - Structure describing a device address range and
-- implementation reservation for a descriptor heap
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'CommandBufferInheritanceDescriptorHeapInfoEXT',
-- 'DeviceAddressRangeEXT', 'Vulkan.Core10.FundamentalTypes.DeviceSize',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'cmdBindResourceHeapEXT', 'cmdBindSamplerHeapEXT'
data BindHeapInfoEXT = BindHeapInfoEXT
  { -- | @heapRange@ is a 'DeviceAddressRangeEXT' defining the device address
    -- range used for the heap, inclusive of the implementation reserved range.
    ("bindInfo" ::: BindHeapInfoEXT) -> DeviceAddressRangeEXT
heapRange :: DeviceAddressRangeEXT
  , -- | @reservedRangeOffset@ is the offset within @heapRange@ to the start of
    -- the reserved range for the implementation.
    ("bindInfo" ::: BindHeapInfoEXT) -> DeviceSize
reservedRangeOffset :: DeviceSize
  , -- | @reservedRangeSize@ is the size of the reserved range for the
    -- implementation within @heapRange@.
    ("bindInfo" ::: BindHeapInfoEXT) -> DeviceSize
reservedRangeSize :: DeviceSize
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (BindHeapInfoEXT)
#endif
deriving instance Show BindHeapInfoEXT

instance ToCStruct BindHeapInfoEXT where
  withCStruct :: forall b.
("bindInfo" ::: BindHeapInfoEXT)
-> (Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO b) -> IO b
withCStruct "bindInfo" ::: BindHeapInfoEXT
x Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO b
f = Int -> (Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
48 ((Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO b) -> IO b)
-> (Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr ("bindInfo" ::: BindHeapInfoEXT)
p -> Ptr ("bindInfo" ::: BindHeapInfoEXT)
-> ("bindInfo" ::: BindHeapInfoEXT) -> IO b -> IO b
forall b.
Ptr ("bindInfo" ::: BindHeapInfoEXT)
-> ("bindInfo" ::: BindHeapInfoEXT) -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr ("bindInfo" ::: BindHeapInfoEXT)
p "bindInfo" ::: BindHeapInfoEXT
x (Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO b
f Ptr ("bindInfo" ::: BindHeapInfoEXT)
p)
  pokeCStruct :: forall b.
Ptr ("bindInfo" ::: BindHeapInfoEXT)
-> ("bindInfo" ::: BindHeapInfoEXT) -> IO b -> IO b
pokeCStruct Ptr ("bindInfo" ::: BindHeapInfoEXT)
p BindHeapInfoEXT{DeviceSize
DeviceAddressRangeEXT
heapRange :: ("bindInfo" ::: BindHeapInfoEXT) -> DeviceAddressRangeEXT
reservedRangeOffset :: ("bindInfo" ::: BindHeapInfoEXT) -> DeviceSize
reservedRangeSize :: ("bindInfo" ::: BindHeapInfoEXT) -> DeviceSize
heapRange :: DeviceAddressRangeEXT
reservedRangeOffset :: DeviceSize
reservedRangeSize :: DeviceSize
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("bindInfo" ::: BindHeapInfoEXT)
p Ptr ("bindInfo" ::: BindHeapInfoEXT) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_BIND_HEAP_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("bindInfo" ::: BindHeapInfoEXT)
p Ptr ("bindInfo" ::: BindHeapInfoEXT) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr DeviceAddressRangeEXT -> DeviceAddressRangeEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("bindInfo" ::: BindHeapInfoEXT)
p Ptr ("bindInfo" ::: BindHeapInfoEXT)
-> Int -> Ptr DeviceAddressRangeEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceAddressRangeEXT)) (DeviceAddressRangeEXT
heapRange)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("bindInfo" ::: BindHeapInfoEXT)
p Ptr ("bindInfo" ::: BindHeapInfoEXT) -> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr DeviceSize)) (DeviceSize
reservedRangeOffset)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("bindInfo" ::: BindHeapInfoEXT)
p Ptr ("bindInfo" ::: BindHeapInfoEXT) -> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr DeviceSize)) (DeviceSize
reservedRangeSize)
    IO b
f
  cStructSize :: Int
cStructSize = Int
48
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO b -> IO b
pokeZeroCStruct Ptr ("bindInfo" ::: BindHeapInfoEXT)
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("bindInfo" ::: BindHeapInfoEXT)
p Ptr ("bindInfo" ::: BindHeapInfoEXT) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_BIND_HEAP_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("bindInfo" ::: BindHeapInfoEXT)
p Ptr ("bindInfo" ::: BindHeapInfoEXT) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr DeviceAddressRangeEXT -> DeviceAddressRangeEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("bindInfo" ::: BindHeapInfoEXT)
p Ptr ("bindInfo" ::: BindHeapInfoEXT)
-> Int -> Ptr DeviceAddressRangeEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceAddressRangeEXT)) (DeviceAddressRangeEXT
forall a. Zero a => a
zero)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("bindInfo" ::: BindHeapInfoEXT)
p Ptr ("bindInfo" ::: BindHeapInfoEXT) -> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr DeviceSize)) (DeviceSize
forall a. Zero a => a
zero)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("bindInfo" ::: BindHeapInfoEXT)
p Ptr ("bindInfo" ::: BindHeapInfoEXT) -> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr DeviceSize)) (DeviceSize
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct BindHeapInfoEXT where
  peekCStruct :: Ptr ("bindInfo" ::: BindHeapInfoEXT)
-> IO ("bindInfo" ::: BindHeapInfoEXT)
peekCStruct Ptr ("bindInfo" ::: BindHeapInfoEXT)
p = do
    heapRange <- forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @DeviceAddressRangeEXT ((Ptr ("bindInfo" ::: BindHeapInfoEXT)
p Ptr ("bindInfo" ::: BindHeapInfoEXT)
-> Int -> Ptr DeviceAddressRangeEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceAddressRangeEXT))
    reservedRangeOffset <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))
    reservedRangeSize <- peek @DeviceSize ((p `plusPtr` 40 :: Ptr DeviceSize))
    pure $ BindHeapInfoEXT
             heapRange reservedRangeOffset reservedRangeSize

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

instance Zero BindHeapInfoEXT where
  zero :: "bindInfo" ::: BindHeapInfoEXT
zero = DeviceAddressRangeEXT
-> DeviceSize -> DeviceSize -> "bindInfo" ::: BindHeapInfoEXT
BindHeapInfoEXT
           DeviceAddressRangeEXT
forall a. Zero a => a
zero
           DeviceSize
forall a. Zero a => a
zero
           DeviceSize
forall a. Zero a => a
zero


-- | VkPushDataInfoEXT - Structure specifying a push data update operation
--
-- == Valid Usage
--
-- -   #VUID-VkPushDataInfoEXT-offset-11243# The sum of @offset@ and
--     @data.size@ /must/ be less than or equal to
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-maxPushDataSize maxPushDataSize>
--
-- -   #VUID-VkPushDataInfoEXT-offset-11418# @offset@ /must/ be a multiple
--     of 4
--
-- -   #VUID-VkPushDataInfoEXT-data-11419# @data.size@ /must/ be a multiple
--     of 4
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkPushDataInfoEXT-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PUSH_DATA_INFO_EXT'
--
-- -   #VUID-VkPushDataInfoEXT-pNext-pNext# @pNext@ /must/ be @NULL@ or a
--     pointer to a valid instance of
--     'Vulkan.Extensions.VK_NV_push_constant_bank.PushConstantBankInfoNV'
--
-- -   #VUID-VkPushDataInfoEXT-sType-unique# The @sType@ value of each
--     structure in the @pNext@ chain /must/ be unique
--
-- -   #VUID-VkPushDataInfoEXT-data-parameter# @data@ /must/ be a valid
--     'HostAddressRangeConstEXT' structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'HostAddressRangeConstEXT',
-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'cmdPushDataEXT'
data PushDataInfoEXT (es :: [Type]) = PushDataInfoEXT
  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
    forall (es :: [*]). PushDataInfoEXT es -> Chain es
next :: Chain es
  , -- | @offset@ is the start offset of the push data range to update, in units
    -- of bytes.
    forall (es :: [*]). PushDataInfoEXT es -> Word32
offset :: Word32
  , -- | @data@ is the host address range containing the push data to update.
    forall (es :: [*]). PushDataInfoEXT es -> HostAddressRangeConstEXT
data' :: HostAddressRangeConstEXT
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PushDataInfoEXT (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (PushDataInfoEXT es)

instance Extensible PushDataInfoEXT where
  extensibleTypeName :: String
extensibleTypeName = String
"PushDataInfoEXT"
  setNext :: forall (ds :: [*]) (es :: [*]).
PushDataInfoEXT ds -> Chain es -> PushDataInfoEXT es
setNext PushDataInfoEXT{Word32
Chain ds
HostAddressRangeConstEXT
next :: forall (es :: [*]). PushDataInfoEXT es -> Chain es
offset :: forall (es :: [*]). PushDataInfoEXT es -> Word32
data' :: forall (es :: [*]). PushDataInfoEXT es -> HostAddressRangeConstEXT
next :: Chain ds
offset :: Word32
data' :: HostAddressRangeConstEXT
..} Chain es
next' = PushDataInfoEXT{next :: Chain es
next = Chain es
next', Word32
HostAddressRangeConstEXT
offset :: Word32
data' :: HostAddressRangeConstEXT
offset :: Word32
data' :: HostAddressRangeConstEXT
..}
  getNext :: forall (es :: [*]). PushDataInfoEXT es -> Chain es
getNext PushDataInfoEXT{Word32
Chain es
HostAddressRangeConstEXT
next :: forall (es :: [*]). PushDataInfoEXT es -> Chain es
offset :: forall (es :: [*]). PushDataInfoEXT es -> Word32
data' :: forall (es :: [*]). PushDataInfoEXT es -> HostAddressRangeConstEXT
next :: Chain es
offset :: Word32
data' :: HostAddressRangeConstEXT
..} = Chain es
next
  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PushDataInfoEXT e => b) -> Maybe b
  extends :: forall e b (proxy :: * -> *).
Typeable e =>
proxy e -> (Extends PushDataInfoEXT e => b) -> Maybe b
extends proxy e
_ Extends PushDataInfoEXT e => b
f
    | Just e :~: PushConstantBankInfoNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PushConstantBankInfoNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends PushDataInfoEXT e => b
f
    | Bool
otherwise = Maybe b
forall a. Maybe a
Nothing

instance ( Extendss PushDataInfoEXT es
         , PokeChain es ) => ToCStruct (PushDataInfoEXT es) where
  withCStruct :: forall b.
PushDataInfoEXT es -> (Ptr (PushDataInfoEXT es) -> IO b) -> IO b
withCStruct PushDataInfoEXT es
x Ptr (PushDataInfoEXT es) -> IO b
f = Int -> (Ptr (PushDataInfoEXT es) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 ((Ptr (PushDataInfoEXT es) -> IO b) -> IO b)
-> (Ptr (PushDataInfoEXT es) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (PushDataInfoEXT es)
p -> Ptr (PushDataInfoEXT es) -> PushDataInfoEXT es -> IO b -> IO b
forall b.
Ptr (PushDataInfoEXT es) -> PushDataInfoEXT es -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (PushDataInfoEXT es)
p PushDataInfoEXT es
x (Ptr (PushDataInfoEXT es) -> IO b
f Ptr (PushDataInfoEXT es)
p)
  pokeCStruct :: forall b.
Ptr (PushDataInfoEXT es) -> PushDataInfoEXT es -> IO b -> IO b
pokeCStruct Ptr (PushDataInfoEXT es)
p PushDataInfoEXT{Word32
Chain es
HostAddressRangeConstEXT
next :: forall (es :: [*]). PushDataInfoEXT es -> Chain es
offset :: forall (es :: [*]). PushDataInfoEXT es -> Word32
data' :: forall (es :: [*]). PushDataInfoEXT es -> HostAddressRangeConstEXT
next :: Chain es
offset :: Word32
data' :: HostAddressRangeConstEXT
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (PushDataInfoEXT es)
p Ptr (PushDataInfoEXT es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PUSH_DATA_INFO_EXT)
    pNext'' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (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 (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ Chain es -> (Ptr (Chain es) -> IO b) -> IO b
forall (es :: [*]) a.
PokeChain es =>
Chain es -> (Ptr (Chain es) -> IO a) -> IO a
forall a. Chain es -> (Ptr (Chain es) -> IO a) -> IO a
withChain (Chain es
next)
    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (offset)
    lift $ poke ((p `plusPtr` 24 :: Ptr HostAddressRangeConstEXT)) (data')
    lift $ f
  cStructSize :: Int
cStructSize = Int
40
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr (PushDataInfoEXT es) -> IO b -> IO b
pokeZeroCStruct Ptr (PushDataInfoEXT es)
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (PushDataInfoEXT es)
p Ptr (PushDataInfoEXT es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PUSH_DATA_INFO_EXT)
    pNext' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (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 (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ forall (es :: [*]) a.
PokeChain es =>
(Ptr (Chain es) -> IO a) -> IO a
withZeroChain @es
    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
    lift $ poke ((p `plusPtr` 24 :: Ptr HostAddressRangeConstEXT)) (zero)
    lift $ f

instance ( Extendss PushDataInfoEXT es
         , PeekChain es ) => FromCStruct (PushDataInfoEXT es) where
  peekCStruct :: Ptr (PushDataInfoEXT es) -> IO (PushDataInfoEXT es)
peekCStruct Ptr (PushDataInfoEXT es)
p = do
    pNext <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr (PushDataInfoEXT es)
p Ptr (PushDataInfoEXT es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ())))
    next <- peekChain (castPtr pNext)
    offset <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
    data' <- peekCStruct @HostAddressRangeConstEXT ((p `plusPtr` 24 :: Ptr HostAddressRangeConstEXT))
    pure $ PushDataInfoEXT
             next offset data'

instance es ~ '[] => Zero (PushDataInfoEXT es) where
  zero :: PushDataInfoEXT es
zero = Chain es
-> Word32 -> HostAddressRangeConstEXT -> PushDataInfoEXT es
forall (es :: [*]).
Chain es
-> Word32 -> HostAddressRangeConstEXT -> PushDataInfoEXT es
PushDataInfoEXT
           ()
           Word32
forall a. Zero a => a
zero
           HostAddressRangeConstEXT
forall a. Zero a => a
zero


-- | VkDescriptorMappingSourceConstantOffsetEXT - Structure specifying
-- mapping resources to a constant heap index
--
-- = Description
--
-- Resources using this mapping will be backed by a descriptor in the heap,
-- at an offset calculated as
--
-- -   shaderIndex = (Binding - @firstBinding@) + arrayIndex
--
-- -   offset = heapOffset + (shaderIndex * heapArrayStride)
--
-- where Binding is the binding value in the shader, arrayIndex is the
-- index into the array if the shader binding is declared as an array.
--
-- If the mapped resource is a @OpTypeSampledImage@, offset is instead
-- calculated for the sampler as
--
-- -   offset = samplerHeapOffset + (shaderIndex * samplerHeapArrayStride)
--
-- If the mapped resource is a @OpTypeSampler@ or @OpTypeSampledImage@, and
-- @pEmbeddedSampler@ is not @NULL@, the specified embedded sampler will be
-- used rather than accessing the sampler heap.
--
-- == Valid Usage
--
-- -   #VUID-VkDescriptorMappingSourceConstantOffsetEXT-pEmbeddedSampler-11445#
--     If @pEmbeddedSampler@ is a valid pointer to a
--     'Vulkan.Core10.Sampler.SamplerCreateInfo', its @borderColor@ /must/
--     not be
--     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_FLOAT_CUSTOM_EXT' or
--     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_INT_CUSTOM_EXT'
--
-- -   #VUID-VkDescriptorMappingSourceConstantOffsetEXT-pEmbeddedSampler-11415#
--     If @pEmbeddedSampler@ is a valid pointer to a
--     'Vulkan.Core10.Sampler.SamplerCreateInfo', and there is a
--     'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsObjectNameInfoEXT'
--     structure in its @pNext@ chain, its @objectType@ /must/ be
--     'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDescriptorMappingSourceConstantOffsetEXT-pEmbeddedSampler-parameter#
--     If @pEmbeddedSampler@ is not @NULL@, @pEmbeddedSampler@ /must/ be a
--     valid pointer to a valid 'Vulkan.Core10.Sampler.SamplerCreateInfo'
--     structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'DescriptorMappingSourceDataEXT',
-- 'Vulkan.Core10.Sampler.SamplerCreateInfo'
data DescriptorMappingSourceConstantOffsetEXT = DescriptorMappingSourceConstantOffsetEXT
  { -- | @heapOffset@ is a constant byte offset added to the heap address for the
    -- mapped resource or sampler.
    DescriptorMappingSourceConstantOffsetEXT -> Word32
heapOffset :: Word32
  , -- | @heapArrayStride@ is a constant byte stride that multiplies the shader
    -- binding and array index.
    DescriptorMappingSourceConstantOffsetEXT -> Word32
heapArrayStride :: Word32
  , -- | @pEmbeddedSampler@ is an optional
    -- 'Vulkan.Core10.Sampler.SamplerCreateInfo' structure specifying a sampler
    -- to embed into the shader, in place of looking the sampler up in a heap.
    DescriptorMappingSourceConstantOffsetEXT
-> Maybe (SomeStruct SamplerCreateInfo)
embeddedSampler :: Maybe (SomeStruct SamplerCreateInfo)
  , -- | @samplerHeapOffset@ is used only when mapping a combined image sampler,
    -- used in place of @heapOffset@ to retrieve the sampler.
    DescriptorMappingSourceConstantOffsetEXT -> Word32
samplerHeapOffset :: Word32
  , -- | @samplerHeapArrayStride@ is used only when mapping a combined image
    -- sampler, used in place of @heapArrayStride@ to retrieve the sampler.
    DescriptorMappingSourceConstantOffsetEXT -> Word32
samplerHeapArrayStride :: Word32
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DescriptorMappingSourceConstantOffsetEXT)
#endif
deriving instance Show DescriptorMappingSourceConstantOffsetEXT

instance ToCStruct DescriptorMappingSourceConstantOffsetEXT where
  withCStruct :: forall b.
DescriptorMappingSourceConstantOffsetEXT
-> (Ptr DescriptorMappingSourceConstantOffsetEXT -> IO b) -> IO b
withCStruct DescriptorMappingSourceConstantOffsetEXT
x Ptr DescriptorMappingSourceConstantOffsetEXT -> IO b
f = Int
-> (Ptr DescriptorMappingSourceConstantOffsetEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr DescriptorMappingSourceConstantOffsetEXT -> IO b) -> IO b)
-> (Ptr DescriptorMappingSourceConstantOffsetEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DescriptorMappingSourceConstantOffsetEXT
p -> Ptr DescriptorMappingSourceConstantOffsetEXT
-> DescriptorMappingSourceConstantOffsetEXT -> IO b -> IO b
forall b.
Ptr DescriptorMappingSourceConstantOffsetEXT
-> DescriptorMappingSourceConstantOffsetEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DescriptorMappingSourceConstantOffsetEXT
p DescriptorMappingSourceConstantOffsetEXT
x (Ptr DescriptorMappingSourceConstantOffsetEXT -> IO b
f Ptr DescriptorMappingSourceConstantOffsetEXT
p)
  pokeCStruct :: forall b.
Ptr DescriptorMappingSourceConstantOffsetEXT
-> DescriptorMappingSourceConstantOffsetEXT -> IO b -> IO b
pokeCStruct Ptr DescriptorMappingSourceConstantOffsetEXT
p DescriptorMappingSourceConstantOffsetEXT{Maybe (SomeStruct SamplerCreateInfo)
Word32
heapOffset :: DescriptorMappingSourceConstantOffsetEXT -> Word32
heapArrayStride :: DescriptorMappingSourceConstantOffsetEXT -> Word32
embeddedSampler :: DescriptorMappingSourceConstantOffsetEXT
-> Maybe (SomeStruct SamplerCreateInfo)
samplerHeapOffset :: DescriptorMappingSourceConstantOffsetEXT -> Word32
samplerHeapArrayStride :: DescriptorMappingSourceConstantOffsetEXT -> Word32
heapOffset :: Word32
heapArrayStride :: Word32
embeddedSampler :: Maybe (SomeStruct SamplerCreateInfo)
samplerHeapOffset :: Word32
samplerHeapArrayStride :: Word32
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceConstantOffsetEXT
p Ptr DescriptorMappingSourceConstantOffsetEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
heapOffset)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceConstantOffsetEXT
p Ptr DescriptorMappingSourceConstantOffsetEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) (Word32
heapArrayStride)
    pEmbeddedSampler'' <- case (Maybe (SomeStruct SamplerCreateInfo)
embeddedSampler) of
      Maybe (SomeStruct SamplerCreateInfo)
Nothing -> Ptr (SamplerCreateInfo '[])
-> ContT b IO (Ptr (SamplerCreateInfo '[]))
forall a. a -> ContT b IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr (SamplerCreateInfo '[])
forall a. Ptr a
nullPtr
      Just SomeStruct SamplerCreateInfo
j -> forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
forall r (m :: * -> *) a. ((a -> m r) -> m r) -> ContT r m a
ContT @_ @_ @(Ptr (SamplerCreateInfo '[])) (((Ptr (SamplerCreateInfo '[]) -> IO b) -> IO b)
 -> ContT b IO (Ptr (SamplerCreateInfo '[])))
-> ((Ptr (SamplerCreateInfo '[]) -> IO b) -> IO b)
-> ContT b IO (Ptr (SamplerCreateInfo '[]))
forall a b. (a -> b) -> a -> b
$ \Ptr (SamplerCreateInfo '[]) -> IO b
cont -> forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
SomeStruct a
-> (forall (es :: [*]).
    (Extendss a es, PokeChain es) =>
    Ptr (a es) -> IO b)
-> IO b
withSomeCStruct @SamplerCreateInfo (SomeStruct SamplerCreateInfo
j) (Ptr (SamplerCreateInfo '[]) -> IO b
cont (Ptr (SamplerCreateInfo '[]) -> IO b)
-> (Ptr (SamplerCreateInfo es) -> Ptr (SamplerCreateInfo '[]))
-> Ptr (SamplerCreateInfo es)
-> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (SamplerCreateInfo es) -> Ptr (SamplerCreateInfo '[])
forall a b. Ptr a -> Ptr b
castPtr)
    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr (SamplerCreateInfo _)))) pEmbeddedSampler''
    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (samplerHeapOffset)
    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (samplerHeapArrayStride)
    lift $ f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr DescriptorMappingSourceConstantOffsetEXT -> IO b -> IO b
pokeZeroCStruct Ptr DescriptorMappingSourceConstantOffsetEXT
p IO b
f = do
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceConstantOffsetEXT
p Ptr DescriptorMappingSourceConstantOffsetEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceConstantOffsetEXT
p Ptr DescriptorMappingSourceConstantOffsetEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceConstantOffsetEXT
p Ptr DescriptorMappingSourceConstantOffsetEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceConstantOffsetEXT
p Ptr DescriptorMappingSourceConstantOffsetEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct DescriptorMappingSourceConstantOffsetEXT where
  peekCStruct :: Ptr DescriptorMappingSourceConstantOffsetEXT
-> IO DescriptorMappingSourceConstantOffsetEXT
peekCStruct Ptr DescriptorMappingSourceConstantOffsetEXT
p = do
    heapOffset <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DescriptorMappingSourceConstantOffsetEXT
p Ptr DescriptorMappingSourceConstantOffsetEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32))
    heapArrayStride <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
    pEmbeddedSampler <- peek @(Ptr (SamplerCreateInfo _)) ((p `plusPtr` 8 :: Ptr (Ptr (SamplerCreateInfo _))))
    pEmbeddedSampler' <- maybePeek (\Ptr (SamplerCreateInfo (ZonkAny 5))
j -> Ptr (SomeStruct SamplerCreateInfo)
-> IO (SomeStruct SamplerCreateInfo)
forall (a :: [*] -> *).
(Extensible a,
 forall (es :: [*]).
 (Extendss a es, PeekChain es) =>
 FromCStruct (a es)) =>
Ptr (SomeStruct a) -> IO (SomeStruct a)
peekSomeCStruct (Ptr (SamplerCreateInfo (ZonkAny 5))
-> Ptr (SomeStruct SamplerCreateInfo)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (SamplerCreateInfo (ZonkAny 5))
j))) pEmbeddedSampler
    samplerHeapOffset <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
    samplerHeapArrayStride <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
    pure $ DescriptorMappingSourceConstantOffsetEXT
             heapOffset
             heapArrayStride
             pEmbeddedSampler'
             samplerHeapOffset
             samplerHeapArrayStride

instance Zero DescriptorMappingSourceConstantOffsetEXT where
  zero :: DescriptorMappingSourceConstantOffsetEXT
zero = Word32
-> Word32
-> Maybe (SomeStruct SamplerCreateInfo)
-> Word32
-> Word32
-> DescriptorMappingSourceConstantOffsetEXT
DescriptorMappingSourceConstantOffsetEXT
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Maybe (SomeStruct SamplerCreateInfo)
forall a. Maybe a
Nothing
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero


-- | VkDescriptorMappingSourcePushIndexEXT - Structure specifying mapping
-- resources to a heap index in push data
--
-- = Description
--
-- Resources using this mapping will be backed by a descriptor in the heap,
-- at an offset calculated as
--
-- -   pushIndex = ((uint32_t*)pPushData)[pushOffset\/4]
--
-- -   shaderIndex = (Binding - firstBinding) + arrayIndex
--
-- -   offset = heapOffset + (pushIndex × heapIndexStride) + (shaderIndex ×
--     heapArrayStride)
--
-- where Binding is the binding value in the shader, arrayIndex is the
-- index into the array if the shader binding is declared as an array, and
-- pPushData is the total set of push data specified by 'cmdPushDataEXT'.
--
-- If the mapped resource is a @OpTypeSampledImage@, offset is instead
-- calculated for the sampler as
--
-- -   samplerPushIndex = ((uint32_t*)pPushData)[samplerPushOffset\/4]
--
-- -   offset = samplerHeapOffset + (samplerPushIndex ×
--     samplerHeapIndexStride) + (shaderIndex × samplerHeapArrayStride)
--
-- If @useCombinedImageSamplerIndex@ is
-- 'Vulkan.Core10.FundamentalTypes.TRUE', and the mapped resource is a
-- @OpTypeSampledImage@, pushIndex and samplerPushIndex in the above
-- equations are instead calculated as
--
-- -   pushIndex = ((uint32_t*)pPushData)[pushOffset\/4] & 0xFFFFF
--
-- -   samplerPushIndex = (((uint32_t*)pPushData)[pushOffset\/4] >> 20) &
--     0xFFF
--
-- If the mapped resource is a @OpTypeSampler@ or @OpTypeSampledImage@, and
-- @pEmbeddedSampler@ is not @NULL@, the specified embedded sampler will be
-- used rather than accessing the sampler heap.
--
-- == Valid Usage
--
-- -   #VUID-VkDescriptorMappingSourcePushIndexEXT-pushOffset-11258#
--     @pushOffset@ /must/ be a multiple of 4
--
-- -   #VUID-VkDescriptorMappingSourcePushIndexEXT-pushOffset-11259#
--     @pushOffset@ /must/ be less than or equal to @maxPushDataSize@ - 4
--
-- -   #VUID-VkDescriptorMappingSourcePushIndexEXT-pEmbeddedSampler-11446#
--     If @pEmbeddedSampler@ is a valid pointer to a
--     'Vulkan.Core10.Sampler.SamplerCreateInfo', its @borderColor@ /must/
--     not be
--     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_FLOAT_CUSTOM_EXT' or
--     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_INT_CUSTOM_EXT'
--
-- -   #VUID-VkDescriptorMappingSourcePushIndexEXT-pEmbeddedSampler-11402#
--     If @pEmbeddedSampler@ is a valid pointer to a
--     'Vulkan.Core10.Sampler.SamplerCreateInfo', and there is a
--     'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsObjectNameInfoEXT'
--     structure in its @pNext@ chain, its @objectType@ /must/ be
--     'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDescriptorMappingSourcePushIndexEXT-pEmbeddedSampler-parameter#
--     If @pEmbeddedSampler@ is not @NULL@, @pEmbeddedSampler@ /must/ be a
--     valid pointer to a valid 'Vulkan.Core10.Sampler.SamplerCreateInfo'
--     structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'DescriptorMappingSourceDataEXT',
-- 'Vulkan.Core10.Sampler.SamplerCreateInfo'
data DescriptorMappingSourcePushIndexEXT = DescriptorMappingSourcePushIndexEXT
  { -- | @heapOffset@ is a constant byte offset added to the heap address for the
    -- mapped resource or sampler.
    DescriptorMappingSourcePushIndexEXT -> Word32
heapOffset :: Word32
  , -- | @pushOffset@ is an index into push data where an index into the heap for
    -- the mapped resource will be retrieved.
    DescriptorMappingSourcePushIndexEXT -> Word32
pushOffset :: Word32
  , -- | @heapIndexStride@ is a constant byte stride that multiplies the index in
    -- push data.
    DescriptorMappingSourcePushIndexEXT -> Word32
heapIndexStride :: Word32
  , -- | @heapArrayStride@ is a constant byte stride that multiplies the shader
    -- binding and array index.
    DescriptorMappingSourcePushIndexEXT -> Word32
heapArrayStride :: Word32
  , -- | @pEmbeddedSampler@ is an optional
    -- 'Vulkan.Core10.Sampler.SamplerCreateInfo' structure specifying a sampler
    -- to embed into the shader, in place of looking the sampler up in a heap.
    DescriptorMappingSourcePushIndexEXT
-> Maybe (SomeStruct SamplerCreateInfo)
embeddedSampler :: Maybe (SomeStruct SamplerCreateInfo)
  , -- | @useCombinedImageSamplerIndex@ specifies whether the generated index
    -- value will be decoded as two packed indices if the mapped resource is an
    -- @OpTypeSampledImage@.
    DescriptorMappingSourcePushIndexEXT -> Bool
useCombinedImageSamplerIndex :: Bool
  , -- | @samplerHeapOffset@ is used only when mapping a combined image sampler,
    -- used in place of @heapOffset@ to retrieve the sampler.
    DescriptorMappingSourcePushIndexEXT -> Word32
samplerHeapOffset :: Word32
  , -- | @samplerPushOffset@ is used only when mapping a combined image sampler,
    -- used in place of @pushOffset@ to retrieve the sampler.
    DescriptorMappingSourcePushIndexEXT -> Word32
samplerPushOffset :: Word32
  , -- | @samplerHeapIndexStride@ is used only when mapping a combined image
    -- sampler, used in place of @heapIndexStride@ to retrieve the sampler.
    DescriptorMappingSourcePushIndexEXT -> Word32
samplerHeapIndexStride :: Word32
  , -- | @samplerHeapArrayStride@ is used only when mapping a combined image
    -- sampler, used in place of @heapArrayStride@ to retrieve the sampler.
    DescriptorMappingSourcePushIndexEXT -> Word32
samplerHeapArrayStride :: Word32
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DescriptorMappingSourcePushIndexEXT)
#endif
deriving instance Show DescriptorMappingSourcePushIndexEXT

instance ToCStruct DescriptorMappingSourcePushIndexEXT where
  withCStruct :: forall b.
DescriptorMappingSourcePushIndexEXT
-> (Ptr DescriptorMappingSourcePushIndexEXT -> IO b) -> IO b
withCStruct DescriptorMappingSourcePushIndexEXT
x Ptr DescriptorMappingSourcePushIndexEXT -> IO b
f = Int -> (Ptr DescriptorMappingSourcePushIndexEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
48 ((Ptr DescriptorMappingSourcePushIndexEXT -> IO b) -> IO b)
-> (Ptr DescriptorMappingSourcePushIndexEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DescriptorMappingSourcePushIndexEXT
p -> Ptr DescriptorMappingSourcePushIndexEXT
-> DescriptorMappingSourcePushIndexEXT -> IO b -> IO b
forall b.
Ptr DescriptorMappingSourcePushIndexEXT
-> DescriptorMappingSourcePushIndexEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DescriptorMappingSourcePushIndexEXT
p DescriptorMappingSourcePushIndexEXT
x (Ptr DescriptorMappingSourcePushIndexEXT -> IO b
f Ptr DescriptorMappingSourcePushIndexEXT
p)
  pokeCStruct :: forall b.
Ptr DescriptorMappingSourcePushIndexEXT
-> DescriptorMappingSourcePushIndexEXT -> IO b -> IO b
pokeCStruct Ptr DescriptorMappingSourcePushIndexEXT
p DescriptorMappingSourcePushIndexEXT{Bool
Maybe (SomeStruct SamplerCreateInfo)
Word32
heapOffset :: DescriptorMappingSourcePushIndexEXT -> Word32
pushOffset :: DescriptorMappingSourcePushIndexEXT -> Word32
heapIndexStride :: DescriptorMappingSourcePushIndexEXT -> Word32
heapArrayStride :: DescriptorMappingSourcePushIndexEXT -> Word32
embeddedSampler :: DescriptorMappingSourcePushIndexEXT
-> Maybe (SomeStruct SamplerCreateInfo)
useCombinedImageSamplerIndex :: DescriptorMappingSourcePushIndexEXT -> Bool
samplerHeapOffset :: DescriptorMappingSourcePushIndexEXT -> Word32
samplerPushOffset :: DescriptorMappingSourcePushIndexEXT -> Word32
samplerHeapIndexStride :: DescriptorMappingSourcePushIndexEXT -> Word32
samplerHeapArrayStride :: DescriptorMappingSourcePushIndexEXT -> Word32
heapOffset :: Word32
pushOffset :: Word32
heapIndexStride :: Word32
heapArrayStride :: Word32
embeddedSampler :: Maybe (SomeStruct SamplerCreateInfo)
useCombinedImageSamplerIndex :: Bool
samplerHeapOffset :: Word32
samplerPushOffset :: Word32
samplerHeapIndexStride :: Word32
samplerHeapArrayStride :: Word32
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourcePushIndexEXT
p Ptr DescriptorMappingSourcePushIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
heapOffset)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourcePushIndexEXT
p Ptr DescriptorMappingSourcePushIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) (Word32
pushOffset)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourcePushIndexEXT
p Ptr DescriptorMappingSourcePushIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) (Word32
heapIndexStride)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourcePushIndexEXT
p Ptr DescriptorMappingSourcePushIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32)) (Word32
heapArrayStride)
    pEmbeddedSampler'' <- case (Maybe (SomeStruct SamplerCreateInfo)
embeddedSampler) of
      Maybe (SomeStruct SamplerCreateInfo)
Nothing -> Ptr (SamplerCreateInfo '[])
-> ContT b IO (Ptr (SamplerCreateInfo '[]))
forall a. a -> ContT b IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr (SamplerCreateInfo '[])
forall a. Ptr a
nullPtr
      Just SomeStruct SamplerCreateInfo
j -> forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
forall r (m :: * -> *) a. ((a -> m r) -> m r) -> ContT r m a
ContT @_ @_ @(Ptr (SamplerCreateInfo '[])) (((Ptr (SamplerCreateInfo '[]) -> IO b) -> IO b)
 -> ContT b IO (Ptr (SamplerCreateInfo '[])))
-> ((Ptr (SamplerCreateInfo '[]) -> IO b) -> IO b)
-> ContT b IO (Ptr (SamplerCreateInfo '[]))
forall a b. (a -> b) -> a -> b
$ \Ptr (SamplerCreateInfo '[]) -> IO b
cont -> forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
SomeStruct a
-> (forall (es :: [*]).
    (Extendss a es, PokeChain es) =>
    Ptr (a es) -> IO b)
-> IO b
withSomeCStruct @SamplerCreateInfo (SomeStruct SamplerCreateInfo
j) (Ptr (SamplerCreateInfo '[]) -> IO b
cont (Ptr (SamplerCreateInfo '[]) -> IO b)
-> (Ptr (SamplerCreateInfo es) -> Ptr (SamplerCreateInfo '[]))
-> Ptr (SamplerCreateInfo es)
-> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (SamplerCreateInfo es) -> Ptr (SamplerCreateInfo '[])
forall a b. Ptr a -> Ptr b
castPtr)
    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr (SamplerCreateInfo _)))) pEmbeddedSampler''
    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (useCombinedImageSamplerIndex))
    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (samplerHeapOffset)
    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (samplerPushOffset)
    lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) (samplerHeapIndexStride)
    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) (samplerHeapArrayStride)
    lift $ f
  cStructSize :: Int
cStructSize = Int
48
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr DescriptorMappingSourcePushIndexEXT -> IO b -> IO b
pokeZeroCStruct Ptr DescriptorMappingSourcePushIndexEXT
p IO b
f = do
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourcePushIndexEXT
p Ptr DescriptorMappingSourcePushIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourcePushIndexEXT
p Ptr DescriptorMappingSourcePushIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourcePushIndexEXT
p Ptr DescriptorMappingSourcePushIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourcePushIndexEXT
p Ptr DescriptorMappingSourcePushIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourcePushIndexEXT
p Ptr DescriptorMappingSourcePushIndexEXT -> 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 Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourcePushIndexEXT
p Ptr DescriptorMappingSourcePushIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourcePushIndexEXT
p Ptr DescriptorMappingSourcePushIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourcePushIndexEXT
p Ptr DescriptorMappingSourcePushIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
36 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourcePushIndexEXT
p Ptr DescriptorMappingSourcePushIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct DescriptorMappingSourcePushIndexEXT where
  peekCStruct :: Ptr DescriptorMappingSourcePushIndexEXT
-> IO DescriptorMappingSourcePushIndexEXT
peekCStruct Ptr DescriptorMappingSourcePushIndexEXT
p = do
    heapOffset <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DescriptorMappingSourcePushIndexEXT
p Ptr DescriptorMappingSourcePushIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32))
    pushOffset <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
    heapIndexStride <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
    heapArrayStride <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
    pEmbeddedSampler <- peek @(Ptr (SamplerCreateInfo _)) ((p `plusPtr` 16 :: Ptr (Ptr (SamplerCreateInfo _))))
    pEmbeddedSampler' <- maybePeek (\Ptr (SamplerCreateInfo (ZonkAny 6))
j -> Ptr (SomeStruct SamplerCreateInfo)
-> IO (SomeStruct SamplerCreateInfo)
forall (a :: [*] -> *).
(Extensible a,
 forall (es :: [*]).
 (Extendss a es, PeekChain es) =>
 FromCStruct (a es)) =>
Ptr (SomeStruct a) -> IO (SomeStruct a)
peekSomeCStruct (Ptr (SamplerCreateInfo (ZonkAny 6))
-> Ptr (SomeStruct SamplerCreateInfo)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (SamplerCreateInfo (ZonkAny 6))
j))) pEmbeddedSampler
    useCombinedImageSamplerIndex <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
    samplerHeapOffset <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
    samplerPushOffset <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
    samplerHeapIndexStride <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
    samplerHeapArrayStride <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
    pure $ DescriptorMappingSourcePushIndexEXT
             heapOffset
             pushOffset
             heapIndexStride
             heapArrayStride
             pEmbeddedSampler'
             (bool32ToBool useCombinedImageSamplerIndex)
             samplerHeapOffset
             samplerPushOffset
             samplerHeapIndexStride
             samplerHeapArrayStride

instance Zero DescriptorMappingSourcePushIndexEXT where
  zero :: DescriptorMappingSourcePushIndexEXT
zero = Word32
-> Word32
-> Word32
-> Word32
-> Maybe (SomeStruct SamplerCreateInfo)
-> Bool
-> Word32
-> Word32
-> Word32
-> Word32
-> DescriptorMappingSourcePushIndexEXT
DescriptorMappingSourcePushIndexEXT
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Maybe (SomeStruct SamplerCreateInfo)
forall a. Maybe a
Nothing
           Bool
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero


-- | VkDescriptorMappingSourceIndirectIndexEXT - Structure specifying mapping
-- resources to a heap index in indirect data
--
-- = Description
--
-- Resources using this mapping will be backed by a descriptor in the heap,
-- at an offset calculated as
--
-- -   uint32_t *indirectAddress =
--     ((VkDeviceAddress*)pPushData)[pushOffset\/8]
--
-- -   indirectIndex = indirectAddress[(addressOffset \/ 4)]
--
-- -   shaderIndex = (Binding - firstBinding) + arrayIndex
--
-- -   offset = heapOffset + (indirectIndex × heapIndexStride) +
--     (shaderIndex × heapArrayStride)
--
-- where Binding is the binding value in the shader, arrayIndex is the
-- index into the array if the shader binding is declared as an array, and
-- pPushData is the total set of push data specified by 'cmdPushDataEXT'.
-- The value of the address in push data /must/ be a multiple of 4. Index
-- reads through indirectAddress are performed as non-volatile uniform
-- buffer reads, and can be synchronized using
-- 'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_UNIFORM_READ_BIT'. The value
-- in memory /must/ remain static while any shader invocation using this
-- mapping is in flight to avoid a data race.
--
-- If the mapped resource is a @OpTypeSampledImage@, offset is instead
-- calculated for the sampler as
--
-- -   uint32_t *samplerIndirectAddress =
--     ((VkDeviceAddress*)pPushData)[samplerPushOffset\/8]
--
-- -   samplerIndirectIndex = samplerIndirectAddress[(samplerAddressOffset
--     \/ 4)]
--
-- -   offset = samplerHeapOffset + (samplerIndirectIndex ×
--     samplerHeapIndexStride) + (shaderIndex × samplerHeapArrayStride)
--
-- If @useCombinedImageSamplerIndex@ is
-- 'Vulkan.Core10.FundamentalTypes.TRUE', and the mapped resource is a
-- @OpTypeSampledImage@, indirectIndex and samplerIndirectIndex in the
-- above equations are instead calculated as
--
-- -   indirectIndex = indirectAddress[addressOffset\/4] & 0xFFFFF
--
-- -   samplerIndirectIndex = indirectAddress[addressOffset\/4] >> 20) &
--     0xFFF
--
-- If the mapped resource is a @OpTypeSampler@ or @OpTypeSampledImage@, and
-- @pEmbeddedSampler@ is not @NULL@, the specified embedded sampler will be
-- used rather than accessing the sampler heap.
--
-- == Valid Usage
--
-- -   #VUID-VkDescriptorMappingSourceIndirectIndexEXT-pushOffset-11260#
--     @pushOffset@ /must/ be a multiple of 8
--
-- -   #VUID-VkDescriptorMappingSourceIndirectIndexEXT-pushOffset-11261#
--     @pushOffset@ /must/ be less than or equal to @maxPushDataSize@ - 8
--
-- -   #VUID-VkDescriptorMappingSourceIndirectIndexEXT-addressOffset-11262#
--     @addressOffset@ /must/ be a multiple of 4
--
-- -   #VUID-VkDescriptorMappingSourceIndirectIndexEXT-pEmbeddedSampler-11447#
--     If @pEmbeddedSampler@ is a valid pointer to a
--     'Vulkan.Core10.Sampler.SamplerCreateInfo', its @borderColor@ /must/
--     not be
--     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_FLOAT_CUSTOM_EXT' or
--     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_INT_CUSTOM_EXT'
--
-- -   #VUID-VkDescriptorMappingSourceIndirectIndexEXT-pEmbeddedSampler-11403#
--     If @pEmbeddedSampler@ is a valid pointer to a
--     'Vulkan.Core10.Sampler.SamplerCreateInfo', and there is a
--     'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsObjectNameInfoEXT'
--     structure in its @pNext@ chain, its @objectType@ /must/ be
--     'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDescriptorMappingSourceIndirectIndexEXT-pEmbeddedSampler-parameter#
--     If @pEmbeddedSampler@ is not @NULL@, @pEmbeddedSampler@ /must/ be a
--     valid pointer to a valid 'Vulkan.Core10.Sampler.SamplerCreateInfo'
--     structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'DescriptorMappingSourceDataEXT',
-- 'Vulkan.Core10.Sampler.SamplerCreateInfo'
data DescriptorMappingSourceIndirectIndexEXT = DescriptorMappingSourceIndirectIndexEXT
  { -- | @heapOffset@ is a constant byte offset added to the heap address for the
    -- mapped resource or sampler.
    DescriptorMappingSourceIndirectIndexEXT -> Word32
heapOffset :: Word32
  , -- | @pushOffset@ is an offset into push data where an the indirect address
    -- will be.
    DescriptorMappingSourceIndirectIndexEXT -> Word32
pushOffset :: Word32
  , -- | @addressOffset@ is an index into the address in push data where an index
    -- into the heap for the mapped resource will be retrieved.
    DescriptorMappingSourceIndirectIndexEXT -> Word32
addressOffset :: Word32
  , -- | @heapIndexStride@ is a constant byte stride that multiplies the index in
    -- indirect data.
    DescriptorMappingSourceIndirectIndexEXT -> Word32
heapIndexStride :: Word32
  , -- | @heapArrayStride@ is a constant byte stride that multiplies the shader
    -- binding and array index.
    DescriptorMappingSourceIndirectIndexEXT -> Word32
heapArrayStride :: Word32
  , -- | @pEmbeddedSampler@ is an optional
    -- 'Vulkan.Core10.Sampler.SamplerCreateInfo' structure specifying a sampler
    -- to embed into the shader, in place of looking the sampler up in a heap.
    DescriptorMappingSourceIndirectIndexEXT
-> Maybe (SomeStruct SamplerCreateInfo)
embeddedSampler :: Maybe (SomeStruct SamplerCreateInfo)
  , -- | @useCombinedImageSamplerIndex@ specifies whether the generated index
    -- value will be decoded as two packed indices if the mapped resource is an
    -- @OpTypeSampledImage@.
    DescriptorMappingSourceIndirectIndexEXT -> Bool
useCombinedImageSamplerIndex :: Bool
  , -- | @samplerHeapOffset@ is used only when mapping a combined image sampler,
    -- used in place of @heapOffset@ to retrieve the sampler.
    DescriptorMappingSourceIndirectIndexEXT -> Word32
samplerHeapOffset :: Word32
  , -- | @samplerPushOffset@ is used only when mapping a combined image sampler,
    -- used in place of @pushOffset@ to retrieve the sampler.
    DescriptorMappingSourceIndirectIndexEXT -> Word32
samplerPushOffset :: Word32
  , -- | @samplerAddressOffset@ is used only when mapping a combined image
    -- sampler, used in place of @addressOffset@ to retrieve the sampler.
    DescriptorMappingSourceIndirectIndexEXT -> Word32
samplerAddressOffset :: Word32
  , -- | @samplerHeapIndexStride@ is used only when mapping a combined image
    -- sampler, used in place of @heapIndexStride@ to retrieve the sampler.
    DescriptorMappingSourceIndirectIndexEXT -> Word32
samplerHeapIndexStride :: Word32
  , -- | @samplerHeapArrayStride@ is used only when mapping a combined image
    -- sampler, used in place of @heapArrayStride@ to retrieve the sampler.
    DescriptorMappingSourceIndirectIndexEXT -> Word32
samplerHeapArrayStride :: Word32
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DescriptorMappingSourceIndirectIndexEXT)
#endif
deriving instance Show DescriptorMappingSourceIndirectIndexEXT

instance ToCStruct DescriptorMappingSourceIndirectIndexEXT where
  withCStruct :: forall b.
DescriptorMappingSourceIndirectIndexEXT
-> (Ptr DescriptorMappingSourceIndirectIndexEXT -> IO b) -> IO b
withCStruct DescriptorMappingSourceIndirectIndexEXT
x Ptr DescriptorMappingSourceIndirectIndexEXT -> IO b
f = Int
-> (Ptr DescriptorMappingSourceIndirectIndexEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
56 ((Ptr DescriptorMappingSourceIndirectIndexEXT -> IO b) -> IO b)
-> (Ptr DescriptorMappingSourceIndirectIndexEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DescriptorMappingSourceIndirectIndexEXT
p -> Ptr DescriptorMappingSourceIndirectIndexEXT
-> DescriptorMappingSourceIndirectIndexEXT -> IO b -> IO b
forall b.
Ptr DescriptorMappingSourceIndirectIndexEXT
-> DescriptorMappingSourceIndirectIndexEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DescriptorMappingSourceIndirectIndexEXT
p DescriptorMappingSourceIndirectIndexEXT
x (Ptr DescriptorMappingSourceIndirectIndexEXT -> IO b
f Ptr DescriptorMappingSourceIndirectIndexEXT
p)
  pokeCStruct :: forall b.
Ptr DescriptorMappingSourceIndirectIndexEXT
-> DescriptorMappingSourceIndirectIndexEXT -> IO b -> IO b
pokeCStruct Ptr DescriptorMappingSourceIndirectIndexEXT
p DescriptorMappingSourceIndirectIndexEXT{Bool
Maybe (SomeStruct SamplerCreateInfo)
Word32
heapOffset :: DescriptorMappingSourceIndirectIndexEXT -> Word32
pushOffset :: DescriptorMappingSourceIndirectIndexEXT -> Word32
addressOffset :: DescriptorMappingSourceIndirectIndexEXT -> Word32
heapIndexStride :: DescriptorMappingSourceIndirectIndexEXT -> Word32
heapArrayStride :: DescriptorMappingSourceIndirectIndexEXT -> Word32
embeddedSampler :: DescriptorMappingSourceIndirectIndexEXT
-> Maybe (SomeStruct SamplerCreateInfo)
useCombinedImageSamplerIndex :: DescriptorMappingSourceIndirectIndexEXT -> Bool
samplerHeapOffset :: DescriptorMappingSourceIndirectIndexEXT -> Word32
samplerPushOffset :: DescriptorMappingSourceIndirectIndexEXT -> Word32
samplerAddressOffset :: DescriptorMappingSourceIndirectIndexEXT -> Word32
samplerHeapIndexStride :: DescriptorMappingSourceIndirectIndexEXT -> Word32
samplerHeapArrayStride :: DescriptorMappingSourceIndirectIndexEXT -> Word32
heapOffset :: Word32
pushOffset :: Word32
addressOffset :: Word32
heapIndexStride :: Word32
heapArrayStride :: Word32
embeddedSampler :: Maybe (SomeStruct SamplerCreateInfo)
useCombinedImageSamplerIndex :: Bool
samplerHeapOffset :: Word32
samplerPushOffset :: Word32
samplerAddressOffset :: Word32
samplerHeapIndexStride :: Word32
samplerHeapArrayStride :: Word32
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexEXT
p Ptr DescriptorMappingSourceIndirectIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
heapOffset)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexEXT
p Ptr DescriptorMappingSourceIndirectIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) (Word32
pushOffset)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexEXT
p Ptr DescriptorMappingSourceIndirectIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) (Word32
addressOffset)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexEXT
p Ptr DescriptorMappingSourceIndirectIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32)) (Word32
heapIndexStride)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexEXT
p Ptr DescriptorMappingSourceIndirectIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Word32
heapArrayStride)
    pEmbeddedSampler'' <- case (Maybe (SomeStruct SamplerCreateInfo)
embeddedSampler) of
      Maybe (SomeStruct SamplerCreateInfo)
Nothing -> Ptr (SamplerCreateInfo '[])
-> ContT b IO (Ptr (SamplerCreateInfo '[]))
forall a. a -> ContT b IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr (SamplerCreateInfo '[])
forall a. Ptr a
nullPtr
      Just SomeStruct SamplerCreateInfo
j -> forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
forall r (m :: * -> *) a. ((a -> m r) -> m r) -> ContT r m a
ContT @_ @_ @(Ptr (SamplerCreateInfo '[])) (((Ptr (SamplerCreateInfo '[]) -> IO b) -> IO b)
 -> ContT b IO (Ptr (SamplerCreateInfo '[])))
-> ((Ptr (SamplerCreateInfo '[]) -> IO b) -> IO b)
-> ContT b IO (Ptr (SamplerCreateInfo '[]))
forall a b. (a -> b) -> a -> b
$ \Ptr (SamplerCreateInfo '[]) -> IO b
cont -> forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
SomeStruct a
-> (forall (es :: [*]).
    (Extendss a es, PokeChain es) =>
    Ptr (a es) -> IO b)
-> IO b
withSomeCStruct @SamplerCreateInfo (SomeStruct SamplerCreateInfo
j) (Ptr (SamplerCreateInfo '[]) -> IO b
cont (Ptr (SamplerCreateInfo '[]) -> IO b)
-> (Ptr (SamplerCreateInfo es) -> Ptr (SamplerCreateInfo '[]))
-> Ptr (SamplerCreateInfo es)
-> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (SamplerCreateInfo es) -> Ptr (SamplerCreateInfo '[])
forall a b. Ptr a -> Ptr b
castPtr)
    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (SamplerCreateInfo _)))) pEmbeddedSampler''
    lift $ poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (useCombinedImageSamplerIndex))
    lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) (samplerHeapOffset)
    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) (samplerPushOffset)
    lift $ poke ((p `plusPtr` 44 :: Ptr Word32)) (samplerAddressOffset)
    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (samplerHeapIndexStride)
    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) (samplerHeapArrayStride)
    lift $ f
  cStructSize :: Int
cStructSize = Int
56
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr DescriptorMappingSourceIndirectIndexEXT -> IO b -> IO b
pokeZeroCStruct Ptr DescriptorMappingSourceIndirectIndexEXT
p IO b
f = do
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexEXT
p Ptr DescriptorMappingSourceIndirectIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexEXT
p Ptr DescriptorMappingSourceIndirectIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexEXT
p Ptr DescriptorMappingSourceIndirectIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexEXT
p Ptr DescriptorMappingSourceIndirectIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexEXT
p Ptr DescriptorMappingSourceIndirectIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexEXT
p Ptr DescriptorMappingSourceIndirectIndexEXT -> 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))
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexEXT
p Ptr DescriptorMappingSourceIndirectIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
36 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexEXT
p Ptr DescriptorMappingSourceIndirectIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexEXT
p Ptr DescriptorMappingSourceIndirectIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
44 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexEXT
p Ptr DescriptorMappingSourceIndirectIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexEXT
p Ptr DescriptorMappingSourceIndirectIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct DescriptorMappingSourceIndirectIndexEXT where
  peekCStruct :: Ptr DescriptorMappingSourceIndirectIndexEXT
-> IO DescriptorMappingSourceIndirectIndexEXT
peekCStruct Ptr DescriptorMappingSourceIndirectIndexEXT
p = do
    heapOffset <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DescriptorMappingSourceIndirectIndexEXT
p Ptr DescriptorMappingSourceIndirectIndexEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32))
    pushOffset <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
    addressOffset <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
    heapIndexStride <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
    heapArrayStride <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
    pEmbeddedSampler <- peek @(Ptr (SamplerCreateInfo _)) ((p `plusPtr` 24 :: Ptr (Ptr (SamplerCreateInfo _))))
    pEmbeddedSampler' <- maybePeek (\Ptr (SamplerCreateInfo (ZonkAny 7))
j -> Ptr (SomeStruct SamplerCreateInfo)
-> IO (SomeStruct SamplerCreateInfo)
forall (a :: [*] -> *).
(Extensible a,
 forall (es :: [*]).
 (Extendss a es, PeekChain es) =>
 FromCStruct (a es)) =>
Ptr (SomeStruct a) -> IO (SomeStruct a)
peekSomeCStruct (Ptr (SamplerCreateInfo (ZonkAny 7))
-> Ptr (SomeStruct SamplerCreateInfo)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (SamplerCreateInfo (ZonkAny 7))
j))) pEmbeddedSampler
    useCombinedImageSamplerIndex <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
    samplerHeapOffset <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
    samplerPushOffset <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
    samplerAddressOffset <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))
    samplerHeapIndexStride <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
    samplerHeapArrayStride <- peek @Word32 ((p `plusPtr` 52 :: Ptr Word32))
    pure $ DescriptorMappingSourceIndirectIndexEXT
             heapOffset
             pushOffset
             addressOffset
             heapIndexStride
             heapArrayStride
             pEmbeddedSampler'
             (bool32ToBool useCombinedImageSamplerIndex)
             samplerHeapOffset
             samplerPushOffset
             samplerAddressOffset
             samplerHeapIndexStride
             samplerHeapArrayStride

instance Zero DescriptorMappingSourceIndirectIndexEXT where
  zero :: DescriptorMappingSourceIndirectIndexEXT
zero = Word32
-> Word32
-> Word32
-> Word32
-> Word32
-> Maybe (SomeStruct SamplerCreateInfo)
-> Bool
-> Word32
-> Word32
-> Word32
-> Word32
-> Word32
-> DescriptorMappingSourceIndirectIndexEXT
DescriptorMappingSourceIndirectIndexEXT
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Maybe (SomeStruct SamplerCreateInfo)
forall a. Maybe a
Nothing
           Bool
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero


-- | VkDescriptorMappingSourceIndirectIndexArrayEXT - Structure specifying
-- mapping resources to a heap index array in indirect data
--
-- = Description
--
-- Resources using this mapping will be backed by a descriptor in the heap,
-- at an offset calculated as
--
-- -   uint32_t *indirectAddress =
--     ((VkDeviceAddress*)pPushData)[pushOffset\/8]
--
-- -   shaderIndex = (Binding - firstBinding) + arrayIndex
--
-- -   indirectIndex = indirectAddress[(addressOffset \/ 4) + shaderIndex]
--
-- -   offset = heapOffset + (indirectIndex × heapIndexStride)
--
-- where Binding is the binding value in the shader, arrayIndex is the
-- index into the array if the shader binding is declared as an array, and
-- pPushData is the total set of push data specified by 'cmdPushDataEXT'.
-- The value of the address in push data /must/ be a multiple of 4. Index
-- reads through indirectAddress are performed as non-volatile uniform
-- buffer reads, and can be synchronized using
-- 'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_UNIFORM_READ_BIT'. The value
-- in memory /must/ remain static while any shader invocation using this
-- mapping is in flight to avoid a data race.
--
-- If the mapped resource is a @OpTypeSampledImage@, offset is instead
-- calculated for the sampler as
--
-- -   uint32_t *samplerIndirectAddress =
--     ((VkDeviceAddress*)pPushData)[samplerPushOffset\/8]
--
-- -   samplerIndirectIndex = samplerAddr[(samplerAddressOffset \/ 4) +
--     shaderIndex]
--
-- -   offset = samplerHeapOffset + (samplerIndirectIndex ×
--     samplerHeapIndexStride)
--
-- If @useCombinedImageSamplerIndex@ is
-- 'Vulkan.Core10.FundamentalTypes.TRUE', and the mapped resource is a
-- @OpTypeSampledImage@, indirectIndex and samplerIndirectIndex in the
-- above equations are instead calculated as
--
-- -   indirectIndex = indirectAddress[addressOffset\/4 + shaderIndex] &
--     0xFFFFF
--
-- -   samplerIndirectIndex = indirectAddress[addressOffset\/4 +
--     shaderIndex] >> 20) & 0xFFF
--
-- If the mapped resource is a @OpTypeSampler@ or @OpTypeSampledImage@, and
-- @pEmbeddedSampler@ is not @NULL@, the specified embedded sampler will be
-- used rather than accessing the sampler heap.
--
-- == Valid Usage
--
-- -   #VUID-VkDescriptorMappingSourceIndirectIndexArrayEXT-pushOffset-11359#
--     @pushOffset@ /must/ be a multiple of 8
--
-- -   #VUID-VkDescriptorMappingSourceIndirectIndexArrayEXT-pushOffset-11360#
--     @pushOffset@ /must/ be less than or equal to @maxPushDataSize@ - 8
--
-- -   #VUID-VkDescriptorMappingSourceIndirectIndexArrayEXT-addressOffset-11361#
--     @addressOffset@ /must/ be a multiple of 4
--
-- -   #VUID-VkDescriptorMappingSourceIndirectIndexArrayEXT-pEmbeddedSampler-11448#
--     If @pEmbeddedSampler@ is a valid pointer to a
--     'Vulkan.Core10.Sampler.SamplerCreateInfo', its @borderColor@ /must/
--     not be
--     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_FLOAT_CUSTOM_EXT' or
--     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_INT_CUSTOM_EXT'
--
-- -   #VUID-VkDescriptorMappingSourceIndirectIndexArrayEXT-pEmbeddedSampler-11404#
--     If @pEmbeddedSampler@ is a valid pointer to a
--     'Vulkan.Core10.Sampler.SamplerCreateInfo', and there is a
--     'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsObjectNameInfoEXT'
--     structure in its @pNext@ chain, its @objectType@ /must/ be
--     'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDescriptorMappingSourceIndirectIndexArrayEXT-pEmbeddedSampler-parameter#
--     If @pEmbeddedSampler@ is not @NULL@, @pEmbeddedSampler@ /must/ be a
--     valid pointer to a valid 'Vulkan.Core10.Sampler.SamplerCreateInfo'
--     structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'DescriptorMappingSourceDataEXT',
-- 'Vulkan.Core10.Sampler.SamplerCreateInfo'
data DescriptorMappingSourceIndirectIndexArrayEXT = DescriptorMappingSourceIndirectIndexArrayEXT
  { -- | @heapOffset@ is a constant byte offset added to the heap address for the
    -- mapped resource or sampler.
    DescriptorMappingSourceIndirectIndexArrayEXT -> Word32
heapOffset :: Word32
  , -- | @pushOffset@ is an offset into push data where an the indirect address
    -- will be.
    DescriptorMappingSourceIndirectIndexArrayEXT -> Word32
pushOffset :: Word32
  , -- | @addressOffset@ is an index into the address in push data where an index
    -- into the heap for the mapped resource will be retrieved.
    DescriptorMappingSourceIndirectIndexArrayEXT -> Word32
addressOffset :: Word32
  , -- | @heapIndexStride@ is a constant byte stride that multiplies the index in
    -- indirect data.
    DescriptorMappingSourceIndirectIndexArrayEXT -> Word32
heapIndexStride :: Word32
  , -- | @pEmbeddedSampler@ is an optional
    -- 'Vulkan.Core10.Sampler.SamplerCreateInfo' structure specifying a sampler
    -- to embed into the shader, in place of looking the sampler up in a heap.
    DescriptorMappingSourceIndirectIndexArrayEXT
-> Maybe (SomeStruct SamplerCreateInfo)
embeddedSampler :: Maybe (SomeStruct SamplerCreateInfo)
  , -- | @useCombinedImageSamplerIndex@ specifies whether the generated index
    -- value will be decoded as two packed indices if the mapped resource is an
    -- @OpTypeSampledImage@.
    DescriptorMappingSourceIndirectIndexArrayEXT -> Bool
useCombinedImageSamplerIndex :: Bool
  , -- | @samplerHeapOffset@ is used only when mapping a combined image sampler,
    -- used in place of @heapOffset@ to retrieve the sampler.
    DescriptorMappingSourceIndirectIndexArrayEXT -> Word32
samplerHeapOffset :: Word32
  , -- | @samplerPushOffset@ is used only when mapping a combined image sampler,
    -- used in place of @pushOffset@ to retrieve the sampler.
    DescriptorMappingSourceIndirectIndexArrayEXT -> Word32
samplerPushOffset :: Word32
  , -- | @samplerAddressOffset@ is used only when mapping a combined image
    -- sampler, used in place of @addressOffset@ to retrieve the sampler.
    DescriptorMappingSourceIndirectIndexArrayEXT -> Word32
samplerAddressOffset :: Word32
  , -- | @samplerHeapIndexStride@ is used only when mapping a combined image
    -- sampler, used in place of @heapIndexStride@ to retrieve the sampler.
    DescriptorMappingSourceIndirectIndexArrayEXT -> Word32
samplerHeapIndexStride :: Word32
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DescriptorMappingSourceIndirectIndexArrayEXT)
#endif
deriving instance Show DescriptorMappingSourceIndirectIndexArrayEXT

instance ToCStruct DescriptorMappingSourceIndirectIndexArrayEXT where
  withCStruct :: forall b.
DescriptorMappingSourceIndirectIndexArrayEXT
-> (Ptr DescriptorMappingSourceIndirectIndexArrayEXT -> IO b)
-> IO b
withCStruct DescriptorMappingSourceIndirectIndexArrayEXT
x Ptr DescriptorMappingSourceIndirectIndexArrayEXT -> IO b
f = Int
-> (Ptr DescriptorMappingSourceIndirectIndexArrayEXT -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
48 ((Ptr DescriptorMappingSourceIndirectIndexArrayEXT -> IO b)
 -> IO b)
-> (Ptr DescriptorMappingSourceIndirectIndexArrayEXT -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DescriptorMappingSourceIndirectIndexArrayEXT
p -> Ptr DescriptorMappingSourceIndirectIndexArrayEXT
-> DescriptorMappingSourceIndirectIndexArrayEXT -> IO b -> IO b
forall b.
Ptr DescriptorMappingSourceIndirectIndexArrayEXT
-> DescriptorMappingSourceIndirectIndexArrayEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DescriptorMappingSourceIndirectIndexArrayEXT
p DescriptorMappingSourceIndirectIndexArrayEXT
x (Ptr DescriptorMappingSourceIndirectIndexArrayEXT -> IO b
f Ptr DescriptorMappingSourceIndirectIndexArrayEXT
p)
  pokeCStruct :: forall b.
Ptr DescriptorMappingSourceIndirectIndexArrayEXT
-> DescriptorMappingSourceIndirectIndexArrayEXT -> IO b -> IO b
pokeCStruct Ptr DescriptorMappingSourceIndirectIndexArrayEXT
p DescriptorMappingSourceIndirectIndexArrayEXT{Bool
Maybe (SomeStruct SamplerCreateInfo)
Word32
heapOffset :: DescriptorMappingSourceIndirectIndexArrayEXT -> Word32
pushOffset :: DescriptorMappingSourceIndirectIndexArrayEXT -> Word32
addressOffset :: DescriptorMappingSourceIndirectIndexArrayEXT -> Word32
heapIndexStride :: DescriptorMappingSourceIndirectIndexArrayEXT -> Word32
embeddedSampler :: DescriptorMappingSourceIndirectIndexArrayEXT
-> Maybe (SomeStruct SamplerCreateInfo)
useCombinedImageSamplerIndex :: DescriptorMappingSourceIndirectIndexArrayEXT -> Bool
samplerHeapOffset :: DescriptorMappingSourceIndirectIndexArrayEXT -> Word32
samplerPushOffset :: DescriptorMappingSourceIndirectIndexArrayEXT -> Word32
samplerAddressOffset :: DescriptorMappingSourceIndirectIndexArrayEXT -> Word32
samplerHeapIndexStride :: DescriptorMappingSourceIndirectIndexArrayEXT -> Word32
heapOffset :: Word32
pushOffset :: Word32
addressOffset :: Word32
heapIndexStride :: Word32
embeddedSampler :: Maybe (SomeStruct SamplerCreateInfo)
useCombinedImageSamplerIndex :: Bool
samplerHeapOffset :: Word32
samplerPushOffset :: Word32
samplerAddressOffset :: Word32
samplerHeapIndexStride :: Word32
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexArrayEXT
p Ptr DescriptorMappingSourceIndirectIndexArrayEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
heapOffset)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexArrayEXT
p Ptr DescriptorMappingSourceIndirectIndexArrayEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) (Word32
pushOffset)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexArrayEXT
p Ptr DescriptorMappingSourceIndirectIndexArrayEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) (Word32
addressOffset)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexArrayEXT
p Ptr DescriptorMappingSourceIndirectIndexArrayEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32)) (Word32
heapIndexStride)
    pEmbeddedSampler'' <- case (Maybe (SomeStruct SamplerCreateInfo)
embeddedSampler) of
      Maybe (SomeStruct SamplerCreateInfo)
Nothing -> Ptr (SamplerCreateInfo '[])
-> ContT b IO (Ptr (SamplerCreateInfo '[]))
forall a. a -> ContT b IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr (SamplerCreateInfo '[])
forall a. Ptr a
nullPtr
      Just SomeStruct SamplerCreateInfo
j -> forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
forall r (m :: * -> *) a. ((a -> m r) -> m r) -> ContT r m a
ContT @_ @_ @(Ptr (SamplerCreateInfo '[])) (((Ptr (SamplerCreateInfo '[]) -> IO b) -> IO b)
 -> ContT b IO (Ptr (SamplerCreateInfo '[])))
-> ((Ptr (SamplerCreateInfo '[]) -> IO b) -> IO b)
-> ContT b IO (Ptr (SamplerCreateInfo '[]))
forall a b. (a -> b) -> a -> b
$ \Ptr (SamplerCreateInfo '[]) -> IO b
cont -> forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
SomeStruct a
-> (forall (es :: [*]).
    (Extendss a es, PokeChain es) =>
    Ptr (a es) -> IO b)
-> IO b
withSomeCStruct @SamplerCreateInfo (SomeStruct SamplerCreateInfo
j) (Ptr (SamplerCreateInfo '[]) -> IO b
cont (Ptr (SamplerCreateInfo '[]) -> IO b)
-> (Ptr (SamplerCreateInfo es) -> Ptr (SamplerCreateInfo '[]))
-> Ptr (SamplerCreateInfo es)
-> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (SamplerCreateInfo es) -> Ptr (SamplerCreateInfo '[])
forall a b. Ptr a -> Ptr b
castPtr)
    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr (SamplerCreateInfo _)))) pEmbeddedSampler''
    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (useCombinedImageSamplerIndex))
    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (samplerHeapOffset)
    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (samplerPushOffset)
    lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) (samplerAddressOffset)
    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) (samplerHeapIndexStride)
    lift $ f
  cStructSize :: Int
cStructSize = Int
48
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr DescriptorMappingSourceIndirectIndexArrayEXT -> IO b -> IO b
pokeZeroCStruct Ptr DescriptorMappingSourceIndirectIndexArrayEXT
p IO b
f = do
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexArrayEXT
p Ptr DescriptorMappingSourceIndirectIndexArrayEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexArrayEXT
p Ptr DescriptorMappingSourceIndirectIndexArrayEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexArrayEXT
p Ptr DescriptorMappingSourceIndirectIndexArrayEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexArrayEXT
p Ptr DescriptorMappingSourceIndirectIndexArrayEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexArrayEXT
p Ptr DescriptorMappingSourceIndirectIndexArrayEXT
-> 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 Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexArrayEXT
p Ptr DescriptorMappingSourceIndirectIndexArrayEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexArrayEXT
p Ptr DescriptorMappingSourceIndirectIndexArrayEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexArrayEXT
p Ptr DescriptorMappingSourceIndirectIndexArrayEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
36 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectIndexArrayEXT
p Ptr DescriptorMappingSourceIndirectIndexArrayEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct DescriptorMappingSourceIndirectIndexArrayEXT where
  peekCStruct :: Ptr DescriptorMappingSourceIndirectIndexArrayEXT
-> IO DescriptorMappingSourceIndirectIndexArrayEXT
peekCStruct Ptr DescriptorMappingSourceIndirectIndexArrayEXT
p = do
    heapOffset <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DescriptorMappingSourceIndirectIndexArrayEXT
p Ptr DescriptorMappingSourceIndirectIndexArrayEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32))
    pushOffset <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
    addressOffset <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
    heapIndexStride <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
    pEmbeddedSampler <- peek @(Ptr (SamplerCreateInfo _)) ((p `plusPtr` 16 :: Ptr (Ptr (SamplerCreateInfo _))))
    pEmbeddedSampler' <- maybePeek (\Ptr (SamplerCreateInfo (ZonkAny 8))
j -> Ptr (SomeStruct SamplerCreateInfo)
-> IO (SomeStruct SamplerCreateInfo)
forall (a :: [*] -> *).
(Extensible a,
 forall (es :: [*]).
 (Extendss a es, PeekChain es) =>
 FromCStruct (a es)) =>
Ptr (SomeStruct a) -> IO (SomeStruct a)
peekSomeCStruct (Ptr (SamplerCreateInfo (ZonkAny 8))
-> Ptr (SomeStruct SamplerCreateInfo)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (SamplerCreateInfo (ZonkAny 8))
j))) pEmbeddedSampler
    useCombinedImageSamplerIndex <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
    samplerHeapOffset <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
    samplerPushOffset <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
    samplerAddressOffset <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
    samplerHeapIndexStride <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
    pure $ DescriptorMappingSourceIndirectIndexArrayEXT
             heapOffset
             pushOffset
             addressOffset
             heapIndexStride
             pEmbeddedSampler'
             (bool32ToBool useCombinedImageSamplerIndex)
             samplerHeapOffset
             samplerPushOffset
             samplerAddressOffset
             samplerHeapIndexStride

instance Zero DescriptorMappingSourceIndirectIndexArrayEXT where
  zero :: DescriptorMappingSourceIndirectIndexArrayEXT
zero = Word32
-> Word32
-> Word32
-> Word32
-> Maybe (SomeStruct SamplerCreateInfo)
-> Bool
-> Word32
-> Word32
-> Word32
-> Word32
-> DescriptorMappingSourceIndirectIndexArrayEXT
DescriptorMappingSourceIndirectIndexArrayEXT
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Maybe (SomeStruct SamplerCreateInfo)
forall a. Maybe a
Nothing
           Bool
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero


-- | VkDescriptorMappingSourceHeapDataEXT - Structure specifying mapping a
-- uniform buffer to heap data
--
-- = Description
--
-- Uniform buffers using this mapping will be backed directly by data in
-- the heap. Accessing data in the uniform buffer at an offset of
-- shaderOffset in the shader will access heap data at an offset equal to
--
-- -   offset = shaderOffset + heapOffset +
--     ((uint32_t*)pPushData)[pushOffset\/4]
--
-- where pPushData is the total set of push data specified by
-- 'cmdPushDataEXT'. Shader reads through the heap mapped in this way are
-- performed according to the mapped resource.
--
-- == Valid Usage
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'DescriptorMappingSourceDataEXT'
data DescriptorMappingSourceHeapDataEXT = DescriptorMappingSourceHeapDataEXT
  { -- | @heapOffset@ is a constant byte offset added to the heap address for the
    -- mapped buffer.
    --
    -- #VUID-VkDescriptorMappingSourceHeapDataEXT-heapOffset-11263#
    -- @heapOffset@ /must/ be a multiple of
    -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-minUniformBufferOffsetAlignment minUniformBufferOffsetAlignment>
    DescriptorMappingSourceHeapDataEXT -> Word32
heapOffset :: Word32
  , -- | @pushOffset@ is an index into push data where an additional offset into
    -- the heap for the mapped resource will be retrieved.
    --
    -- #VUID-VkDescriptorMappingSourceHeapDataEXT-pushOffset-11264#
    -- @pushOffset@ /must/ be a multiple of 4
    --
    -- #VUID-VkDescriptorMappingSourceHeapDataEXT-pushOffset-11265#
    -- @pushOffset@ /must/ be less than or equal to @maxPushDataSize@ - 4
    DescriptorMappingSourceHeapDataEXT -> Word32
pushOffset :: Word32
  }
  deriving (Typeable, DescriptorMappingSourceHeapDataEXT
-> DescriptorMappingSourceHeapDataEXT -> Bool
(DescriptorMappingSourceHeapDataEXT
 -> DescriptorMappingSourceHeapDataEXT -> Bool)
-> (DescriptorMappingSourceHeapDataEXT
    -> DescriptorMappingSourceHeapDataEXT -> Bool)
-> Eq DescriptorMappingSourceHeapDataEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DescriptorMappingSourceHeapDataEXT
-> DescriptorMappingSourceHeapDataEXT -> Bool
== :: DescriptorMappingSourceHeapDataEXT
-> DescriptorMappingSourceHeapDataEXT -> Bool
$c/= :: DescriptorMappingSourceHeapDataEXT
-> DescriptorMappingSourceHeapDataEXT -> Bool
/= :: DescriptorMappingSourceHeapDataEXT
-> DescriptorMappingSourceHeapDataEXT -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DescriptorMappingSourceHeapDataEXT)
#endif
deriving instance Show DescriptorMappingSourceHeapDataEXT

instance ToCStruct DescriptorMappingSourceHeapDataEXT where
  withCStruct :: forall b.
DescriptorMappingSourceHeapDataEXT
-> (Ptr DescriptorMappingSourceHeapDataEXT -> IO b) -> IO b
withCStruct DescriptorMappingSourceHeapDataEXT
x Ptr DescriptorMappingSourceHeapDataEXT -> IO b
f = Int -> (Ptr DescriptorMappingSourceHeapDataEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
8 ((Ptr DescriptorMappingSourceHeapDataEXT -> IO b) -> IO b)
-> (Ptr DescriptorMappingSourceHeapDataEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DescriptorMappingSourceHeapDataEXT
p -> Ptr DescriptorMappingSourceHeapDataEXT
-> DescriptorMappingSourceHeapDataEXT -> IO b -> IO b
forall b.
Ptr DescriptorMappingSourceHeapDataEXT
-> DescriptorMappingSourceHeapDataEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DescriptorMappingSourceHeapDataEXT
p DescriptorMappingSourceHeapDataEXT
x (Ptr DescriptorMappingSourceHeapDataEXT -> IO b
f Ptr DescriptorMappingSourceHeapDataEXT
p)
  pokeCStruct :: forall b.
Ptr DescriptorMappingSourceHeapDataEXT
-> DescriptorMappingSourceHeapDataEXT -> IO b -> IO b
pokeCStruct Ptr DescriptorMappingSourceHeapDataEXT
p DescriptorMappingSourceHeapDataEXT{Word32
heapOffset :: DescriptorMappingSourceHeapDataEXT -> Word32
pushOffset :: DescriptorMappingSourceHeapDataEXT -> Word32
heapOffset :: Word32
pushOffset :: Word32
..} IO b
f = do
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceHeapDataEXT
p Ptr DescriptorMappingSourceHeapDataEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
heapOffset)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceHeapDataEXT
p Ptr DescriptorMappingSourceHeapDataEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) (Word32
pushOffset)
    IO b
f
  cStructSize :: Int
cStructSize = Int
8
  cStructAlignment :: Int
cStructAlignment = Int
4
  pokeZeroCStruct :: forall b. Ptr DescriptorMappingSourceHeapDataEXT -> IO b -> IO b
pokeZeroCStruct Ptr DescriptorMappingSourceHeapDataEXT
p IO b
f = do
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceHeapDataEXT
p Ptr DescriptorMappingSourceHeapDataEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceHeapDataEXT
p Ptr DescriptorMappingSourceHeapDataEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct DescriptorMappingSourceHeapDataEXT where
  peekCStruct :: Ptr DescriptorMappingSourceHeapDataEXT
-> IO DescriptorMappingSourceHeapDataEXT
peekCStruct Ptr DescriptorMappingSourceHeapDataEXT
p = do
    heapOffset <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DescriptorMappingSourceHeapDataEXT
p Ptr DescriptorMappingSourceHeapDataEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32))
    pushOffset <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
    pure $ DescriptorMappingSourceHeapDataEXT
             heapOffset pushOffset

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

instance Zero DescriptorMappingSourceHeapDataEXT where
  zero :: DescriptorMappingSourceHeapDataEXT
zero = Word32 -> Word32 -> DescriptorMappingSourceHeapDataEXT
DescriptorMappingSourceHeapDataEXT
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero


-- | VkDescriptorMappingSourceShaderRecordIndexEXT - Structure specifying
-- mapping resources to a heap index in shader record data
--
-- = Description
--
-- Resources using this mapping will be backed by a descriptor in the heap,
-- at an offset calculated as
--
-- -   shaderRecordIndex =
--     ((uint32_t*)pShaderRecordData)[shaderRecordOffset\/4]
--
-- -   shaderIndex = (Binding - firstBinding) + arrayIndex
--
-- -   offset = heapOffset + (shaderRecordIndex × heapIndexStride) +
--     (shaderIndex × heapArrayStride)
--
-- where Binding is the binding value in the shader, arrayIndex is the
-- index into the array if the shader binding is declared as an array, and
-- pShaderRecordData is the set of shader record data accessible to the
-- shader.
--
-- If the mapped resource is a @OpTypeSampledImage@, offset is instead
-- calculated for the sampler as
--
-- -   samplerShaderRecordIndex =
--     ((uint32_t*)pShaderRecordData)[samplerShaderRecordOffset\/4]
--
-- -   offset = samplerHeapOffset + (samplerShaderRecordIndex ×
--     samplerHeapIndexStride) + (shaderIndex × samplerHeapArrayStride)
--
-- If @useCombinedImageSamplerIndex@ is
-- 'Vulkan.Core10.FundamentalTypes.TRUE', and the mapped resource is a
-- @OpTypeSampledImage@, shaderRecordIndex and samplerShaderRecordIndex in
-- the above equations are instead calculated as
--
-- -   shaderRecordIndex =
--     ((uint32_t*)pShaderRecordData)[shaderRecordOffset\/4] & 0xFFFFF
--
-- -   samplerShaderRecordIndex =
--     (((uint32_t*)pShaderRecordData)[shaderRecordOffset\/4] >> 20) &
--     0xFFF
--
-- If the mapped resource is a @OpTypeSampler@ or @OpTypeSampledImage@, and
-- @pEmbeddedSampler@ is not @NULL@, the specified embedded sampler will be
-- used rather than accessing the sampler heap.
--
-- == Valid Usage
--
-- -   #VUID-VkDescriptorMappingSourceShaderRecordIndexEXT-shaderRecordOffset-11269#
--     @shaderRecordOffset@ /must/ be a multiple of 4
--
-- -   #VUID-VkDescriptorMappingSourceShaderRecordIndexEXT-shaderRecordOffset-11270#
--     @shaderRecordOffset@ /must/ be less than or equal to
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-maxShaderGroupStride maxShaderGroupStride>
--     - 4
--
-- -   #VUID-VkDescriptorMappingSourceShaderRecordIndexEXT-pEmbeddedSampler-11449#
--     If @pEmbeddedSampler@ is a valid pointer to a
--     'Vulkan.Core10.Sampler.SamplerCreateInfo', its @borderColor@ /must/
--     not be
--     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_FLOAT_CUSTOM_EXT' or
--     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_INT_CUSTOM_EXT'
--
-- -   #VUID-VkDescriptorMappingSourceShaderRecordIndexEXT-pEmbeddedSampler-11405#
--     If @pEmbeddedSampler@ is a valid pointer to a
--     'Vulkan.Core10.Sampler.SamplerCreateInfo', and there is a
--     'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsObjectNameInfoEXT'
--     structure in its @pNext@ chain, its @objectType@ /must/ be
--     'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDescriptorMappingSourceShaderRecordIndexEXT-pEmbeddedSampler-parameter#
--     If @pEmbeddedSampler@ is not @NULL@, @pEmbeddedSampler@ /must/ be a
--     valid pointer to a valid 'Vulkan.Core10.Sampler.SamplerCreateInfo'
--     structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'DescriptorMappingSourceDataEXT',
-- 'Vulkan.Core10.Sampler.SamplerCreateInfo'
data DescriptorMappingSourceShaderRecordIndexEXT = DescriptorMappingSourceShaderRecordIndexEXT
  { -- | @heapOffset@ is a constant byte offset added to the heap address for the
    -- mapped resource or sampler.
    DescriptorMappingSourceShaderRecordIndexEXT -> Word32
heapOffset :: Word32
  , -- | @shaderRecordOffset@ is an index into shader record data where an index
    -- into the heap for the mapped resource will be retrieved.
    DescriptorMappingSourceShaderRecordIndexEXT -> Word32
shaderRecordOffset :: Word32
  , -- | @heapIndexStride@ is a constant byte stride that multiplies the index in
    -- shader record data.
    DescriptorMappingSourceShaderRecordIndexEXT -> Word32
heapIndexStride :: Word32
  , -- | @heapArrayStride@ is a constant byte stride that multiplies the shader
    -- binding and array index.
    DescriptorMappingSourceShaderRecordIndexEXT -> Word32
heapArrayStride :: Word32
  , -- | @pEmbeddedSampler@ is an optional
    -- 'Vulkan.Core10.Sampler.SamplerCreateInfo' structure specifying a sampler
    -- to embed into the shader, in place of looking the sampler up in a heap.
    DescriptorMappingSourceShaderRecordIndexEXT
-> Maybe (SomeStruct SamplerCreateInfo)
embeddedSampler :: Maybe (SomeStruct SamplerCreateInfo)
  , -- | @useCombinedImageSamplerIndex@ specifies whether the generated index
    -- value will be decoded as two packed indices if the mapped resource is an
    -- @OpTypeSampledImage@.
    DescriptorMappingSourceShaderRecordIndexEXT -> Bool
useCombinedImageSamplerIndex :: Bool
  , -- | @samplerHeapOffset@ is used only when mapping a combined image sampler,
    -- used in place of @heapOffset@ to retrieve the sampler.
    DescriptorMappingSourceShaderRecordIndexEXT -> Word32
samplerHeapOffset :: Word32
  , -- | @samplerShaderRecordOffset@ is used only when mapping a combined image
    -- sampler, used in place of @shaderRecordOffset@ to retrieve the sampler.
    DescriptorMappingSourceShaderRecordIndexEXT -> Word32
samplerShaderRecordOffset :: Word32
  , -- | @samplerHeapIndexStride@ is used only when mapping a combined image
    -- sampler, used in place of @heapIndexStride@ to retrieve the sampler.
    DescriptorMappingSourceShaderRecordIndexEXT -> Word32
samplerHeapIndexStride :: Word32
  , -- | @samplerHeapArrayStride@ is used only when mapping a combined image
    -- sampler, used in place of @heapArrayStride@ to retrieve the sampler.
    DescriptorMappingSourceShaderRecordIndexEXT -> Word32
samplerHeapArrayStride :: Word32
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DescriptorMappingSourceShaderRecordIndexEXT)
#endif
deriving instance Show DescriptorMappingSourceShaderRecordIndexEXT

instance ToCStruct DescriptorMappingSourceShaderRecordIndexEXT where
  withCStruct :: forall b.
DescriptorMappingSourceShaderRecordIndexEXT
-> (Ptr DescriptorMappingSourceShaderRecordIndexEXT -> IO b)
-> IO b
withCStruct DescriptorMappingSourceShaderRecordIndexEXT
x Ptr DescriptorMappingSourceShaderRecordIndexEXT -> IO b
f = Int
-> (Ptr DescriptorMappingSourceShaderRecordIndexEXT -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
48 ((Ptr DescriptorMappingSourceShaderRecordIndexEXT -> IO b) -> IO b)
-> (Ptr DescriptorMappingSourceShaderRecordIndexEXT -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DescriptorMappingSourceShaderRecordIndexEXT
p -> Ptr DescriptorMappingSourceShaderRecordIndexEXT
-> DescriptorMappingSourceShaderRecordIndexEXT -> IO b -> IO b
forall b.
Ptr DescriptorMappingSourceShaderRecordIndexEXT
-> DescriptorMappingSourceShaderRecordIndexEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DescriptorMappingSourceShaderRecordIndexEXT
p DescriptorMappingSourceShaderRecordIndexEXT
x (Ptr DescriptorMappingSourceShaderRecordIndexEXT -> IO b
f Ptr DescriptorMappingSourceShaderRecordIndexEXT
p)
  pokeCStruct :: forall b.
Ptr DescriptorMappingSourceShaderRecordIndexEXT
-> DescriptorMappingSourceShaderRecordIndexEXT -> IO b -> IO b
pokeCStruct Ptr DescriptorMappingSourceShaderRecordIndexEXT
p DescriptorMappingSourceShaderRecordIndexEXT{Bool
Maybe (SomeStruct SamplerCreateInfo)
Word32
heapOffset :: DescriptorMappingSourceShaderRecordIndexEXT -> Word32
shaderRecordOffset :: DescriptorMappingSourceShaderRecordIndexEXT -> Word32
heapIndexStride :: DescriptorMappingSourceShaderRecordIndexEXT -> Word32
heapArrayStride :: DescriptorMappingSourceShaderRecordIndexEXT -> Word32
embeddedSampler :: DescriptorMappingSourceShaderRecordIndexEXT
-> Maybe (SomeStruct SamplerCreateInfo)
useCombinedImageSamplerIndex :: DescriptorMappingSourceShaderRecordIndexEXT -> Bool
samplerHeapOffset :: DescriptorMappingSourceShaderRecordIndexEXT -> Word32
samplerShaderRecordOffset :: DescriptorMappingSourceShaderRecordIndexEXT -> Word32
samplerHeapIndexStride :: DescriptorMappingSourceShaderRecordIndexEXT -> Word32
samplerHeapArrayStride :: DescriptorMappingSourceShaderRecordIndexEXT -> Word32
heapOffset :: Word32
shaderRecordOffset :: Word32
heapIndexStride :: Word32
heapArrayStride :: Word32
embeddedSampler :: Maybe (SomeStruct SamplerCreateInfo)
useCombinedImageSamplerIndex :: Bool
samplerHeapOffset :: Word32
samplerShaderRecordOffset :: Word32
samplerHeapIndexStride :: Word32
samplerHeapArrayStride :: Word32
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceShaderRecordIndexEXT
p Ptr DescriptorMappingSourceShaderRecordIndexEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
heapOffset)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceShaderRecordIndexEXT
p Ptr DescriptorMappingSourceShaderRecordIndexEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) (Word32
shaderRecordOffset)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceShaderRecordIndexEXT
p Ptr DescriptorMappingSourceShaderRecordIndexEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) (Word32
heapIndexStride)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceShaderRecordIndexEXT
p Ptr DescriptorMappingSourceShaderRecordIndexEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32)) (Word32
heapArrayStride)
    pEmbeddedSampler'' <- case (Maybe (SomeStruct SamplerCreateInfo)
embeddedSampler) of
      Maybe (SomeStruct SamplerCreateInfo)
Nothing -> Ptr (SamplerCreateInfo '[])
-> ContT b IO (Ptr (SamplerCreateInfo '[]))
forall a. a -> ContT b IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr (SamplerCreateInfo '[])
forall a. Ptr a
nullPtr
      Just SomeStruct SamplerCreateInfo
j -> forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
forall r (m :: * -> *) a. ((a -> m r) -> m r) -> ContT r m a
ContT @_ @_ @(Ptr (SamplerCreateInfo '[])) (((Ptr (SamplerCreateInfo '[]) -> IO b) -> IO b)
 -> ContT b IO (Ptr (SamplerCreateInfo '[])))
-> ((Ptr (SamplerCreateInfo '[]) -> IO b) -> IO b)
-> ContT b IO (Ptr (SamplerCreateInfo '[]))
forall a b. (a -> b) -> a -> b
$ \Ptr (SamplerCreateInfo '[]) -> IO b
cont -> forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
SomeStruct a
-> (forall (es :: [*]).
    (Extendss a es, PokeChain es) =>
    Ptr (a es) -> IO b)
-> IO b
withSomeCStruct @SamplerCreateInfo (SomeStruct SamplerCreateInfo
j) (Ptr (SamplerCreateInfo '[]) -> IO b
cont (Ptr (SamplerCreateInfo '[]) -> IO b)
-> (Ptr (SamplerCreateInfo es) -> Ptr (SamplerCreateInfo '[]))
-> Ptr (SamplerCreateInfo es)
-> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (SamplerCreateInfo es) -> Ptr (SamplerCreateInfo '[])
forall a b. Ptr a -> Ptr b
castPtr)
    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr (SamplerCreateInfo _)))) pEmbeddedSampler''
    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (useCombinedImageSamplerIndex))
    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (samplerHeapOffset)
    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (samplerShaderRecordOffset)
    lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) (samplerHeapIndexStride)
    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) (samplerHeapArrayStride)
    lift $ f
  cStructSize :: Int
cStructSize = Int
48
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr DescriptorMappingSourceShaderRecordIndexEXT -> IO b -> IO b
pokeZeroCStruct Ptr DescriptorMappingSourceShaderRecordIndexEXT
p IO b
f = do
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceShaderRecordIndexEXT
p Ptr DescriptorMappingSourceShaderRecordIndexEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceShaderRecordIndexEXT
p Ptr DescriptorMappingSourceShaderRecordIndexEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceShaderRecordIndexEXT
p Ptr DescriptorMappingSourceShaderRecordIndexEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceShaderRecordIndexEXT
p Ptr DescriptorMappingSourceShaderRecordIndexEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceShaderRecordIndexEXT
p Ptr DescriptorMappingSourceShaderRecordIndexEXT
-> 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 Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceShaderRecordIndexEXT
p Ptr DescriptorMappingSourceShaderRecordIndexEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceShaderRecordIndexEXT
p Ptr DescriptorMappingSourceShaderRecordIndexEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceShaderRecordIndexEXT
p Ptr DescriptorMappingSourceShaderRecordIndexEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
36 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceShaderRecordIndexEXT
p Ptr DescriptorMappingSourceShaderRecordIndexEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct DescriptorMappingSourceShaderRecordIndexEXT where
  peekCStruct :: Ptr DescriptorMappingSourceShaderRecordIndexEXT
-> IO DescriptorMappingSourceShaderRecordIndexEXT
peekCStruct Ptr DescriptorMappingSourceShaderRecordIndexEXT
p = do
    heapOffset <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DescriptorMappingSourceShaderRecordIndexEXT
p Ptr DescriptorMappingSourceShaderRecordIndexEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32))
    shaderRecordOffset <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
    heapIndexStride <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))
    heapArrayStride <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))
    pEmbeddedSampler <- peek @(Ptr (SamplerCreateInfo _)) ((p `plusPtr` 16 :: Ptr (Ptr (SamplerCreateInfo _))))
    pEmbeddedSampler' <- maybePeek (\Ptr (SamplerCreateInfo (ZonkAny 9))
j -> Ptr (SomeStruct SamplerCreateInfo)
-> IO (SomeStruct SamplerCreateInfo)
forall (a :: [*] -> *).
(Extensible a,
 forall (es :: [*]).
 (Extendss a es, PeekChain es) =>
 FromCStruct (a es)) =>
Ptr (SomeStruct a) -> IO (SomeStruct a)
peekSomeCStruct (Ptr (SamplerCreateInfo (ZonkAny 9))
-> Ptr (SomeStruct SamplerCreateInfo)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (SamplerCreateInfo (ZonkAny 9))
j))) pEmbeddedSampler
    useCombinedImageSamplerIndex <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
    samplerHeapOffset <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
    samplerShaderRecordOffset <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
    samplerHeapIndexStride <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
    samplerHeapArrayStride <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
    pure $ DescriptorMappingSourceShaderRecordIndexEXT
             heapOffset
             shaderRecordOffset
             heapIndexStride
             heapArrayStride
             pEmbeddedSampler'
             (bool32ToBool useCombinedImageSamplerIndex)
             samplerHeapOffset
             samplerShaderRecordOffset
             samplerHeapIndexStride
             samplerHeapArrayStride

instance Zero DescriptorMappingSourceShaderRecordIndexEXT where
  zero :: DescriptorMappingSourceShaderRecordIndexEXT
zero = Word32
-> Word32
-> Word32
-> Word32
-> Maybe (SomeStruct SamplerCreateInfo)
-> Bool
-> Word32
-> Word32
-> Word32
-> Word32
-> DescriptorMappingSourceShaderRecordIndexEXT
DescriptorMappingSourceShaderRecordIndexEXT
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Maybe (SomeStruct SamplerCreateInfo)
forall a. Maybe a
Nothing
           Bool
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero


-- | VkDescriptorMappingSourceIndirectAddressEXT - Structure specifying
-- mapping a uniform buffer to an address specified indirectly
--
-- = Description
--
-- Accessing data via the mapped resource in the shader will access data
-- backing the address specified in the indirect address at the supplied
-- offset:
--
-- -   indirectAddress = ((VkDeviceAddress*)pPushData)[pushOffset\/8]
--
-- -   resourceAddress =
--     ((VkDeviceAddress*)indirectAddress)[addressOffset\/8]
--
-- where pPushData is the total set of push data specified by
-- 'cmdPushDataEXT'. Reads through indirectAddress are performed as
-- non-volatile uniform buffer reads, and can be synchronized using
-- 'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_UNIFORM_READ_BIT'. Shader
-- reads through resourceAddress are performed according to the mapped
-- resource. If the shader resource is an acceleration structure, the
-- address /must/ be a valid acceleration structure address.
--
-- == Valid Usage
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'DescriptorMappingSourceDataEXT'
data DescriptorMappingSourceIndirectAddressEXT = DescriptorMappingSourceIndirectAddressEXT
  { -- | @pushOffset@ is a byte offset into push data where an indirect address
    -- containing the address for the mapped resource will be retrieved.
    --
    -- #VUID-VkDescriptorMappingSourceIndirectAddressEXT-pushOffset-11266#
    -- @pushOffset@ /must/ be a multiple of 8
    --
    -- #VUID-VkDescriptorMappingSourceIndirectAddressEXT-pushOffset-11267#
    -- @pushOffset@ /must/ be less than or equal to @maxPushDataSize@ - 8
    DescriptorMappingSourceIndirectAddressEXT -> Word32
pushOffset :: Word32
  , -- | @addressOffset@ is a byte offset into the indirect address where the
    -- address for the mapped resource will be retrieved.
    --
    -- #VUID-VkDescriptorMappingSourceIndirectAddressEXT-addressOffset-11268#
    -- @addressOffset@ /must/ be a multiple of 8
    DescriptorMappingSourceIndirectAddressEXT -> Word32
addressOffset :: Word32
  }
  deriving (Typeable, DescriptorMappingSourceIndirectAddressEXT
-> DescriptorMappingSourceIndirectAddressEXT -> Bool
(DescriptorMappingSourceIndirectAddressEXT
 -> DescriptorMappingSourceIndirectAddressEXT -> Bool)
-> (DescriptorMappingSourceIndirectAddressEXT
    -> DescriptorMappingSourceIndirectAddressEXT -> Bool)
-> Eq DescriptorMappingSourceIndirectAddressEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DescriptorMappingSourceIndirectAddressEXT
-> DescriptorMappingSourceIndirectAddressEXT -> Bool
== :: DescriptorMappingSourceIndirectAddressEXT
-> DescriptorMappingSourceIndirectAddressEXT -> Bool
$c/= :: DescriptorMappingSourceIndirectAddressEXT
-> DescriptorMappingSourceIndirectAddressEXT -> Bool
/= :: DescriptorMappingSourceIndirectAddressEXT
-> DescriptorMappingSourceIndirectAddressEXT -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DescriptorMappingSourceIndirectAddressEXT)
#endif
deriving instance Show DescriptorMappingSourceIndirectAddressEXT

instance ToCStruct DescriptorMappingSourceIndirectAddressEXT where
  withCStruct :: forall b.
DescriptorMappingSourceIndirectAddressEXT
-> (Ptr DescriptorMappingSourceIndirectAddressEXT -> IO b) -> IO b
withCStruct DescriptorMappingSourceIndirectAddressEXT
x Ptr DescriptorMappingSourceIndirectAddressEXT -> IO b
f = Int
-> (Ptr DescriptorMappingSourceIndirectAddressEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
8 ((Ptr DescriptorMappingSourceIndirectAddressEXT -> IO b) -> IO b)
-> (Ptr DescriptorMappingSourceIndirectAddressEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DescriptorMappingSourceIndirectAddressEXT
p -> Ptr DescriptorMappingSourceIndirectAddressEXT
-> DescriptorMappingSourceIndirectAddressEXT -> IO b -> IO b
forall b.
Ptr DescriptorMappingSourceIndirectAddressEXT
-> DescriptorMappingSourceIndirectAddressEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DescriptorMappingSourceIndirectAddressEXT
p DescriptorMappingSourceIndirectAddressEXT
x (Ptr DescriptorMappingSourceIndirectAddressEXT -> IO b
f Ptr DescriptorMappingSourceIndirectAddressEXT
p)
  pokeCStruct :: forall b.
Ptr DescriptorMappingSourceIndirectAddressEXT
-> DescriptorMappingSourceIndirectAddressEXT -> IO b -> IO b
pokeCStruct Ptr DescriptorMappingSourceIndirectAddressEXT
p DescriptorMappingSourceIndirectAddressEXT{Word32
pushOffset :: DescriptorMappingSourceIndirectAddressEXT -> Word32
addressOffset :: DescriptorMappingSourceIndirectAddressEXT -> Word32
pushOffset :: Word32
addressOffset :: Word32
..} IO b
f = do
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectAddressEXT
p Ptr DescriptorMappingSourceIndirectAddressEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
pushOffset)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectAddressEXT
p Ptr DescriptorMappingSourceIndirectAddressEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) (Word32
addressOffset)
    IO b
f
  cStructSize :: Int
cStructSize = Int
8
  cStructAlignment :: Int
cStructAlignment = Int
4
  pokeZeroCStruct :: forall b.
Ptr DescriptorMappingSourceIndirectAddressEXT -> IO b -> IO b
pokeZeroCStruct Ptr DescriptorMappingSourceIndirectAddressEXT
p IO b
f = do
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectAddressEXT
p Ptr DescriptorMappingSourceIndirectAddressEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DescriptorMappingSourceIndirectAddressEXT
p Ptr DescriptorMappingSourceIndirectAddressEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct DescriptorMappingSourceIndirectAddressEXT where
  peekCStruct :: Ptr DescriptorMappingSourceIndirectAddressEXT
-> IO DescriptorMappingSourceIndirectAddressEXT
peekCStruct Ptr DescriptorMappingSourceIndirectAddressEXT
p = do
    pushOffset <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DescriptorMappingSourceIndirectAddressEXT
p Ptr DescriptorMappingSourceIndirectAddressEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32))
    addressOffset <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))
    pure $ DescriptorMappingSourceIndirectAddressEXT
             pushOffset addressOffset

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

instance Zero DescriptorMappingSourceIndirectAddressEXT where
  zero :: DescriptorMappingSourceIndirectAddressEXT
zero = Word32 -> Word32 -> DescriptorMappingSourceIndirectAddressEXT
DescriptorMappingSourceIndirectAddressEXT
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero


-- | VkDescriptorSetAndBindingMappingEXT - Structure specifying mappings from
-- a set of shader resources to a descriptor heap
--
-- = Description
--
-- Resources specified in a shader with a
-- 'Vulkan.Core10.Handles.DescriptorSet' decoration set to @descriptorSet@,
-- a @Binding@ decoration greater than or equal to @firstBinding@ and less
-- than the sum of @firstBinding@ and @bindingCount@, and a resource type
-- matching one of the bits in @resourceMask@ will be mapped according to
-- @source@ and @sourceData@.
--
-- Applications are free to overspecify bindings that are not present;
-- allowing reuse of the same mapping structures with multiple shaders,
-- even when those shaders only partially reuse those mappings. This
-- includes things like setting binding counts higher than the number used
-- in the shader, specifying bindings that are not present in the shader,
-- and setting @resourceMask@ to all possible resources that may be
-- encountered.
--
-- If @source@ selects an element of @sourceData@ defined by a structure,
-- the description of that structure defines how resources are mapped.
-- Source mappings using a single base type are defined here.
--
-- If @source@ is
-- 'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_CONSTANT_OFFSET_EXT', the resource
-- will be backed by heap data as specified by
-- <VkDescriptorMappingSourceConstantOffsetEXT.html constantOffset>.
--
-- If @source@ is 'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT', the
-- resource will be backed by heap data as specified by
-- <VkDescriptorMappingSourcePushIndexEXT.html pushIndex>.
--
-- If @source@ is 'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT',
-- the resource will be backed by heap data as specified by
-- <VkDescriptorMappingSourceIndirectIndexEXT.html indirectIndex>.
--
-- If @source@ is
-- 'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', the
-- resource will be backed by heap data as specified by
-- <VkDescriptorMappingSourceIndirectIndexEXT.html indirectIndexArray>.
--
-- If @source@ is 'DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT', the
-- resource will be backed by heap data as specified by
-- <VkDescriptorMappingSourceHeapDataEXT.html heapData>.
--
-- If @source@ is 'DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT', the resource
-- will be backed by push data at a range from @pushDataOffset@ to the size
-- of the resource, allowing a uniform buffer to be backed by push data
-- access push data. Accessing data in the uniform buffer at an offset of
-- shaderOffset in the shader will access push data at an offset equal to
--
-- -   offset = shaderOffset + pushDataOffset.
--
-- If @source@ is 'DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', the
-- resource will be backed by data pointed to by a device address in push
-- data at an offset of @pushAddressOffset@. Accessing data via the mapped
-- resource in the shader will access data backing the address specified in
-- push data:
--
-- -   address = ((VkDeviceAddress*)pPushData)[pushAddressOffset\/8]
--
-- where pPushData is the total set of push data specified by
-- 'cmdPushDataEXT'. If the shader resource is an acceleration structure,
-- the address /must/ be a valid acceleration structure address.
--
-- If @source@ is 'DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', the
-- resource will be backed by heap data as specified by
-- <VkDescriptorMappingSourceIndirectAddressEXT.html indirectAddress>.
--
-- Accesses to resources using mappings to anything that is not a
-- descriptor in a heap are not subject to robustness guarantees; resources
-- for such mappings must not be accessed out of bounds.
--
-- If @source@ is
-- 'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', the
-- resource will be backed by heap data as specified by
-- <VkDescriptorMappingSourceShaderRecordIndexEXT.html shaderRecordIndex>.
--
-- If @source@ is 'DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT', the
-- resource will be backed by shader record data at a range from
-- @shaderRecordDataOffset@ to the size of the resource, allowing a uniform
-- buffer to be used as a way to access shader record data. Accessing data
-- in the uniform buffer at an offset shaderOffset in the shader will
-- access shader record data at an offset equal to
--
-- -   offset = shaderOffset + shaderRecordDataOffset.
--
-- If @source@ is 'DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT',
-- the resource will be backed by data pointed to by a device address in
-- the shader record at @shaderRecordAddressOffset@. Accessing data via the
-- mapped resource in the shader will access data backing the address
-- specified in shader record data:
--
-- -   address =
--     ((VkDeviceAddress*)pShaderRecordData)[shaderRecordAddressOffset\/8]
--
-- where pShaderRecord is the memory associated with a given shader as its
-- shader record. If the shader resource is an acceleration structure, the
-- address /must/ be a valid acceleration structure address.
--
-- Accesses to resources using
-- 'DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT' mappings are not
-- subject to robustness guarantees; data must not be accessed outside of
-- the allocated memory range.
--
-- Mappings must be declared for all variables with a
-- 'Vulkan.Core10.Handles.DescriptorSet' and @Binding@ in the
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#interfaces-resources shader resource interface>.
--
-- == Valid Usage
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-source-11245# If @source@
--     is 'DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', or
--     'DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT', @bindingCount@
--     /must/ be 1
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-source-11246# If @source@
--     is 'DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT',
--     @sourceData.pushDataOffset@ /must/ be a multiple of 4
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-source-11247# If @source@
--     is 'DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT',
--     @sourceData.pushAddressOffset@ /must/ be a multiple of 8
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-source-11248# If @source@
--     is 'DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT' or
--     'DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT',
--     @bindingCount@ /must/ be 1
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-source-11249# If @source@
--     is 'DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT',
--     @sourceData.shaderRecordDataOffset@ /must/ be a multiple of 4
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-source-11250# If @source@
--     is 'DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT',
--     @sourceData.shaderRecordAddressOffset@ /must/ be a multiple of 8
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-source-11251# If @source@
--     is 'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_CONSTANT_OFFSET_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', or
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', and
--     @descriptorSet@, @firstBinding@, and @bindingCount@ identify any
--     @OpTypeImage@ variables, any @heapOffset@, and @heapArrayStride@
--     members of the corresponding member of @sourceData@ /must/ be 0 or a
--     multiple of
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-imageDescriptorAlignment imageDescriptorAlignment>
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-source-11252# If @source@
--     is 'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_CONSTANT_OFFSET_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', or
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', and
--     @descriptorSet@, @firstBinding@, and @bindingCount@ identify any
--     @OpTypeStruct@ variables, any @heapOffset@, and @heapArrayStride@
--     members of the corresponding member of @sourceData@ /must/ be 0 or a
--     multiple of
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-bufferDescriptorAlignment bufferDescriptorAlignment>
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-source-11253# If @source@
--     is 'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_CONSTANT_OFFSET_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', or
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', and
--     @descriptorSet@, @firstBinding@, and @bindingCount@ identify any
--     @OpTypeSampler@ variables, any @heapOffset@ and @heapArrayStride@
--     members of the corresponding member of @sourceData@ /must/ be 0 or a
--     multiple of
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-samplerDescriptorAlignment samplerDescriptorAlignment>
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-source-11254# If @source@
--     is 'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_CONSTANT_OFFSET_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', or
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', and
--     @descriptorSet@, @firstBinding@, and @bindingCount@ identify any
--     @OpTypeSampledImage@ variables, any @samplerHeapOffset@ and
--     @samplerHeapArrayStride@ members of the corresponding member of
--     @sourceData@ /must/ be 0 or a multiple of
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-samplerDescriptorAlignment samplerDescriptorAlignment>
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-source-11356# If @source@
--     is 'DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT', or
--     'DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT', @resourceMask@ /must/
--     include 'SPIRV_RESOURCE_TYPE_UNIFORM_BUFFER_BIT_EXT'
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-source-11357# If @source@
--     is 'DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT' or
--     'DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', @resourceMask@ /must/
--     include at least one of
--     'SPIRV_RESOURCE_TYPE_UNIFORM_BUFFER_BIT_EXT',
--     'SPIRV_RESOURCE_TYPE_READ_ONLY_STORAGE_BUFFER_BIT_EXT',
--     'SPIRV_RESOURCE_TYPE_READ_WRITE_STORAGE_BUFFER_BIT_EXT', or
--     'SPIRV_RESOURCE_TYPE_ACCELERATION_STRUCTURE_BIT_EXT'
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-source-11358# If @source@
--     is 'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT', or
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', and
--     the mapping sets @useCombinedImageSamplerIndex@ to
--     'Vulkan.Core10.FundamentalTypes.TRUE', @resourceMask@ /must/ include
--     at least one of
--     'SPIRV_RESOURCE_TYPE_COMBINED_SAMPLED_IMAGE_BIT_EXT',
--     'SPIRV_RESOURCE_TYPE_SAMPLED_IMAGE_BIT_EXT', or
--     'SPIRV_RESOURCE_TYPE_SAMPLER_BIT_EXT'
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-source-11389# If @source@
--     is 'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_CONSTANT_OFFSET_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', or
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', and
--     @bindingCount@ is not @1@, the @pEmbeddedSampler@ member of the
--     corresponding mapping structure /must/ be @NULL@
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-source-11390# If @source@
--     is 'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_CONSTANT_OFFSET_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT',
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', or
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', and
--     @descriptorSet@, @firstBinding@, and @bindingCount@ identify any
--     @OpTypeTensorARM@ variables, the @heapOffset@, and @heapArrayStride@
--     members of the corresponding member of @sourceData@ /must/ be 0 or a
--     multiple of
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-tensorDescriptorAlignment tensorDescriptorAlignment>
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-sType-sType# @sType@
--     /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_AND_BINDING_MAPPING_EXT'
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-pNext-pNext# @pNext@
--     /must/ be @NULL@ or a pointer to a valid instance of
--     'Vulkan.Extensions.VK_NV_push_constant_bank.PushConstantBankInfoNV'
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-sType-unique# The @sType@
--     value of each structure in the @pNext@ chain /must/ be unique
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-resourceMask-parameter#
--     @resourceMask@ /must/ be a valid combination of
--     'SpirvResourceTypeFlagBitsEXT' values
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-resourceMask-requiredbitmask#
--     @resourceMask@ /must/ not be @0@
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-source-parameter# @source@
--     /must/ be a valid 'DescriptorMappingSourceEXT' value
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-constantOffset-parameter#
--     If @source@ is
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_CONSTANT_OFFSET_EXT', the
--     @constantOffset@ member of @sourceData@ /must/ be a valid
--     'DescriptorMappingSourceConstantOffsetEXT' structure
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-pushIndex-parameter# If
--     @source@ is 'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT',
--     the @pushIndex@ member of @sourceData@ /must/ be a valid
--     'DescriptorMappingSourcePushIndexEXT' structure
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-indirectIndex-parameter#
--     If @source@ is
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', the
--     @indirectIndex@ member of @sourceData@ /must/ be a valid
--     'DescriptorMappingSourceIndirectIndexEXT' structure
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-indirectIndexArray-parameter#
--     If @source@ is
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', the
--     @indirectIndexArray@ member of @sourceData@ /must/ be a valid
--     'DescriptorMappingSourceIndirectIndexArrayEXT' structure
--
-- -   #VUID-VkDescriptorSetAndBindingMappingEXT-shaderRecordIndex-parameter#
--     If @source@ is
--     'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', the
--     @shaderRecordIndex@ member of @sourceData@ /must/ be a valid
--     'DescriptorMappingSourceShaderRecordIndexEXT' structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'DescriptorMappingSourceDataEXT', 'DescriptorMappingSourceEXT',
-- 'ShaderDescriptorSetAndBindingMappingInfoEXT',
-- 'SpirvResourceTypeFlagsEXT',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data DescriptorSetAndBindingMappingEXT (es :: [Type]) = DescriptorSetAndBindingMappingEXT
  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
    forall (es :: [*]).
DescriptorSetAndBindingMappingEXT es -> Chain es
next :: Chain es
  , -- | @descriptorSet@ is the value of 'Vulkan.Core10.Handles.DescriptorSet'
    -- for resources that this mapping affects.
    forall (es :: [*]). DescriptorSetAndBindingMappingEXT es -> Word32
descriptorSet :: Word32
  , -- | @firstBinding@ is the first value of @Binding@ of resources that this
    -- mapping affects.
    forall (es :: [*]). DescriptorSetAndBindingMappingEXT es -> Word32
firstBinding :: Word32
  , -- | @bindingCount@ is the number of consecutive @Binding@ values of
    -- resources that this mapping affects.
    forall (es :: [*]). DescriptorSetAndBindingMappingEXT es -> Word32
bindingCount :: Word32
  , -- | @resourceMask@ is a mask of 'SpirvResourceTypeFlagBitsEXT' values
    -- indicating which resource types are specified by this mapping.
    forall (es :: [*]).
DescriptorSetAndBindingMappingEXT es -> SpirvResourceTypeFlagsEXT
resourceMask :: SpirvResourceTypeFlagsEXT
  , -- | @source@ is a 'DescriptorMappingSourceEXT' value specifying the method
    -- of mapping specified for the affected resources.
    forall (es :: [*]).
DescriptorSetAndBindingMappingEXT es -> DescriptorMappingSourceEXT
source :: DescriptorMappingSourceEXT
  , -- | @sourceData@ is a 'DescriptorMappingSourceDataEXT' that provides the
    -- details of how each mapping is specified according to @source@.
    forall (es :: [*]).
DescriptorSetAndBindingMappingEXT es
-> DescriptorMappingSourceDataEXT
sourceData :: DescriptorMappingSourceDataEXT
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DescriptorSetAndBindingMappingEXT (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (DescriptorSetAndBindingMappingEXT es)

instance Extensible DescriptorSetAndBindingMappingEXT where
  extensibleTypeName :: String
extensibleTypeName = String
"DescriptorSetAndBindingMappingEXT"
  setNext :: forall (ds :: [*]) (es :: [*]).
DescriptorSetAndBindingMappingEXT ds
-> Chain es -> DescriptorSetAndBindingMappingEXT es
setNext DescriptorSetAndBindingMappingEXT{Word32
Chain ds
SpirvResourceTypeFlagsEXT
DescriptorMappingSourceEXT
DescriptorMappingSourceDataEXT
next :: forall (es :: [*]).
DescriptorSetAndBindingMappingEXT es -> Chain es
descriptorSet :: forall (es :: [*]). DescriptorSetAndBindingMappingEXT es -> Word32
firstBinding :: forall (es :: [*]). DescriptorSetAndBindingMappingEXT es -> Word32
bindingCount :: forall (es :: [*]). DescriptorSetAndBindingMappingEXT es -> Word32
resourceMask :: forall (es :: [*]).
DescriptorSetAndBindingMappingEXT es -> SpirvResourceTypeFlagsEXT
source :: forall (es :: [*]).
DescriptorSetAndBindingMappingEXT es -> DescriptorMappingSourceEXT
sourceData :: forall (es :: [*]).
DescriptorSetAndBindingMappingEXT es
-> DescriptorMappingSourceDataEXT
next :: Chain ds
descriptorSet :: Word32
firstBinding :: Word32
bindingCount :: Word32
resourceMask :: SpirvResourceTypeFlagsEXT
source :: DescriptorMappingSourceEXT
sourceData :: DescriptorMappingSourceDataEXT
..} Chain es
next' = DescriptorSetAndBindingMappingEXT{next :: Chain es
next = Chain es
next', Word32
SpirvResourceTypeFlagsEXT
DescriptorMappingSourceEXT
DescriptorMappingSourceDataEXT
descriptorSet :: Word32
firstBinding :: Word32
bindingCount :: Word32
resourceMask :: SpirvResourceTypeFlagsEXT
source :: DescriptorMappingSourceEXT
sourceData :: DescriptorMappingSourceDataEXT
descriptorSet :: Word32
firstBinding :: Word32
bindingCount :: Word32
resourceMask :: SpirvResourceTypeFlagsEXT
source :: DescriptorMappingSourceEXT
sourceData :: DescriptorMappingSourceDataEXT
..}
  getNext :: forall (es :: [*]).
DescriptorSetAndBindingMappingEXT es -> Chain es
getNext DescriptorSetAndBindingMappingEXT{Word32
Chain es
SpirvResourceTypeFlagsEXT
DescriptorMappingSourceEXT
DescriptorMappingSourceDataEXT
next :: forall (es :: [*]).
DescriptorSetAndBindingMappingEXT es -> Chain es
descriptorSet :: forall (es :: [*]). DescriptorSetAndBindingMappingEXT es -> Word32
firstBinding :: forall (es :: [*]). DescriptorSetAndBindingMappingEXT es -> Word32
bindingCount :: forall (es :: [*]). DescriptorSetAndBindingMappingEXT es -> Word32
resourceMask :: forall (es :: [*]).
DescriptorSetAndBindingMappingEXT es -> SpirvResourceTypeFlagsEXT
source :: forall (es :: [*]).
DescriptorSetAndBindingMappingEXT es -> DescriptorMappingSourceEXT
sourceData :: forall (es :: [*]).
DescriptorSetAndBindingMappingEXT es
-> DescriptorMappingSourceDataEXT
next :: Chain es
descriptorSet :: Word32
firstBinding :: Word32
bindingCount :: Word32
resourceMask :: SpirvResourceTypeFlagsEXT
source :: DescriptorMappingSourceEXT
sourceData :: DescriptorMappingSourceDataEXT
..} = Chain es
next
  extends :: forall e b proxy. Typeable e => proxy e -> (Extends DescriptorSetAndBindingMappingEXT e => b) -> Maybe b
  extends :: forall e b (proxy :: * -> *).
Typeable e =>
proxy e
-> (Extends DescriptorSetAndBindingMappingEXT e => b) -> Maybe b
extends proxy e
_ Extends DescriptorSetAndBindingMappingEXT e => b
f
    | Just e :~: PushConstantBankInfoNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PushConstantBankInfoNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DescriptorSetAndBindingMappingEXT e => b
f
    | Bool
otherwise = Maybe b
forall a. Maybe a
Nothing

instance ( Extendss DescriptorSetAndBindingMappingEXT es
         , PokeChain es ) => ToCStruct (DescriptorSetAndBindingMappingEXT es) where
  withCStruct :: forall b.
DescriptorSetAndBindingMappingEXT es
-> (Ptr (DescriptorSetAndBindingMappingEXT es) -> IO b) -> IO b
withCStruct DescriptorSetAndBindingMappingEXT es
x Ptr (DescriptorSetAndBindingMappingEXT es) -> IO b
f = Int -> (Ptr (DescriptorSetAndBindingMappingEXT es) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
96 ((Ptr (DescriptorSetAndBindingMappingEXT es) -> IO b) -> IO b)
-> (Ptr (DescriptorSetAndBindingMappingEXT es) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (DescriptorSetAndBindingMappingEXT es)
p -> Ptr (DescriptorSetAndBindingMappingEXT es)
-> DescriptorSetAndBindingMappingEXT es -> IO b -> IO b
forall b.
Ptr (DescriptorSetAndBindingMappingEXT es)
-> DescriptorSetAndBindingMappingEXT es -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (DescriptorSetAndBindingMappingEXT es)
p DescriptorSetAndBindingMappingEXT es
x (Ptr (DescriptorSetAndBindingMappingEXT es) -> IO b
f Ptr (DescriptorSetAndBindingMappingEXT es)
p)
  pokeCStruct :: forall b.
Ptr (DescriptorSetAndBindingMappingEXT es)
-> DescriptorSetAndBindingMappingEXT es -> IO b -> IO b
pokeCStruct Ptr (DescriptorSetAndBindingMappingEXT es)
p DescriptorSetAndBindingMappingEXT{Word32
Chain es
SpirvResourceTypeFlagsEXT
DescriptorMappingSourceEXT
DescriptorMappingSourceDataEXT
next :: forall (es :: [*]).
DescriptorSetAndBindingMappingEXT es -> Chain es
descriptorSet :: forall (es :: [*]). DescriptorSetAndBindingMappingEXT es -> Word32
firstBinding :: forall (es :: [*]). DescriptorSetAndBindingMappingEXT es -> Word32
bindingCount :: forall (es :: [*]). DescriptorSetAndBindingMappingEXT es -> Word32
resourceMask :: forall (es :: [*]).
DescriptorSetAndBindingMappingEXT es -> SpirvResourceTypeFlagsEXT
source :: forall (es :: [*]).
DescriptorSetAndBindingMappingEXT es -> DescriptorMappingSourceEXT
sourceData :: forall (es :: [*]).
DescriptorSetAndBindingMappingEXT es
-> DescriptorMappingSourceDataEXT
next :: Chain es
descriptorSet :: Word32
firstBinding :: Word32
bindingCount :: Word32
resourceMask :: SpirvResourceTypeFlagsEXT
source :: DescriptorMappingSourceEXT
sourceData :: DescriptorMappingSourceDataEXT
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (DescriptorSetAndBindingMappingEXT es)
p Ptr (DescriptorSetAndBindingMappingEXT es)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DESCRIPTOR_SET_AND_BINDING_MAPPING_EXT)
    pNext'' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (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 (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ Chain es -> (Ptr (Chain es) -> IO b) -> IO b
forall (es :: [*]) a.
PokeChain es =>
Chain es -> (Ptr (Chain es) -> IO a) -> IO a
forall a. Chain es -> (Ptr (Chain es) -> IO a) -> IO a
withChain (Chain es
next)
    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (descriptorSet)
    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (firstBinding)
    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (bindingCount)
    lift $ poke ((p `plusPtr` 28 :: Ptr SpirvResourceTypeFlagsEXT)) (resourceMask)
    lift $ poke ((p `plusPtr` 32 :: Ptr DescriptorMappingSourceEXT)) (source)
    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr DescriptorMappingSourceDataEXT)) (sourceData) . ($ ())
    lift $ f
  cStructSize :: Int
cStructSize = Int
96
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr (DescriptorSetAndBindingMappingEXT es) -> IO b -> IO b
pokeZeroCStruct Ptr (DescriptorSetAndBindingMappingEXT es)
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (DescriptorSetAndBindingMappingEXT es)
p Ptr (DescriptorSetAndBindingMappingEXT es)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DESCRIPTOR_SET_AND_BINDING_MAPPING_EXT)
    pNext' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (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 (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ forall (es :: [*]) a.
PokeChain es =>
(Ptr (Chain es) -> IO a) -> IO a
withZeroChain @es
    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)
    lift $ poke ((p `plusPtr` 28 :: Ptr SpirvResourceTypeFlagsEXT)) (zero)
    lift $ poke ((p `plusPtr` 32 :: Ptr DescriptorMappingSourceEXT)) (zero)
    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr DescriptorMappingSourceDataEXT)) (zero) . ($ ())
    lift $ f

instance es ~ '[] => Zero (DescriptorSetAndBindingMappingEXT es) where
  zero :: DescriptorSetAndBindingMappingEXT es
zero = Chain es
-> Word32
-> Word32
-> Word32
-> SpirvResourceTypeFlagsEXT
-> DescriptorMappingSourceEXT
-> DescriptorMappingSourceDataEXT
-> DescriptorSetAndBindingMappingEXT es
forall (es :: [*]).
Chain es
-> Word32
-> Word32
-> Word32
-> SpirvResourceTypeFlagsEXT
-> DescriptorMappingSourceEXT
-> DescriptorMappingSourceDataEXT
-> DescriptorSetAndBindingMappingEXT es
DescriptorSetAndBindingMappingEXT
           ()
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           SpirvResourceTypeFlagsEXT
forall a. Zero a => a
zero
           DescriptorMappingSourceEXT
forall a. Zero a => a
zero
           DescriptorMappingSourceDataEXT
forall a. Zero a => a
zero


-- | VkShaderDescriptorSetAndBindingMappingInfoEXT - Structure specifying
-- mappings from shader resources to descriptor heaps
--
-- = Description
--
-- Including this structure in the @pNext@ chain of
-- 'Vulkan.Core10.ComputePipeline.PipelineShaderStageCreateInfo' will set
-- mappings for the shader defined by that structure. Similarly, including
-- this structure in the @pNext@ chain of a
-- 'Vulkan.Extensions.VK_EXT_shader_object.ShaderCreateInfoEXT' with a
-- @codeType@ of
-- 'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CODE_TYPE_SPIRV_EXT',
-- will set mappings for that shader.
--
-- If this structure is not present, it is equivalent to setting
-- @mappingCount@ to 0.
--
-- == Valid Usage
--
-- -   #VUID-VkShaderDescriptorSetAndBindingMappingInfoEXT-pMappings-11244#
--     Any two elements of @pMappings@ /must/ not have the same value of
--     @descriptorSet@, an overlapping range specified by @firstBinding@
--     and @bindingCount@, and any overlapping bits in @resourceMask@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkShaderDescriptorSetAndBindingMappingInfoEXT-sType-sType#
--     @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SHADER_DESCRIPTOR_SET_AND_BINDING_MAPPING_INFO_EXT'
--
-- -   #VUID-VkShaderDescriptorSetAndBindingMappingInfoEXT-pMappings-parameter#
--     If @mappingCount@ is not @0@, @pMappings@ /must/ be a valid pointer
--     to an array of @mappingCount@ valid
--     'DescriptorSetAndBindingMappingEXT' structures
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'DescriptorSetAndBindingMappingEXT',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data ShaderDescriptorSetAndBindingMappingInfoEXT = ShaderDescriptorSetAndBindingMappingInfoEXT
  { -- | @pMappings@ is a pointer to an array of
    -- 'DescriptorSetAndBindingMappingEXT' structures specifying mappings for a
    -- set of descriptors
    ShaderDescriptorSetAndBindingMappingInfoEXT
-> Vector (SomeStruct DescriptorSetAndBindingMappingEXT)
mappings :: Vector (SomeStruct DescriptorSetAndBindingMappingEXT) }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (ShaderDescriptorSetAndBindingMappingInfoEXT)
#endif
deriving instance Show ShaderDescriptorSetAndBindingMappingInfoEXT

instance ToCStruct ShaderDescriptorSetAndBindingMappingInfoEXT where
  withCStruct :: forall b.
ShaderDescriptorSetAndBindingMappingInfoEXT
-> (Ptr ShaderDescriptorSetAndBindingMappingInfoEXT -> IO b)
-> IO b
withCStruct ShaderDescriptorSetAndBindingMappingInfoEXT
x Ptr ShaderDescriptorSetAndBindingMappingInfoEXT -> IO b
f = Int
-> (Ptr ShaderDescriptorSetAndBindingMappingInfoEXT -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr ShaderDescriptorSetAndBindingMappingInfoEXT -> IO b) -> IO b)
-> (Ptr ShaderDescriptorSetAndBindingMappingInfoEXT -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr ShaderDescriptorSetAndBindingMappingInfoEXT
p -> Ptr ShaderDescriptorSetAndBindingMappingInfoEXT
-> ShaderDescriptorSetAndBindingMappingInfoEXT -> IO b -> IO b
forall b.
Ptr ShaderDescriptorSetAndBindingMappingInfoEXT
-> ShaderDescriptorSetAndBindingMappingInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr ShaderDescriptorSetAndBindingMappingInfoEXT
p ShaderDescriptorSetAndBindingMappingInfoEXT
x (Ptr ShaderDescriptorSetAndBindingMappingInfoEXT -> IO b
f Ptr ShaderDescriptorSetAndBindingMappingInfoEXT
p)
  pokeCStruct :: forall b.
Ptr ShaderDescriptorSetAndBindingMappingInfoEXT
-> ShaderDescriptorSetAndBindingMappingInfoEXT -> IO b -> IO b
pokeCStruct Ptr ShaderDescriptorSetAndBindingMappingInfoEXT
p ShaderDescriptorSetAndBindingMappingInfoEXT{Vector (SomeStruct DescriptorSetAndBindingMappingEXT)
mappings :: ShaderDescriptorSetAndBindingMappingInfoEXT
-> Vector (SomeStruct DescriptorSetAndBindingMappingEXT)
mappings :: Vector (SomeStruct DescriptorSetAndBindingMappingEXT)
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ShaderDescriptorSetAndBindingMappingInfoEXT
p Ptr ShaderDescriptorSetAndBindingMappingInfoEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_SHADER_DESCRIPTOR_SET_AND_BINDING_MAPPING_INFO_EXT)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ShaderDescriptorSetAndBindingMappingInfoEXT
p Ptr ShaderDescriptorSetAndBindingMappingInfoEXT
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ShaderDescriptorSetAndBindingMappingInfoEXT
p Ptr ShaderDescriptorSetAndBindingMappingInfoEXT
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) ((Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector (SomeStruct DescriptorSetAndBindingMappingEXT) -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector (SomeStruct DescriptorSetAndBindingMappingEXT) -> Int)
-> Vector (SomeStruct DescriptorSetAndBindingMappingEXT) -> Int
forall a b. (a -> b) -> a -> b
$ (Vector (SomeStruct DescriptorSetAndBindingMappingEXT)
mappings)) :: Word32))
    pPMappings' <- ((Ptr (DescriptorSetAndBindingMappingEXT (ZonkAny 10)) -> IO b)
 -> IO b)
-> ContT
     b IO (Ptr (DescriptorSetAndBindingMappingEXT (ZonkAny 10)))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (DescriptorSetAndBindingMappingEXT (ZonkAny 10)) -> IO b)
  -> IO b)
 -> ContT
      b IO (Ptr (DescriptorSetAndBindingMappingEXT (ZonkAny 10))))
-> ((Ptr (DescriptorSetAndBindingMappingEXT (ZonkAny 10)) -> IO b)
    -> IO b)
-> ContT
     b IO (Ptr (DescriptorSetAndBindingMappingEXT (ZonkAny 10)))
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @(DescriptorSetAndBindingMappingEXT _) ((Vector (SomeStruct DescriptorSetAndBindingMappingEXT) -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector (SomeStruct DescriptorSetAndBindingMappingEXT)
mappings)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
96)
    Data.Vector.imapM_ (\Int
i SomeStruct DescriptorSetAndBindingMappingEXT
e -> ((() -> IO b) -> IO b) -> ContT b IO ()
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO b) -> IO b) -> ContT b IO ())
-> ((() -> IO b) -> IO b) -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (SomeStruct DescriptorSetAndBindingMappingEXT)
-> SomeStruct DescriptorSetAndBindingMappingEXT -> IO b -> IO b
forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
Ptr (SomeStruct a) -> SomeStruct a -> IO b -> IO b
pokeSomeCStruct (Ptr (DescriptorSetAndBindingMappingEXT (ZonkAny 11))
-> Ptr (SomeStruct DescriptorSetAndBindingMappingEXT)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (DescriptorSetAndBindingMappingEXT (ZonkAny 10))
pPMappings' Ptr (DescriptorSetAndBindingMappingEXT (ZonkAny 10))
-> Int -> Ptr (DescriptorSetAndBindingMappingEXT w)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
96 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (DescriptorSetAndBindingMappingEXT _))) (SomeStruct DescriptorSetAndBindingMappingEXT
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
$ ())) (mappings)
    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (DescriptorSetAndBindingMappingEXT _)))) (pPMappings')
    lift $ f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr ShaderDescriptorSetAndBindingMappingInfoEXT -> IO b -> IO b
pokeZeroCStruct Ptr ShaderDescriptorSetAndBindingMappingInfoEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ShaderDescriptorSetAndBindingMappingInfoEXT
p Ptr ShaderDescriptorSetAndBindingMappingInfoEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_SHADER_DESCRIPTOR_SET_AND_BINDING_MAPPING_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ShaderDescriptorSetAndBindingMappingInfoEXT
p Ptr ShaderDescriptorSetAndBindingMappingInfoEXT
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO b
f

instance Zero ShaderDescriptorSetAndBindingMappingInfoEXT where
  zero :: ShaderDescriptorSetAndBindingMappingInfoEXT
zero = Vector (SomeStruct DescriptorSetAndBindingMappingEXT)
-> ShaderDescriptorSetAndBindingMappingInfoEXT
ShaderDescriptorSetAndBindingMappingInfoEXT
           Vector (SomeStruct DescriptorSetAndBindingMappingEXT)
forall a. Monoid a => a
mempty


-- | VkSamplerCustomBorderColorIndexCreateInfoEXT - Structure specifying the
-- custom border color index for a sampler
--
-- = Description
--
-- If this structure is included in the @pNext@ chain of
-- 'Vulkan.Core10.Sampler.SamplerCreateInfo', the value of @index@ will be
-- used for the custom border color registration. @index@ does not need to
-- be registered at the point that a sampler object is created or a sampler
-- descriptor is written; as long as it is registered when any use of the
-- sampler is recorded to a command, and remains registered while the
-- sampler is in use. The color registered with the index and the color
-- specified in the sampler /must/ be identically defined.
--
-- If this structure is not provided when creating a sampler object with a
-- custom border color, it is equivalent to registering a new custom border
-- color by calling 'registerCustomBorderColorEXT' with that custom border
-- color value, and using that value as @index@ in this structure. This
-- implicit registration will be implicitly unregistered when the sampler
-- is destroyed.
--
-- If this structure is not provided when creating a sampler object without
-- a custom border color, it is equivalent to setting @index@ to 0.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_custom_border_color VK_EXT_custom_border_color>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data SamplerCustomBorderColorIndexCreateInfoEXT = SamplerCustomBorderColorIndexCreateInfoEXT
  { -- | @index@ is the @uint32_t@ index value to use with the sampler
    --
    -- #VUID-VkSamplerCustomBorderColorIndexCreateInfoEXT-index-11289# @index@
    -- /must/ be less than
    -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-maxCustomBorderColorSamplers maxCustomBorderColorSamplers>
    SamplerCustomBorderColorIndexCreateInfoEXT -> Word32
index :: Word32 }
  deriving (Typeable, SamplerCustomBorderColorIndexCreateInfoEXT
-> SamplerCustomBorderColorIndexCreateInfoEXT -> Bool
(SamplerCustomBorderColorIndexCreateInfoEXT
 -> SamplerCustomBorderColorIndexCreateInfoEXT -> Bool)
-> (SamplerCustomBorderColorIndexCreateInfoEXT
    -> SamplerCustomBorderColorIndexCreateInfoEXT -> Bool)
-> Eq SamplerCustomBorderColorIndexCreateInfoEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SamplerCustomBorderColorIndexCreateInfoEXT
-> SamplerCustomBorderColorIndexCreateInfoEXT -> Bool
== :: SamplerCustomBorderColorIndexCreateInfoEXT
-> SamplerCustomBorderColorIndexCreateInfoEXT -> Bool
$c/= :: SamplerCustomBorderColorIndexCreateInfoEXT
-> SamplerCustomBorderColorIndexCreateInfoEXT -> Bool
/= :: SamplerCustomBorderColorIndexCreateInfoEXT
-> SamplerCustomBorderColorIndexCreateInfoEXT -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (SamplerCustomBorderColorIndexCreateInfoEXT)
#endif
deriving instance Show SamplerCustomBorderColorIndexCreateInfoEXT

instance ToCStruct SamplerCustomBorderColorIndexCreateInfoEXT where
  withCStruct :: forall b.
SamplerCustomBorderColorIndexCreateInfoEXT
-> (Ptr SamplerCustomBorderColorIndexCreateInfoEXT -> IO b) -> IO b
withCStruct SamplerCustomBorderColorIndexCreateInfoEXT
x Ptr SamplerCustomBorderColorIndexCreateInfoEXT -> IO b
f = Int
-> (Ptr SamplerCustomBorderColorIndexCreateInfoEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr SamplerCustomBorderColorIndexCreateInfoEXT -> IO b) -> IO b)
-> (Ptr SamplerCustomBorderColorIndexCreateInfoEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr SamplerCustomBorderColorIndexCreateInfoEXT
p -> Ptr SamplerCustomBorderColorIndexCreateInfoEXT
-> SamplerCustomBorderColorIndexCreateInfoEXT -> IO b -> IO b
forall b.
Ptr SamplerCustomBorderColorIndexCreateInfoEXT
-> SamplerCustomBorderColorIndexCreateInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr SamplerCustomBorderColorIndexCreateInfoEXT
p SamplerCustomBorderColorIndexCreateInfoEXT
x (Ptr SamplerCustomBorderColorIndexCreateInfoEXT -> IO b
f Ptr SamplerCustomBorderColorIndexCreateInfoEXT
p)
  pokeCStruct :: forall b.
Ptr SamplerCustomBorderColorIndexCreateInfoEXT
-> SamplerCustomBorderColorIndexCreateInfoEXT -> IO b -> IO b
pokeCStruct Ptr SamplerCustomBorderColorIndexCreateInfoEXT
p SamplerCustomBorderColorIndexCreateInfoEXT{Word32
index :: SamplerCustomBorderColorIndexCreateInfoEXT -> Word32
index :: Word32
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SamplerCustomBorderColorIndexCreateInfoEXT
p Ptr SamplerCustomBorderColorIndexCreateInfoEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_INDEX_CREATE_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SamplerCustomBorderColorIndexCreateInfoEXT
p Ptr SamplerCustomBorderColorIndexCreateInfoEXT
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SamplerCustomBorderColorIndexCreateInfoEXT
p Ptr SamplerCustomBorderColorIndexCreateInfoEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Word32
index)
    IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr SamplerCustomBorderColorIndexCreateInfoEXT -> IO b -> IO b
pokeZeroCStruct Ptr SamplerCustomBorderColorIndexCreateInfoEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SamplerCustomBorderColorIndexCreateInfoEXT
p Ptr SamplerCustomBorderColorIndexCreateInfoEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_INDEX_CREATE_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SamplerCustomBorderColorIndexCreateInfoEXT
p Ptr SamplerCustomBorderColorIndexCreateInfoEXT
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SamplerCustomBorderColorIndexCreateInfoEXT
p Ptr SamplerCustomBorderColorIndexCreateInfoEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct SamplerCustomBorderColorIndexCreateInfoEXT where
  peekCStruct :: Ptr SamplerCustomBorderColorIndexCreateInfoEXT
-> IO SamplerCustomBorderColorIndexCreateInfoEXT
peekCStruct Ptr SamplerCustomBorderColorIndexCreateInfoEXT
p = do
    index <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr SamplerCustomBorderColorIndexCreateInfoEXT
p Ptr SamplerCustomBorderColorIndexCreateInfoEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    pure $ SamplerCustomBorderColorIndexCreateInfoEXT
             index

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

instance Zero SamplerCustomBorderColorIndexCreateInfoEXT where
  zero :: SamplerCustomBorderColorIndexCreateInfoEXT
zero = Word32 -> SamplerCustomBorderColorIndexCreateInfoEXT
SamplerCustomBorderColorIndexCreateInfoEXT
           Word32
forall a. Zero a => a
zero


-- | VkOpaqueCaptureDataCreateInfoEXT - Structure specifying opaque capture
-- data
--
-- = Description
--
-- When an image is created with
-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DESCRIPTOR_HEAP_CAPTURE_REPLAY_BIT_EXT'
-- set in 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@, if the @pNext@
-- chain of 'Vulkan.Core10.Image.ImageCreateInfo' includes this structure,
-- and @pData@ is not @NULL@, the implementation will attempt to recreate
-- the image such that descriptors written with
-- 'writeResourceDescriptorsEXT' will be reproduced with the same bit
-- pattern as during capture if possible. If the implementation is unable
-- to recreate the image based on this data, image creation will fail and
-- return
-- 'Vulkan.Core10.Enums.Result.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS'.
--
-- When a tensor is created with
-- 'Vulkan.Extensions.VK_ARM_tensors.TENSOR_CREATE_DESCRIPTOR_HEAP_CAPTURE_REPLAY_BIT_ARM'
-- set in 'Vulkan.Extensions.VK_ARM_tensors.TensorCreateInfoARM'::@flags@,
-- if the @pNext@ chain of
-- 'Vulkan.Extensions.VK_ARM_tensors.TensorCreateInfoARM' includes this
-- structure, and @pData@ is not @NULL@, the implementation will attempt to
-- recreate the tensor such that descriptors written with
-- 'writeResourceDescriptorsEXT' will be reproduced with the same bit
-- pattern as during capture if possible. If the implementation is unable
-- to recreate the tensor based on this data, tensor creation will fail and
-- return
-- 'Vulkan.Core10.Enums.Result.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS'.
--
-- If this structure is not present, it is equivalent to setting @pData@ to
-- @NULL@.
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkOpaqueCaptureDataCreateInfoEXT-sType-sType# @sType@ /must/
--     be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_OPAQUE_CAPTURE_DATA_CREATE_INFO_EXT'
--
-- -   #VUID-VkOpaqueCaptureDataCreateInfoEXT-pData-parameter# If @pData@
--     is not @NULL@, @pData@ /must/ be a valid pointer to a valid
--     'HostAddressRangeConstEXT' structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'HostAddressRangeConstEXT',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data OpaqueCaptureDataCreateInfoEXT = OpaqueCaptureDataCreateInfoEXT
  { -- | @pData@ is a pointer to the range of host memory containing opaque data
    -- previously captured via 'getImageOpaqueCaptureDataEXT'.
    OpaqueCaptureDataCreateInfoEXT -> Maybe HostAddressRangeConstEXT
data' :: Maybe HostAddressRangeConstEXT }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (OpaqueCaptureDataCreateInfoEXT)
#endif
deriving instance Show OpaqueCaptureDataCreateInfoEXT

instance ToCStruct OpaqueCaptureDataCreateInfoEXT where
  withCStruct :: forall b.
OpaqueCaptureDataCreateInfoEXT
-> (Ptr OpaqueCaptureDataCreateInfoEXT -> IO b) -> IO b
withCStruct OpaqueCaptureDataCreateInfoEXT
x Ptr OpaqueCaptureDataCreateInfoEXT -> IO b
f = Int -> (Ptr OpaqueCaptureDataCreateInfoEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr OpaqueCaptureDataCreateInfoEXT -> IO b) -> IO b)
-> (Ptr OpaqueCaptureDataCreateInfoEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr OpaqueCaptureDataCreateInfoEXT
p -> Ptr OpaqueCaptureDataCreateInfoEXT
-> OpaqueCaptureDataCreateInfoEXT -> IO b -> IO b
forall b.
Ptr OpaqueCaptureDataCreateInfoEXT
-> OpaqueCaptureDataCreateInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr OpaqueCaptureDataCreateInfoEXT
p OpaqueCaptureDataCreateInfoEXT
x (Ptr OpaqueCaptureDataCreateInfoEXT -> IO b
f Ptr OpaqueCaptureDataCreateInfoEXT
p)
  pokeCStruct :: forall b.
Ptr OpaqueCaptureDataCreateInfoEXT
-> OpaqueCaptureDataCreateInfoEXT -> IO b -> IO b
pokeCStruct Ptr OpaqueCaptureDataCreateInfoEXT
p OpaqueCaptureDataCreateInfoEXT{Maybe HostAddressRangeConstEXT
data' :: OpaqueCaptureDataCreateInfoEXT -> Maybe HostAddressRangeConstEXT
data' :: Maybe HostAddressRangeConstEXT
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr OpaqueCaptureDataCreateInfoEXT
p Ptr OpaqueCaptureDataCreateInfoEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_OPAQUE_CAPTURE_DATA_CREATE_INFO_EXT)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr OpaqueCaptureDataCreateInfoEXT
p Ptr OpaqueCaptureDataCreateInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    pData'' <- case (Maybe HostAddressRangeConstEXT
data') of
      Maybe HostAddressRangeConstEXT
Nothing -> Ptr HostAddressRangeConstEXT
-> ContT b IO (Ptr HostAddressRangeConstEXT)
forall a. a -> ContT b IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr HostAddressRangeConstEXT
forall a. Ptr a
nullPtr
      Just HostAddressRangeConstEXT
j -> ((Ptr HostAddressRangeConstEXT -> IO b) -> IO b)
-> ContT b IO (Ptr HostAddressRangeConstEXT)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr HostAddressRangeConstEXT -> IO b) -> IO b)
 -> ContT b IO (Ptr HostAddressRangeConstEXT))
-> ((Ptr HostAddressRangeConstEXT -> IO b) -> IO b)
-> ContT b IO (Ptr HostAddressRangeConstEXT)
forall a b. (a -> b) -> a -> b
$ HostAddressRangeConstEXT
-> (Ptr HostAddressRangeConstEXT -> IO b) -> IO b
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
HostAddressRangeConstEXT
-> (Ptr HostAddressRangeConstEXT -> IO b) -> IO b
withCStruct (HostAddressRangeConstEXT
j)
    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr HostAddressRangeConstEXT))) pData''
    lift $ f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr OpaqueCaptureDataCreateInfoEXT -> IO b -> IO b
pokeZeroCStruct Ptr OpaqueCaptureDataCreateInfoEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr OpaqueCaptureDataCreateInfoEXT
p Ptr OpaqueCaptureDataCreateInfoEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_OPAQUE_CAPTURE_DATA_CREATE_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr OpaqueCaptureDataCreateInfoEXT
p Ptr OpaqueCaptureDataCreateInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO b
f

instance FromCStruct OpaqueCaptureDataCreateInfoEXT where
  peekCStruct :: Ptr OpaqueCaptureDataCreateInfoEXT
-> IO OpaqueCaptureDataCreateInfoEXT
peekCStruct Ptr OpaqueCaptureDataCreateInfoEXT
p = do
    pData <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr HostAddressRangeConstEXT) ((Ptr OpaqueCaptureDataCreateInfoEXT
p Ptr OpaqueCaptureDataCreateInfoEXT
-> Int -> Ptr (Ptr HostAddressRangeConstEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr HostAddressRangeConstEXT)))
    pData' <- maybePeek (\Ptr HostAddressRangeConstEXT
j -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @HostAddressRangeConstEXT (Ptr HostAddressRangeConstEXT
j)) pData
    pure $ OpaqueCaptureDataCreateInfoEXT
             pData'

instance Zero OpaqueCaptureDataCreateInfoEXT where
  zero :: OpaqueCaptureDataCreateInfoEXT
zero = Maybe HostAddressRangeConstEXT -> OpaqueCaptureDataCreateInfoEXT
OpaqueCaptureDataCreateInfoEXT
           Maybe HostAddressRangeConstEXT
forall a. Maybe a
Nothing


-- | VkIndirectCommandsLayoutPushDataTokenNV - Struct specifying the details
-- of an indirect push data command layout token
--
-- = Description
--
-- If this structure is in the @pNext@ chain of
-- 'Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsLayoutTokenNV',
-- and
-- 'Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsLayoutTokenNV'::@tokenType@
-- is set to
-- 'Vulkan.Extensions.VK_NV_device_generated_commands.INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_DATA_NV',
-- this structure defines a push data command layout token.
--
-- If this structure is not provided, it is equivalent to setting
-- @pushDataOffset@ and @pushDataSize@ to 0.
--
-- == Valid Usage
--
-- -   #VUID-VkIndirectCommandsLayoutPushDataTokenNV-pushDataOffset-11335#
--     The sum of @pushDataOffset@ and @pushDataSize@ /must/ be less than
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-maxPushDataSize maxPushDataSize>
--
-- -   #VUID-VkIndirectCommandsLayoutPushDataTokenNV-pushDataOffset-11420#
--     @pushDataOffset@ /must/ be a multiple of 4
--
-- -   #VUID-VkIndirectCommandsLayoutPushDataTokenNV-pushDataSize-11421#
--     @pushDataSize@ /must/ be a multiple of 4
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkIndirectCommandsLayoutPushDataTokenNV-sType-sType# @sType@
--     /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_PUSH_DATA_TOKEN_NV'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_device_generated_commands VK_NV_device_generated_commands>,
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data IndirectCommandsLayoutPushDataTokenNV = IndirectCommandsLayoutPushDataTokenNV
  { -- | @pushDataOffset@ is the offset used for the push data command.
    IndirectCommandsLayoutPushDataTokenNV -> Word32
pushDataOffset :: Word32
  , -- | @pushDataSize@ is the size used for the push data command.
    IndirectCommandsLayoutPushDataTokenNV -> Word32
pushDataSize :: Word32
  }
  deriving (Typeable, IndirectCommandsLayoutPushDataTokenNV
-> IndirectCommandsLayoutPushDataTokenNV -> Bool
(IndirectCommandsLayoutPushDataTokenNV
 -> IndirectCommandsLayoutPushDataTokenNV -> Bool)
-> (IndirectCommandsLayoutPushDataTokenNV
    -> IndirectCommandsLayoutPushDataTokenNV -> Bool)
-> Eq IndirectCommandsLayoutPushDataTokenNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: IndirectCommandsLayoutPushDataTokenNV
-> IndirectCommandsLayoutPushDataTokenNV -> Bool
== :: IndirectCommandsLayoutPushDataTokenNV
-> IndirectCommandsLayoutPushDataTokenNV -> Bool
$c/= :: IndirectCommandsLayoutPushDataTokenNV
-> IndirectCommandsLayoutPushDataTokenNV -> Bool
/= :: IndirectCommandsLayoutPushDataTokenNV
-> IndirectCommandsLayoutPushDataTokenNV -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (IndirectCommandsLayoutPushDataTokenNV)
#endif
deriving instance Show IndirectCommandsLayoutPushDataTokenNV

instance ToCStruct IndirectCommandsLayoutPushDataTokenNV where
  withCStruct :: forall b.
IndirectCommandsLayoutPushDataTokenNV
-> (Ptr IndirectCommandsLayoutPushDataTokenNV -> IO b) -> IO b
withCStruct IndirectCommandsLayoutPushDataTokenNV
x Ptr IndirectCommandsLayoutPushDataTokenNV -> IO b
f = Int -> (Ptr IndirectCommandsLayoutPushDataTokenNV -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr IndirectCommandsLayoutPushDataTokenNV -> IO b) -> IO b)
-> (Ptr IndirectCommandsLayoutPushDataTokenNV -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr IndirectCommandsLayoutPushDataTokenNV
p -> Ptr IndirectCommandsLayoutPushDataTokenNV
-> IndirectCommandsLayoutPushDataTokenNV -> IO b -> IO b
forall b.
Ptr IndirectCommandsLayoutPushDataTokenNV
-> IndirectCommandsLayoutPushDataTokenNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsLayoutPushDataTokenNV
p IndirectCommandsLayoutPushDataTokenNV
x (Ptr IndirectCommandsLayoutPushDataTokenNV -> IO b
f Ptr IndirectCommandsLayoutPushDataTokenNV
p)
  pokeCStruct :: forall b.
Ptr IndirectCommandsLayoutPushDataTokenNV
-> IndirectCommandsLayoutPushDataTokenNV -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsLayoutPushDataTokenNV
p IndirectCommandsLayoutPushDataTokenNV{Word32
pushDataOffset :: IndirectCommandsLayoutPushDataTokenNV -> Word32
pushDataSize :: IndirectCommandsLayoutPushDataTokenNV -> Word32
pushDataOffset :: Word32
pushDataSize :: Word32
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutPushDataTokenNV
p Ptr IndirectCommandsLayoutPushDataTokenNV
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_PUSH_DATA_TOKEN_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutPushDataTokenNV
p Ptr IndirectCommandsLayoutPushDataTokenNV -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutPushDataTokenNV
p Ptr IndirectCommandsLayoutPushDataTokenNV -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Word32
pushDataOffset)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutPushDataTokenNV
p Ptr IndirectCommandsLayoutPushDataTokenNV -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) (Word32
pushDataSize)
    IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr IndirectCommandsLayoutPushDataTokenNV -> IO b -> IO b
pokeZeroCStruct Ptr IndirectCommandsLayoutPushDataTokenNV
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutPushDataTokenNV
p Ptr IndirectCommandsLayoutPushDataTokenNV
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_PUSH_DATA_TOKEN_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutPushDataTokenNV
p Ptr IndirectCommandsLayoutPushDataTokenNV -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutPushDataTokenNV
p Ptr IndirectCommandsLayoutPushDataTokenNV -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutPushDataTokenNV
p Ptr IndirectCommandsLayoutPushDataTokenNV -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct IndirectCommandsLayoutPushDataTokenNV where
  peekCStruct :: Ptr IndirectCommandsLayoutPushDataTokenNV
-> IO IndirectCommandsLayoutPushDataTokenNV
peekCStruct Ptr IndirectCommandsLayoutPushDataTokenNV
p = do
    pushDataOffset <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr IndirectCommandsLayoutPushDataTokenNV
p Ptr IndirectCommandsLayoutPushDataTokenNV -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    pushDataSize <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
    pure $ IndirectCommandsLayoutPushDataTokenNV
             pushDataOffset pushDataSize

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

instance Zero IndirectCommandsLayoutPushDataTokenNV where
  zero :: IndirectCommandsLayoutPushDataTokenNV
zero = Word32 -> Word32 -> IndirectCommandsLayoutPushDataTokenNV
IndirectCommandsLayoutPushDataTokenNV
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero


-- | VkSubsampledImageFormatPropertiesEXT - Structure specifying image
-- descriptor count for subsampled images
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_fragment_density_map VK_EXT_fragment_density_map>,
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data SubsampledImageFormatPropertiesEXT = SubsampledImageFormatPropertiesEXT
  { -- | @subsampledImageDescriptorCount@ is the number of image descriptors that
    -- the implementation uses to access the image.
    SubsampledImageFormatPropertiesEXT -> Word32
subsampledImageDescriptorCount :: Word32 }
  deriving (Typeable, SubsampledImageFormatPropertiesEXT
-> SubsampledImageFormatPropertiesEXT -> Bool
(SubsampledImageFormatPropertiesEXT
 -> SubsampledImageFormatPropertiesEXT -> Bool)
-> (SubsampledImageFormatPropertiesEXT
    -> SubsampledImageFormatPropertiesEXT -> Bool)
-> Eq SubsampledImageFormatPropertiesEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SubsampledImageFormatPropertiesEXT
-> SubsampledImageFormatPropertiesEXT -> Bool
== :: SubsampledImageFormatPropertiesEXT
-> SubsampledImageFormatPropertiesEXT -> Bool
$c/= :: SubsampledImageFormatPropertiesEXT
-> SubsampledImageFormatPropertiesEXT -> Bool
/= :: SubsampledImageFormatPropertiesEXT
-> SubsampledImageFormatPropertiesEXT -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (SubsampledImageFormatPropertiesEXT)
#endif
deriving instance Show SubsampledImageFormatPropertiesEXT

instance ToCStruct SubsampledImageFormatPropertiesEXT where
  withCStruct :: forall b.
SubsampledImageFormatPropertiesEXT
-> (Ptr SubsampledImageFormatPropertiesEXT -> IO b) -> IO b
withCStruct SubsampledImageFormatPropertiesEXT
x Ptr SubsampledImageFormatPropertiesEXT -> IO b
f = Int -> (Ptr SubsampledImageFormatPropertiesEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr SubsampledImageFormatPropertiesEXT -> IO b) -> IO b)
-> (Ptr SubsampledImageFormatPropertiesEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr SubsampledImageFormatPropertiesEXT
p -> Ptr SubsampledImageFormatPropertiesEXT
-> SubsampledImageFormatPropertiesEXT -> IO b -> IO b
forall b.
Ptr SubsampledImageFormatPropertiesEXT
-> SubsampledImageFormatPropertiesEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr SubsampledImageFormatPropertiesEXT
p SubsampledImageFormatPropertiesEXT
x (Ptr SubsampledImageFormatPropertiesEXT -> IO b
f Ptr SubsampledImageFormatPropertiesEXT
p)
  pokeCStruct :: forall b.
Ptr SubsampledImageFormatPropertiesEXT
-> SubsampledImageFormatPropertiesEXT -> IO b -> IO b
pokeCStruct Ptr SubsampledImageFormatPropertiesEXT
p SubsampledImageFormatPropertiesEXT{Word32
subsampledImageDescriptorCount :: SubsampledImageFormatPropertiesEXT -> Word32
subsampledImageDescriptorCount :: Word32
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SubsampledImageFormatPropertiesEXT
p Ptr SubsampledImageFormatPropertiesEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_SUBSAMPLED_IMAGE_FORMAT_PROPERTIES_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SubsampledImageFormatPropertiesEXT
p Ptr SubsampledImageFormatPropertiesEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SubsampledImageFormatPropertiesEXT
p Ptr SubsampledImageFormatPropertiesEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Word32
subsampledImageDescriptorCount)
    IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr SubsampledImageFormatPropertiesEXT -> IO b -> IO b
pokeZeroCStruct Ptr SubsampledImageFormatPropertiesEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SubsampledImageFormatPropertiesEXT
p Ptr SubsampledImageFormatPropertiesEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_SUBSAMPLED_IMAGE_FORMAT_PROPERTIES_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SubsampledImageFormatPropertiesEXT
p Ptr SubsampledImageFormatPropertiesEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SubsampledImageFormatPropertiesEXT
p Ptr SubsampledImageFormatPropertiesEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct SubsampledImageFormatPropertiesEXT where
  peekCStruct :: Ptr SubsampledImageFormatPropertiesEXT
-> IO SubsampledImageFormatPropertiesEXT
peekCStruct Ptr SubsampledImageFormatPropertiesEXT
p = do
    subsampledImageDescriptorCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr SubsampledImageFormatPropertiesEXT
p Ptr SubsampledImageFormatPropertiesEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    pure $ SubsampledImageFormatPropertiesEXT
             subsampledImageDescriptorCount

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

instance Zero SubsampledImageFormatPropertiesEXT where
  zero :: SubsampledImageFormatPropertiesEXT
zero = Word32 -> SubsampledImageFormatPropertiesEXT
SubsampledImageFormatPropertiesEXT
           Word32
forall a. Zero a => a
zero


-- | VkPhysicalDeviceDescriptorHeapFeaturesEXT - Structure describing support
-- for descriptor heaps
--
-- = Description
--
-- If the 'PhysicalDeviceDescriptorHeapFeaturesEXT' structure is included
-- in the @pNext@ chain of the
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2'
-- structure passed to
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2',
-- it is filled in to indicate whether each corresponding feature is
-- supported. If the application wishes to use a
-- 'Vulkan.Core10.Handles.Device' with any features described by
-- 'PhysicalDeviceDescriptorHeapFeaturesEXT', it /must/ add an instance of
-- the structure, with the desired feature members set to
-- 'Vulkan.Core10.FundamentalTypes.TRUE', to the @pNext@ chain of
-- 'Vulkan.Core10.Device.DeviceCreateInfo' when creating the
-- 'Vulkan.Core10.Handles.Device'.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceDescriptorHeapFeaturesEXT = PhysicalDeviceDescriptorHeapFeaturesEXT
  { -- | #features-descriptorHeap# @descriptorHeap@ specifies whether
    -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#descriptorheaps descriptor heaps>
    -- /can/ be used.
    PhysicalDeviceDescriptorHeapFeaturesEXT -> Bool
descriptorHeap :: Bool
  , -- | #features-descriptorHeapCaptureReplay# @descriptorHeapCaptureReplay@
    -- specifies whether
    -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#descriptorheaps-writing heap descriptors>
    -- /can/ be captured and replayed.
    PhysicalDeviceDescriptorHeapFeaturesEXT -> Bool
descriptorHeapCaptureReplay :: Bool
  }
  deriving (Typeable, PhysicalDeviceDescriptorHeapFeaturesEXT
-> PhysicalDeviceDescriptorHeapFeaturesEXT -> Bool
(PhysicalDeviceDescriptorHeapFeaturesEXT
 -> PhysicalDeviceDescriptorHeapFeaturesEXT -> Bool)
-> (PhysicalDeviceDescriptorHeapFeaturesEXT
    -> PhysicalDeviceDescriptorHeapFeaturesEXT -> Bool)
-> Eq PhysicalDeviceDescriptorHeapFeaturesEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PhysicalDeviceDescriptorHeapFeaturesEXT
-> PhysicalDeviceDescriptorHeapFeaturesEXT -> Bool
== :: PhysicalDeviceDescriptorHeapFeaturesEXT
-> PhysicalDeviceDescriptorHeapFeaturesEXT -> Bool
$c/= :: PhysicalDeviceDescriptorHeapFeaturesEXT
-> PhysicalDeviceDescriptorHeapFeaturesEXT -> Bool
/= :: PhysicalDeviceDescriptorHeapFeaturesEXT
-> PhysicalDeviceDescriptorHeapFeaturesEXT -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceDescriptorHeapFeaturesEXT)
#endif
deriving instance Show PhysicalDeviceDescriptorHeapFeaturesEXT

instance ToCStruct PhysicalDeviceDescriptorHeapFeaturesEXT where
  withCStruct :: forall b.
PhysicalDeviceDescriptorHeapFeaturesEXT
-> (Ptr PhysicalDeviceDescriptorHeapFeaturesEXT -> IO b) -> IO b
withCStruct PhysicalDeviceDescriptorHeapFeaturesEXT
x Ptr PhysicalDeviceDescriptorHeapFeaturesEXT -> IO b
f = Int
-> (Ptr PhysicalDeviceDescriptorHeapFeaturesEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr PhysicalDeviceDescriptorHeapFeaturesEXT -> IO b) -> IO b)
-> (Ptr PhysicalDeviceDescriptorHeapFeaturesEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceDescriptorHeapFeaturesEXT
p -> Ptr PhysicalDeviceDescriptorHeapFeaturesEXT
-> PhysicalDeviceDescriptorHeapFeaturesEXT -> IO b -> IO b
forall b.
Ptr PhysicalDeviceDescriptorHeapFeaturesEXT
-> PhysicalDeviceDescriptorHeapFeaturesEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceDescriptorHeapFeaturesEXT
p PhysicalDeviceDescriptorHeapFeaturesEXT
x (Ptr PhysicalDeviceDescriptorHeapFeaturesEXT -> IO b
f Ptr PhysicalDeviceDescriptorHeapFeaturesEXT
p)
  pokeCStruct :: forall b.
Ptr PhysicalDeviceDescriptorHeapFeaturesEXT
-> PhysicalDeviceDescriptorHeapFeaturesEXT -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceDescriptorHeapFeaturesEXT
p PhysicalDeviceDescriptorHeapFeaturesEXT{Bool
descriptorHeap :: PhysicalDeviceDescriptorHeapFeaturesEXT -> Bool
descriptorHeapCaptureReplay :: PhysicalDeviceDescriptorHeapFeaturesEXT -> Bool
descriptorHeap :: Bool
descriptorHeapCaptureReplay :: Bool
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapFeaturesEXT
p Ptr PhysicalDeviceDescriptorHeapFeaturesEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_HEAP_FEATURES_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapFeaturesEXT
p Ptr PhysicalDeviceDescriptorHeapFeaturesEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapFeaturesEXT
p Ptr PhysicalDeviceDescriptorHeapFeaturesEXT -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
descriptorHeap))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapFeaturesEXT
p Ptr PhysicalDeviceDescriptorHeapFeaturesEXT -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
descriptorHeapCaptureReplay))
    IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr PhysicalDeviceDescriptorHeapFeaturesEXT -> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceDescriptorHeapFeaturesEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapFeaturesEXT
p Ptr PhysicalDeviceDescriptorHeapFeaturesEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_HEAP_FEATURES_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapFeaturesEXT
p Ptr PhysicalDeviceDescriptorHeapFeaturesEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapFeaturesEXT
p Ptr PhysicalDeviceDescriptorHeapFeaturesEXT -> 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 PhysicalDeviceDescriptorHeapFeaturesEXT
p Ptr PhysicalDeviceDescriptorHeapFeaturesEXT -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    IO b
f

instance FromCStruct PhysicalDeviceDescriptorHeapFeaturesEXT where
  peekCStruct :: Ptr PhysicalDeviceDescriptorHeapFeaturesEXT
-> IO PhysicalDeviceDescriptorHeapFeaturesEXT
peekCStruct Ptr PhysicalDeviceDescriptorHeapFeaturesEXT
p = do
    descriptorHeap <- forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceDescriptorHeapFeaturesEXT
p Ptr PhysicalDeviceDescriptorHeapFeaturesEXT -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32))
    descriptorHeapCaptureReplay <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
    pure $ PhysicalDeviceDescriptorHeapFeaturesEXT
             (bool32ToBool descriptorHeap)
             (bool32ToBool descriptorHeapCaptureReplay)

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

instance Zero PhysicalDeviceDescriptorHeapFeaturesEXT where
  zero :: PhysicalDeviceDescriptorHeapFeaturesEXT
zero = Bool -> Bool -> PhysicalDeviceDescriptorHeapFeaturesEXT
PhysicalDeviceDescriptorHeapFeaturesEXT
           Bool
forall a. Zero a => a
zero
           Bool
forall a. Zero a => a
zero


-- | VkPhysicalDeviceDescriptorHeapPropertiesEXT - Structure describing
-- supported image alignments for a physical device
--
-- = Description
--
-- If the 'PhysicalDeviceDescriptorHeapPropertiesEXT' 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.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceDescriptorHeapPropertiesEXT = PhysicalDeviceDescriptorHeapPropertiesEXT
  { -- | #limits-samplerHeapAlignment# @samplerHeapAlignment@ specifies the
    -- required alignment of the @heapRange->address@ member of
    -- 'BindHeapInfoEXT' for binding sampler heaps. It must be a power-of-two
    -- value.
    PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
samplerHeapAlignment :: DeviceSize
  , -- | #limits-resourceHeapAlignment# @resourceHeapAlignment@ specifies the
    -- required alignment of the @heapRange->address@ member of
    -- 'BindHeapInfoEXT' for binding resource heaps. It must be a power-of-two
    -- value.
    PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
resourceHeapAlignment :: DeviceSize
  , -- | #limits-maxSamplerHeapSize# @maxSamplerHeapSize@ describes maximum value
    -- of the @size@ member of 'DeviceAddressRangeEXT' for binding sampler
    -- heaps, including the reservation, when embedded samplers are used.
    PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
maxSamplerHeapSize :: DeviceSize
  , -- | #limits-maxResourceHeapSize# @maxResourceHeapSize@ describes maximum
    -- value of the @size@ member of 'DeviceAddressRangeEXT' for binding
    -- resource heaps, including the reservation.
    PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
maxResourceHeapSize :: DeviceSize
  , -- | #limits-minSamplerHeapReservedRange# @minSamplerHeapReservedRange@
    -- specifies the minimum amount of data that the implementation needs to be
    -- reserved within the bound sampler heap range when embedded samplers are
    -- not used.
    PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
minSamplerHeapReservedRange :: DeviceSize
  , -- | #limits-minSamplerHeapReservedRangeWithEmbedded#
    -- @minSamplerHeapReservedRangeWithEmbedded@ specifies the minimum amount
    -- of data that the implementation needs to be reserved within the bound
    -- sampler heap range when embedded samplers are used.
    PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
minSamplerHeapReservedRangeWithEmbedded :: DeviceSize
  , -- | #limits-minResourceHeapReservedRange# @minResourceHeapReservedRange@
    -- specifies the minimum amount of data that the implementation needs to be
    -- reserved within the bound resource heap range.
    PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
minResourceHeapReservedRange :: DeviceSize
  , -- | #limits-samplerDescriptorSize# @samplerDescriptorSize@ specifies the
    -- size of sampler descriptors written by 'writeSamplerDescriptorsEXT'. It
    -- /must/ be a power-of-two value.
    PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
samplerDescriptorSize :: DeviceSize
  , -- | #limits-imageDescriptorSize# @imageDescriptorSize@ specifies the maximum
    -- size of image and texel buffer descriptors written by
    -- 'writeResourceDescriptorsEXT'. It /must/ be a power-of-two value.
    PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
imageDescriptorSize :: DeviceSize
  , -- | #limits-bufferDescriptorSize# @bufferDescriptorSize@ specifies the
    -- maximum size of unformatted buffer descriptors or acceleration
    -- structures written by 'writeResourceDescriptorsEXT'. It /must/ be a
    -- power-of-two value.
    PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
bufferDescriptorSize :: DeviceSize
  , -- | #limits-samplerDescriptorAlignment# @samplerDescriptorAlignment@
    -- specifies the required alignment of sampler descriptors within a sampler
    -- heap. It must be a power-of-two value, and less than or equal to
    -- @samplerDescriptorSize@.
    PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
samplerDescriptorAlignment :: DeviceSize
  , -- | #limits-imageDescriptorAlignment# @imageDescriptorAlignment@ specifies
    -- the required alignment of image descriptors within a resource heap. It
    -- must be a power-of-two value, and less than or equal to
    -- @imageDescriptorSize@.
    PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
imageDescriptorAlignment :: DeviceSize
  , -- | #limits-bufferDescriptorAlignment# @bufferDescriptorAlignment@ specifies
    -- the required alignment of buffer descriptors within a resource heap. It
    -- must be a power-of-two value, and less than or equal to
    -- @bufferDescriptorSize@.
    PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
bufferDescriptorAlignment :: DeviceSize
  , -- | #limits-maxPushDataSize# @maxPushDataSize@ specifies the maximum total
    -- size of all push data.
    PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
maxPushDataSize :: DeviceSize
  , -- | #limits-imageCaptureReplayOpaqueDataSize#
    -- @imageCaptureReplayOpaqueDataSize@ specifies the size of the opaque
    -- capture\/replay data for an image.
    PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
imageCaptureReplayOpaqueDataSize :: Word64
  , -- | #limits-maxDescriptorHeapEmbeddedSamplers#
    -- @maxDescriptorHeapEmbeddedSamplers@ specifies the maximum number of
    -- unique embedded samplers across all pipelines.
    PhysicalDeviceDescriptorHeapPropertiesEXT -> Word32
maxDescriptorHeapEmbeddedSamplers :: Word32
  , -- | #limits-samplerYcbcrConversionCount# @samplerYcbcrConversionCount@
    -- specifies the number of sampler descriptors required for any sampler
    -- using YCBCR conversion.
    PhysicalDeviceDescriptorHeapPropertiesEXT -> Word32
samplerYcbcrConversionCount :: Word32
  , -- | #limits-sparseDescriptorHeaps# @sparseDescriptorHeaps@ specifies whether
    -- descriptor heaps can be backed by sparse memory or not. If this value is
    -- 'Vulkan.Core10.FundamentalTypes.FALSE', buffers cannot be specified as
    -- both sparse and having descriptor heap usage.
    PhysicalDeviceDescriptorHeapPropertiesEXT -> Bool
sparseDescriptorHeaps :: Bool
  , -- | #limits-protectedDescriptorHeaps# @protectedDescriptorHeaps@ specifies
    -- whether descriptor heaps can be used with protected submissions or not.
    -- If this value is 'Vulkan.Core10.FundamentalTypes.FALSE', buffers cannot
    -- be specified as both protected and having descriptor heap usage.
    PhysicalDeviceDescriptorHeapPropertiesEXT -> Bool
protectedDescriptorHeaps :: Bool
  }
  deriving (Typeable, PhysicalDeviceDescriptorHeapPropertiesEXT
-> PhysicalDeviceDescriptorHeapPropertiesEXT -> Bool
(PhysicalDeviceDescriptorHeapPropertiesEXT
 -> PhysicalDeviceDescriptorHeapPropertiesEXT -> Bool)
-> (PhysicalDeviceDescriptorHeapPropertiesEXT
    -> PhysicalDeviceDescriptorHeapPropertiesEXT -> Bool)
-> Eq PhysicalDeviceDescriptorHeapPropertiesEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PhysicalDeviceDescriptorHeapPropertiesEXT
-> PhysicalDeviceDescriptorHeapPropertiesEXT -> Bool
== :: PhysicalDeviceDescriptorHeapPropertiesEXT
-> PhysicalDeviceDescriptorHeapPropertiesEXT -> Bool
$c/= :: PhysicalDeviceDescriptorHeapPropertiesEXT
-> PhysicalDeviceDescriptorHeapPropertiesEXT -> Bool
/= :: PhysicalDeviceDescriptorHeapPropertiesEXT
-> PhysicalDeviceDescriptorHeapPropertiesEXT -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceDescriptorHeapPropertiesEXT)
#endif
deriving instance Show PhysicalDeviceDescriptorHeapPropertiesEXT

instance ToCStruct PhysicalDeviceDescriptorHeapPropertiesEXT where
  withCStruct :: forall b.
PhysicalDeviceDescriptorHeapPropertiesEXT
-> (Ptr PhysicalDeviceDescriptorHeapPropertiesEXT -> IO b) -> IO b
withCStruct PhysicalDeviceDescriptorHeapPropertiesEXT
x Ptr PhysicalDeviceDescriptorHeapPropertiesEXT -> IO b
f = Int
-> (Ptr PhysicalDeviceDescriptorHeapPropertiesEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
152 ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT -> IO b) -> IO b)
-> (Ptr PhysicalDeviceDescriptorHeapPropertiesEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p -> Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> PhysicalDeviceDescriptorHeapPropertiesEXT -> IO b -> IO b
forall b.
Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> PhysicalDeviceDescriptorHeapPropertiesEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p PhysicalDeviceDescriptorHeapPropertiesEXT
x (Ptr PhysicalDeviceDescriptorHeapPropertiesEXT -> IO b
f Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p)
  pokeCStruct :: forall b.
Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> PhysicalDeviceDescriptorHeapPropertiesEXT -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p PhysicalDeviceDescriptorHeapPropertiesEXT{Bool
Word32
DeviceSize
samplerHeapAlignment :: PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
resourceHeapAlignment :: PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
maxSamplerHeapSize :: PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
maxResourceHeapSize :: PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
minSamplerHeapReservedRange :: PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
minSamplerHeapReservedRangeWithEmbedded :: PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
minResourceHeapReservedRange :: PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
samplerDescriptorSize :: PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
imageDescriptorSize :: PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
bufferDescriptorSize :: PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
samplerDescriptorAlignment :: PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
imageDescriptorAlignment :: PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
bufferDescriptorAlignment :: PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
maxPushDataSize :: PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
imageCaptureReplayOpaqueDataSize :: PhysicalDeviceDescriptorHeapPropertiesEXT -> DeviceSize
maxDescriptorHeapEmbeddedSamplers :: PhysicalDeviceDescriptorHeapPropertiesEXT -> Word32
samplerYcbcrConversionCount :: PhysicalDeviceDescriptorHeapPropertiesEXT -> Word32
sparseDescriptorHeaps :: PhysicalDeviceDescriptorHeapPropertiesEXT -> Bool
protectedDescriptorHeaps :: PhysicalDeviceDescriptorHeapPropertiesEXT -> Bool
samplerHeapAlignment :: DeviceSize
resourceHeapAlignment :: DeviceSize
maxSamplerHeapSize :: DeviceSize
maxResourceHeapSize :: DeviceSize
minSamplerHeapReservedRange :: DeviceSize
minSamplerHeapReservedRangeWithEmbedded :: DeviceSize
minResourceHeapReservedRange :: DeviceSize
samplerDescriptorSize :: DeviceSize
imageDescriptorSize :: DeviceSize
bufferDescriptorSize :: DeviceSize
samplerDescriptorAlignment :: DeviceSize
imageDescriptorAlignment :: DeviceSize
bufferDescriptorAlignment :: DeviceSize
maxPushDataSize :: DeviceSize
imageCaptureReplayOpaqueDataSize :: DeviceSize
maxDescriptorHeapEmbeddedSamplers :: Word32
samplerYcbcrConversionCount :: Word32
sparseDescriptorHeaps :: Bool
protectedDescriptorHeaps :: Bool
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_HEAP_PROPERTIES_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceSize)) (DeviceSize
samplerHeapAlignment)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DeviceSize)) (DeviceSize
resourceHeapAlignment)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr DeviceSize)) (DeviceSize
maxSamplerHeapSize)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr DeviceSize)) (DeviceSize
maxResourceHeapSize)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr DeviceSize)) (DeviceSize
minSamplerHeapReservedRange)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr DeviceSize)) (DeviceSize
minSamplerHeapReservedRangeWithEmbedded)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr DeviceSize)) (DeviceSize
minResourceHeapReservedRange)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
72 :: Ptr DeviceSize)) (DeviceSize
samplerDescriptorSize)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
80 :: Ptr DeviceSize)) (DeviceSize
imageDescriptorSize)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
88 :: Ptr DeviceSize)) (DeviceSize
bufferDescriptorSize)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
96 :: Ptr DeviceSize)) (DeviceSize
samplerDescriptorAlignment)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
104 :: Ptr DeviceSize)) (DeviceSize
imageDescriptorAlignment)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
112 :: Ptr DeviceSize)) (DeviceSize
bufferDescriptorAlignment)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
120 :: Ptr DeviceSize)) (DeviceSize
maxPushDataSize)
    Ptr CSize -> CSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT -> Int -> Ptr CSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
128 :: Ptr CSize)) (DeviceSize -> CSize
CSize (DeviceSize
imageCaptureReplayOpaqueDataSize))
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
136 :: Ptr Word32)) (Word32
maxDescriptorHeapEmbeddedSamplers)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
140 :: Ptr Word32)) (Word32
samplerYcbcrConversionCount)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
144 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
sparseDescriptorHeaps))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
148 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
protectedDescriptorHeaps))
    IO b
f
  cStructSize :: Int
cStructSize = Int
152
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr PhysicalDeviceDescriptorHeapPropertiesEXT -> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_HEAP_PROPERTIES_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceSize)) (DeviceSize
forall a. Zero a => a
zero)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DeviceSize)) (DeviceSize
forall a. Zero a => a
zero)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr DeviceSize)) (DeviceSize
forall a. Zero a => a
zero)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr DeviceSize)) (DeviceSize
forall a. Zero a => a
zero)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr DeviceSize)) (DeviceSize
forall a. Zero a => a
zero)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr DeviceSize)) (DeviceSize
forall a. Zero a => a
zero)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr DeviceSize)) (DeviceSize
forall a. Zero a => a
zero)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
72 :: Ptr DeviceSize)) (DeviceSize
forall a. Zero a => a
zero)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
80 :: Ptr DeviceSize)) (DeviceSize
forall a. Zero a => a
zero)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
88 :: Ptr DeviceSize)) (DeviceSize
forall a. Zero a => a
zero)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
96 :: Ptr DeviceSize)) (DeviceSize
forall a. Zero a => a
zero)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
104 :: Ptr DeviceSize)) (DeviceSize
forall a. Zero a => a
zero)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
112 :: Ptr DeviceSize)) (DeviceSize
forall a. Zero a => a
zero)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
120 :: Ptr DeviceSize)) (DeviceSize
forall a. Zero a => a
zero)
    Ptr CSize -> CSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT -> Int -> Ptr CSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
128 :: Ptr CSize)) (DeviceSize -> CSize
CSize (DeviceSize
forall a. Zero a => a
zero))
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
136 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
140 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
144 :: 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 PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
148 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    IO b
f

instance FromCStruct PhysicalDeviceDescriptorHeapPropertiesEXT where
  peekCStruct :: Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> IO PhysicalDeviceDescriptorHeapPropertiesEXT
peekCStruct Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p = do
    samplerHeapAlignment <- forall a. Storable a => Ptr a -> IO a
peek @DeviceSize ((Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
p Ptr PhysicalDeviceDescriptorHeapPropertiesEXT
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceSize))
    resourceHeapAlignment <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
    maxSamplerHeapSize <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))
    maxResourceHeapSize <- peek @DeviceSize ((p `plusPtr` 40 :: Ptr DeviceSize))
    minSamplerHeapReservedRange <- peek @DeviceSize ((p `plusPtr` 48 :: Ptr DeviceSize))
    minSamplerHeapReservedRangeWithEmbedded <- peek @DeviceSize ((p `plusPtr` 56 :: Ptr DeviceSize))
    minResourceHeapReservedRange <- peek @DeviceSize ((p `plusPtr` 64 :: Ptr DeviceSize))
    samplerDescriptorSize <- peek @DeviceSize ((p `plusPtr` 72 :: Ptr DeviceSize))
    imageDescriptorSize <- peek @DeviceSize ((p `plusPtr` 80 :: Ptr DeviceSize))
    bufferDescriptorSize <- peek @DeviceSize ((p `plusPtr` 88 :: Ptr DeviceSize))
    samplerDescriptorAlignment <- peek @DeviceSize ((p `plusPtr` 96 :: Ptr DeviceSize))
    imageDescriptorAlignment <- peek @DeviceSize ((p `plusPtr` 104 :: Ptr DeviceSize))
    bufferDescriptorAlignment <- peek @DeviceSize ((p `plusPtr` 112 :: Ptr DeviceSize))
    maxPushDataSize <- peek @DeviceSize ((p `plusPtr` 120 :: Ptr DeviceSize))
    imageCaptureReplayOpaqueDataSize <- peek @CSize ((p `plusPtr` 128 :: Ptr CSize))
    maxDescriptorHeapEmbeddedSamplers <- peek @Word32 ((p `plusPtr` 136 :: Ptr Word32))
    samplerYcbcrConversionCount <- peek @Word32 ((p `plusPtr` 140 :: Ptr Word32))
    sparseDescriptorHeaps <- peek @Bool32 ((p `plusPtr` 144 :: Ptr Bool32))
    protectedDescriptorHeaps <- peek @Bool32 ((p `plusPtr` 148 :: Ptr Bool32))
    pure $ PhysicalDeviceDescriptorHeapPropertiesEXT
             samplerHeapAlignment
             resourceHeapAlignment
             maxSamplerHeapSize
             maxResourceHeapSize
             minSamplerHeapReservedRange
             minSamplerHeapReservedRangeWithEmbedded
             minResourceHeapReservedRange
             samplerDescriptorSize
             imageDescriptorSize
             bufferDescriptorSize
             samplerDescriptorAlignment
             imageDescriptorAlignment
             bufferDescriptorAlignment
             maxPushDataSize
             (coerce @CSize @Word64 imageCaptureReplayOpaqueDataSize)
             maxDescriptorHeapEmbeddedSamplers
             samplerYcbcrConversionCount
             (bool32ToBool sparseDescriptorHeaps)
             (bool32ToBool protectedDescriptorHeaps)

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

instance Zero PhysicalDeviceDescriptorHeapPropertiesEXT where
  zero :: PhysicalDeviceDescriptorHeapPropertiesEXT
zero = DeviceSize
-> DeviceSize
-> DeviceSize
-> DeviceSize
-> DeviceSize
-> DeviceSize
-> DeviceSize
-> DeviceSize
-> DeviceSize
-> DeviceSize
-> DeviceSize
-> DeviceSize
-> DeviceSize
-> DeviceSize
-> DeviceSize
-> Word32
-> Word32
-> Bool
-> Bool
-> PhysicalDeviceDescriptorHeapPropertiesEXT
PhysicalDeviceDescriptorHeapPropertiesEXT
           DeviceSize
forall a. Zero a => a
zero
           DeviceSize
forall a. Zero a => a
zero
           DeviceSize
forall a. Zero a => a
zero
           DeviceSize
forall a. Zero a => a
zero
           DeviceSize
forall a. Zero a => a
zero
           DeviceSize
forall a. Zero a => a
zero
           DeviceSize
forall a. Zero a => a
zero
           DeviceSize
forall a. Zero a => a
zero
           DeviceSize
forall a. Zero a => a
zero
           DeviceSize
forall a. Zero a => a
zero
           DeviceSize
forall a. Zero a => a
zero
           DeviceSize
forall a. Zero a => a
zero
           DeviceSize
forall a. Zero a => a
zero
           DeviceSize
forall a. Zero a => a
zero
           DeviceSize
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Bool
forall a. Zero a => a
zero
           Bool
forall a. Zero a => a
zero


-- | VkCommandBufferInheritanceDescriptorHeapInfoEXT - Structure specifying
-- command buffer inheritance information
--
-- = Description
--
-- If this structure is not present, the behavior is as if
-- @pSamplerHeapBindInfo@ and @pResourceHeapBindInfo@ were both @NULL@.
--
-- == Valid Usage
--
-- -   #VUID-VkCommandBufferInheritanceDescriptorHeapInfoEXT-descriptorHeap-11200#
--     If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-descriptorHeap descriptorHeap>
--     feature is not enabled, @pSamplerHeapBindInfo@ /must/ be @NULL@
--
-- -   #VUID-VkCommandBufferInheritanceDescriptorHeapInfoEXT-descriptorHeap-11201#
--     If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-descriptorHeap descriptorHeap>
--     feature is not enabled, @pResourceHeapBindInfo@ /must/ be @NULL@
--
-- -   #VUID-VkCommandBufferInheritanceDescriptorHeapInfoEXT-pSamplerHeapBindInfo-11470#
--     If @pSamplerHeapBindInfo@ is not @NULL@,
--     @pSamplerHeapBindInfo->heapRange@ /must/ be a device address range
--     allocated to the application from a buffer created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_DESCRIPTOR_HEAP_BIT_EXT'
--     usage flag set
--
-- -   #VUID-VkCommandBufferInheritanceDescriptorHeapInfoEXT-pResourceHeapBindInfo-11471#
--     If @pResourceHeapBindInfo@ is not @NULL@,
--     @pResourceHeapBindInfo->heapRange@ /must/ be a device address range
--     allocated to the application from a buffer created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_DESCRIPTOR_HEAP_BIT_EXT'
--     usage flag set
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkCommandBufferInheritanceDescriptorHeapInfoEXT-sType-sType#
--     @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_DESCRIPTOR_HEAP_INFO_EXT'
--
-- -   #VUID-VkCommandBufferInheritanceDescriptorHeapInfoEXT-pSamplerHeapBindInfo-parameter#
--     If @pSamplerHeapBindInfo@ is not @NULL@, @pSamplerHeapBindInfo@
--     /must/ be a valid pointer to a valid 'BindHeapInfoEXT' structure
--
-- -   #VUID-VkCommandBufferInheritanceDescriptorHeapInfoEXT-pResourceHeapBindInfo-parameter#
--     If @pResourceHeapBindInfo@ is not @NULL@, @pResourceHeapBindInfo@
--     /must/ be a valid pointer to a valid 'BindHeapInfoEXT' structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'BindHeapInfoEXT', 'Vulkan.Core10.Enums.StructureType.StructureType'
data CommandBufferInheritanceDescriptorHeapInfoEXT = CommandBufferInheritanceDescriptorHeapInfoEXT
  { -- | @pSamplerHeapBindInfo@ specifies the 'BindHeapInfoEXT' of the sampler
    -- heap bound using 'cmdBindSamplerHeapEXT' in the primary. If this is
    -- @NULL@, it indicates that no sampler heap is bound.
    CommandBufferInheritanceDescriptorHeapInfoEXT
-> Maybe ("bindInfo" ::: BindHeapInfoEXT)
samplerHeapBindInfo :: Maybe BindHeapInfoEXT
  , -- | @pResourceHeapBindInfo@ specifies the 'BindHeapInfoEXT' of the resource
    -- heap bound using 'cmdBindResourceHeapEXT' in the primary. If this is
    -- @NULL@, it indicates that no resource heap is bound.
    CommandBufferInheritanceDescriptorHeapInfoEXT
-> Maybe ("bindInfo" ::: BindHeapInfoEXT)
resourceHeapBindInfo :: Maybe BindHeapInfoEXT
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (CommandBufferInheritanceDescriptorHeapInfoEXT)
#endif
deriving instance Show CommandBufferInheritanceDescriptorHeapInfoEXT

instance ToCStruct CommandBufferInheritanceDescriptorHeapInfoEXT where
  withCStruct :: forall b.
CommandBufferInheritanceDescriptorHeapInfoEXT
-> (Ptr CommandBufferInheritanceDescriptorHeapInfoEXT -> IO b)
-> IO b
withCStruct CommandBufferInheritanceDescriptorHeapInfoEXT
x Ptr CommandBufferInheritanceDescriptorHeapInfoEXT -> IO b
f = Int
-> (Ptr CommandBufferInheritanceDescriptorHeapInfoEXT -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr CommandBufferInheritanceDescriptorHeapInfoEXT -> IO b)
 -> IO b)
-> (Ptr CommandBufferInheritanceDescriptorHeapInfoEXT -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr CommandBufferInheritanceDescriptorHeapInfoEXT
p -> Ptr CommandBufferInheritanceDescriptorHeapInfoEXT
-> CommandBufferInheritanceDescriptorHeapInfoEXT -> IO b -> IO b
forall b.
Ptr CommandBufferInheritanceDescriptorHeapInfoEXT
-> CommandBufferInheritanceDescriptorHeapInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr CommandBufferInheritanceDescriptorHeapInfoEXT
p CommandBufferInheritanceDescriptorHeapInfoEXT
x (Ptr CommandBufferInheritanceDescriptorHeapInfoEXT -> IO b
f Ptr CommandBufferInheritanceDescriptorHeapInfoEXT
p)
  pokeCStruct :: forall b.
Ptr CommandBufferInheritanceDescriptorHeapInfoEXT
-> CommandBufferInheritanceDescriptorHeapInfoEXT -> IO b -> IO b
pokeCStruct Ptr CommandBufferInheritanceDescriptorHeapInfoEXT
p CommandBufferInheritanceDescriptorHeapInfoEXT{Maybe ("bindInfo" ::: BindHeapInfoEXT)
samplerHeapBindInfo :: CommandBufferInheritanceDescriptorHeapInfoEXT
-> Maybe ("bindInfo" ::: BindHeapInfoEXT)
resourceHeapBindInfo :: CommandBufferInheritanceDescriptorHeapInfoEXT
-> Maybe ("bindInfo" ::: BindHeapInfoEXT)
samplerHeapBindInfo :: Maybe ("bindInfo" ::: BindHeapInfoEXT)
resourceHeapBindInfo :: Maybe ("bindInfo" ::: BindHeapInfoEXT)
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr CommandBufferInheritanceDescriptorHeapInfoEXT
p Ptr CommandBufferInheritanceDescriptorHeapInfoEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_DESCRIPTOR_HEAP_INFO_EXT)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr CommandBufferInheritanceDescriptorHeapInfoEXT
p Ptr CommandBufferInheritanceDescriptorHeapInfoEXT
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    pSamplerHeapBindInfo'' <- case (Maybe ("bindInfo" ::: BindHeapInfoEXT)
samplerHeapBindInfo) of
      Maybe ("bindInfo" ::: BindHeapInfoEXT)
Nothing -> Ptr ("bindInfo" ::: BindHeapInfoEXT)
-> ContT b IO (Ptr ("bindInfo" ::: BindHeapInfoEXT))
forall a. a -> ContT b IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr ("bindInfo" ::: BindHeapInfoEXT)
forall a. Ptr a
nullPtr
      Just "bindInfo" ::: BindHeapInfoEXT
j -> ((Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO b) -> IO b)
-> ContT b IO (Ptr ("bindInfo" ::: BindHeapInfoEXT))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO b) -> IO b)
 -> ContT b IO (Ptr ("bindInfo" ::: BindHeapInfoEXT)))
-> ((Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO b) -> IO b)
-> ContT b IO (Ptr ("bindInfo" ::: BindHeapInfoEXT))
forall a b. (a -> b) -> a -> b
$ ("bindInfo" ::: BindHeapInfoEXT)
-> (Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO b) -> IO b
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
("bindInfo" ::: BindHeapInfoEXT)
-> (Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO b) -> IO b
withCStruct ("bindInfo" ::: BindHeapInfoEXT
j)
    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr BindHeapInfoEXT))) pSamplerHeapBindInfo''
    pResourceHeapBindInfo'' <- case (resourceHeapBindInfo) of
      Maybe ("bindInfo" ::: BindHeapInfoEXT)
Nothing -> Ptr ("bindInfo" ::: BindHeapInfoEXT)
-> ContT b IO (Ptr ("bindInfo" ::: BindHeapInfoEXT))
forall a. a -> ContT b IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr ("bindInfo" ::: BindHeapInfoEXT)
forall a. Ptr a
nullPtr
      Just "bindInfo" ::: BindHeapInfoEXT
j -> ((Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO b) -> IO b)
-> ContT b IO (Ptr ("bindInfo" ::: BindHeapInfoEXT))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO b) -> IO b)
 -> ContT b IO (Ptr ("bindInfo" ::: BindHeapInfoEXT)))
-> ((Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO b) -> IO b)
-> ContT b IO (Ptr ("bindInfo" ::: BindHeapInfoEXT))
forall a b. (a -> b) -> a -> b
$ ("bindInfo" ::: BindHeapInfoEXT)
-> (Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO b) -> IO b
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
("bindInfo" ::: BindHeapInfoEXT)
-> (Ptr ("bindInfo" ::: BindHeapInfoEXT) -> IO b) -> IO b
withCStruct ("bindInfo" ::: BindHeapInfoEXT
j)
    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr BindHeapInfoEXT))) pResourceHeapBindInfo''
    lift $ f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr CommandBufferInheritanceDescriptorHeapInfoEXT -> IO b -> IO b
pokeZeroCStruct Ptr CommandBufferInheritanceDescriptorHeapInfoEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr CommandBufferInheritanceDescriptorHeapInfoEXT
p Ptr CommandBufferInheritanceDescriptorHeapInfoEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_DESCRIPTOR_HEAP_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr CommandBufferInheritanceDescriptorHeapInfoEXT
p Ptr CommandBufferInheritanceDescriptorHeapInfoEXT
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO b
f

instance FromCStruct CommandBufferInheritanceDescriptorHeapInfoEXT where
  peekCStruct :: Ptr CommandBufferInheritanceDescriptorHeapInfoEXT
-> IO CommandBufferInheritanceDescriptorHeapInfoEXT
peekCStruct Ptr CommandBufferInheritanceDescriptorHeapInfoEXT
p = do
    pSamplerHeapBindInfo <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr BindHeapInfoEXT) ((Ptr CommandBufferInheritanceDescriptorHeapInfoEXT
p Ptr CommandBufferInheritanceDescriptorHeapInfoEXT
-> Int -> Ptr (Ptr ("bindInfo" ::: BindHeapInfoEXT))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr BindHeapInfoEXT)))
    pSamplerHeapBindInfo' <- maybePeek (\Ptr ("bindInfo" ::: BindHeapInfoEXT)
j -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @BindHeapInfoEXT (Ptr ("bindInfo" ::: BindHeapInfoEXT)
j)) pSamplerHeapBindInfo
    pResourceHeapBindInfo <- peek @(Ptr BindHeapInfoEXT) ((p `plusPtr` 24 :: Ptr (Ptr BindHeapInfoEXT)))
    pResourceHeapBindInfo' <- maybePeek (\Ptr ("bindInfo" ::: BindHeapInfoEXT)
j -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @BindHeapInfoEXT (Ptr ("bindInfo" ::: BindHeapInfoEXT)
j)) pResourceHeapBindInfo
    pure $ CommandBufferInheritanceDescriptorHeapInfoEXT
             pSamplerHeapBindInfo' pResourceHeapBindInfo'

instance Zero CommandBufferInheritanceDescriptorHeapInfoEXT where
  zero :: CommandBufferInheritanceDescriptorHeapInfoEXT
zero = Maybe ("bindInfo" ::: BindHeapInfoEXT)
-> Maybe ("bindInfo" ::: BindHeapInfoEXT)
-> CommandBufferInheritanceDescriptorHeapInfoEXT
CommandBufferInheritanceDescriptorHeapInfoEXT
           Maybe ("bindInfo" ::: BindHeapInfoEXT)
forall a. Maybe a
Nothing
           Maybe ("bindInfo" ::: BindHeapInfoEXT)
forall a. Maybe a
Nothing


-- | VkPhysicalDeviceDescriptorHeapTensorPropertiesARM - Structure describing
-- descriptor heap tensor properties supported by an implementation
--
-- = Description
--
-- If the 'PhysicalDeviceDescriptorHeapTensorPropertiesARM' 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.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_tensors VK_ARM_tensors>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceDescriptorHeapTensorPropertiesARM = PhysicalDeviceDescriptorHeapTensorPropertiesARM
  { -- | #limits-tensorDescriptorSize# @tensorDescriptorSize@ specifies the
    -- maximum size of tensor descriptors written by
    -- 'writeResourceDescriptorsEXT'.
    PhysicalDeviceDescriptorHeapTensorPropertiesARM -> DeviceSize
tensorDescriptorSize :: DeviceSize
  , -- | #limits-tensorDescriptorAlignment# @tensorDescriptorAlignment@ specifies
    -- the required alignment of tensor descriptors within a resource heap. It
    -- must be a power-of-two value, and less than or equal to
    -- @tensorDescriptorSize@.
    PhysicalDeviceDescriptorHeapTensorPropertiesARM -> DeviceSize
tensorDescriptorAlignment :: DeviceSize
  , -- | #limits-tensorCaptureReplayOpaqueDataSize#
    -- @tensorCaptureReplayOpaqueDataSize@ specifies the size of the opaque
    -- capture\/replay data for an tensor.
    PhysicalDeviceDescriptorHeapTensorPropertiesARM -> DeviceSize
tensorCaptureReplayOpaqueDataSize :: Word64
  }
  deriving (Typeable, PhysicalDeviceDescriptorHeapTensorPropertiesARM
-> PhysicalDeviceDescriptorHeapTensorPropertiesARM -> Bool
(PhysicalDeviceDescriptorHeapTensorPropertiesARM
 -> PhysicalDeviceDescriptorHeapTensorPropertiesARM -> Bool)
-> (PhysicalDeviceDescriptorHeapTensorPropertiesARM
    -> PhysicalDeviceDescriptorHeapTensorPropertiesARM -> Bool)
-> Eq PhysicalDeviceDescriptorHeapTensorPropertiesARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PhysicalDeviceDescriptorHeapTensorPropertiesARM
-> PhysicalDeviceDescriptorHeapTensorPropertiesARM -> Bool
== :: PhysicalDeviceDescriptorHeapTensorPropertiesARM
-> PhysicalDeviceDescriptorHeapTensorPropertiesARM -> Bool
$c/= :: PhysicalDeviceDescriptorHeapTensorPropertiesARM
-> PhysicalDeviceDescriptorHeapTensorPropertiesARM -> Bool
/= :: PhysicalDeviceDescriptorHeapTensorPropertiesARM
-> PhysicalDeviceDescriptorHeapTensorPropertiesARM -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceDescriptorHeapTensorPropertiesARM)
#endif
deriving instance Show PhysicalDeviceDescriptorHeapTensorPropertiesARM

instance ToCStruct PhysicalDeviceDescriptorHeapTensorPropertiesARM where
  withCStruct :: forall b.
PhysicalDeviceDescriptorHeapTensorPropertiesARM
-> (Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM -> IO b)
-> IO b
withCStruct PhysicalDeviceDescriptorHeapTensorPropertiesARM
x Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM -> IO b
f = Int
-> (Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 ((Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM -> IO b)
 -> IO b)
-> (Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
p -> Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
-> PhysicalDeviceDescriptorHeapTensorPropertiesARM -> IO b -> IO b
forall b.
Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
-> PhysicalDeviceDescriptorHeapTensorPropertiesARM -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
p PhysicalDeviceDescriptorHeapTensorPropertiesARM
x (Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM -> IO b
f Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
p)
  pokeCStruct :: forall b.
Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
-> PhysicalDeviceDescriptorHeapTensorPropertiesARM -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
p PhysicalDeviceDescriptorHeapTensorPropertiesARM{DeviceSize
tensorDescriptorSize :: PhysicalDeviceDescriptorHeapTensorPropertiesARM -> DeviceSize
tensorDescriptorAlignment :: PhysicalDeviceDescriptorHeapTensorPropertiesARM -> DeviceSize
tensorCaptureReplayOpaqueDataSize :: PhysicalDeviceDescriptorHeapTensorPropertiesARM -> DeviceSize
tensorDescriptorSize :: DeviceSize
tensorDescriptorAlignment :: DeviceSize
tensorCaptureReplayOpaqueDataSize :: DeviceSize
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
p Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_HEAP_TENSOR_PROPERTIES_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
p Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
p Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceSize)) (DeviceSize
tensorDescriptorSize)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
p Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DeviceSize)) (DeviceSize
tensorDescriptorAlignment)
    Ptr CSize -> CSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
p Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
-> Int -> Ptr CSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr CSize)) (DeviceSize -> CSize
CSize (DeviceSize
tensorCaptureReplayOpaqueDataSize))
    IO b
f
  cStructSize :: Int
cStructSize = Int
40
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM -> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
p Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_HEAP_TENSOR_PROPERTIES_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
p Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
p Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceSize)) (DeviceSize
forall a. Zero a => a
zero)
    Ptr DeviceSize -> DeviceSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
p Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DeviceSize)) (DeviceSize
forall a. Zero a => a
zero)
    Ptr CSize -> CSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
p Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
-> Int -> Ptr CSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr CSize)) (DeviceSize -> CSize
CSize (DeviceSize
forall a. Zero a => a
zero))
    IO b
f

instance FromCStruct PhysicalDeviceDescriptorHeapTensorPropertiesARM where
  peekCStruct :: Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
-> IO PhysicalDeviceDescriptorHeapTensorPropertiesARM
peekCStruct Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
p = do
    tensorDescriptorSize <- forall a. Storable a => Ptr a -> IO a
peek @DeviceSize ((Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
p Ptr PhysicalDeviceDescriptorHeapTensorPropertiesARM
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceSize))
    tensorDescriptorAlignment <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))
    tensorCaptureReplayOpaqueDataSize <- peek @CSize ((p `plusPtr` 32 :: Ptr CSize))
    pure $ PhysicalDeviceDescriptorHeapTensorPropertiesARM
             tensorDescriptorSize
             tensorDescriptorAlignment
             (coerce @CSize @Word64 tensorCaptureReplayOpaqueDataSize)

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

instance Zero PhysicalDeviceDescriptorHeapTensorPropertiesARM where
  zero :: PhysicalDeviceDescriptorHeapTensorPropertiesARM
zero = DeviceSize
-> DeviceSize
-> DeviceSize
-> PhysicalDeviceDescriptorHeapTensorPropertiesARM
PhysicalDeviceDescriptorHeapTensorPropertiesARM
           DeviceSize
forall a. Zero a => a
zero
           DeviceSize
forall a. Zero a => a
zero
           DeviceSize
forall a. Zero a => a
zero


data ResourceDescriptorDataEXT
  = AnImage (Maybe ImageDescriptorInfoEXT)
  | ATexelBuffer (Maybe TexelBufferDescriptorInfoEXT)
  | AnAddressRange (Maybe DeviceAddressRangeEXT)
  | ATensorARM (Maybe (SomeStruct TensorViewCreateInfoARM))
  deriving (Int -> ResourceDescriptorDataEXT -> ShowS
[ResourceDescriptorDataEXT] -> ShowS
ResourceDescriptorDataEXT -> String
(Int -> ResourceDescriptorDataEXT -> ShowS)
-> (ResourceDescriptorDataEXT -> String)
-> ([ResourceDescriptorDataEXT] -> ShowS)
-> Show ResourceDescriptorDataEXT
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ResourceDescriptorDataEXT -> ShowS
showsPrec :: Int -> ResourceDescriptorDataEXT -> ShowS
$cshow :: ResourceDescriptorDataEXT -> String
show :: ResourceDescriptorDataEXT -> String
$cshowList :: [ResourceDescriptorDataEXT] -> ShowS
showList :: [ResourceDescriptorDataEXT] -> ShowS
Show)

instance ToCStruct ResourceDescriptorDataEXT where
  withCStruct :: forall b.
ResourceDescriptorDataEXT
-> (Ptr ResourceDescriptorDataEXT -> IO b) -> IO b
withCStruct ResourceDescriptorDataEXT
x Ptr ResourceDescriptorDataEXT -> IO b
f = Int -> (Ptr ResourceDescriptorDataEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
8 ((Ptr ResourceDescriptorDataEXT -> IO b) -> IO b)
-> (Ptr ResourceDescriptorDataEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr ResourceDescriptorDataEXT
p -> Ptr ResourceDescriptorDataEXT
-> ResourceDescriptorDataEXT -> IO b -> IO b
forall b.
Ptr ResourceDescriptorDataEXT
-> ResourceDescriptorDataEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr ResourceDescriptorDataEXT
p ResourceDescriptorDataEXT
x (Ptr ResourceDescriptorDataEXT -> IO b
f Ptr ResourceDescriptorDataEXT
p)
  pokeCStruct :: Ptr ResourceDescriptorDataEXT -> ResourceDescriptorDataEXT -> IO a -> IO a
  pokeCStruct :: forall b.
Ptr ResourceDescriptorDataEXT
-> ResourceDescriptorDataEXT -> IO b -> IO b
pokeCStruct Ptr ResourceDescriptorDataEXT
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)
-> (ResourceDescriptorDataEXT -> (() -> IO a) -> IO a)
-> ResourceDescriptorDataEXT
-> 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)
-> (ResourceDescriptorDataEXT -> ContT a IO ())
-> ResourceDescriptorDataEXT
-> (() -> IO a)
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  \case
    AnImage Maybe ImageDescriptorInfoEXT
v -> do
      pImage <- case (Maybe ImageDescriptorInfoEXT
v) of
        Maybe ImageDescriptorInfoEXT
Nothing -> Ptr ImageDescriptorInfoEXT
-> ContT a IO (Ptr ImageDescriptorInfoEXT)
forall a. a -> ContT a IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr ImageDescriptorInfoEXT
forall a. Ptr a
nullPtr
        Just ImageDescriptorInfoEXT
j -> ((Ptr ImageDescriptorInfoEXT -> IO a) -> IO a)
-> ContT a IO (Ptr ImageDescriptorInfoEXT)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr ImageDescriptorInfoEXT -> IO a) -> IO a)
 -> ContT a IO (Ptr ImageDescriptorInfoEXT))
-> ((Ptr ImageDescriptorInfoEXT -> IO a) -> IO a)
-> ContT a IO (Ptr ImageDescriptorInfoEXT)
forall a b. (a -> b) -> a -> b
$ ImageDescriptorInfoEXT
-> (Ptr ImageDescriptorInfoEXT -> IO a) -> IO a
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
ImageDescriptorInfoEXT
-> (Ptr ImageDescriptorInfoEXT -> IO b) -> IO b
withCStruct (ImageDescriptorInfoEXT
j)
      lift $ poke (castPtr @_ @(Ptr ImageDescriptorInfoEXT) p) pImage
    ATexelBuffer Maybe TexelBufferDescriptorInfoEXT
v -> do
      pTexelBuffer <- case (Maybe TexelBufferDescriptorInfoEXT
v) of
        Maybe TexelBufferDescriptorInfoEXT
Nothing -> Ptr TexelBufferDescriptorInfoEXT
-> ContT a IO (Ptr TexelBufferDescriptorInfoEXT)
forall a. a -> ContT a IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr TexelBufferDescriptorInfoEXT
forall a. Ptr a
nullPtr
        Just TexelBufferDescriptorInfoEXT
j -> ((Ptr TexelBufferDescriptorInfoEXT -> IO a) -> IO a)
-> ContT a IO (Ptr TexelBufferDescriptorInfoEXT)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr TexelBufferDescriptorInfoEXT -> IO a) -> IO a)
 -> ContT a IO (Ptr TexelBufferDescriptorInfoEXT))
-> ((Ptr TexelBufferDescriptorInfoEXT -> IO a) -> IO a)
-> ContT a IO (Ptr TexelBufferDescriptorInfoEXT)
forall a b. (a -> b) -> a -> b
$ TexelBufferDescriptorInfoEXT
-> (Ptr TexelBufferDescriptorInfoEXT -> IO a) -> IO a
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
TexelBufferDescriptorInfoEXT
-> (Ptr TexelBufferDescriptorInfoEXT -> IO b) -> IO b
withCStruct (TexelBufferDescriptorInfoEXT
j)
      lift $ poke (castPtr @_ @(Ptr TexelBufferDescriptorInfoEXT) p) pTexelBuffer
    AnAddressRange Maybe DeviceAddressRangeEXT
v -> do
      pAddressRange <- case (Maybe DeviceAddressRangeEXT
v) of
        Maybe DeviceAddressRangeEXT
Nothing -> Ptr DeviceAddressRangeEXT -> ContT a IO (Ptr DeviceAddressRangeEXT)
forall a. a -> ContT a IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr DeviceAddressRangeEXT
forall a. Ptr a
nullPtr
        Just DeviceAddressRangeEXT
j -> ((Ptr DeviceAddressRangeEXT -> IO a) -> IO a)
-> ContT a IO (Ptr DeviceAddressRangeEXT)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr DeviceAddressRangeEXT -> IO a) -> IO a)
 -> ContT a IO (Ptr DeviceAddressRangeEXT))
-> ((Ptr DeviceAddressRangeEXT -> IO a) -> IO a)
-> ContT a IO (Ptr DeviceAddressRangeEXT)
forall a b. (a -> b) -> a -> b
$ DeviceAddressRangeEXT
-> (Ptr DeviceAddressRangeEXT -> IO a) -> IO a
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
DeviceAddressRangeEXT
-> (Ptr DeviceAddressRangeEXT -> IO b) -> IO b
withCStruct (DeviceAddressRangeEXT
j)
      lift $ poke (castPtr @_ @(Ptr DeviceAddressRangeEXT) p) pAddressRange
    ATensorARM Maybe (SomeStruct TensorViewCreateInfoARM)
v -> do
      pTensorARM <- case (Maybe (SomeStruct TensorViewCreateInfoARM)
v) of
        Maybe (SomeStruct TensorViewCreateInfoARM)
Nothing -> Ptr (TensorViewCreateInfoARM '[])
-> ContT a IO (Ptr (TensorViewCreateInfoARM '[]))
forall a. a -> ContT a IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr (TensorViewCreateInfoARM '[])
forall a. Ptr a
nullPtr
        Just SomeStruct TensorViewCreateInfoARM
j -> forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
forall r (m :: * -> *) a. ((a -> m r) -> m r) -> ContT r m a
ContT @_ @_ @(Ptr (TensorViewCreateInfoARM '[])) (((Ptr (TensorViewCreateInfoARM '[]) -> IO a) -> IO a)
 -> ContT a IO (Ptr (TensorViewCreateInfoARM '[])))
-> ((Ptr (TensorViewCreateInfoARM '[]) -> IO a) -> IO a)
-> ContT a IO (Ptr (TensorViewCreateInfoARM '[]))
forall a b. (a -> b) -> a -> b
$ \Ptr (TensorViewCreateInfoARM '[]) -> IO a
cont -> forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
SomeStruct a
-> (forall (es :: [*]).
    (Extendss a es, PokeChain es) =>
    Ptr (a es) -> IO b)
-> IO b
withSomeCStruct @TensorViewCreateInfoARM (SomeStruct TensorViewCreateInfoARM
j) (Ptr (TensorViewCreateInfoARM '[]) -> IO a
cont (Ptr (TensorViewCreateInfoARM '[]) -> IO a)
-> (Ptr (TensorViewCreateInfoARM es)
    -> Ptr (TensorViewCreateInfoARM '[]))
-> Ptr (TensorViewCreateInfoARM es)
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (TensorViewCreateInfoARM es)
-> Ptr (TensorViewCreateInfoARM '[])
forall a b. Ptr a -> Ptr b
castPtr)
      lift $ poke (castPtr @_ @(Ptr (TensorViewCreateInfoARM _)) p) pTensorARM
  pokeZeroCStruct :: Ptr ResourceDescriptorDataEXT -> IO b -> IO b
  pokeZeroCStruct :: forall b. Ptr ResourceDescriptorDataEXT -> IO b -> IO b
pokeZeroCStruct Ptr ResourceDescriptorDataEXT
_ IO b
f = IO b
f
  cStructSize :: Int
cStructSize = Int
8
  cStructAlignment :: Int
cStructAlignment = Int
8

instance Zero ResourceDescriptorDataEXT where
  zero :: ResourceDescriptorDataEXT
zero = Maybe ImageDescriptorInfoEXT -> ResourceDescriptorDataEXT
AnImage Maybe ImageDescriptorInfoEXT
forall a. Maybe a
Nothing


data DescriptorMappingSourceDataEXT
  = ConstantOffset DescriptorMappingSourceConstantOffsetEXT
  | PushIndex DescriptorMappingSourcePushIndexEXT
  | IndirectIndex DescriptorMappingSourceIndirectIndexEXT
  | IndirectIndexArray DescriptorMappingSourceIndirectIndexArrayEXT
  | HeapData DescriptorMappingSourceHeapDataEXT
  | PushDataOffset Word32
  | PushAddressOffset Word32
  | IndirectAddress DescriptorMappingSourceIndirectAddressEXT
  | ShaderRecordIndex DescriptorMappingSourceShaderRecordIndexEXT
  | ShaderRecordDataOffset Word32
  | ShaderRecordAddressOffset Word32
  deriving (Int -> DescriptorMappingSourceDataEXT -> ShowS
[DescriptorMappingSourceDataEXT] -> ShowS
DescriptorMappingSourceDataEXT -> String
(Int -> DescriptorMappingSourceDataEXT -> ShowS)
-> (DescriptorMappingSourceDataEXT -> String)
-> ([DescriptorMappingSourceDataEXT] -> ShowS)
-> Show DescriptorMappingSourceDataEXT
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DescriptorMappingSourceDataEXT -> ShowS
showsPrec :: Int -> DescriptorMappingSourceDataEXT -> ShowS
$cshow :: DescriptorMappingSourceDataEXT -> String
show :: DescriptorMappingSourceDataEXT -> String
$cshowList :: [DescriptorMappingSourceDataEXT] -> ShowS
showList :: [DescriptorMappingSourceDataEXT] -> ShowS
Show)

instance ToCStruct DescriptorMappingSourceDataEXT where
  withCStruct :: forall b.
DescriptorMappingSourceDataEXT
-> (Ptr DescriptorMappingSourceDataEXT -> IO b) -> IO b
withCStruct DescriptorMappingSourceDataEXT
x Ptr DescriptorMappingSourceDataEXT -> IO b
f = Int -> (Ptr DescriptorMappingSourceDataEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
56 ((Ptr DescriptorMappingSourceDataEXT -> IO b) -> IO b)
-> (Ptr DescriptorMappingSourceDataEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DescriptorMappingSourceDataEXT
p -> Ptr DescriptorMappingSourceDataEXT
-> DescriptorMappingSourceDataEXT -> IO b -> IO b
forall b.
Ptr DescriptorMappingSourceDataEXT
-> DescriptorMappingSourceDataEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DescriptorMappingSourceDataEXT
p DescriptorMappingSourceDataEXT
x (Ptr DescriptorMappingSourceDataEXT -> IO b
f Ptr DescriptorMappingSourceDataEXT
p)
  pokeCStruct :: Ptr DescriptorMappingSourceDataEXT -> DescriptorMappingSourceDataEXT -> IO a -> IO a
  pokeCStruct :: forall b.
Ptr DescriptorMappingSourceDataEXT
-> DescriptorMappingSourceDataEXT -> IO b -> IO b
pokeCStruct Ptr DescriptorMappingSourceDataEXT
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)
-> (DescriptorMappingSourceDataEXT -> (() -> IO a) -> IO a)
-> DescriptorMappingSourceDataEXT
-> 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)
-> (DescriptorMappingSourceDataEXT -> ContT a IO ())
-> DescriptorMappingSourceDataEXT
-> (() -> IO a)
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  \case
    ConstantOffset DescriptorMappingSourceConstantOffsetEXT
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 DescriptorMappingSourceConstantOffsetEXT
-> DescriptorMappingSourceConstantOffsetEXT -> IO a -> IO a
forall b.
Ptr DescriptorMappingSourceConstantOffsetEXT
-> DescriptorMappingSourceConstantOffsetEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (forall a b. Ptr a -> Ptr b
castPtr @_ @DescriptorMappingSourceConstantOffsetEXT Ptr DescriptorMappingSourceDataEXT
p) (DescriptorMappingSourceConstantOffsetEXT
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
$ ())
    PushIndex DescriptorMappingSourcePushIndexEXT
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 DescriptorMappingSourcePushIndexEXT
-> DescriptorMappingSourcePushIndexEXT -> IO a -> IO a
forall b.
Ptr DescriptorMappingSourcePushIndexEXT
-> DescriptorMappingSourcePushIndexEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (forall a b. Ptr a -> Ptr b
castPtr @_ @DescriptorMappingSourcePushIndexEXT Ptr DescriptorMappingSourceDataEXT
p) (DescriptorMappingSourcePushIndexEXT
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
$ ())
    IndirectIndex DescriptorMappingSourceIndirectIndexEXT
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 DescriptorMappingSourceIndirectIndexEXT
-> DescriptorMappingSourceIndirectIndexEXT -> IO a -> IO a
forall b.
Ptr DescriptorMappingSourceIndirectIndexEXT
-> DescriptorMappingSourceIndirectIndexEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (forall a b. Ptr a -> Ptr b
castPtr @_ @DescriptorMappingSourceIndirectIndexEXT Ptr DescriptorMappingSourceDataEXT
p) (DescriptorMappingSourceIndirectIndexEXT
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
$ ())
    IndirectIndexArray DescriptorMappingSourceIndirectIndexArrayEXT
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 DescriptorMappingSourceIndirectIndexArrayEXT
-> DescriptorMappingSourceIndirectIndexArrayEXT -> IO a -> IO a
forall b.
Ptr DescriptorMappingSourceIndirectIndexArrayEXT
-> DescriptorMappingSourceIndirectIndexArrayEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (forall a b. Ptr a -> Ptr b
castPtr @_ @DescriptorMappingSourceIndirectIndexArrayEXT Ptr DescriptorMappingSourceDataEXT
p) (DescriptorMappingSourceIndirectIndexArrayEXT
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
$ ())
    HeapData DescriptorMappingSourceHeapDataEXT
v -> IO () -> ContT a IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT a m a
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 DescriptorMappingSourceHeapDataEXT
-> DescriptorMappingSourceHeapDataEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (forall a b. Ptr a -> Ptr b
castPtr @_ @DescriptorMappingSourceHeapDataEXT Ptr DescriptorMappingSourceDataEXT
p) (DescriptorMappingSourceHeapDataEXT
v)
    PushDataOffset Word32
v -> IO () -> ContT a IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT a m a
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 Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (forall a b. Ptr a -> Ptr b
castPtr @_ @Word32 Ptr DescriptorMappingSourceDataEXT
p) (Word32
v)
    PushAddressOffset Word32
v -> IO () -> ContT a IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT a m a
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 Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (forall a b. Ptr a -> Ptr b
castPtr @_ @Word32 Ptr DescriptorMappingSourceDataEXT
p) (Word32
v)
    IndirectAddress DescriptorMappingSourceIndirectAddressEXT
v -> IO () -> ContT a IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT a m a
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 DescriptorMappingSourceIndirectAddressEXT
-> DescriptorMappingSourceIndirectAddressEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (forall a b. Ptr a -> Ptr b
castPtr @_ @DescriptorMappingSourceIndirectAddressEXT Ptr DescriptorMappingSourceDataEXT
p) (DescriptorMappingSourceIndirectAddressEXT
v)
    ShaderRecordIndex DescriptorMappingSourceShaderRecordIndexEXT
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 DescriptorMappingSourceShaderRecordIndexEXT
-> DescriptorMappingSourceShaderRecordIndexEXT -> IO a -> IO a
forall b.
Ptr DescriptorMappingSourceShaderRecordIndexEXT
-> DescriptorMappingSourceShaderRecordIndexEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (forall a b. Ptr a -> Ptr b
castPtr @_ @DescriptorMappingSourceShaderRecordIndexEXT Ptr DescriptorMappingSourceDataEXT
p) (DescriptorMappingSourceShaderRecordIndexEXT
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
$ ())
    ShaderRecordDataOffset Word32
v -> IO () -> ContT a IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT a m a
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 Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (forall a b. Ptr a -> Ptr b
castPtr @_ @Word32 Ptr DescriptorMappingSourceDataEXT
p) (Word32
v)
    ShaderRecordAddressOffset Word32
v -> IO () -> ContT a IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT a m a
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 Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (forall a b. Ptr a -> Ptr b
castPtr @_ @Word32 Ptr DescriptorMappingSourceDataEXT
p) (Word32
v)
  pokeZeroCStruct :: Ptr DescriptorMappingSourceDataEXT -> IO b -> IO b
  pokeZeroCStruct :: forall b. Ptr DescriptorMappingSourceDataEXT -> IO b -> IO b
pokeZeroCStruct Ptr DescriptorMappingSourceDataEXT
_ IO b
f = IO b
f
  cStructSize :: Int
cStructSize = Int
56
  cStructAlignment :: Int
cStructAlignment = Int
8

instance Zero DescriptorMappingSourceDataEXT where
  zero :: DescriptorMappingSourceDataEXT
zero = DescriptorMappingSourceIndirectIndexEXT
-> DescriptorMappingSourceDataEXT
IndirectIndex DescriptorMappingSourceIndirectIndexEXT
forall a. Zero a => a
zero


-- | VkDescriptorMappingSourceEXT - Specifies the mapping source for a shader
-- binding
--
-- = Description
--
-- -   'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_CONSTANT_OFFSET_EXT' specifies
--     that the resource will be backed by a descriptor from the heap at a
--     constant index.
--
-- -   'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT' specifies that
--     the resource will be backed by a descriptor from the heap at an
--     index sourced from push data, added to a constant index.
--
-- -   'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT' specifies
--     that the resource will be backed by a descriptor from the heap at an
--     index sourced from an address in push data, added to a constant
--     index. If the mapping is an array, the array will be mapped to a
--     base offset in indirect memory, and subsequent elements are mapped
--     as offsets to that base.
--
-- -   'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT'
--     specifies that the resource will be backed by a descriptor from the
--     heap at an index sourced from an address in push data, added to a
--     constant index. If the mapping is an array, each array element will
--     be mapped to a separate index in indirect memory.
--
-- -   'DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT' specifies that
--     the resource will be backed by heap data directly.
--
-- -   'DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT' specifies that the
--     resource will be backed by push data directly.
--
-- -   'DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT' specifies that the
--     resource will be backed by an address in push data.
--
-- -   'DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT' specifies that the
--     resource will be backed by an address sourced via another address in
--     push data.
--
-- -   'DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT'
--     specifies that the resource will be backed by a descriptor from the
--     heap at an index sourced from shader record data, added to a
--     constant index.
--
-- -   'DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT' specifies that
--     the resource will be backed by shader record data directly.
--
-- -   'DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT' specifies that
--     the resource will be backed by an address in shader record data.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'DescriptorSetAndBindingMappingEXT'
newtype DescriptorMappingSourceEXT = DescriptorMappingSourceEXT Int32
  deriving newtype (DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT -> Bool
(DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT -> Bool)
-> (DescriptorMappingSourceEXT
    -> DescriptorMappingSourceEXT -> Bool)
-> Eq DescriptorMappingSourceEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT -> Bool
== :: DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT -> Bool
$c/= :: DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT -> Bool
/= :: DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT -> Bool
Eq, Eq DescriptorMappingSourceEXT
Eq DescriptorMappingSourceEXT =>
(DescriptorMappingSourceEXT
 -> DescriptorMappingSourceEXT -> Ordering)
-> (DescriptorMappingSourceEXT
    -> DescriptorMappingSourceEXT -> Bool)
-> (DescriptorMappingSourceEXT
    -> DescriptorMappingSourceEXT -> Bool)
-> (DescriptorMappingSourceEXT
    -> DescriptorMappingSourceEXT -> Bool)
-> (DescriptorMappingSourceEXT
    -> DescriptorMappingSourceEXT -> Bool)
-> (DescriptorMappingSourceEXT
    -> DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT)
-> (DescriptorMappingSourceEXT
    -> DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT)
-> Ord DescriptorMappingSourceEXT
DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT -> Bool
DescriptorMappingSourceEXT
-> DescriptorMappingSourceEXT -> Ordering
DescriptorMappingSourceEXT
-> DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: DescriptorMappingSourceEXT
-> DescriptorMappingSourceEXT -> Ordering
compare :: DescriptorMappingSourceEXT
-> DescriptorMappingSourceEXT -> Ordering
$c< :: DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT -> Bool
< :: DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT -> Bool
$c<= :: DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT -> Bool
<= :: DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT -> Bool
$c> :: DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT -> Bool
> :: DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT -> Bool
$c>= :: DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT -> Bool
>= :: DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT -> Bool
$cmax :: DescriptorMappingSourceEXT
-> DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT
max :: DescriptorMappingSourceEXT
-> DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT
$cmin :: DescriptorMappingSourceEXT
-> DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT
min :: DescriptorMappingSourceEXT
-> DescriptorMappingSourceEXT -> DescriptorMappingSourceEXT
Ord, Ptr DescriptorMappingSourceEXT -> IO DescriptorMappingSourceEXT
Ptr DescriptorMappingSourceEXT
-> Int -> IO DescriptorMappingSourceEXT
Ptr DescriptorMappingSourceEXT
-> Int -> DescriptorMappingSourceEXT -> IO ()
Ptr DescriptorMappingSourceEXT
-> DescriptorMappingSourceEXT -> IO ()
DescriptorMappingSourceEXT -> Int
(DescriptorMappingSourceEXT -> Int)
-> (DescriptorMappingSourceEXT -> Int)
-> (Ptr DescriptorMappingSourceEXT
    -> Int -> IO DescriptorMappingSourceEXT)
-> (Ptr DescriptorMappingSourceEXT
    -> Int -> DescriptorMappingSourceEXT -> IO ())
-> (forall b. Ptr b -> Int -> IO DescriptorMappingSourceEXT)
-> (forall b. Ptr b -> Int -> DescriptorMappingSourceEXT -> IO ())
-> (Ptr DescriptorMappingSourceEXT
    -> IO DescriptorMappingSourceEXT)
-> (Ptr DescriptorMappingSourceEXT
    -> DescriptorMappingSourceEXT -> IO ())
-> Storable DescriptorMappingSourceEXT
forall b. Ptr b -> Int -> IO DescriptorMappingSourceEXT
forall b. Ptr b -> Int -> DescriptorMappingSourceEXT -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: DescriptorMappingSourceEXT -> Int
sizeOf :: DescriptorMappingSourceEXT -> Int
$calignment :: DescriptorMappingSourceEXT -> Int
alignment :: DescriptorMappingSourceEXT -> Int
$cpeekElemOff :: Ptr DescriptorMappingSourceEXT
-> Int -> IO DescriptorMappingSourceEXT
peekElemOff :: Ptr DescriptorMappingSourceEXT
-> Int -> IO DescriptorMappingSourceEXT
$cpokeElemOff :: Ptr DescriptorMappingSourceEXT
-> Int -> DescriptorMappingSourceEXT -> IO ()
pokeElemOff :: Ptr DescriptorMappingSourceEXT
-> Int -> DescriptorMappingSourceEXT -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO DescriptorMappingSourceEXT
peekByteOff :: forall b. Ptr b -> Int -> IO DescriptorMappingSourceEXT
$cpokeByteOff :: forall b. Ptr b -> Int -> DescriptorMappingSourceEXT -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> DescriptorMappingSourceEXT -> IO ()
$cpeek :: Ptr DescriptorMappingSourceEXT -> IO DescriptorMappingSourceEXT
peek :: Ptr DescriptorMappingSourceEXT -> IO DescriptorMappingSourceEXT
$cpoke :: Ptr DescriptorMappingSourceEXT
-> DescriptorMappingSourceEXT -> IO ()
poke :: Ptr DescriptorMappingSourceEXT
-> DescriptorMappingSourceEXT -> IO ()
Storable, DescriptorMappingSourceEXT
DescriptorMappingSourceEXT -> Zero DescriptorMappingSourceEXT
forall a. a -> Zero a
$czero :: DescriptorMappingSourceEXT
zero :: DescriptorMappingSourceEXT
Zero)

-- No documentation found for Nested "VkDescriptorMappingSourceEXT" "VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_CONSTANT_OFFSET_EXT"
pattern $mDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_CONSTANT_OFFSET_EXT :: forall {r}.
DescriptorMappingSourceEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_CONSTANT_OFFSET_EXT :: DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_CONSTANT_OFFSET_EXT = DescriptorMappingSourceEXT 0

-- No documentation found for Nested "VkDescriptorMappingSourceEXT" "VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT"
pattern $mDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT :: forall {r}.
DescriptorMappingSourceEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT :: DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT = DescriptorMappingSourceEXT 1

-- No documentation found for Nested "VkDescriptorMappingSourceEXT" "VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT"
pattern $mDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT :: forall {r}.
DescriptorMappingSourceEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT :: DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT = DescriptorMappingSourceEXT 2

-- No documentation found for Nested "VkDescriptorMappingSourceEXT" "VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT"
pattern $mDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT :: forall {r}.
DescriptorMappingSourceEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT :: DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT = DescriptorMappingSourceEXT 3

-- No documentation found for Nested "VkDescriptorMappingSourceEXT" "VK_DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT"
pattern $mDESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT :: forall {r}.
DescriptorMappingSourceEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bDESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT :: DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT = DescriptorMappingSourceEXT 4

-- No documentation found for Nested "VkDescriptorMappingSourceEXT" "VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT"
pattern $mDESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT :: forall {r}.
DescriptorMappingSourceEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bDESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT :: DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT = DescriptorMappingSourceEXT 5

-- No documentation found for Nested "VkDescriptorMappingSourceEXT" "VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT"
pattern $mDESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT :: forall {r}.
DescriptorMappingSourceEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bDESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT :: DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT = DescriptorMappingSourceEXT 6

-- No documentation found for Nested "VkDescriptorMappingSourceEXT" "VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT"
pattern $mDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT :: forall {r}.
DescriptorMappingSourceEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT :: DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT = DescriptorMappingSourceEXT 7

-- No documentation found for Nested "VkDescriptorMappingSourceEXT" "VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT"
pattern $mDESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT :: forall {r}.
DescriptorMappingSourceEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bDESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT :: DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT = DescriptorMappingSourceEXT 10

-- No documentation found for Nested "VkDescriptorMappingSourceEXT" "VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT"
pattern $mDESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT :: forall {r}.
DescriptorMappingSourceEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bDESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT :: DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT = DescriptorMappingSourceEXT 9

-- No documentation found for Nested "VkDescriptorMappingSourceEXT" "VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT"
pattern $mDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT :: forall {r}.
DescriptorMappingSourceEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT :: DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT = DescriptorMappingSourceEXT 8

{-# COMPLETE
  DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_CONSTANT_OFFSET_EXT
  , DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT
  , DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT
  , DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT
  , DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT
  , DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT
  , DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT
  , DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT
  , DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT
  , DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT
  , DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT ::
    DescriptorMappingSourceEXT
  #-}

conNameDescriptorMappingSourceEXT :: String
conNameDescriptorMappingSourceEXT :: String
conNameDescriptorMappingSourceEXT = String
"DescriptorMappingSourceEXT"

enumPrefixDescriptorMappingSourceEXT :: String
enumPrefixDescriptorMappingSourceEXT :: String
enumPrefixDescriptorMappingSourceEXT = String
"DESCRIPTOR_MAPPING_SOURCE_"

showTableDescriptorMappingSourceEXT :: [(DescriptorMappingSourceEXT, String)]
showTableDescriptorMappingSourceEXT :: [(DescriptorMappingSourceEXT, String)]
showTableDescriptorMappingSourceEXT =
  [
    ( DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_CONSTANT_OFFSET_EXT
    , String
"HEAP_WITH_CONSTANT_OFFSET_EXT"
    )
  ,
    ( DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT
    , String
"HEAP_WITH_PUSH_INDEX_EXT"
    )
  ,
    ( DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT
    , String
"HEAP_WITH_INDIRECT_INDEX_EXT"
    )
  ,
    ( DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT
    , String
"HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT"
    )
  ,
    ( DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT
    , String
"RESOURCE_HEAP_DATA_EXT"
    )
  ,
    ( DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT
    , String
"PUSH_DATA_EXT"
    )
  ,
    ( DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT
    , String
"PUSH_ADDRESS_EXT"
    )
  ,
    ( DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT
    , String
"INDIRECT_ADDRESS_EXT"
    )
  ,
    ( DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT
    , String
"SHADER_RECORD_ADDRESS_EXT"
    )
  ,
    ( DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT
    , String
"SHADER_RECORD_DATA_EXT"
    )
  ,
    ( DescriptorMappingSourceEXT
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT
    , String
"HEAP_WITH_SHADER_RECORD_INDEX_EXT"
    )
  ]

instance Show DescriptorMappingSourceEXT where
  showsPrec :: Int -> DescriptorMappingSourceEXT -> ShowS
showsPrec =
    String
-> [(DescriptorMappingSourceEXT, String)]
-> String
-> (DescriptorMappingSourceEXT -> Int32)
-> (Int32 -> ShowS)
-> Int
-> DescriptorMappingSourceEXT
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixDescriptorMappingSourceEXT
      [(DescriptorMappingSourceEXT, String)]
showTableDescriptorMappingSourceEXT
      String
conNameDescriptorMappingSourceEXT
      (\(DescriptorMappingSourceEXT Int32
x) -> Int32
x)
      (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11)

instance Read DescriptorMappingSourceEXT where
  readPrec :: ReadPrec DescriptorMappingSourceEXT
readPrec =
    String
-> [(DescriptorMappingSourceEXT, String)]
-> String
-> (Int32 -> DescriptorMappingSourceEXT)
-> ReadPrec DescriptorMappingSourceEXT
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixDescriptorMappingSourceEXT
      [(DescriptorMappingSourceEXT, String)]
showTableDescriptorMappingSourceEXT
      String
conNameDescriptorMappingSourceEXT
      Int32 -> DescriptorMappingSourceEXT
DescriptorMappingSourceEXT

type SpirvResourceTypeFlagsEXT = SpirvResourceTypeFlagBitsEXT

-- | VkSpirvResourceTypeFlagBitsEXT - Bitmask specifying different SPIR-V
-- resource declarations
--
-- = Description
--
-- -   'SPIRV_RESOURCE_TYPE_ALL_EXT' specifies that all resource
--     declarations are included.
--
-- -   'SPIRV_RESOURCE_TYPE_SAMPLER_BIT_EXT' specifies @OpTypeSampler@
--     variables.
--
-- -   'SPIRV_RESOURCE_TYPE_SAMPLED_IMAGE_BIT_EXT' specifies @OpTypeImage@
--     variables with a @Sampled@ parameter of 1.
--
-- -   'SPIRV_RESOURCE_TYPE_READ_ONLY_IMAGE_BIT_EXT' specifies
--     @OpTypeImage@ variables with a @Sampled@ parameter of 2 and
--     decorated with @NonWritable@.
--
-- -   'SPIRV_RESOURCE_TYPE_READ_WRITE_IMAGE_BIT_EXT' specifies
--     @OpTypeImage@ variables with a @Sampled@ parameter of 2 and not
--     decorated with @NonWritable@.
--
-- -   'SPIRV_RESOURCE_TYPE_COMBINED_SAMPLED_IMAGE_BIT_EXT' specifies
--     @OpTypeSampledImage@ variables.
--
-- -   'SPIRV_RESOURCE_TYPE_UNIFORM_BUFFER_BIT_EXT' specifies
--     @OpTypeStruct@ variables in the @Uniform@ storage class decorated
--     with @Block@
--
-- -   'SPIRV_RESOURCE_TYPE_READ_ONLY_STORAGE_BUFFER_BIT_EXT' specifies
--     @OpTypeStruct@ variables either in the @StorageBuffer@ storage class
--     decorated with @Block@ or in the @Uniform@ storage class decorated
--     with @BufferBlock@, and decorated with @NonWritable@
--
-- -   'SPIRV_RESOURCE_TYPE_READ_WRITE_STORAGE_BUFFER_BIT_EXT' specifies
--     @OpTypeStruct@ variables either in the @StorageBuffer@ storage class
--     decorated with @Block@ or in the @Uniform@ storage class decorated
--     with @BufferBlock@, but not decorated with @NonWritable@
--
-- -   'SPIRV_RESOURCE_TYPE_ACCELERATION_STRUCTURE_BIT_EXT' specifies
--     @OpTypeAccelerationStructureKHR@ variables
--
-- -   'SPIRV_RESOURCE_TYPE_TENSOR_BIT_ARM' specifies @OpTypeTensorARM@
--     variables
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_descriptor_heap VK_EXT_descriptor_heap>,
-- 'SpirvResourceTypeFlagsEXT'
newtype SpirvResourceTypeFlagBitsEXT = SpirvResourceTypeFlagBitsEXT Flags
  deriving newtype (SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Bool
(SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Bool)
-> (SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Bool)
-> Eq SpirvResourceTypeFlagsEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Bool
== :: SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Bool
$c/= :: SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Bool
/= :: SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Bool
Eq, Eq SpirvResourceTypeFlagsEXT
Eq SpirvResourceTypeFlagsEXT =>
(SpirvResourceTypeFlagsEXT
 -> SpirvResourceTypeFlagsEXT -> Ordering)
-> (SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Bool)
-> (SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Bool)
-> (SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Bool)
-> (SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Bool)
-> (SpirvResourceTypeFlagsEXT
    -> SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT)
-> (SpirvResourceTypeFlagsEXT
    -> SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT)
-> Ord SpirvResourceTypeFlagsEXT
SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Bool
SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Ordering
SpirvResourceTypeFlagsEXT
-> SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Ordering
compare :: SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Ordering
$c< :: SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Bool
< :: SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Bool
$c<= :: SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Bool
<= :: SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Bool
$c> :: SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Bool
> :: SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Bool
$c>= :: SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Bool
>= :: SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> Bool
$cmax :: SpirvResourceTypeFlagsEXT
-> SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT
max :: SpirvResourceTypeFlagsEXT
-> SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT
$cmin :: SpirvResourceTypeFlagsEXT
-> SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT
min :: SpirvResourceTypeFlagsEXT
-> SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT
Ord, Ptr SpirvResourceTypeFlagsEXT -> IO SpirvResourceTypeFlagsEXT
Ptr SpirvResourceTypeFlagsEXT
-> Int -> IO SpirvResourceTypeFlagsEXT
Ptr SpirvResourceTypeFlagsEXT
-> Int -> SpirvResourceTypeFlagsEXT -> IO ()
Ptr SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> IO ()
SpirvResourceTypeFlagsEXT -> Int
(SpirvResourceTypeFlagsEXT -> Int)
-> (SpirvResourceTypeFlagsEXT -> Int)
-> (Ptr SpirvResourceTypeFlagsEXT
    -> Int -> IO SpirvResourceTypeFlagsEXT)
-> (Ptr SpirvResourceTypeFlagsEXT
    -> Int -> SpirvResourceTypeFlagsEXT -> IO ())
-> (forall b. Ptr b -> Int -> IO SpirvResourceTypeFlagsEXT)
-> (forall b. Ptr b -> Int -> SpirvResourceTypeFlagsEXT -> IO ())
-> (Ptr SpirvResourceTypeFlagsEXT -> IO SpirvResourceTypeFlagsEXT)
-> (Ptr SpirvResourceTypeFlagsEXT
    -> SpirvResourceTypeFlagsEXT -> IO ())
-> Storable SpirvResourceTypeFlagsEXT
forall b. Ptr b -> Int -> IO SpirvResourceTypeFlagsEXT
forall b. Ptr b -> Int -> SpirvResourceTypeFlagsEXT -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: SpirvResourceTypeFlagsEXT -> Int
sizeOf :: SpirvResourceTypeFlagsEXT -> Int
$calignment :: SpirvResourceTypeFlagsEXT -> Int
alignment :: SpirvResourceTypeFlagsEXT -> Int
$cpeekElemOff :: Ptr SpirvResourceTypeFlagsEXT
-> Int -> IO SpirvResourceTypeFlagsEXT
peekElemOff :: Ptr SpirvResourceTypeFlagsEXT
-> Int -> IO SpirvResourceTypeFlagsEXT
$cpokeElemOff :: Ptr SpirvResourceTypeFlagsEXT
-> Int -> SpirvResourceTypeFlagsEXT -> IO ()
pokeElemOff :: Ptr SpirvResourceTypeFlagsEXT
-> Int -> SpirvResourceTypeFlagsEXT -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO SpirvResourceTypeFlagsEXT
peekByteOff :: forall b. Ptr b -> Int -> IO SpirvResourceTypeFlagsEXT
$cpokeByteOff :: forall b. Ptr b -> Int -> SpirvResourceTypeFlagsEXT -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> SpirvResourceTypeFlagsEXT -> IO ()
$cpeek :: Ptr SpirvResourceTypeFlagsEXT -> IO SpirvResourceTypeFlagsEXT
peek :: Ptr SpirvResourceTypeFlagsEXT -> IO SpirvResourceTypeFlagsEXT
$cpoke :: Ptr SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> IO ()
poke :: Ptr SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT -> IO ()
Storable, SpirvResourceTypeFlagsEXT
SpirvResourceTypeFlagsEXT -> Zero SpirvResourceTypeFlagsEXT
forall a. a -> Zero a
$czero :: SpirvResourceTypeFlagsEXT
zero :: SpirvResourceTypeFlagsEXT
Zero, Eq SpirvResourceTypeFlagsEXT
SpirvResourceTypeFlagsEXT
Eq SpirvResourceTypeFlagsEXT =>
(SpirvResourceTypeFlagsEXT
 -> SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT)
-> (SpirvResourceTypeFlagsEXT
    -> SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT)
-> (SpirvResourceTypeFlagsEXT
    -> SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT)
-> (SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT)
-> (SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT)
-> (SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT)
-> SpirvResourceTypeFlagsEXT
-> (Int -> SpirvResourceTypeFlagsEXT)
-> (SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT)
-> (SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT)
-> (SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT)
-> (SpirvResourceTypeFlagsEXT -> Int -> Bool)
-> (SpirvResourceTypeFlagsEXT -> Maybe Int)
-> (SpirvResourceTypeFlagsEXT -> Int)
-> (SpirvResourceTypeFlagsEXT -> Bool)
-> (SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT)
-> (SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT)
-> (SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT)
-> (SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT)
-> (SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT)
-> (SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT)
-> (SpirvResourceTypeFlagsEXT -> Int)
-> Bits SpirvResourceTypeFlagsEXT
Int -> SpirvResourceTypeFlagsEXT
SpirvResourceTypeFlagsEXT -> Bool
SpirvResourceTypeFlagsEXT -> Int
SpirvResourceTypeFlagsEXT -> Maybe Int
SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT
SpirvResourceTypeFlagsEXT -> Int -> Bool
SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
SpirvResourceTypeFlagsEXT
-> SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT
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
$c.&. :: SpirvResourceTypeFlagsEXT
-> SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT
.&. :: SpirvResourceTypeFlagsEXT
-> SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT
$c.|. :: SpirvResourceTypeFlagsEXT
-> SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT
.|. :: SpirvResourceTypeFlagsEXT
-> SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT
$cxor :: SpirvResourceTypeFlagsEXT
-> SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT
xor :: SpirvResourceTypeFlagsEXT
-> SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT
$ccomplement :: SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT
complement :: SpirvResourceTypeFlagsEXT -> SpirvResourceTypeFlagsEXT
$cshift :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
shift :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
$crotate :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
rotate :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
$czeroBits :: SpirvResourceTypeFlagsEXT
zeroBits :: SpirvResourceTypeFlagsEXT
$cbit :: Int -> SpirvResourceTypeFlagsEXT
bit :: Int -> SpirvResourceTypeFlagsEXT
$csetBit :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
setBit :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
$cclearBit :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
clearBit :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
$ccomplementBit :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
complementBit :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
$ctestBit :: SpirvResourceTypeFlagsEXT -> Int -> Bool
testBit :: SpirvResourceTypeFlagsEXT -> Int -> Bool
$cbitSizeMaybe :: SpirvResourceTypeFlagsEXT -> Maybe Int
bitSizeMaybe :: SpirvResourceTypeFlagsEXT -> Maybe Int
$cbitSize :: SpirvResourceTypeFlagsEXT -> Int
bitSize :: SpirvResourceTypeFlagsEXT -> Int
$cisSigned :: SpirvResourceTypeFlagsEXT -> Bool
isSigned :: SpirvResourceTypeFlagsEXT -> Bool
$cshiftL :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
shiftL :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
$cunsafeShiftL :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
unsafeShiftL :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
$cshiftR :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
shiftR :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
$cunsafeShiftR :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
unsafeShiftR :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
$crotateL :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
rotateL :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
$crotateR :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
rotateR :: SpirvResourceTypeFlagsEXT -> Int -> SpirvResourceTypeFlagsEXT
$cpopCount :: SpirvResourceTypeFlagsEXT -> Int
popCount :: SpirvResourceTypeFlagsEXT -> Int
Bits, Bits SpirvResourceTypeFlagsEXT
Bits SpirvResourceTypeFlagsEXT =>
(SpirvResourceTypeFlagsEXT -> Int)
-> (SpirvResourceTypeFlagsEXT -> Int)
-> (SpirvResourceTypeFlagsEXT -> Int)
-> FiniteBits SpirvResourceTypeFlagsEXT
SpirvResourceTypeFlagsEXT -> Int
forall b.
Bits b =>
(b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
$cfiniteBitSize :: SpirvResourceTypeFlagsEXT -> Int
finiteBitSize :: SpirvResourceTypeFlagsEXT -> Int
$ccountLeadingZeros :: SpirvResourceTypeFlagsEXT -> Int
countLeadingZeros :: SpirvResourceTypeFlagsEXT -> Int
$ccountTrailingZeros :: SpirvResourceTypeFlagsEXT -> Int
countTrailingZeros :: SpirvResourceTypeFlagsEXT -> Int
FiniteBits)

-- No documentation found for Nested "VkSpirvResourceTypeFlagBitsEXT" "VK_SPIRV_RESOURCE_TYPE_ALL_EXT"
pattern $mSPIRV_RESOURCE_TYPE_ALL_EXT :: forall {r}.
SpirvResourceTypeFlagsEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bSPIRV_RESOURCE_TYPE_ALL_EXT :: SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_ALL_EXT = SpirvResourceTypeFlagBitsEXT 0x7fffffff

-- No documentation found for Nested "VkSpirvResourceTypeFlagBitsEXT" "VK_SPIRV_RESOURCE_TYPE_SAMPLER_BIT_EXT"
pattern $mSPIRV_RESOURCE_TYPE_SAMPLER_BIT_EXT :: forall {r}.
SpirvResourceTypeFlagsEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bSPIRV_RESOURCE_TYPE_SAMPLER_BIT_EXT :: SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_SAMPLER_BIT_EXT = SpirvResourceTypeFlagBitsEXT 0x00000001

-- No documentation found for Nested "VkSpirvResourceTypeFlagBitsEXT" "VK_SPIRV_RESOURCE_TYPE_SAMPLED_IMAGE_BIT_EXT"
pattern $mSPIRV_RESOURCE_TYPE_SAMPLED_IMAGE_BIT_EXT :: forall {r}.
SpirvResourceTypeFlagsEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bSPIRV_RESOURCE_TYPE_SAMPLED_IMAGE_BIT_EXT :: SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_SAMPLED_IMAGE_BIT_EXT = SpirvResourceTypeFlagBitsEXT 0x00000002

-- No documentation found for Nested "VkSpirvResourceTypeFlagBitsEXT" "VK_SPIRV_RESOURCE_TYPE_READ_ONLY_IMAGE_BIT_EXT"
pattern $mSPIRV_RESOURCE_TYPE_READ_ONLY_IMAGE_BIT_EXT :: forall {r}.
SpirvResourceTypeFlagsEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bSPIRV_RESOURCE_TYPE_READ_ONLY_IMAGE_BIT_EXT :: SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_READ_ONLY_IMAGE_BIT_EXT = SpirvResourceTypeFlagBitsEXT 0x00000004

-- No documentation found for Nested "VkSpirvResourceTypeFlagBitsEXT" "VK_SPIRV_RESOURCE_TYPE_READ_WRITE_IMAGE_BIT_EXT"
pattern $mSPIRV_RESOURCE_TYPE_READ_WRITE_IMAGE_BIT_EXT :: forall {r}.
SpirvResourceTypeFlagsEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bSPIRV_RESOURCE_TYPE_READ_WRITE_IMAGE_BIT_EXT :: SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_READ_WRITE_IMAGE_BIT_EXT = SpirvResourceTypeFlagBitsEXT 0x00000008

-- No documentation found for Nested "VkSpirvResourceTypeFlagBitsEXT" "VK_SPIRV_RESOURCE_TYPE_COMBINED_SAMPLED_IMAGE_BIT_EXT"
pattern $mSPIRV_RESOURCE_TYPE_COMBINED_SAMPLED_IMAGE_BIT_EXT :: forall {r}.
SpirvResourceTypeFlagsEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bSPIRV_RESOURCE_TYPE_COMBINED_SAMPLED_IMAGE_BIT_EXT :: SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_COMBINED_SAMPLED_IMAGE_BIT_EXT = SpirvResourceTypeFlagBitsEXT 0x00000010

-- No documentation found for Nested "VkSpirvResourceTypeFlagBitsEXT" "VK_SPIRV_RESOURCE_TYPE_UNIFORM_BUFFER_BIT_EXT"
pattern $mSPIRV_RESOURCE_TYPE_UNIFORM_BUFFER_BIT_EXT :: forall {r}.
SpirvResourceTypeFlagsEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bSPIRV_RESOURCE_TYPE_UNIFORM_BUFFER_BIT_EXT :: SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_UNIFORM_BUFFER_BIT_EXT = SpirvResourceTypeFlagBitsEXT 0x00000020

-- No documentation found for Nested "VkSpirvResourceTypeFlagBitsEXT" "VK_SPIRV_RESOURCE_TYPE_READ_ONLY_STORAGE_BUFFER_BIT_EXT"
pattern $mSPIRV_RESOURCE_TYPE_READ_ONLY_STORAGE_BUFFER_BIT_EXT :: forall {r}.
SpirvResourceTypeFlagsEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bSPIRV_RESOURCE_TYPE_READ_ONLY_STORAGE_BUFFER_BIT_EXT :: SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_READ_ONLY_STORAGE_BUFFER_BIT_EXT = SpirvResourceTypeFlagBitsEXT 0x00000040

-- No documentation found for Nested "VkSpirvResourceTypeFlagBitsEXT" "VK_SPIRV_RESOURCE_TYPE_READ_WRITE_STORAGE_BUFFER_BIT_EXT"
pattern $mSPIRV_RESOURCE_TYPE_READ_WRITE_STORAGE_BUFFER_BIT_EXT :: forall {r}.
SpirvResourceTypeFlagsEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bSPIRV_RESOURCE_TYPE_READ_WRITE_STORAGE_BUFFER_BIT_EXT :: SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_READ_WRITE_STORAGE_BUFFER_BIT_EXT = SpirvResourceTypeFlagBitsEXT 0x00000080

-- No documentation found for Nested "VkSpirvResourceTypeFlagBitsEXT" "VK_SPIRV_RESOURCE_TYPE_TENSOR_BIT_ARM"
pattern $mSPIRV_RESOURCE_TYPE_TENSOR_BIT_ARM :: forall {r}.
SpirvResourceTypeFlagsEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bSPIRV_RESOURCE_TYPE_TENSOR_BIT_ARM :: SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_TENSOR_BIT_ARM = SpirvResourceTypeFlagBitsEXT 0x00000200

-- No documentation found for Nested "VkSpirvResourceTypeFlagBitsEXT" "VK_SPIRV_RESOURCE_TYPE_ACCELERATION_STRUCTURE_BIT_EXT"
pattern $mSPIRV_RESOURCE_TYPE_ACCELERATION_STRUCTURE_BIT_EXT :: forall {r}.
SpirvResourceTypeFlagsEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bSPIRV_RESOURCE_TYPE_ACCELERATION_STRUCTURE_BIT_EXT :: SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_ACCELERATION_STRUCTURE_BIT_EXT = SpirvResourceTypeFlagBitsEXT 0x00000100

conNameSpirvResourceTypeFlagBitsEXT :: String
conNameSpirvResourceTypeFlagBitsEXT :: String
conNameSpirvResourceTypeFlagBitsEXT = String
"SpirvResourceTypeFlagBitsEXT"

enumPrefixSpirvResourceTypeFlagBitsEXT :: String
enumPrefixSpirvResourceTypeFlagBitsEXT :: String
enumPrefixSpirvResourceTypeFlagBitsEXT = String
"SPIRV_RESOURCE_TYPE_"

showTableSpirvResourceTypeFlagBitsEXT :: [(SpirvResourceTypeFlagBitsEXT, String)]
showTableSpirvResourceTypeFlagBitsEXT :: [(SpirvResourceTypeFlagsEXT, String)]
showTableSpirvResourceTypeFlagBitsEXT =
  [
    ( SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_ALL_EXT
    , String
"ALL_EXT"
    )
  ,
    ( SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_SAMPLER_BIT_EXT
    , String
"SAMPLER_BIT_EXT"
    )
  ,
    ( SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_SAMPLED_IMAGE_BIT_EXT
    , String
"SAMPLED_IMAGE_BIT_EXT"
    )
  ,
    ( SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_READ_ONLY_IMAGE_BIT_EXT
    , String
"READ_ONLY_IMAGE_BIT_EXT"
    )
  ,
    ( SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_READ_WRITE_IMAGE_BIT_EXT
    , String
"READ_WRITE_IMAGE_BIT_EXT"
    )
  ,
    ( SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_COMBINED_SAMPLED_IMAGE_BIT_EXT
    , String
"COMBINED_SAMPLED_IMAGE_BIT_EXT"
    )
  ,
    ( SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_UNIFORM_BUFFER_BIT_EXT
    , String
"UNIFORM_BUFFER_BIT_EXT"
    )
  ,
    ( SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_READ_ONLY_STORAGE_BUFFER_BIT_EXT
    , String
"READ_ONLY_STORAGE_BUFFER_BIT_EXT"
    )
  ,
    ( SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_READ_WRITE_STORAGE_BUFFER_BIT_EXT
    , String
"READ_WRITE_STORAGE_BUFFER_BIT_EXT"
    )
  ,
    ( SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_TENSOR_BIT_ARM
    , String
"TENSOR_BIT_ARM"
    )
  ,
    ( SpirvResourceTypeFlagsEXT
SPIRV_RESOURCE_TYPE_ACCELERATION_STRUCTURE_BIT_EXT
    , String
"ACCELERATION_STRUCTURE_BIT_EXT"
    )
  ]

instance Show SpirvResourceTypeFlagBitsEXT where
  showsPrec :: Int -> SpirvResourceTypeFlagsEXT -> ShowS
showsPrec =
    String
-> [(SpirvResourceTypeFlagsEXT, String)]
-> String
-> (SpirvResourceTypeFlagsEXT -> Word32)
-> (Word32 -> ShowS)
-> Int
-> SpirvResourceTypeFlagsEXT
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixSpirvResourceTypeFlagBitsEXT
      [(SpirvResourceTypeFlagsEXT, String)]
showTableSpirvResourceTypeFlagBitsEXT
      String
conNameSpirvResourceTypeFlagBitsEXT
      (\(SpirvResourceTypeFlagBitsEXT Word32
x) -> Word32
x)
      (\Word32
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> ShowS
forall a. Integral a => a -> ShowS
showHex Word32
x)

instance Read SpirvResourceTypeFlagBitsEXT where
  readPrec :: ReadPrec SpirvResourceTypeFlagsEXT
readPrec =
    String
-> [(SpirvResourceTypeFlagsEXT, String)]
-> String
-> (Word32 -> SpirvResourceTypeFlagsEXT)
-> ReadPrec SpirvResourceTypeFlagsEXT
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixSpirvResourceTypeFlagBitsEXT
      [(SpirvResourceTypeFlagsEXT, String)]
showTableSpirvResourceTypeFlagBitsEXT
      String
conNameSpirvResourceTypeFlagBitsEXT
      Word32 -> SpirvResourceTypeFlagsEXT
SpirvResourceTypeFlagBitsEXT

type EXT_DESCRIPTOR_HEAP_SPEC_VERSION = 1

-- No documentation found for TopLevel "VK_EXT_DESCRIPTOR_HEAP_SPEC_VERSION"
pattern EXT_DESCRIPTOR_HEAP_SPEC_VERSION :: forall a . Integral a => a
pattern $mEXT_DESCRIPTOR_HEAP_SPEC_VERSION :: forall {r} {a}.
Integral a =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bEXT_DESCRIPTOR_HEAP_SPEC_VERSION :: forall a. Integral a => a
EXT_DESCRIPTOR_HEAP_SPEC_VERSION = 1


type EXT_DESCRIPTOR_HEAP_EXTENSION_NAME = "VK_EXT_descriptor_heap"

-- No documentation found for TopLevel "VK_EXT_DESCRIPTOR_HEAP_EXTENSION_NAME"
pattern EXT_DESCRIPTOR_HEAP_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $mEXT_DESCRIPTOR_HEAP_EXTENSION_NAME :: forall {r} {a}.
(Eq a, IsString a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bEXT_DESCRIPTOR_HEAP_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
EXT_DESCRIPTOR_HEAP_EXTENSION_NAME = "VK_EXT_descriptor_heap"