{-# language CPP #-}
-- | = Name
--
-- VK_KHR_synchronization2 - device extension
--
-- == VK_KHR_synchronization2
--
-- [__Name String__]
--     @VK_KHR_synchronization2@
--
-- [__Extension Type__]
--     Device extension
--
-- [__Registered Extension Number__]
--     315
--
-- [__Revision__]
--     1
--
-- [__Extension and Version Dependencies__]
--
--     -   Requires Vulkan 1.0
--
--     -   Requires @VK_KHR_get_physical_device_properties2@
--
-- [__Contact__]
--
--     -   Tobias Hector
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_KHR_synchronization2] @tobski%0A<<Here describe the issue or question you have about the VK_KHR_synchronization2 extension>> >
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2020-12-03
--
-- [__Interactions and External Dependencies__]
--
--     -   Interacts with @VK_KHR_create_renderpass2@
--
-- [__Contributors__]
--
--     -   Tobias Hector
--
-- == Description
--
-- This extension modifies the original core synchronization APIs to
-- simplify the interface and improve usability of these APIs. It also adds
-- new pipeline stage and access flag types that extend into the 64-bit
-- range, as we have run out within the 32-bit range. The new flags are
-- identical to the old values within the 32-bit range, with new stages and
-- bits beyond that.
--
-- Pipeline stages and access flags are now specified together in memory
-- barrier structures, making the connection between the two more obvious.
-- Additionally, scoping the pipeline stages into the barrier structs
-- allows the use of the @MEMORY_READ@ and @MEMORY_WRITE@ flags without
-- sacrificing precision. The per-stage access flags should be used to
-- disambiguate specific accesses in a given stage or set of stages - for
-- instance, between uniform reads and sampling operations.
--
-- Layout transitions have been simplified as well; rather than requiring a
-- different set of layouts for depth\/stencil\/color attachments, there
-- are generic
-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR'
-- and 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR'
-- layouts which are contextually applied based on the image format. For
-- example, for a depth format image,
-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR' is
-- equivalent to
-- 'Vulkan.Extensions.VK_KHR_separate_depth_stencil_layouts.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR'.
-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR'
-- also functionally replaces
-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL'.
--
-- Events are now more efficient, because they include memory dependency
-- information when you set them on the device. Previously, this
-- information was only known when waiting on an event, so the dependencies
-- could not be satisfied until the wait occurred. That sometimes meant
-- stalling the pipeline when the wait occurred. The new API provides
-- enough information for implementations to satisfy these dependencies in
-- parallel with other tasks.
--
-- Queue submission has been changed to wrap command buffers and semaphores
-- in extensible structures, which incorporate changes from Vulkan 1.1,
-- @VK_KHR_device_group@, and @VK_KHR_timeline_semaphore@. This also adds a
-- pipeline stage to the semaphore signal operation, mirroring the existing
-- pipeline stage specification for wait operations.
--
-- Other miscellaneous changes include:
--
-- -   Events can now be specified as interacting only with the device,
--     allowing more efficient access to the underlying object.
--
-- -   Image memory barriers that do not perform an image layout transition
--     can be specified by setting @oldLayout@ equal to @newLayout@.
--
--     -   E.g. the old and new layout can both be set to
--         'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED',
--         without discarding data in the image.
--
-- -   Queue family ownership transfer parameters are simplified in some
--     cases.
--
-- -   Where two synchronization commands need to be matched up (queue
--     transfer operations, events), the dependency information specified
--     in each place must now match completely for consistency.
--
-- -   Extensions with commands or functions with a
--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags' or
--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'
--     parameter have had those APIs replaced with equivalents using
--     'PipelineStageFlags2KHR'.
--
-- -   The new event and barrier interfaces are now more extensible for
--     future changes.
--
-- -   Relevant pipeline stage masks can now be specified as empty with the
--     new
--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_NONE_KHR'
--     and 'PIPELINE_STAGE_2_NONE_KHR' values.
--
-- -   'MemoryBarrier2KHR' can be chained to
--     'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassDependency2',
--     overriding the original 32-bit stage and access masks.
--
-- == New Base Types
--
-- -   'Vulkan.Core10.FundamentalTypes.Flags64'
--
-- == New Commands
--
-- -   'cmdPipelineBarrier2KHR'
--
-- -   'cmdResetEvent2KHR'
--
-- -   'cmdSetEvent2KHR'
--
-- -   'cmdWaitEvents2KHR'
--
-- -   'cmdWriteTimestamp2KHR'
--
-- -   'queueSubmit2KHR'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_AMD_buffer_marker VK_AMD_buffer_marker>
-- is supported:
--
-- -   'cmdWriteBufferMarker2AMD'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_device_diagnostic_checkpoints VK_NV_device_diagnostic_checkpoints>
-- is supported:
--
-- -   'getQueueCheckpointData2NV'
--
-- == New Structures
--
-- -   'BufferMemoryBarrier2KHR'
--
-- -   'CommandBufferSubmitInfoKHR'
--
-- -   'DependencyInfoKHR'
--
-- -   'ImageMemoryBarrier2KHR'
--
-- -   'SemaphoreSubmitInfoKHR'
--
-- -   'SubmitInfo2KHR'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--     'Vulkan.Core10.Device.DeviceCreateInfo':
--
--     -   'PhysicalDeviceSynchronization2FeaturesKHR'
--
-- -   Extending
--     'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassDependency2':
--
--     -   'MemoryBarrier2KHR'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_device_diagnostic_checkpoints VK_NV_device_diagnostic_checkpoints>
-- is supported:
--
-- -   'CheckpointData2NV'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.QueueFamilyProperties2':
--
--     -   'QueueFamilyCheckpointProperties2NV'
--
-- == New Enums
--
-- -   'AccessFlagBits2KHR'
--
-- -   'PipelineStageFlagBits2KHR'
--
-- -   'SubmitFlagBitsKHR'
--
-- == New Bitmasks
--
-- -   'AccessFlags2KHR'
--
-- -   'PipelineStageFlags2KHR'
--
-- -   'SubmitFlagsKHR'
--
-- == New Enum Constants
--
-- -   'KHR_SYNCHRONIZATION_2_EXTENSION_NAME'
--
-- -   'KHR_SYNCHRONIZATION_2_SPEC_VERSION'
--
-- -   Extending 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits':
--
--     -   'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_NONE_KHR'
--
-- -   Extending
--     'Vulkan.Core10.Enums.EventCreateFlagBits.EventCreateFlagBits':
--
--     -   'Vulkan.Core10.Enums.EventCreateFlagBits.EVENT_CREATE_DEVICE_ONLY_BIT_KHR'
--
-- -   Extending 'Vulkan.Core10.Enums.ImageLayout.ImageLayout':
--
--     -   'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR'
--
--     -   'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR'
--
-- -   Extending
--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits':
--
--     -   'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_NONE_KHR'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEPENDENCY_INFO_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SUBMIT_INFO_2_KHR'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_blend_operation_advanced VK_EXT_blend_operation_advanced>
-- is supported:
--
-- -   Extending 'AccessFlagBits2KHR':
--
--     -   'ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_conditional_rendering VK_EXT_conditional_rendering>
-- is supported:
--
-- -   Extending 'AccessFlagBits2KHR':
--
--     -   'ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT'
--
-- -   Extending 'PipelineStageFlagBits2KHR':
--
--     -   'PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_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 'AccessFlagBits2KHR':
--
--     -   'ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT'
--
-- -   Extending 'PipelineStageFlagBits2KHR':
--
--     -   'PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_transform_feedback VK_EXT_transform_feedback>
-- is supported:
--
-- -   Extending 'AccessFlagBits2KHR':
--
--     -   'ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT'
--
--     -   'ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT'
--
--     -   'ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT'
--
-- -   Extending 'PipelineStageFlagBits2KHR':
--
--     -   'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_acceleration_structure VK_KHR_acceleration_structure>
-- is supported:
--
-- -   Extending 'AccessFlagBits2KHR':
--
--     -   'ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR'
--
--     -   'ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR'
--
-- -   Extending 'PipelineStageFlagBits2KHR':
--
--     -   'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_fragment_shading_rate VK_KHR_fragment_shading_rate>
-- is supported:
--
-- -   Extending 'AccessFlagBits2KHR':
--
--     -   'ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR'
--
-- -   Extending 'PipelineStageFlagBits2KHR':
--
--     -   'PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_ray_tracing_pipeline VK_KHR_ray_tracing_pipeline>
-- is supported:
--
-- -   Extending 'PipelineStageFlagBits2KHR':
--
--     -   'PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_device_diagnostic_checkpoints VK_NV_device_diagnostic_checkpoints>
-- is supported:
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV'
--
-- 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 'AccessFlagBits2KHR':
--
--     -   'ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV'
--
--     -   'ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV'
--
-- -   Extending 'PipelineStageFlagBits2KHR':
--
--     -   'PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_mesh_shader VK_NV_mesh_shader>
-- is supported:
--
-- -   Extending 'PipelineStageFlagBits2KHR':
--
--     -   'PIPELINE_STAGE_2_MESH_SHADER_BIT_NV'
--
--     -   'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_ray_tracing VK_NV_ray_tracing>
-- is supported:
--
-- -   Extending 'AccessFlagBits2KHR':
--
--     -   'ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV'
--
--     -   'ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV'
--
-- -   Extending 'PipelineStageFlagBits2KHR':
--
--     -   'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV'
--
--     -   'PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_shading_rate_image VK_NV_shading_rate_image>
-- is supported:
--
-- -   Extending 'AccessFlagBits2KHR':
--
--     -   'ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV'
--
-- -   Extending 'PipelineStageFlagBits2KHR':
--
--     -   'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
--
-- == Examples
--
-- See
-- <https://github.com/KhronosGroup/Vulkan-Docs/wiki/Synchronization-Examples>
--
-- == Version History
--
-- -   Revision 1, 2020-12-03 (Tobias Hector)
--
--     -   Internal revisions
--
-- == See Also
--
-- 'AccessFlagBits2KHR', 'AccessFlags2KHR', 'BufferMemoryBarrier2KHR',
-- 'CommandBufferSubmitInfoKHR', 'DependencyInfoKHR',
-- 'Vulkan.Core10.FundamentalTypes.Flags64', 'ImageMemoryBarrier2KHR',
-- 'MemoryBarrier2KHR', 'PhysicalDeviceSynchronization2FeaturesKHR',
-- 'PipelineStageFlagBits2KHR', 'PipelineStageFlags2KHR',
-- 'SemaphoreSubmitInfoKHR', 'SubmitFlagBitsKHR', 'SubmitFlagsKHR',
-- 'SubmitInfo2KHR', 'cmdPipelineBarrier2KHR', 'cmdResetEvent2KHR',
-- 'cmdSetEvent2KHR', 'cmdWaitEvents2KHR', 'cmdWriteTimestamp2KHR',
-- 'queueSubmit2KHR'
--
-- == Document Notes
--
-- For more information, see the
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 Vulkan Specification>
--
-- This page is a generated document. Fixes and changes should be made to
-- the generator scripts, not directly.
module Vulkan.Extensions.VK_KHR_synchronization2  ( cmdSetEvent2KHR
                                                  , cmdResetEvent2KHR
                                                  , cmdWaitEvents2KHR
                                                  , cmdWaitEvents2KHRSafe
                                                  , cmdPipelineBarrier2KHR
                                                  , queueSubmit2KHR
                                                  , cmdWriteTimestamp2KHR
                                                  , cmdWriteBufferMarker2AMD
                                                  , getQueueCheckpointData2NV
                                                  , pattern PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV
                                                  , pattern ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV
                                                  , pattern PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV
                                                  , pattern PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV
                                                  , pattern ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV
                                                  , pattern ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV
                                                  , pattern PIPELINE_STAGE_2_TRANSFER_BIT_KHR
                                                  , MemoryBarrier2KHR(..)
                                                  , ImageMemoryBarrier2KHR(..)
                                                  , BufferMemoryBarrier2KHR(..)
                                                  , DependencyInfoKHR(..)
                                                  , SemaphoreSubmitInfoKHR(..)
                                                  , CommandBufferSubmitInfoKHR(..)
                                                  , SubmitInfo2KHR(..)
                                                  , QueueFamilyCheckpointProperties2NV(..)
                                                  , CheckpointData2NV(..)
                                                  , PhysicalDeviceSynchronization2FeaturesKHR(..)
                                                  , AccessFlags2KHR
                                                  , AccessFlagBits2KHR( ACCESS_2_NONE_KHR
                                                                      , ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR
                                                                      , ACCESS_2_INDEX_READ_BIT_KHR
                                                                      , ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR
                                                                      , ACCESS_2_UNIFORM_READ_BIT_KHR
                                                                      , ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR
                                                                      , ACCESS_2_SHADER_READ_BIT_KHR
                                                                      , ACCESS_2_SHADER_WRITE_BIT_KHR
                                                                      , ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR
                                                                      , ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR
                                                                      , ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR
                                                                      , ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR
                                                                      , ACCESS_2_TRANSFER_READ_BIT_KHR
                                                                      , ACCESS_2_TRANSFER_WRITE_BIT_KHR
                                                                      , ACCESS_2_HOST_READ_BIT_KHR
                                                                      , ACCESS_2_HOST_WRITE_BIT_KHR
                                                                      , ACCESS_2_MEMORY_READ_BIT_KHR
                                                                      , ACCESS_2_MEMORY_WRITE_BIT_KHR
                                                                      , ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR
                                                                      , ACCESS_2_SHADER_STORAGE_READ_BIT_KHR
                                                                      , ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR
                                                                      , ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI
                                                                      , ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT
                                                                      , ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT
                                                                      , ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR
                                                                      , ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR
                                                                      , ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR
                                                                      , ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV
                                                                      , ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV
                                                                      , ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT
                                                                      , ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT
                                                                      , ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT
                                                                      , ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT
                                                                      , ..
                                                                      )
                                                  , PipelineStageFlags2KHR
                                                  , PipelineStageFlagBits2KHR( PIPELINE_STAGE_2_NONE_KHR
                                                                             , PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR
                                                                             , PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR
                                                                             , PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR
                                                                             , PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR
                                                                             , PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR
                                                                             , PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR
                                                                             , PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR
                                                                             , PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR
                                                                             , PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR
                                                                             , PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR
                                                                             , PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR
                                                                             , PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR
                                                                             , PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR
                                                                             , PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR
                                                                             , PIPELINE_STAGE_2_HOST_BIT_KHR
                                                                             , PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR
                                                                             , PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
                                                                             , PIPELINE_STAGE_2_COPY_BIT_KHR
                                                                             , PIPELINE_STAGE_2_RESOLVE_BIT_KHR
                                                                             , PIPELINE_STAGE_2_BLIT_BIT_KHR
                                                                             , PIPELINE_STAGE_2_CLEAR_BIT_KHR
                                                                             , PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR
                                                                             , PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR
                                                                             , PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR
                                                                             , PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI
                                                                             , PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI
                                                                             , PIPELINE_STAGE_2_MESH_SHADER_BIT_NV
                                                                             , PIPELINE_STAGE_2_TASK_SHADER_BIT_NV
                                                                             , PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT
                                                                             , PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR
                                                                             , PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
                                                                             , PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
                                                                             , PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV
                                                                             , PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT
                                                                             , PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT
                                                                             , ..
                                                                             )
                                                  , SubmitFlagsKHR
                                                  , SubmitFlagBitsKHR( SUBMIT_PROTECTED_BIT_KHR
                                                                     , ..
                                                                     )
                                                  , KHR_SYNCHRONIZATION_2_SPEC_VERSION
                                                  , pattern KHR_SYNCHRONIZATION_2_SPEC_VERSION
                                                  , KHR_SYNCHRONIZATION_2_EXTENSION_NAME
                                                  , pattern KHR_SYNCHRONIZATION_2_EXTENSION_NAME
                                                  , Flags64
                                                  ) where

import Vulkan.Internal.Utils (enumReadPrec)
import Vulkan.Internal.Utils (enumShowsPrec)
import Vulkan.Internal.Utils (traceAroundEvent)
import Control.Exception.Base (bracket)
import Control.Monad (unless)
import Control.Monad.IO.Class (liftIO)
import Data.Typeable (eqT)
import Foreign.Marshal.Alloc (allocaBytes)
import Foreign.Marshal.Alloc (callocBytes)
import Foreign.Marshal.Alloc (free)
import GHC.Base (when)
import GHC.IO (throwIO)
import GHC.Ptr (castPtr)
import GHC.Ptr (nullFunPtr)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import GHC.Show (showString)
import Numeric (showHex)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Cont (evalContT)
import Data.Vector (generateM)
import qualified Data.Vector (imapM_)
import qualified Data.Vector (length)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero)
import Vulkan.Zero (Zero(..))
import Control.Monad.IO.Class (MonadIO)
import Data.Bits (Bits)
import Data.Bits (FiniteBits)
import Data.String (IsString)
import Data.Type.Equality ((:~:)(Refl))
import Data.Typeable (Typeable)
import Foreign.Storable (Storable)
import Foreign.Storable (Storable(peek))
import Foreign.Storable (Storable(poke))
import qualified Foreign.Storable (Storable(..))
import GHC.Generics (Generic)
import GHC.IO.Exception (IOErrorType(..))
import GHC.IO.Exception (IOException(..))
import Foreign.Ptr (FunPtr)
import Foreign.Ptr (Ptr)
import 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.NamedType ((:::))
import Vulkan.Core10.FundamentalTypes (Bool32)
import Vulkan.Core10.Handles (Buffer)
import Vulkan.Core10.Handles (Buffer(..))
import Vulkan.CStruct.Extends (Chain)
import Vulkan.Core10.Handles (CommandBuffer)
import Vulkan.Core10.Handles (CommandBuffer(..))
import Vulkan.Core10.Handles (CommandBuffer(CommandBuffer))
import Vulkan.Core10.Handles (CommandBuffer_T)
import Vulkan.Core10.Enums.DependencyFlagBits (DependencyFlags)
import Vulkan.Dynamic (DeviceCmds(pVkCmdPipelineBarrier2KHR))
import Vulkan.Dynamic (DeviceCmds(pVkCmdResetEvent2KHR))
import Vulkan.Dynamic (DeviceCmds(pVkCmdSetEvent2KHR))
import Vulkan.Dynamic (DeviceCmds(pVkCmdWaitEvents2KHR))
import Vulkan.Dynamic (DeviceCmds(pVkCmdWriteBufferMarker2AMD))
import Vulkan.Dynamic (DeviceCmds(pVkCmdWriteTimestamp2KHR))
import Vulkan.Dynamic (DeviceCmds(pVkGetQueueCheckpointData2NV))
import Vulkan.Dynamic (DeviceCmds(pVkQueueSubmit2KHR))
import Vulkan.Core10.FundamentalTypes (DeviceSize)
import Vulkan.Core10.Handles (Event)
import Vulkan.Core10.Handles (Event(..))
import Vulkan.CStruct.Extends (Extends)
import Vulkan.CStruct.Extends (Extendss)
import Vulkan.CStruct.Extends (Extensible(..))
import Vulkan.Core10.Handles (Fence)
import Vulkan.Core10.Handles (Fence(..))
import Vulkan.Core10.FundamentalTypes (Flags)
import Vulkan.Core10.FundamentalTypes (Flags64)
import Vulkan.Core10.Handles (Image)
import Vulkan.Core10.Enums.ImageLayout (ImageLayout)
import Vulkan.Core10.ImageView (ImageSubresourceRange)
import Vulkan.CStruct.Extends (PeekChain)
import Vulkan.CStruct.Extends (PeekChain(..))
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (PerformanceQuerySubmitInfoKHR)
import Vulkan.CStruct.Extends (PokeChain)
import Vulkan.CStruct.Extends (PokeChain(..))
import Vulkan.Core10.Handles (QueryPool)
import Vulkan.Core10.Handles (QueryPool(..))
import Vulkan.Core10.Handles (Queue)
import Vulkan.Core10.Handles (Queue(..))
import Vulkan.Core10.Handles (Queue(Queue))
import Vulkan.Core10.Handles (Queue_T)
import Vulkan.Core10.Enums.Result (Result)
import Vulkan.Core10.Enums.Result (Result(..))
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (SampleLocationsInfoEXT)
import Vulkan.Core10.Handles (Semaphore)
import Vulkan.CStruct.Extends (SomeStruct)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Exception (VulkanException(..))
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_win32_keyed_mutex (Win32KeyedMutexAcquireReleaseInfoKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_win32_keyed_mutex (Win32KeyedMutexAcquireReleaseInfoNV)
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEPENDENCY_INFO_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBMIT_INFO_2_KHR))
import Vulkan.Core10.Enums.Result (Result(SUCCESS))
import Vulkan.Core10.FundamentalTypes (Flags64)
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCmdSetEvent2KHR
  :: FunPtr (Ptr CommandBuffer_T -> Event -> Ptr DependencyInfoKHR -> IO ()) -> Ptr CommandBuffer_T -> Event -> Ptr DependencyInfoKHR -> IO ()

-- | vkCmdSetEvent2KHR - Set an event object to signaled state
--
-- = Description
--
-- When 'cmdSetEvent2KHR' is submitted to a queue, it defines the first
-- half of memory dependencies defined by @pDependencyInfo@, as well as an
-- event signal operation which sets the event to the signaled state. A
-- memory dependency is defined between the event signal operation and
-- commands that occur earlier in submission order.
--
-- The first
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
-- and
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
-- are defined by the union of all the memory dependencies defined by
-- @pDependencyInfo@, and are applied to all operations that occur earlier
-- in
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers Queue family ownership transfers>
-- and
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transitions>
-- defined by @pDependencyInfo@ are also included in the first scopes.
--
-- The second
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
-- includes only the event signal operation, and any
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfers>
-- and
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transitions>
-- defined by @pDependencyInfo@.
--
-- The second
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
-- includes only
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfers>
-- and
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transitions>.
--
-- Future 'cmdWaitEvents2KHR' commands rely on all values of each element
-- in @pDependencyInfo@ matching exactly with those used to signal the
-- corresponding event. 'Vulkan.Core10.CommandBufferBuilding.cmdWaitEvents'
-- /must/ not be used to wait on the result of a signal operation defined
-- by 'cmdSetEvent2KHR'.
--
-- Note
--
-- The extra information provided by 'cmdSetEvent2KHR' compared to
-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetEvent' allows implementations
-- to more efficiently schedule the operations required to satisfy the
-- requested dependencies. With
-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetEvent', the full dependency
-- information is not known until
-- 'Vulkan.Core10.CommandBufferBuilding.cmdWaitEvents' is recorded, forcing
-- implementations to insert the required operations at that point and not
-- before.
--
-- If @event@ is already in the signaled state when 'cmdSetEvent2KHR' is
-- executed on the device, then 'cmdSetEvent2KHR' has no effect, no event
-- signal operation occurs, and no dependency is generated.
--
-- == Valid Usage
--
-- -   #VUID-vkCmdSetEvent2KHR-synchronization2-03824# The
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>
--     feature /must/ be enabled
--
-- -   #VUID-vkCmdSetEvent2KHR-dependencyFlags-03825# The @dependencyFlags@
--     member of @pDependencyInfo@ /must/ be @0@
--
-- -   #VUID-vkCmdSetEvent2KHR-commandBuffer-03826# The current device mask
--     of @commandBuffer@ /must/ include exactly one physical device
--
-- -   #VUID-vkCmdSetEvent2KHR-srcStageMask-03827# The @srcStageMask@
--     member of any element of the @pMemoryBarriers@,
--     @pBufferMemoryBarriers@, or @pImageMemoryBarriers@ members of
--     @pDependencyInfo@ /must/ only include pipeline stages valid for the
--     queue family that was used to create the command pool that
--     @commandBuffer@ was allocated from
--
-- -   #VUID-vkCmdSetEvent2KHR-dstStageMask-03828# The @dstStageMask@
--     member of any element of the @pMemoryBarriers@,
--     @pBufferMemoryBarriers@, or @pImageMemoryBarriers@ members of
--     @pDependencyInfo@ /must/ only include pipeline stages valid for the
--     queue family that was used to create the command pool that
--     @commandBuffer@ was allocated from
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdSetEvent2KHR-commandBuffer-parameter# @commandBuffer@
--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdSetEvent2KHR-event-parameter# @event@ /must/ be a valid
--     'Vulkan.Core10.Handles.Event' handle
--
-- -   #VUID-vkCmdSetEvent2KHR-pDependencyInfo-parameter# @pDependencyInfo@
--     /must/ be a valid pointer to a valid 'DependencyInfoKHR' structure
--
-- -   #VUID-vkCmdSetEvent2KHR-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-vkCmdSetEvent2KHR-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support graphics, or compute operations
--
-- -   #VUID-vkCmdSetEvent2KHR-renderpass# This command /must/ only be
--     called outside of a render pass instance
--
-- -   #VUID-vkCmdSetEvent2KHR-commonparent# Both of @commandBuffer@, and
--     @event@ /must/ have been created, allocated, or retrieved from the
--     same 'Vulkan.Core10.Handles.Device'
--
-- == Host Synchronization
--
-- -   Host access to @commandBuffer@ /must/ be externally synchronized
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              |
-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>,
-- 'Vulkan.Core10.Handles.CommandBuffer', 'DependencyInfoKHR',
-- 'Vulkan.Core10.Handles.Event'
cmdSetEvent2KHR :: forall io
                 . (MonadIO io)
                => -- | @commandBuffer@ is the command buffer into which the command is
                   -- recorded.
                   CommandBuffer
                -> -- | @event@ is the event that will be signaled.
                   Event
                -> -- | @pDependencyInfo@ is a pointer to a 'DependencyInfoKHR' structure
                   -- defining the first scopes of this operation.
                   DependencyInfoKHR
                -> io ()
cmdSetEvent2KHR :: CommandBuffer -> Event -> DependencyInfoKHR -> io ()
cmdSetEvent2KHR CommandBuffer
commandBuffer Event
event DependencyInfoKHR
dependencyInfo = IO () -> io ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdSetEvent2KHRPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> Event -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
vkCmdSetEvent2KHRPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> Event -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
pVkCmdSetEvent2KHR (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr CommandBuffer_T
   -> Event -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
vkCmdSetEvent2KHRPtr FunPtr
  (Ptr CommandBuffer_T
   -> Event -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> Event -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> Event -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCmdSetEvent2KHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdSetEvent2KHR' :: Ptr CommandBuffer_T
-> Event -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ()
vkCmdSetEvent2KHR' = FunPtr
  (Ptr CommandBuffer_T
   -> Event -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
-> Ptr CommandBuffer_T
-> Event
-> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> IO ()
mkVkCmdSetEvent2KHR FunPtr
  (Ptr CommandBuffer_T
   -> Event -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
vkCmdSetEvent2KHRPtr
  "pDependencyInfo" ::: Ptr DependencyInfoKHR
pDependencyInfo <- ((("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ()) -> IO ())
-> ContT () IO ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
  -> IO ())
 -> ContT () IO ("pDependencyInfo" ::: Ptr DependencyInfoKHR))
-> ((("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
    -> IO ())
-> ContT () IO ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
forall a b. (a -> b) -> a -> b
$ DependencyInfoKHR
-> (("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (DependencyInfoKHR
dependencyInfo)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCmdSetEvent2KHR" (Ptr CommandBuffer_T
-> Event -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ()
vkCmdSetEvent2KHR' (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer)) (Event
event) "pDependencyInfo" ::: Ptr DependencyInfoKHR
pDependencyInfo)
  () -> ContT () IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()


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

-- | vkCmdResetEvent2KHR - Reset an event object to non-signaled state
--
-- = Description
--
-- When 'cmdResetEvent2KHR' is submitted to a queue, it defines an
-- execution dependency on commands that were submitted before it, and
-- defines an event unsignal operation which resets the event to the
-- unsignaled state.
--
-- The first
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
-- includes all commands that occur earlier in
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.
-- The synchronization scope is limited to operations by @stageMask@ or
-- stages that are
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically earlier>
-- than @stageMask@.
--
-- The second
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
-- includes only the event unsignal operation.
--
-- If @event@ is already in the unsignaled state when 'cmdResetEvent2KHR'
-- is executed on the device, then this command has no effect, no event
-- unsignal operation occurs, and no execution dependency is generated.
--
-- == Valid Usage
--
-- -   #VUID-vkCmdResetEvent2KHR-stageMask-03929# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
--     feature is not enabled, @stageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR'
--
-- -   #VUID-vkCmdResetEvent2KHR-stageMask-03930# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
--     feature is not enabled, @stageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR' or
--     'PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR'
--
-- -   #VUID-vkCmdResetEvent2KHR-stageMask-03931# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>
--     feature is not enabled, @stageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT'
--
-- -   #VUID-vkCmdResetEvent2KHR-stageMask-03932# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>
--     feature is not enabled, @stageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT'
--
-- -   #VUID-vkCmdResetEvent2KHR-stageMask-03933# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>
--     feature is not enabled, @stageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT'
--
-- -   #VUID-vkCmdResetEvent2KHR-stageMask-03934# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
--     feature is not enabled, @stageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_MESH_SHADER_BIT_NV'
--
-- -   #VUID-vkCmdResetEvent2KHR-stageMask-03935# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
--     feature is not enabled, @stageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
--
-- -   #VUID-vkCmdResetEvent2KHR-stageMask-04956# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
--     feature is not enabled, @stageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
--
-- -   #VUID-vkCmdResetEvent2KHR-stageMask-04957# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subpassShading subpass shading>
--     feature is not enabled, @stageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI'
--
-- -   #VUID-vkCmdResetEvent2KHR-stageMask-04995# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocation mask image>
--     feature is not enabled, @stageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
--
-- -   #VUID-vkCmdResetEvent2KHR-synchronization2-03829# The
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>
--     feature /must/ be enabled
--
-- -   #VUID-vkCmdResetEvent2KHR-stageMask-03830# @stageMask@ /must/ not
--     include 'PIPELINE_STAGE_2_HOST_BIT_KHR'
--
-- -   #VUID-vkCmdResetEvent2KHR-event-03831# There /must/ be an execution
--     dependency between 'cmdResetEvent2KHR' and the execution of any
--     'Vulkan.Core10.CommandBufferBuilding.cmdWaitEvents' that includes
--     @event@ in its @pEvents@ parameter
--
-- -   #VUID-vkCmdResetEvent2KHR-event-03832# There /must/ be an execution
--     dependency between 'cmdResetEvent2KHR' and the execution of any
--     'cmdWaitEvents2KHR' that includes @event@ in its @pEvents@ parameter
--
-- -   #VUID-vkCmdResetEvent2KHR-commandBuffer-03833# @commandBuffer@’s
--     current device mask /must/ include exactly one physical device
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdResetEvent2KHR-commandBuffer-parameter# @commandBuffer@
--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdResetEvent2KHR-event-parameter# @event@ /must/ be a valid
--     'Vulkan.Core10.Handles.Event' handle
--
-- -   #VUID-vkCmdResetEvent2KHR-stageMask-parameter# @stageMask@ /must/ be
--     a valid combination of 'PipelineStageFlagBits2KHR' values
--
-- -   #VUID-vkCmdResetEvent2KHR-stageMask-requiredbitmask# @stageMask@
--     /must/ not be @0@
--
-- -   #VUID-vkCmdResetEvent2KHR-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-vkCmdResetEvent2KHR-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support graphics, or compute operations
--
-- -   #VUID-vkCmdResetEvent2KHR-renderpass# This command /must/ only be
--     called outside of a render pass instance
--
-- -   #VUID-vkCmdResetEvent2KHR-commonparent# Both of @commandBuffer@, and
--     @event@ /must/ have been created, allocated, or retrieved from the
--     same 'Vulkan.Core10.Handles.Device'
--
-- == Host Synchronization
--
-- -   Host access to @commandBuffer@ /must/ be externally synchronized
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              |
-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>,
-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Event',
-- 'PipelineStageFlags2KHR'
cmdResetEvent2KHR :: forall io
                   . (MonadIO io)
                  => -- | @commandBuffer@ is the command buffer into which the command is
                     -- recorded.
                     CommandBuffer
                  -> -- | @event@ is the event that will be unsignaled.
                     Event
                  -> -- | @stageMask@ is a 'PipelineStageFlags2KHR' mask of pipeline stages used
                     -- to determine the first
                     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>.
                     ("stageMask" ::: PipelineStageFlags2KHR)
                  -> io ()
cmdResetEvent2KHR :: CommandBuffer
-> Event -> ("stageMask" ::: PipelineStageFlags2KHR) -> io ()
cmdResetEvent2KHR CommandBuffer
commandBuffer Event
event "stageMask" ::: PipelineStageFlags2KHR
stageMask = IO () -> io ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ()) -> IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdResetEvent2KHRPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> Event -> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ())
vkCmdResetEvent2KHRPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> Event -> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ())
pVkCmdResetEvent2KHR (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr CommandBuffer_T
   -> Event -> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ())
vkCmdResetEvent2KHRPtr FunPtr
  (Ptr CommandBuffer_T
   -> Event -> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> Event -> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> Event -> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCmdResetEvent2KHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdResetEvent2KHR' :: Ptr CommandBuffer_T
-> Event -> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
vkCmdResetEvent2KHR' = FunPtr
  (Ptr CommandBuffer_T
   -> Event -> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ())
-> Ptr CommandBuffer_T
-> Event
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> IO ()
mkVkCmdResetEvent2KHR FunPtr
  (Ptr CommandBuffer_T
   -> Event -> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ())
vkCmdResetEvent2KHRPtr
  String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCmdResetEvent2KHR" (Ptr CommandBuffer_T
-> Event -> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
vkCmdResetEvent2KHR' (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer)) (Event
event) ("stageMask" ::: PipelineStageFlags2KHR
stageMask))
  () -> IO ()
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" mkVkCmdWaitEvents2KHRUnsafe
  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr Event -> Ptr DependencyInfoKHR -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr Event -> Ptr DependencyInfoKHR -> IO ()

foreign import ccall
  "dynamic" mkVkCmdWaitEvents2KHRSafe
  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr Event -> Ptr DependencyInfoKHR -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr Event -> Ptr DependencyInfoKHR -> IO ()

-- | cmdWaitEvents2KHR with selectable safeness
cmdWaitEvents2KHRSafeOrUnsafe :: forall io
                               . (MonadIO io)
                              => (FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr Event -> Ptr DependencyInfoKHR -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr Event -> Ptr DependencyInfoKHR -> IO ())
                              -> -- | @commandBuffer@ is the command buffer into which the command is
                                 -- recorded.
                                 CommandBuffer
                              -> -- | @pEvents@ is a pointer to an array of @eventCount@ events to wait on.
                                 ("events" ::: Vector Event)
                              -> -- | @pDependencyInfos@ is a pointer to an array of @eventCount@
                                 -- 'DependencyInfoKHR' structures, defining the second
                                 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>.
                                 ("dependencyInfos" ::: Vector DependencyInfoKHR)
                              -> io ()
cmdWaitEvents2KHRSafeOrUnsafe :: (FunPtr
   (Ptr CommandBuffer_T
    -> Word32
    -> Ptr Event
    -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
    -> IO ())
 -> Ptr CommandBuffer_T
 -> Word32
 -> Ptr Event
 -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
 -> IO ())
-> CommandBuffer
-> ("events" ::: Vector Event)
-> ("dependencyInfos" ::: Vector DependencyInfoKHR)
-> io ()
cmdWaitEvents2KHRSafeOrUnsafe FunPtr
  (Ptr CommandBuffer_T
   -> Word32
   -> Ptr Event
   -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
   -> IO ())
-> Ptr CommandBuffer_T
-> Word32
-> Ptr Event
-> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> IO ()
mkVkCmdWaitEvents2KHR CommandBuffer
commandBuffer "events" ::: Vector Event
events "dependencyInfos" ::: Vector DependencyInfoKHR
dependencyInfos = IO () -> io ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdWaitEvents2KHRPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> Word32
   -> Ptr Event
   -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
   -> IO ())
vkCmdWaitEvents2KHRPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> Word32
      -> Ptr Event
      -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
      -> IO ())
pVkCmdWaitEvents2KHR (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr CommandBuffer_T
   -> Word32
   -> Ptr Event
   -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
   -> IO ())
vkCmdWaitEvents2KHRPtr FunPtr
  (Ptr CommandBuffer_T
   -> Word32
   -> Ptr Event
   -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
   -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> Word32
      -> Ptr Event
      -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> Word32
   -> Ptr Event
   -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
   -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCmdWaitEvents2KHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdWaitEvents2KHR' :: Ptr CommandBuffer_T
-> Word32
-> Ptr Event
-> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> IO ()
vkCmdWaitEvents2KHR' = FunPtr
  (Ptr CommandBuffer_T
   -> Word32
   -> Ptr Event
   -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
   -> IO ())
-> Ptr CommandBuffer_T
-> Word32
-> Ptr Event
-> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> IO ()
mkVkCmdWaitEvents2KHR FunPtr
  (Ptr CommandBuffer_T
   -> Word32
   -> Ptr Event
   -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
   -> IO ())
vkCmdWaitEvents2KHRPtr
  let pEventsLength :: Int
pEventsLength = ("events" ::: Vector Event) -> Int
forall a. Vector a -> Int
Data.Vector.length (("events" ::: Vector Event) -> Int)
-> ("events" ::: Vector Event) -> Int
forall a b. (a -> b) -> a -> b
$ ("events" ::: Vector Event
events)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless ((("dependencyInfos" ::: Vector DependencyInfoKHR) -> Int
forall a. Vector a -> Int
Data.Vector.length (("dependencyInfos" ::: Vector DependencyInfoKHR) -> Int)
-> ("dependencyInfos" ::: Vector DependencyInfoKHR) -> Int
forall a b. (a -> b) -> a -> b
$ ("dependencyInfos" ::: Vector DependencyInfoKHR
dependencyInfos)) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
pEventsLength) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"pDependencyInfos and pEvents must have the same length" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  Ptr Event
pPEvents <- ((Ptr Event -> IO ()) -> IO ()) -> ContT () IO (Ptr Event)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr Event -> IO ()) -> IO ()) -> ContT () IO (Ptr Event))
-> ((Ptr Event -> IO ()) -> IO ()) -> ContT () IO (Ptr Event)
forall a b. (a -> b) -> a -> b
$ Int -> (Ptr Event -> IO ()) -> IO ()
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @Event ((("events" ::: Vector Event) -> Int
forall a. Vector a -> Int
Data.Vector.length ("events" ::: Vector Event
events)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
8)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ (Int -> Event -> IO ()) -> ("events" ::: Vector Event) -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i Event
e -> Ptr Event -> Event -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Event
pPEvents Ptr Event -> Int -> Ptr Event
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Event) (Event
e)) ("events" ::: Vector Event
events)
  "pDependencyInfo" ::: Ptr DependencyInfoKHR
pPDependencyInfos <- ((("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ()) -> IO ())
-> ContT () IO ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
  -> IO ())
 -> ContT () IO ("pDependencyInfo" ::: Ptr DependencyInfoKHR))
-> ((("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
    -> IO ())
-> ContT () IO ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
forall a b. (a -> b) -> a -> b
$ Int
-> (("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
-> IO ()
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @DependencyInfoKHR ((("dependencyInfos" ::: Vector DependencyInfoKHR) -> Int
forall a. Vector a -> Int
Data.Vector.length ("dependencyInfos" ::: Vector DependencyInfoKHR
dependencyInfos)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
64)
  (Int -> DependencyInfoKHR -> ContT () IO ())
-> ("dependencyInfos" ::: Vector DependencyInfoKHR)
-> ContT () IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i DependencyInfoKHR
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
$ ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> DependencyInfoKHR -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ("pDependencyInfo" ::: Ptr DependencyInfoKHR
pPDependencyInfos ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> Int -> "pDependencyInfo" ::: Ptr DependencyInfoKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
64 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr DependencyInfoKHR) (DependencyInfoKHR
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
$ ())) ("dependencyInfos" ::: Vector DependencyInfoKHR
dependencyInfos)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCmdWaitEvents2KHR" (Ptr CommandBuffer_T
-> Word32
-> Ptr Event
-> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> IO ()
vkCmdWaitEvents2KHR' (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer)) ((Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
pEventsLength :: Word32)) (Ptr Event
pPEvents) ("pDependencyInfo" ::: Ptr DependencyInfoKHR
pPDependencyInfos))
  () -> ContT () IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()

-- | vkCmdWaitEvents2KHR - Wait for one or more events
--
-- = Description
--
-- When 'cmdWaitEvents2KHR' is submitted to a queue, it inserts memory
-- dependencies according to the elements of @pDependencyInfos@ and each
-- corresponding element of @pEvents@. 'cmdWaitEvents2KHR' /must/ not be
-- used to wait on event signal operations occurring on other queues, or
-- signal operations execyted by
-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetEvent'.
--
-- The first
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
-- and
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
-- of each memory dependency defined by any element i of @pDependencyInfos@
-- are applied to operations that occurred earlier in
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>
-- than the last event signal operation on element i of @pEvents@.
--
-- Signal operations for an event at index i are only included if:
--
-- -   The event was signaled by a 'cmdSetEvent2KHR' command that occurred
--     earlier in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>
--     with a @dependencyInfo@ parameter exactly equal to the element of
--     @pDependencyInfos@ at index i ; or
--
-- -   The event was created without
--     'Vulkan.Core10.Enums.EventCreateFlagBits.EVENT_CREATE_DEVICE_ONLY_BIT_KHR',
--     and the first
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
--     defined by the element of @pDependencyInfos@ at index i only
--     includes host operations ('PIPELINE_STAGE_2_HOST_BIT_KHR').
--
-- The second
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
-- and
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
-- of each memory dependency defined by any element i of @pDependencyInfos@
-- are applied to operations that occurred later in
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>
-- than 'cmdWaitEvents2KHR'.
--
-- Note
--
-- 'cmdWaitEvents2KHR' is used with 'cmdSetEvent2KHR' to define a memory
-- dependency between two sets of action commands, roughly in the same way
-- as pipeline barriers, but split into two commands such that work between
-- the two /may/ execute unhindered.
--
-- Note
--
-- Applications should be careful to avoid race conditions when using
-- events. There is no direct ordering guarantee between 'cmdSetEvent2KHR'
-- and 'cmdResetEvent2KHR',
-- 'Vulkan.Core10.CommandBufferBuilding.cmdResetEvent', or
-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetEvent'. Another execution
-- dependency (e.g. a pipeline barrier or semaphore with
-- 'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR') is needed to prevent such a
-- race condition.
--
-- == Valid Usage
--
-- -   #VUID-vkCmdWaitEvents2KHR-synchronization2-03836# The
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>
--     feature /must/ be enabled
--
-- -   #VUID-vkCmdWaitEvents2KHR-pEvents-03837# Members of @pEvents@ /must/
--     not have been signaled by
--     'Vulkan.Core10.CommandBufferBuilding.cmdSetEvent'
--
-- -   #VUID-vkCmdWaitEvents2KHR-pEvents-03838# For any element i of
--     @pEvents@, if that event is signaled by 'cmdSetEvent2KHR', that
--     command’s @dependencyInfo@ parameter /must/ be exactly equal to the
--     ith element of @pDependencyInfos@
--
-- -   #VUID-vkCmdWaitEvents2KHR-pEvents-03839# For any element i of
--     @pEvents@, if that event is signaled by
--     'Vulkan.Core10.Event.setEvent', barriers in the ith element of
--     @pDependencyInfos@ /must/ include only host operations in their
--     first
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
--
-- -   #VUID-vkCmdWaitEvents2KHR-pEvents-03840# For any element i of
--     @pEvents@, if barriers in the ith element of @pDependencyInfos@
--     include only host operations, the ith element of @pEvents@ /must/ be
--     signaled before 'cmdWaitEvents2KHR' is executed
--
-- -   #VUID-vkCmdWaitEvents2KHR-pEvents-03841# For any element i of
--     @pEvents@, if barriers in the ith element of @pDependencyInfos@ do
--     not include host operations, the ith element of @pEvents@ /must/ be
--     signaled by a corresponding 'cmdSetEvent2KHR' that occurred earlier
--     in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>
--
-- -   #VUID-vkCmdWaitEvents2KHR-srcStageMask-03842# The @srcStageMask@
--     member of any element of the @pMemoryBarriers@,
--     @pBufferMemoryBarriers@, or @pImageMemoryBarriers@ members of
--     @pDependencyInfos@ /must/ either include only pipeline stages valid
--     for the queue family that was used to create the command pool that
--     @commandBuffer@ was allocated from, or include only
--     'PIPELINE_STAGE_2_HOST_BIT_KHR'
--
-- -   #VUID-vkCmdWaitEvents2KHR-dstStageMask-03843# The @dstStageMask@
--     member of any element of the @pMemoryBarriers@,
--     @pBufferMemoryBarriers@, or @pImageMemoryBarriers@ members of
--     @pDependencyInfos@ /must/ only include pipeline stages valid for the
--     queue family that was used to create the command pool that
--     @commandBuffer@ was allocated from
--
-- -   #VUID-vkCmdWaitEvents2KHR-dependencyFlags-03844# The
--     @dependencyFlags@ member of any element of @pDependencyInfo@ /must/
--     be @0@
--
-- -   #VUID-vkCmdWaitEvents2KHR-pEvents-03845# If @pEvents@ includes one
--     or more events that will be signaled by
--     'Vulkan.Core10.Event.setEvent' after @commandBuffer@ has been
--     submitted to a queue, then 'cmdWaitEvents2KHR' /must/ not be called
--     inside a render pass instance
--
-- -   #VUID-vkCmdWaitEvents2KHR-commandBuffer-03846# @commandBuffer@’s
--     current device mask /must/ include exactly one physical device
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdWaitEvents2KHR-commandBuffer-parameter# @commandBuffer@
--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdWaitEvents2KHR-pEvents-parameter# @pEvents@ /must/ be a
--     valid pointer to an array of @eventCount@ valid
--     'Vulkan.Core10.Handles.Event' handles
--
-- -   #VUID-vkCmdWaitEvents2KHR-pDependencyInfos-parameter#
--     @pDependencyInfos@ /must/ be a valid pointer to an array of
--     @eventCount@ valid 'DependencyInfoKHR' structures
--
-- -   #VUID-vkCmdWaitEvents2KHR-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-vkCmdWaitEvents2KHR-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support graphics, or compute operations
--
-- -   #VUID-vkCmdWaitEvents2KHR-eventCount-arraylength# @eventCount@
--     /must/ be greater than @0@
--
-- -   #VUID-vkCmdWaitEvents2KHR-commonparent# Both of @commandBuffer@, and
--     the elements of @pEvents@ /must/ have been created, allocated, or
--     retrieved from the same 'Vulkan.Core10.Handles.Device'
--
-- == Host Synchronization
--
-- -   Host access to @commandBuffer@ /must/ be externally synchronized
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |
-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>,
-- 'Vulkan.Core10.Handles.CommandBuffer', 'DependencyInfoKHR',
-- 'Vulkan.Core10.Handles.Event'
cmdWaitEvents2KHR :: forall io
                   . (MonadIO io)
                  => -- | @commandBuffer@ is the command buffer into which the command is
                     -- recorded.
                     CommandBuffer
                  -> -- | @pEvents@ is a pointer to an array of @eventCount@ events to wait on.
                     ("events" ::: Vector Event)
                  -> -- | @pDependencyInfos@ is a pointer to an array of @eventCount@
                     -- 'DependencyInfoKHR' structures, defining the second
                     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>.
                     ("dependencyInfos" ::: Vector DependencyInfoKHR)
                  -> io ()
cmdWaitEvents2KHR :: CommandBuffer
-> ("events" ::: Vector Event)
-> ("dependencyInfos" ::: Vector DependencyInfoKHR)
-> io ()
cmdWaitEvents2KHR = (FunPtr
   (Ptr CommandBuffer_T
    -> Word32
    -> Ptr Event
    -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
    -> IO ())
 -> Ptr CommandBuffer_T
 -> Word32
 -> Ptr Event
 -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
 -> IO ())
-> CommandBuffer
-> ("events" ::: Vector Event)
-> ("dependencyInfos" ::: Vector DependencyInfoKHR)
-> io ()
forall (io :: * -> *).
MonadIO io =>
(FunPtr
   (Ptr CommandBuffer_T
    -> Word32
    -> Ptr Event
    -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
    -> IO ())
 -> Ptr CommandBuffer_T
 -> Word32
 -> Ptr Event
 -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
 -> IO ())
-> CommandBuffer
-> ("events" ::: Vector Event)
-> ("dependencyInfos" ::: Vector DependencyInfoKHR)
-> io ()
cmdWaitEvents2KHRSafeOrUnsafe FunPtr
  (Ptr CommandBuffer_T
   -> Word32
   -> Ptr Event
   -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
   -> IO ())
-> Ptr CommandBuffer_T
-> Word32
-> Ptr Event
-> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> IO ()
mkVkCmdWaitEvents2KHRUnsafe

-- | A variant of 'cmdWaitEvents2KHR' which makes a *safe* FFI call
cmdWaitEvents2KHRSafe :: forall io
                       . (MonadIO io)
                      => -- | @commandBuffer@ is the command buffer into which the command is
                         -- recorded.
                         CommandBuffer
                      -> -- | @pEvents@ is a pointer to an array of @eventCount@ events to wait on.
                         ("events" ::: Vector Event)
                      -> -- | @pDependencyInfos@ is a pointer to an array of @eventCount@
                         -- 'DependencyInfoKHR' structures, defining the second
                         -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>.
                         ("dependencyInfos" ::: Vector DependencyInfoKHR)
                      -> io ()
cmdWaitEvents2KHRSafe :: CommandBuffer
-> ("events" ::: Vector Event)
-> ("dependencyInfos" ::: Vector DependencyInfoKHR)
-> io ()
cmdWaitEvents2KHRSafe = (FunPtr
   (Ptr CommandBuffer_T
    -> Word32
    -> Ptr Event
    -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
    -> IO ())
 -> Ptr CommandBuffer_T
 -> Word32
 -> Ptr Event
 -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
 -> IO ())
-> CommandBuffer
-> ("events" ::: Vector Event)
-> ("dependencyInfos" ::: Vector DependencyInfoKHR)
-> io ()
forall (io :: * -> *).
MonadIO io =>
(FunPtr
   (Ptr CommandBuffer_T
    -> Word32
    -> Ptr Event
    -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
    -> IO ())
 -> Ptr CommandBuffer_T
 -> Word32
 -> Ptr Event
 -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
 -> IO ())
-> CommandBuffer
-> ("events" ::: Vector Event)
-> ("dependencyInfos" ::: Vector DependencyInfoKHR)
-> io ()
cmdWaitEvents2KHRSafeOrUnsafe FunPtr
  (Ptr CommandBuffer_T
   -> Word32
   -> Ptr Event
   -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
   -> IO ())
-> Ptr CommandBuffer_T
-> Word32
-> Ptr Event
-> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> IO ()
mkVkCmdWaitEvents2KHRSafe


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

-- | vkCmdPipelineBarrier2KHR - Insert a memory dependency
--
-- = Description
--
-- When 'cmdPipelineBarrier2KHR' is submitted to a queue, it defines memory
-- dependencies between commands that were submitted before it, and those
-- submitted after it.
--
-- The first
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
-- and
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
-- of each memory dependency defined by @pDependencyInfo@ are applied to
-- operations that occurred earlier in
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.
--
-- The second
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
-- and
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
-- of each memory dependency defined by @pDependencyInfo@ are applied to
-- operations that occurred later in
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.
--
-- If 'cmdPipelineBarrier2KHR' is recorded within a render pass instance,
-- the synchronization scopes are
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-barriers-subpass-self-dependencies limited to operations within the same subpass>.
--
-- == Valid Usage
--
-- -   #VUID-vkCmdPipelineBarrier2KHR-pDependencies-02285# If
--     'cmdPipelineBarrier2KHR' is called within a render pass instance,
--     the render pass /must/ have been created with at least one
--     'Vulkan.Core10.Pass.SubpassDependency' instance in
--     'Vulkan.Core10.Pass.RenderPassCreateInfo'::@pDependencies@ that
--     expresses a dependency from the current subpass to itself, with
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scopes>
--     and
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scopes>
--     that are all supersets of the scopes defined in this command
--
-- -   #VUID-vkCmdPipelineBarrier2KHR-bufferMemoryBarrierCount-01178# If
--     'cmdPipelineBarrier2KHR' is called within a render pass instance, it
--     /must/ not include any buffer memory barriers
--
-- -   #VUID-vkCmdPipelineBarrier2KHR-image-04073# If
--     'cmdPipelineBarrier2KHR' is called within a render pass instance,
--     the @image@ member of any image memory barrier included in this
--     command /must/ be an attachment used in the current subpass both as
--     an input attachment, and as either a color or depth\/stencil
--     attachment
--
-- -   #VUID-vkCmdPipelineBarrier2KHR-oldLayout-01181# If
--     'cmdPipelineBarrier2KHR' is called within a render pass instance,
--     the @oldLayout@ and @newLayout@ members of any image memory barrier
--     included in this command /must/ be equal
--
-- -   #VUID-vkCmdPipelineBarrier2KHR-srcQueueFamilyIndex-01182# If
--     'cmdPipelineBarrier2KHR' is called within a render pass instance,
--     the @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members of any
--     image memory barrier included in this command /must/ be equal
--
-- -   #VUID-vkCmdPipelineBarrier2KHR-dependencyFlags-01186# If
--     'cmdPipelineBarrier2KHR' is called outside of a render pass
--     instance,
--     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT'
--     /must/ not be included in the dependency flags
--
-- -   #VUID-vkCmdPipelineBarrier2KHR-None-06191# If
--     'cmdPipelineBarrier2KHR' is called within a render pass instance,
--     the render pass /must/ not have been started with
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'
--
-- -   #VUID-vkCmdPipelineBarrier2KHR-synchronization2-03848# The
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>
--     feature /must/ be enabled
--
-- -   #VUID-vkCmdPipelineBarrier2KHR-srcStageMask-03849# The
--     @srcStageMask@ member of any element of the @pMemoryBarriers@,
--     @pBufferMemoryBarriers@, or @pImageMemoryBarriers@ members of
--     @pDependencyInfo@ /must/ only include pipeline stages valid for the
--     queue family that was used to create the command pool that
--     @commandBuffer@ was allocated from
--
-- -   #VUID-vkCmdPipelineBarrier2KHR-dstStageMask-03850# The
--     @dstStageMask@ member of any element of the @pMemoryBarriers@,
--     @pBufferMemoryBarriers@, or @pImageMemoryBarriers@ members of
--     @pDependencyInfo@ /must/ only include pipeline stages valid for the
--     queue family that was used to create the command pool that
--     @commandBuffer@ was allocated from
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdPipelineBarrier2KHR-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdPipelineBarrier2KHR-pDependencyInfo-parameter#
--     @pDependencyInfo@ /must/ be a valid pointer to a valid
--     'DependencyInfoKHR' structure
--
-- -   #VUID-vkCmdPipelineBarrier2KHR-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-vkCmdPipelineBarrier2KHR-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support transfer, graphics, or compute
--     operations
--
-- == Host Synchronization
--
-- -   Host access to @commandBuffer@ /must/ be externally synchronized
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
-- | Primary                                                                                                                    | Both                                                                                                                   | Transfer                                                                                                              |
-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |
-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>,
-- 'Vulkan.Core10.Handles.CommandBuffer', 'DependencyInfoKHR'
cmdPipelineBarrier2KHR :: forall io
                        . (MonadIO io)
                       => -- | @commandBuffer@ is the command buffer into which the command is
                          -- recorded.
                          CommandBuffer
                       -> -- | @pDependencyInfo@ is a pointer to a 'DependencyInfoKHR' structure
                          -- defining the scopes of this operation.
                          DependencyInfoKHR
                       -> io ()
cmdPipelineBarrier2KHR :: CommandBuffer -> DependencyInfoKHR -> io ()
cmdPipelineBarrier2KHR CommandBuffer
commandBuffer DependencyInfoKHR
dependencyInfo = IO () -> io ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdPipelineBarrier2KHRPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
vkCmdPipelineBarrier2KHRPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
pVkCmdPipelineBarrier2KHR (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr CommandBuffer_T
   -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
vkCmdPipelineBarrier2KHRPtr FunPtr
  (Ptr CommandBuffer_T
   -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCmdPipelineBarrier2KHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdPipelineBarrier2KHR' :: Ptr CommandBuffer_T
-> ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ()
vkCmdPipelineBarrier2KHR' = FunPtr
  (Ptr CommandBuffer_T
   -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
-> Ptr CommandBuffer_T
-> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> IO ()
mkVkCmdPipelineBarrier2KHR FunPtr
  (Ptr CommandBuffer_T
   -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
vkCmdPipelineBarrier2KHRPtr
  "pDependencyInfo" ::: Ptr DependencyInfoKHR
pDependencyInfo <- ((("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ()) -> IO ())
-> ContT () IO ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
  -> IO ())
 -> ContT () IO ("pDependencyInfo" ::: Ptr DependencyInfoKHR))
-> ((("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
    -> IO ())
-> ContT () IO ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
forall a b. (a -> b) -> a -> b
$ DependencyInfoKHR
-> (("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (DependencyInfoKHR
dependencyInfo)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCmdPipelineBarrier2KHR" (Ptr CommandBuffer_T
-> ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO ()
vkCmdPipelineBarrier2KHR' (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer)) "pDependencyInfo" ::: Ptr DependencyInfoKHR
pDependencyInfo)
  () -> ContT () IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkQueueSubmit2KHR
  :: FunPtr (Ptr Queue_T -> Word32 -> Ptr (SomeStruct SubmitInfo2KHR) -> Fence -> IO Result) -> Ptr Queue_T -> Word32 -> Ptr (SomeStruct SubmitInfo2KHR) -> Fence -> IO Result

-- | vkQueueSubmit2KHR - Submits command buffers to a queue
--
-- = Description
--
-- 'queueSubmit2KHR' is a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-submission queue submission command>,
-- with each batch defined by an element of @pSubmits@.
--
-- Semaphore operations submitted with 'queueSubmit2KHR' have additional
-- ordering constraints compared to other submission commands, with
-- dependencies involving previous and subsequent queue operations.
-- Information about these additional constraints can be found in the
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores semaphore>
-- section of
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization the synchronization chapter>.
--
-- If any command buffer submitted to this queue is in the
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle executable state>,
-- it is moved to the
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>.
-- Once execution of all submissions of a command buffer complete, it moves
-- from the
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>,
-- back to the
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle executable state>.
-- If a command buffer was recorded with the
-- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT'
-- flag, it instead moves back to the
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle invalid state>.
--
-- If 'queueSubmit2KHR' fails, it /may/ return
-- 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY' or
-- 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'. If it does, the
-- implementation /must/ ensure that the state and contents of any
-- resources or synchronization primitives referenced by the submitted
-- command buffers and any semaphores referenced by @pSubmits@ is
-- unaffected by the call or its failure. If 'queueSubmit2KHR' fails in
-- such a way that the implementation is unable to make that guarantee, the
-- implementation /must/ return
-- 'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'. See
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-lost-device Lost Device>.
--
-- == Valid Usage
--
-- -   #VUID-vkQueueSubmit2KHR-fence-04894# If @fence@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@ /must/ be
--     unsignaled
--
-- -   #VUID-vkQueueSubmit2KHR-fence-04895# If @fence@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@ /must/ not be
--     associated with any other queue command that has not yet completed
--     execution on that queue
--
-- -   #VUID-vkQueueSubmit2KHR-synchronization2-03866# The
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>
--     feature /must/ be enabled
--
-- -   #VUID-vkQueueSubmit2KHR-commandBuffer-03867# If a command recorded
--     into the @commandBuffer@ member of any element of the
--     @pCommandBufferInfos@ member of any element of @pSubmits@ referenced
--     an 'Vulkan.Core10.Handles.Event', that event /must/ not be
--     referenced by a command that has been submitted to another queue and
--     is still in the /pending state/
--
-- -   #VUID-vkQueueSubmit2KHR-semaphore-03868# The @semaphore@ member of
--     any binary semaphore element of the @pSignalSemaphoreInfos@ member
--     of any element of @pSubmits@ /must/ be unsignaled when the semaphore
--     signal operation it defines is executed on the device
--
-- -   #VUID-vkQueueSubmit2KHR-stageMask-03869# The @stageMask@ member of
--     any element of the @pSignalSemaphoreInfos@ member of any element of
--     @pSubmits@ /must/ only include pipeline stages that are supported by
--     the queue family which @queue@ belongs to
--
-- -   #VUID-vkQueueSubmit2KHR-stageMask-03870# The @stageMask@ member of
--     any element of the @pWaitSemaphoreInfos@ member of any element of
--     @pSubmits@ /must/ only include pipeline stages that are supported by
--     the queue family which @queue@ belongs to
--
-- -   #VUID-vkQueueSubmit2KHR-semaphore-03871# When a semaphore wait
--     operation for a binary semaphore is executed, as defined by the
--     @semaphore@ member of any element of the @pWaitSemaphoreInfos@
--     member of any element of @pSubmits@, there /must/ be no other queues
--     waiting on the same semaphore
--
-- -   #VUID-vkQueueSubmit2KHR-semaphore-03872# The @semaphore@ member of
--     any element of the @pWaitSemaphoreInfos@ member of any element of
--     @pSubmits@ /must/ be semaphores that are signaled, or have
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operations>
--     previously submitted for execution
--
-- -   #VUID-vkQueueSubmit2KHR-semaphore-03873# Any @semaphore@ member of
--     any element of the @pWaitSemaphoreInfos@ member of any element of
--     @pSubmits@ that was created with a
--     'Vulkan.Extensions.VK_KHR_timeline_semaphore.SemaphoreTypeKHR' of
--     'Vulkan.Extensions.VK_KHR_timeline_semaphore.SEMAPHORE_TYPE_BINARY_KHR'
--     /must/ reference a semaphore signal operation that has been
--     submitted for execution and any semaphore signal operations on which
--     it depends (if any) /must/ have also been submitted for execution
--
-- -   #VUID-vkQueueSubmit2KHR-commandBuffer-03874# The @commandBuffer@
--     member of any element of the @pCommandBufferInfos@ member of any
--     element of @pSubmits@ /must/ be in the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending or executable state>
--
-- -   #VUID-vkQueueSubmit2KHR-commandBuffer-03875# If a command recorded
--     into the @commandBuffer@ member of any element of the
--     @pCommandBufferInfos@ member of any element of @pSubmits@ was not
--     recorded with the
--     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT',
--     it /must/ not be in the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>
--
-- -   #VUID-vkQueueSubmit2KHR-commandBuffer-03876# Any
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-secondary secondary command buffers recorded>
--     into the @commandBuffer@ member of any element of the
--     @pCommandBufferInfos@ member of any element of @pSubmits@ /must/ be
--     in the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending or executable state>
--
-- -   #VUID-vkQueueSubmit2KHR-commandBuffer-03877# If any
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-secondary secondary command buffers recorded>
--     into the @commandBuffer@ member of any element of the
--     @pCommandBufferInfos@ member of any element of @pSubmits@ was not
--     recorded with the
--     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT',
--     it /must/ not be in the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>
--
-- -   #VUID-vkQueueSubmit2KHR-commandBuffer-03878# The @commandBuffer@
--     member of any element of the @pCommandBufferInfos@ member of any
--     element of @pSubmits@ /must/ have been allocated from a
--     'Vulkan.Core10.Handles.CommandPool' that was created for the same
--     queue family @queue@ belongs to
--
-- -   #VUID-vkQueueSubmit2KHR-commandBuffer-03879# If a command recorded
--     into the @commandBuffer@ member of any element of the
--     @pCommandBufferInfos@ member of any element of @pSubmits@ includes a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers-acquire Queue Family Transfer Acquire Operation>,
--     there /must/ exist a previously submitted
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers-release Queue Family Transfer Release Operation>
--     on a queue in the queue family identified by the acquire operation,
--     with parameters matching the acquire operation as defined in the
--     definition of such
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers-acquire acquire operations>,
--     and which happens before the acquire operation
--
-- -   #VUID-vkQueueSubmit2KHR-commandBuffer-03880# If a command recorded
--     into the @commandBuffer@ member of any element of the
--     @pCommandBufferInfos@ member of any element of @pSubmits@ was a
--     'Vulkan.Core10.CommandBufferBuilding.cmdBeginQuery' whose
--     @queryPool@ was created with a @queryType@ of
--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',
--     the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#profiling-lock profiling lock>
--     /must/ have been held continuously on the
--     'Vulkan.Core10.Handles.Device' that @queue@ was retrieved from,
--     throughout recording of those command buffers
--
-- -   #VUID-vkQueueSubmit2KHR-queue-06447# If @queue@ was not created with
--     'Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DEVICE_QUEUE_CREATE_PROTECTED_BIT',
--     the @flags@ member of any element of @pSubmits@ /must/ not include
--     'SUBMIT_PROTECTED_BIT_KHR'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkQueueSubmit2KHR-queue-parameter# @queue@ /must/ be a valid
--     'Vulkan.Core10.Handles.Queue' handle
--
-- -   #VUID-vkQueueSubmit2KHR-pSubmits-parameter# If @submitCount@ is not
--     @0@, @pSubmits@ /must/ be a valid pointer to an array of
--     @submitCount@ valid 'SubmitInfo2KHR' structures
--
-- -   #VUID-vkQueueSubmit2KHR-fence-parameter# If @fence@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@ /must/ be a valid
--     'Vulkan.Core10.Handles.Fence' handle
--
-- -   #VUID-vkQueueSubmit2KHR-commonparent# Both of @fence@, and @queue@
--     that are valid handles of non-ignored parameters /must/ have been
--     created, allocated, or retrieved from the same
--     'Vulkan.Core10.Handles.Device'
--
-- == Host Synchronization
--
-- -   Host access to @queue@ /must/ be externally synchronized
--
-- -   Host access to @fence@ /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
-- | -                                                                                                                          | -                                                                                                                      | Any                                                                                                                   |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>,
-- 'Vulkan.Core10.Handles.Fence', 'Vulkan.Core10.Handles.Queue',
-- 'SubmitInfo2KHR'
queueSubmit2KHR :: forall io
                 . (MonadIO io)
                => -- | @queue@ is the queue that the command buffers will be submitted to.
                   Queue
                -> -- | @pSubmits@ is a pointer to an array of 'SubmitInfo2KHR' structures, each
                   -- specifying a command buffer submission batch.
                   ("submits" ::: Vector (SomeStruct SubmitInfo2KHR))
                -> -- | @fence@ is an /optional/ handle to a fence to be signaled once all
                   -- submitted command buffers have completed execution. If @fence@ is not
                   -- 'Vulkan.Core10.APIConstants.NULL_HANDLE', it defines a
                   -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-signaling fence signal operation>.
                   Fence
                -> io ()
queueSubmit2KHR :: Queue
-> ("submits" ::: Vector (SomeStruct SubmitInfo2KHR))
-> Fence
-> io ()
queueSubmit2KHR Queue
queue "submits" ::: Vector (SomeStruct SubmitInfo2KHR)
submits Fence
fence = IO () -> io ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkQueueSubmit2KHRPtr :: FunPtr
  (Ptr Queue_T
   -> Word32
   -> ("pSubmits" ::: Ptr (SomeStruct SubmitInfo2KHR))
   -> Fence
   -> IO Result)
vkQueueSubmit2KHRPtr = DeviceCmds
-> FunPtr
     (Ptr Queue_T
      -> Word32
      -> ("pSubmits" ::: Ptr (SomeStruct SubmitInfo2KHR))
      -> Fence
      -> IO Result)
pVkQueueSubmit2KHR (case Queue
queue of Queue{DeviceCmds
$sel:deviceCmds:Queue :: Queue -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Queue_T
   -> Word32
   -> ("pSubmits" ::: Ptr (SomeStruct SubmitInfo2KHR))
   -> Fence
   -> IO Result)
vkQueueSubmit2KHRPtr FunPtr
  (Ptr Queue_T
   -> Word32
   -> ("pSubmits" ::: Ptr (SomeStruct SubmitInfo2KHR))
   -> Fence
   -> IO Result)
-> FunPtr
     (Ptr Queue_T
      -> Word32
      -> ("pSubmits" ::: Ptr (SomeStruct SubmitInfo2KHR))
      -> Fence
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Queue_T
   -> Word32
   -> ("pSubmits" ::: Ptr (SomeStruct SubmitInfo2KHR))
   -> Fence
   -> IO Result)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkQueueSubmit2KHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkQueueSubmit2KHR' :: Ptr Queue_T
-> Word32
-> ("pSubmits" ::: Ptr (SomeStruct SubmitInfo2KHR))
-> Fence
-> IO Result
vkQueueSubmit2KHR' = FunPtr
  (Ptr Queue_T
   -> Word32
   -> ("pSubmits" ::: Ptr (SomeStruct SubmitInfo2KHR))
   -> Fence
   -> IO Result)
-> Ptr Queue_T
-> Word32
-> ("pSubmits" ::: Ptr (SomeStruct SubmitInfo2KHR))
-> Fence
-> IO Result
mkVkQueueSubmit2KHR FunPtr
  (Ptr Queue_T
   -> Word32
   -> ("pSubmits" ::: Ptr (SomeStruct SubmitInfo2KHR))
   -> Fence
   -> IO Result)
vkQueueSubmit2KHRPtr
  Ptr (SubmitInfo2KHR Any)
pPSubmits <- ((Ptr (SubmitInfo2KHR Any) -> IO ()) -> IO ())
-> ContT () IO (Ptr (SubmitInfo2KHR Any))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (SubmitInfo2KHR Any) -> IO ()) -> IO ())
 -> ContT () IO (Ptr (SubmitInfo2KHR Any)))
-> ((Ptr (SubmitInfo2KHR Any) -> IO ()) -> IO ())
-> ContT () IO (Ptr (SubmitInfo2KHR Any))
forall a b. (a -> b) -> a -> b
$ Int -> (Ptr (SubmitInfo2KHR Any) -> IO ()) -> IO ()
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @(SubmitInfo2KHR _) ((("submits" ::: Vector (SomeStruct SubmitInfo2KHR)) -> Int
forall a. Vector a -> Int
Data.Vector.length ("submits" ::: Vector (SomeStruct SubmitInfo2KHR)
submits)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
64)
  (Int -> SomeStruct SubmitInfo2KHR -> ContT () IO ())
-> ("submits" ::: Vector (SomeStruct SubmitInfo2KHR))
-> ContT () IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i SomeStruct SubmitInfo2KHR
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
$ ("pSubmits" ::: Ptr (SomeStruct SubmitInfo2KHR))
-> SomeStruct SubmitInfo2KHR -> 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 (SubmitInfo2KHR Any)
-> "pSubmits" ::: Ptr (SomeStruct SubmitInfo2KHR)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (SubmitInfo2KHR Any)
pPSubmits Ptr (SubmitInfo2KHR Any) -> Int -> Ptr (SubmitInfo2KHR _)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
64 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (SubmitInfo2KHR _))) (SomeStruct SubmitInfo2KHR
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
$ ())) ("submits" ::: Vector (SomeStruct SubmitInfo2KHR)
submits)
  Result
r <- IO Result -> ContT () IO Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result -> ContT () IO Result)
-> IO Result -> ContT () IO Result
forall a b. (a -> b) -> a -> b
$ String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkQueueSubmit2KHR" (Ptr Queue_T
-> Word32
-> ("pSubmits" ::: Ptr (SomeStruct SubmitInfo2KHR))
-> Fence
-> IO Result
vkQueueSubmit2KHR' (Queue -> Ptr Queue_T
queueHandle (Queue
queue)) ((Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (("submits" ::: Vector (SomeStruct SubmitInfo2KHR)) -> Int
forall a. Vector a -> Int
Data.Vector.length (("submits" ::: Vector (SomeStruct SubmitInfo2KHR)) -> Int)
-> ("submits" ::: Vector (SomeStruct SubmitInfo2KHR)) -> Int
forall a b. (a -> b) -> a -> b
$ ("submits" ::: Vector (SomeStruct SubmitInfo2KHR)
submits)) :: Word32)) (Ptr (SubmitInfo2KHR Any)
-> "pSubmits" ::: Ptr (SomeStruct SubmitInfo2KHR)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (SubmitInfo2KHR Any)
pPSubmits)) (Fence
fence))
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Result
r Result -> Result -> Bool
forall a. Ord a => a -> a -> Bool
< Result
SUCCESS) (VulkanException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (Result -> VulkanException
VulkanException Result
r))


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

-- | vkCmdWriteTimestamp2KHR - Write a device timestamp into a query object
--
-- = Description
--
-- When 'cmdWriteTimestamp2KHR' is submitted to a queue, it defines an
-- execution dependency on commands that were submitted before it, and
-- writes a timestamp to a query pool.
--
-- The first
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
-- includes all commands that occur earlier in
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.
-- The synchronization scope is limited to operations on the pipeline stage
-- specified by @stage@.
--
-- The second
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
-- includes only the timestamp write operation.
--
-- When the timestamp value is written, the availability status of the
-- query is set to available.
--
-- Note
--
-- If an implementation is unable to detect completion and latch the timer
-- at any specific stage of the pipeline, it /may/ instead do so at any
-- logically later stage.
--
-- Comparisons between timestamps are not meaningful if the timestamps are
-- written by commands submitted to different queues.
--
-- Note
--
-- An example of such a comparison is subtracting an older timestamp from a
-- newer one to determine the execution time of a sequence of commands.
--
-- If 'cmdWriteTimestamp2KHR' is called while executing a render pass
-- instance that has multiview enabled, the timestamp uses N consecutive
-- query indices in the query pool (starting at @query@) where N is the
-- number of bits set in the view mask of the subpass the command is
-- executed in. The resulting query values are determined by an
-- implementation-dependent choice of one of the following behaviors:
--
-- -   The first query is a timestamp value and (if more than one bit is
--     set in the view mask) zero is written to the remaining queries. If
--     two timestamps are written in the same subpass, the sum of the
--     execution time of all views between those commands is the difference
--     between the first query written by each command.
--
-- -   All N queries are timestamp values. If two timestamps are written in
--     the same subpass, the sum of the execution time of all views between
--     those commands is the sum of the difference between corresponding
--     queries written by each command. The difference between
--     corresponding queries /may/ be the execution time of a single view.
--
-- In either case, the application /can/ sum the differences between all N
-- queries to determine the total execution time.
--
-- == Valid Usage
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-stage-03929# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
--     feature is not enabled, @stage@ /must/ not contain
--     'PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR'
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-stage-03930# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
--     feature is not enabled, @stage@ /must/ not contain
--     'PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR' or
--     'PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR'
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-stage-03931# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>
--     feature is not enabled, @stage@ /must/ not contain
--     'PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT'
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-stage-03932# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>
--     feature is not enabled, @stage@ /must/ not contain
--     'PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT'
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-stage-03933# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>
--     feature is not enabled, @stage@ /must/ not contain
--     'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT'
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-stage-03934# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
--     feature is not enabled, @stage@ /must/ not contain
--     'PIPELINE_STAGE_2_MESH_SHADER_BIT_NV'
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-stage-03935# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
--     feature is not enabled, @stage@ /must/ not contain
--     'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-stage-04956# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
--     feature is not enabled, @stage@ /must/ not contain
--     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-stage-04957# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subpassShading subpass shading>
--     feature is not enabled, @stage@ /must/ not contain
--     'PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI'
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-stage-04995# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocation mask image>
--     feature is not enabled, @stage@ /must/ not contain
--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-synchronization2-03858# The
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>
--     feature /must/ be enabled
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-stage-03859# @stage@ /must/ only
--     include a single pipeline stage
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-stage-03860# @stage@ /must/ only
--     include stages valid for the queue family that was used to create
--     the command pool that @commandBuffer@ was allocated from
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-queryPool-03861# @queryPool@ /must/
--     have been created with a @queryType@ of
--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-queryPool-03862# The query identified
--     by @queryPool@ and @query@ /must/ be /unavailable/
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-timestampValidBits-03863# The command
--     pool’s queue family /must/ support a non-zero @timestampValidBits@
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-query-04903# @query@ /must/ be less
--     than the number of queries in @queryPool@
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-None-03864# All queries used by the
--     command /must/ be unavailable
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-query-03865# If
--     'cmdWriteTimestamp2KHR' is called within a render pass instance, the
--     sum of @query@ and the number of bits set in the current subpass’s
--     view mask /must/ be less than or equal to the number of queries in
--     @queryPool@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-stage-parameter# @stage@ /must/ be a
--     valid combination of 'PipelineStageFlagBits2KHR' values
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-stage-requiredbitmask# @stage@ /must/
--     not be @0@
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-queryPool-parameter# @queryPool@
--     /must/ be a valid 'Vulkan.Core10.Handles.QueryPool' handle
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-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-vkCmdWriteTimestamp2KHR-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support transfer, graphics, or compute
--     operations
--
-- -   #VUID-vkCmdWriteTimestamp2KHR-commonparent# Both of @commandBuffer@,
--     and @queryPool@ /must/ have been created, allocated, or retrieved
--     from the same 'Vulkan.Core10.Handles.Device'
--
-- == Host Synchronization
--
-- -   Host access to @commandBuffer@ /must/ be externally synchronized
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
-- | Primary                                                                                                                    | Both                                                                                                                   | Transfer                                                                                                              |
-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |
-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>,
-- 'Vulkan.Core10.Handles.CommandBuffer', 'PipelineStageFlags2KHR',
-- 'Vulkan.Core10.Handles.QueryPool'
cmdWriteTimestamp2KHR :: forall io
                       . (MonadIO io)
                      => -- | @commandBuffer@ is the command buffer into which the command will be
                         -- recorded.
                         CommandBuffer
                      -> -- | @stage@ specifies a stage of the pipeline.
                         PipelineStageFlags2KHR
                      -> -- | @queryPool@ is the query pool that will manage the timestamp.
                         QueryPool
                      -> -- | @query@ is the query within the query pool that will contain the
                         -- timestamp.
                         ("query" ::: Word32)
                      -> io ()
cmdWriteTimestamp2KHR :: CommandBuffer
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> QueryPool
-> Word32
-> io ()
cmdWriteTimestamp2KHR CommandBuffer
commandBuffer "stageMask" ::: PipelineStageFlags2KHR
stage QueryPool
queryPool Word32
query = IO () -> io ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ()) -> IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdWriteTimestamp2KHRPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> ("stageMask" ::: PipelineStageFlags2KHR)
   -> QueryPool
   -> Word32
   -> IO ())
vkCmdWriteTimestamp2KHRPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("stageMask" ::: PipelineStageFlags2KHR)
      -> QueryPool
      -> Word32
      -> IO ())
pVkCmdWriteTimestamp2KHR (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr CommandBuffer_T
   -> ("stageMask" ::: PipelineStageFlags2KHR)
   -> QueryPool
   -> Word32
   -> IO ())
vkCmdWriteTimestamp2KHRPtr FunPtr
  (Ptr CommandBuffer_T
   -> ("stageMask" ::: PipelineStageFlags2KHR)
   -> QueryPool
   -> Word32
   -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("stageMask" ::: PipelineStageFlags2KHR)
      -> QueryPool
      -> Word32
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> ("stageMask" ::: PipelineStageFlags2KHR)
   -> QueryPool
   -> Word32
   -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCmdWriteTimestamp2KHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdWriteTimestamp2KHR' :: Ptr CommandBuffer_T
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> QueryPool
-> Word32
-> IO ()
vkCmdWriteTimestamp2KHR' = FunPtr
  (Ptr CommandBuffer_T
   -> ("stageMask" ::: PipelineStageFlags2KHR)
   -> QueryPool
   -> Word32
   -> IO ())
-> Ptr CommandBuffer_T
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> QueryPool
-> Word32
-> IO ()
mkVkCmdWriteTimestamp2KHR FunPtr
  (Ptr CommandBuffer_T
   -> ("stageMask" ::: PipelineStageFlags2KHR)
   -> QueryPool
   -> Word32
   -> IO ())
vkCmdWriteTimestamp2KHRPtr
  String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCmdWriteTimestamp2KHR" (Ptr CommandBuffer_T
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> QueryPool
-> Word32
-> IO ()
vkCmdWriteTimestamp2KHR' (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer)) ("stageMask" ::: PipelineStageFlags2KHR
stage) (QueryPool
queryPool) (Word32
query))
  () -> IO ()
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" mkVkCmdWriteBufferMarker2AMD
  :: FunPtr (Ptr CommandBuffer_T -> PipelineStageFlags2KHR -> Buffer -> DeviceSize -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> PipelineStageFlags2KHR -> Buffer -> DeviceSize -> Word32 -> IO ()

-- | vkCmdWriteBufferMarker2AMD - Execute a pipelined write of a marker value
-- into a buffer
--
-- = Description
--
-- The command will write the 32-bit marker value into the buffer only
-- after all preceding commands have finished executing up to at least the
-- specified pipeline stage. This includes the completion of other
-- preceding 'cmdWriteBufferMarker2AMD' commands so long as their specified
-- pipeline stages occur either at the same time or earlier than this
-- command’s specified @stage@.
--
-- While consecutive buffer marker writes with the same @stage@ parameter
-- implicitly complete in submission order, memory and execution
-- dependencies between buffer marker writes and other operations /must/
-- still be explicitly ordered using synchronization commands. The access
-- scope for buffer marker writes falls under the
-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_TRANSFER_WRITE_BIT', and the
-- pipeline stages for identifying the synchronization scope /must/ include
-- both @stage@ and
-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFER_BIT'.
--
-- Note
--
-- Similar to 'cmdWriteTimestamp2KHR', if an implementation is unable to
-- write a marker at any specific pipeline stage, it /may/ instead do so at
-- any logically later stage.
--
-- Note
--
-- Implementations /may/ only support a limited number of pipelined marker
-- write operations in flight at a given time. Thus an excessive number of
-- marker write operations /may/ degrade command execution performance.
--
-- == Valid Usage
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-stage-03929# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
--     feature is not enabled, @stage@ /must/ not contain
--     'PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR'
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-stage-03930# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
--     feature is not enabled, @stage@ /must/ not contain
--     'PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR' or
--     'PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR'
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-stage-03931# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>
--     feature is not enabled, @stage@ /must/ not contain
--     'PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT'
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-stage-03932# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>
--     feature is not enabled, @stage@ /must/ not contain
--     'PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT'
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-stage-03933# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>
--     feature is not enabled, @stage@ /must/ not contain
--     'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT'
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-stage-03934# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
--     feature is not enabled, @stage@ /must/ not contain
--     'PIPELINE_STAGE_2_MESH_SHADER_BIT_NV'
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-stage-03935# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
--     feature is not enabled, @stage@ /must/ not contain
--     'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-stage-04956# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
--     feature is not enabled, @stage@ /must/ not contain
--     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-stage-04957# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subpassShading subpass shading>
--     feature is not enabled, @stage@ /must/ not contain
--     'PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI'
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-stage-04995# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocation mask image>
--     feature is not enabled, @stage@ /must/ not contain
--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-synchronization2-03893# The
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>
--     feature /must/ be enabled
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-stage-03894# @stage@ /must/ include
--     only a single pipeline stage
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-stage-03895# @stage@ /must/ include
--     only stages that are valid for the queue family that was used to
--     create the command pool that @commandBuffer@ was allocated from
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-dstOffset-03896# @dstOffset@ /must/
--     be less than or equal to the size of @dstBuffer@ minus @4@
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-dstBuffer-03897# @dstBuffer@ /must/
--     have been created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'
--     usage flag
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-dstBuffer-03898# If @dstBuffer@ is
--     non-sparse then it /must/ be bound completely and contiguously to a
--     single 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-dstOffset-03899# @dstOffset@ /must/
--     be a multiple of @4@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-stage-parameter# @stage@ /must/ be
--     a valid combination of 'PipelineStageFlagBits2KHR' values
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-stage-requiredbitmask# @stage@
--     /must/ not be @0@
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-dstBuffer-parameter# @dstBuffer@
--     /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-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-vkCmdWriteBufferMarker2AMD-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support transfer, graphics, or compute
--     operations
--
-- -   #VUID-vkCmdWriteBufferMarker2AMD-commonparent# Both of
--     @commandBuffer@, and @dstBuffer@ /must/ have been created,
--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
--
-- == Host Synchronization
--
-- -   Host access to @commandBuffer@ /must/ be externally synchronized
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+
-- | Primary                                                                                                                    | Both                                                                                                                   | Transfer                                                                                                              |
-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |
-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_AMD_buffer_marker VK_AMD_buffer_marker>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>,
-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',
-- 'Vulkan.Core10.FundamentalTypes.DeviceSize', 'PipelineStageFlags2KHR'
cmdWriteBufferMarker2AMD :: forall io
                          . (MonadIO io)
                         => -- | @commandBuffer@ is the command buffer into which the command will be
                            -- recorded.
                            CommandBuffer
                         -> -- | @stage@ specifies the pipeline stage whose completion triggers the
                            -- marker write.
                            PipelineStageFlags2KHR
                         -> -- | @dstBuffer@ is the buffer where the marker will be written.
                            ("dstBuffer" ::: Buffer)
                         -> -- | @dstOffset@ is the byte offset into the buffer where the marker will be
                            -- written.
                            ("dstOffset" ::: DeviceSize)
                         -> -- | @marker@ is the 32-bit value of the marker.
                            ("marker" ::: Word32)
                         -> io ()
cmdWriteBufferMarker2AMD :: CommandBuffer
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> ("dstBuffer" ::: Buffer)
-> ("dstOffset" ::: DeviceSize)
-> Word32
-> io ()
cmdWriteBufferMarker2AMD CommandBuffer
commandBuffer "stageMask" ::: PipelineStageFlags2KHR
stage "dstBuffer" ::: Buffer
dstBuffer "dstOffset" ::: DeviceSize
dstOffset Word32
marker = IO () -> io ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ()) -> IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdWriteBufferMarker2AMDPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> ("stageMask" ::: PipelineStageFlags2KHR)
   -> ("dstBuffer" ::: Buffer)
   -> ("dstOffset" ::: DeviceSize)
   -> Word32
   -> IO ())
vkCmdWriteBufferMarker2AMDPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("stageMask" ::: PipelineStageFlags2KHR)
      -> ("dstBuffer" ::: Buffer)
      -> ("dstOffset" ::: DeviceSize)
      -> Word32
      -> IO ())
pVkCmdWriteBufferMarker2AMD (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr CommandBuffer_T
   -> ("stageMask" ::: PipelineStageFlags2KHR)
   -> ("dstBuffer" ::: Buffer)
   -> ("dstOffset" ::: DeviceSize)
   -> Word32
   -> IO ())
vkCmdWriteBufferMarker2AMDPtr FunPtr
  (Ptr CommandBuffer_T
   -> ("stageMask" ::: PipelineStageFlags2KHR)
   -> ("dstBuffer" ::: Buffer)
   -> ("dstOffset" ::: DeviceSize)
   -> Word32
   -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("stageMask" ::: PipelineStageFlags2KHR)
      -> ("dstBuffer" ::: Buffer)
      -> ("dstOffset" ::: DeviceSize)
      -> Word32
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> ("stageMask" ::: PipelineStageFlags2KHR)
   -> ("dstBuffer" ::: Buffer)
   -> ("dstOffset" ::: DeviceSize)
   -> Word32
   -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCmdWriteBufferMarker2AMD is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdWriteBufferMarker2AMD' :: Ptr CommandBuffer_T
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> ("dstBuffer" ::: Buffer)
-> ("dstOffset" ::: DeviceSize)
-> Word32
-> IO ()
vkCmdWriteBufferMarker2AMD' = FunPtr
  (Ptr CommandBuffer_T
   -> ("stageMask" ::: PipelineStageFlags2KHR)
   -> ("dstBuffer" ::: Buffer)
   -> ("dstOffset" ::: DeviceSize)
   -> Word32
   -> IO ())
-> Ptr CommandBuffer_T
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> ("dstBuffer" ::: Buffer)
-> ("dstOffset" ::: DeviceSize)
-> Word32
-> IO ()
mkVkCmdWriteBufferMarker2AMD FunPtr
  (Ptr CommandBuffer_T
   -> ("stageMask" ::: PipelineStageFlags2KHR)
   -> ("dstBuffer" ::: Buffer)
   -> ("dstOffset" ::: DeviceSize)
   -> Word32
   -> IO ())
vkCmdWriteBufferMarker2AMDPtr
  String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCmdWriteBufferMarker2AMD" (Ptr CommandBuffer_T
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> ("dstBuffer" ::: Buffer)
-> ("dstOffset" ::: DeviceSize)
-> Word32
-> IO ()
vkCmdWriteBufferMarker2AMD' (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer)) ("stageMask" ::: PipelineStageFlags2KHR
stage) ("dstBuffer" ::: Buffer
dstBuffer) ("dstOffset" ::: DeviceSize
dstOffset) (Word32
marker))
  () -> IO ()
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" mkVkGetQueueCheckpointData2NV
  :: FunPtr (Ptr Queue_T -> Ptr Word32 -> Ptr CheckpointData2NV -> IO ()) -> Ptr Queue_T -> Ptr Word32 -> Ptr CheckpointData2NV -> IO ()

-- | vkGetQueueCheckpointData2NV - Retrieve diagnostic checkpoint data
--
-- = Description
--
-- If @pCheckpointData@ is @NULL@, then the number of checkpoint markers
-- available is returned in @pCheckpointDataCount@. Otherwise,
-- @pCheckpointDataCount@ /must/ point to a variable set by the user to the
-- number of elements in the @pCheckpointData@ array, and on return the
-- variable is overwritten with the number of structures actually written
-- to @pCheckpointData@.
--
-- If @pCheckpointDataCount@ is less than the number of checkpoint markers
-- available, at most @pCheckpointDataCount@ structures will be written.
--
-- == Valid Usage
--
-- -   #VUID-vkGetQueueCheckpointData2NV-queue-03892# The device that
--     @queue@ belongs to /must/ be in the lost state
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkGetQueueCheckpointData2NV-queue-parameter# @queue@ /must/ be
--     a valid 'Vulkan.Core10.Handles.Queue' handle
--
-- -   #VUID-vkGetQueueCheckpointData2NV-pCheckpointDataCount-parameter#
--     @pCheckpointDataCount@ /must/ be a valid pointer to a @uint32_t@
--     value
--
-- -   #VUID-vkGetQueueCheckpointData2NV-pCheckpointData-parameter# If the
--     value referenced by @pCheckpointDataCount@ is not @0@, and
--     @pCheckpointData@ is not @NULL@, @pCheckpointData@ /must/ be a valid
--     pointer to an array of @pCheckpointDataCount@ 'CheckpointData2NV'
--     structures
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_device_diagnostic_checkpoints VK_NV_device_diagnostic_checkpoints>,
-- 'CheckpointData2NV', 'Vulkan.Core10.Handles.Queue'
getQueueCheckpointData2NV :: forall io
                           . (MonadIO io)
                          => -- | @queue@ is the 'Vulkan.Core10.Handles.Queue' object the caller would
                             -- like to retrieve checkpoint data for
                             Queue
                          -> io (("checkpointData" ::: Vector CheckpointData2NV))
getQueueCheckpointData2NV :: Queue -> io ("checkpointData" ::: Vector CheckpointData2NV)
getQueueCheckpointData2NV Queue
queue = IO ("checkpointData" ::: Vector CheckpointData2NV)
-> io ("checkpointData" ::: Vector CheckpointData2NV)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ("checkpointData" ::: Vector CheckpointData2NV)
 -> io ("checkpointData" ::: Vector CheckpointData2NV))
-> (ContT
      ("checkpointData" ::: Vector CheckpointData2NV)
      IO
      ("checkpointData" ::: Vector CheckpointData2NV)
    -> IO ("checkpointData" ::: Vector CheckpointData2NV))
-> ContT
     ("checkpointData" ::: Vector CheckpointData2NV)
     IO
     ("checkpointData" ::: Vector CheckpointData2NV)
-> io ("checkpointData" ::: Vector CheckpointData2NV)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT
  ("checkpointData" ::: Vector CheckpointData2NV)
  IO
  ("checkpointData" ::: Vector CheckpointData2NV)
-> IO ("checkpointData" ::: Vector CheckpointData2NV)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   ("checkpointData" ::: Vector CheckpointData2NV)
   IO
   ("checkpointData" ::: Vector CheckpointData2NV)
 -> io ("checkpointData" ::: Vector CheckpointData2NV))
-> ContT
     ("checkpointData" ::: Vector CheckpointData2NV)
     IO
     ("checkpointData" ::: Vector CheckpointData2NV)
-> io ("checkpointData" ::: Vector CheckpointData2NV)
forall a b. (a -> b) -> a -> b
$ do
  let vkGetQueueCheckpointData2NVPtr :: FunPtr
  (Ptr Queue_T
   -> ("pCheckpointDataCount" ::: Ptr Word32)
   -> ("pCheckpointData" ::: Ptr CheckpointData2NV)
   -> IO ())
vkGetQueueCheckpointData2NVPtr = DeviceCmds
-> FunPtr
     (Ptr Queue_T
      -> ("pCheckpointDataCount" ::: Ptr Word32)
      -> ("pCheckpointData" ::: Ptr CheckpointData2NV)
      -> IO ())
pVkGetQueueCheckpointData2NV (case Queue
queue of Queue{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Queue :: Queue -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO ()
-> ContT ("checkpointData" ::: Vector CheckpointData2NV) IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT ("checkpointData" ::: Vector CheckpointData2NV) IO ())
-> IO ()
-> ContT ("checkpointData" ::: Vector CheckpointData2NV) IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Queue_T
   -> ("pCheckpointDataCount" ::: Ptr Word32)
   -> ("pCheckpointData" ::: Ptr CheckpointData2NV)
   -> IO ())
vkGetQueueCheckpointData2NVPtr FunPtr
  (Ptr Queue_T
   -> ("pCheckpointDataCount" ::: Ptr Word32)
   -> ("pCheckpointData" ::: Ptr CheckpointData2NV)
   -> IO ())
-> FunPtr
     (Ptr Queue_T
      -> ("pCheckpointDataCount" ::: Ptr Word32)
      -> ("pCheckpointData" ::: Ptr CheckpointData2NV)
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Queue_T
   -> ("pCheckpointDataCount" ::: Ptr Word32)
   -> ("pCheckpointData" ::: Ptr CheckpointData2NV)
   -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkGetQueueCheckpointData2NV is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetQueueCheckpointData2NV' :: Ptr Queue_T
-> ("pCheckpointDataCount" ::: Ptr Word32)
-> ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> IO ()
vkGetQueueCheckpointData2NV' = FunPtr
  (Ptr Queue_T
   -> ("pCheckpointDataCount" ::: Ptr Word32)
   -> ("pCheckpointData" ::: Ptr CheckpointData2NV)
   -> IO ())
-> Ptr Queue_T
-> ("pCheckpointDataCount" ::: Ptr Word32)
-> ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> IO ()
mkVkGetQueueCheckpointData2NV FunPtr
  (Ptr Queue_T
   -> ("pCheckpointDataCount" ::: Ptr Word32)
   -> ("pCheckpointData" ::: Ptr CheckpointData2NV)
   -> IO ())
vkGetQueueCheckpointData2NVPtr
  let queue' :: Ptr Queue_T
queue' = Queue -> Ptr Queue_T
queueHandle (Queue
queue)
  "pCheckpointDataCount" ::: Ptr Word32
pPCheckpointDataCount <- ((("pCheckpointDataCount" ::: Ptr Word32)
  -> IO ("checkpointData" ::: Vector CheckpointData2NV))
 -> IO ("checkpointData" ::: Vector CheckpointData2NV))
-> ContT
     ("checkpointData" ::: Vector CheckpointData2NV)
     IO
     ("pCheckpointDataCount" ::: Ptr Word32)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pCheckpointDataCount" ::: Ptr Word32)
   -> IO ("checkpointData" ::: Vector CheckpointData2NV))
  -> IO ("checkpointData" ::: Vector CheckpointData2NV))
 -> ContT
      ("checkpointData" ::: Vector CheckpointData2NV)
      IO
      ("pCheckpointDataCount" ::: Ptr Word32))
-> ((("pCheckpointDataCount" ::: Ptr Word32)
     -> IO ("checkpointData" ::: Vector CheckpointData2NV))
    -> IO ("checkpointData" ::: Vector CheckpointData2NV))
-> ContT
     ("checkpointData" ::: Vector CheckpointData2NV)
     IO
     ("pCheckpointDataCount" ::: Ptr Word32)
forall a b. (a -> b) -> a -> b
$ IO ("pCheckpointDataCount" ::: Ptr Word32)
-> (("pCheckpointDataCount" ::: Ptr Word32) -> IO ())
-> (("pCheckpointDataCount" ::: Ptr Word32)
    -> IO ("checkpointData" ::: Vector CheckpointData2NV))
-> IO ("checkpointData" ::: Vector CheckpointData2NV)
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (Int -> IO ("pCheckpointDataCount" ::: Ptr Word32)
forall a. Int -> IO (Ptr a)
callocBytes @Word32 Int
4) ("pCheckpointDataCount" ::: Ptr Word32) -> IO ()
forall a. Ptr a -> IO ()
free
  IO ()
-> ContT ("checkpointData" ::: Vector CheckpointData2NV) IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT ("checkpointData" ::: Vector CheckpointData2NV) IO ())
-> IO ()
-> ContT ("checkpointData" ::: Vector CheckpointData2NV) IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetQueueCheckpointData2NV" (Ptr Queue_T
-> ("pCheckpointDataCount" ::: Ptr Word32)
-> ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> IO ()
vkGetQueueCheckpointData2NV' Ptr Queue_T
queue' ("pCheckpointDataCount" ::: Ptr Word32
pPCheckpointDataCount) ("pCheckpointData" ::: Ptr CheckpointData2NV
forall a. Ptr a
nullPtr))
  Word32
pCheckpointDataCount <- IO Word32
-> ContT ("checkpointData" ::: Vector CheckpointData2NV) IO Word32
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Word32
 -> ContT ("checkpointData" ::: Vector CheckpointData2NV) IO Word32)
-> IO Word32
-> ContT ("checkpointData" ::: Vector CheckpointData2NV) IO Word32
forall a b. (a -> b) -> a -> b
$ ("pCheckpointDataCount" ::: Ptr Word32) -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 "pCheckpointDataCount" ::: Ptr Word32
pPCheckpointDataCount
  "pCheckpointData" ::: Ptr CheckpointData2NV
pPCheckpointData <- ((("pCheckpointData" ::: Ptr CheckpointData2NV)
  -> IO ("checkpointData" ::: Vector CheckpointData2NV))
 -> IO ("checkpointData" ::: Vector CheckpointData2NV))
-> ContT
     ("checkpointData" ::: Vector CheckpointData2NV)
     IO
     ("pCheckpointData" ::: Ptr CheckpointData2NV)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pCheckpointData" ::: Ptr CheckpointData2NV)
   -> IO ("checkpointData" ::: Vector CheckpointData2NV))
  -> IO ("checkpointData" ::: Vector CheckpointData2NV))
 -> ContT
      ("checkpointData" ::: Vector CheckpointData2NV)
      IO
      ("pCheckpointData" ::: Ptr CheckpointData2NV))
-> ((("pCheckpointData" ::: Ptr CheckpointData2NV)
     -> IO ("checkpointData" ::: Vector CheckpointData2NV))
    -> IO ("checkpointData" ::: Vector CheckpointData2NV))
-> ContT
     ("checkpointData" ::: Vector CheckpointData2NV)
     IO
     ("pCheckpointData" ::: Ptr CheckpointData2NV)
forall a b. (a -> b) -> a -> b
$ IO ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> (("pCheckpointData" ::: Ptr CheckpointData2NV) -> IO ())
-> (("pCheckpointData" ::: Ptr CheckpointData2NV)
    -> IO ("checkpointData" ::: Vector CheckpointData2NV))
-> IO ("checkpointData" ::: Vector CheckpointData2NV)
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (Int -> IO ("pCheckpointData" ::: Ptr CheckpointData2NV)
forall a. Int -> IO (Ptr a)
callocBytes @CheckpointData2NV ((Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word32
pCheckpointDataCount)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
32)) ("pCheckpointData" ::: Ptr CheckpointData2NV) -> IO ()
forall a. Ptr a -> IO ()
free
  [()]
_ <- (Int
 -> ContT ("checkpointData" ::: Vector CheckpointData2NV) IO ())
-> [Int]
-> ContT ("checkpointData" ::: Vector CheckpointData2NV) IO [()]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse (\Int
i -> ((() -> IO ("checkpointData" ::: Vector CheckpointData2NV))
 -> IO ("checkpointData" ::: Vector CheckpointData2NV))
-> ContT ("checkpointData" ::: Vector CheckpointData2NV) IO ()
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO ("checkpointData" ::: Vector CheckpointData2NV))
  -> IO ("checkpointData" ::: Vector CheckpointData2NV))
 -> ContT ("checkpointData" ::: Vector CheckpointData2NV) IO ())
-> ((() -> IO ("checkpointData" ::: Vector CheckpointData2NV))
    -> IO ("checkpointData" ::: Vector CheckpointData2NV))
-> ContT ("checkpointData" ::: Vector CheckpointData2NV) IO ()
forall a b. (a -> b) -> a -> b
$ ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> IO ("checkpointData" ::: Vector CheckpointData2NV)
-> IO ("checkpointData" ::: Vector CheckpointData2NV)
forall a b. ToCStruct a => Ptr a -> IO b -> IO b
pokeZeroCStruct ("pCheckpointData" ::: Ptr CheckpointData2NV
pPCheckpointData ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> Int -> "pCheckpointData" ::: Ptr CheckpointData2NV
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
32) :: Ptr CheckpointData2NV) (IO ("checkpointData" ::: Vector CheckpointData2NV)
 -> IO ("checkpointData" ::: Vector CheckpointData2NV))
-> ((() -> IO ("checkpointData" ::: Vector CheckpointData2NV))
    -> IO ("checkpointData" ::: Vector CheckpointData2NV))
-> (() -> IO ("checkpointData" ::: Vector CheckpointData2NV))
-> IO ("checkpointData" ::: Vector CheckpointData2NV)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO ("checkpointData" ::: Vector CheckpointData2NV))
-> () -> IO ("checkpointData" ::: Vector CheckpointData2NV)
forall a b. (a -> b) -> a -> b
$ ())) [Int
0..(Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word32
pCheckpointDataCount)) Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1]
  IO ()
-> ContT ("checkpointData" ::: Vector CheckpointData2NV) IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT ("checkpointData" ::: Vector CheckpointData2NV) IO ())
-> IO ()
-> ContT ("checkpointData" ::: Vector CheckpointData2NV) IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetQueueCheckpointData2NV" (Ptr Queue_T
-> ("pCheckpointDataCount" ::: Ptr Word32)
-> ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> IO ()
vkGetQueueCheckpointData2NV' Ptr Queue_T
queue' ("pCheckpointDataCount" ::: Ptr Word32
pPCheckpointDataCount) (("pCheckpointData" ::: Ptr CheckpointData2NV
pPCheckpointData)))
  Word32
pCheckpointDataCount' <- IO Word32
-> ContT ("checkpointData" ::: Vector CheckpointData2NV) IO Word32
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Word32
 -> ContT ("checkpointData" ::: Vector CheckpointData2NV) IO Word32)
-> IO Word32
-> ContT ("checkpointData" ::: Vector CheckpointData2NV) IO Word32
forall a b. (a -> b) -> a -> b
$ ("pCheckpointDataCount" ::: Ptr Word32) -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 "pCheckpointDataCount" ::: Ptr Word32
pPCheckpointDataCount
  "checkpointData" ::: Vector CheckpointData2NV
pCheckpointData' <- IO ("checkpointData" ::: Vector CheckpointData2NV)
-> ContT
     ("checkpointData" ::: Vector CheckpointData2NV)
     IO
     ("checkpointData" ::: Vector CheckpointData2NV)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ("checkpointData" ::: Vector CheckpointData2NV)
 -> ContT
      ("checkpointData" ::: Vector CheckpointData2NV)
      IO
      ("checkpointData" ::: Vector CheckpointData2NV))
-> IO ("checkpointData" ::: Vector CheckpointData2NV)
-> ContT
     ("checkpointData" ::: Vector CheckpointData2NV)
     IO
     ("checkpointData" ::: Vector CheckpointData2NV)
forall a b. (a -> b) -> a -> b
$ Int
-> (Int -> IO CheckpointData2NV)
-> IO ("checkpointData" ::: Vector CheckpointData2NV)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word32
pCheckpointDataCount')) (\Int
i -> ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> IO CheckpointData2NV
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @CheckpointData2NV ((("pCheckpointData" ::: Ptr CheckpointData2NV
pPCheckpointData) ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> Int -> "pCheckpointData" ::: Ptr CheckpointData2NV
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
32 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr CheckpointData2NV)))
  ("checkpointData" ::: Vector CheckpointData2NV)
-> ContT
     ("checkpointData" ::: Vector CheckpointData2NV)
     IO
     ("checkpointData" ::: Vector CheckpointData2NV)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (("checkpointData" ::: Vector CheckpointData2NV)
 -> ContT
      ("checkpointData" ::: Vector CheckpointData2NV)
      IO
      ("checkpointData" ::: Vector CheckpointData2NV))
-> ("checkpointData" ::: Vector CheckpointData2NV)
-> ContT
     ("checkpointData" ::: Vector CheckpointData2NV)
     IO
     ("checkpointData" ::: Vector CheckpointData2NV)
forall a b. (a -> b) -> a -> b
$ ("checkpointData" ::: Vector CheckpointData2NV
pCheckpointData')


-- No documentation found for TopLevel "VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV"
pattern $bPIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV = PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR


-- No documentation found for TopLevel "VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV"
pattern $bACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV :: AccessFlagBits2KHR
$mACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV = ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR


-- No documentation found for TopLevel "VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV"
pattern $bPIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV = PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR


-- No documentation found for TopLevel "VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV"
pattern $bPIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV = PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR


-- No documentation found for TopLevel "VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV"
pattern $bACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV :: AccessFlagBits2KHR
$mACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV = ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR


-- No documentation found for TopLevel "VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV"
pattern $bACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV :: AccessFlagBits2KHR
$mACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV = ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR


-- No documentation found for TopLevel "VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR"
pattern $bPIPELINE_STAGE_2_TRANSFER_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_TRANSFER_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_TRANSFER_BIT_KHR = PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR


-- | VkMemoryBarrier2KHR - Structure specifying a global memory barrier
--
-- = Description
--
-- This structure defines a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-memory memory dependency>
-- affecting all device memory.
--
-- The first
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
-- and
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
-- described by this structure include only operations and memory accesses
-- specified by @srcStageMask@ and @srcAccessMask@.
--
-- The second
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
-- and
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
-- described by this structure include only operations and memory accesses
-- specified by @dstStageMask@ and @dstAccessMask@.
--
-- == Valid Usage
--
-- -   #VUID-VkMemoryBarrier2KHR-srcStageMask-03929# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcStageMask-03930# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR' or
--     'PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcStageMask-03931# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcStageMask-03932# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcStageMask-03933# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcStageMask-03934# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_MESH_SHADER_BIT_NV'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcStageMask-03935# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcStageMask-04956# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcStageMask-04957# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subpassShading subpass shading>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcStageMask-04995# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocation mask image>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03900# If @srcAccessMask@
--     includes 'ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03901# If @srcAccessMask@
--     includes 'ACCESS_2_INDEX_READ_BIT_KHR', @srcStageMask@ /must/
--     include 'PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03902# If @srcAccessMask@
--     includes 'ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03903# If @srcAccessMask@
--     includes 'ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR',
--     'PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03904# If @srcAccessMask@
--     includes 'ACCESS_2_UNIFORM_READ_BIT_KHR', @srcStageMask@ /must/
--     include 'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03905# If @srcAccessMask@
--     includes 'ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03906# If @srcAccessMask@
--     includes 'ACCESS_2_SHADER_STORAGE_READ_BIT_KHR', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03907# If @srcAccessMask@
--     includes 'ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03908# If @srcAccessMask@
--     includes 'ACCESS_2_SHADER_READ_BIT_KHR', @srcStageMask@ /must/
--     include 'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR', or one of
--     the @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03909# If @srcAccessMask@
--     includes 'ACCESS_2_SHADER_WRITE_BIT_KHR', @srcStageMask@ /must/
--     include 'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03910# If @srcAccessMask@
--     includes 'ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR'
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03911# If @srcAccessMask@
--     includes 'ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR'
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03912# If @srcAccessMask@
--     includes 'ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03913# If @srcAccessMask@
--     includes 'ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03914# If @srcAccessMask@
--     includes 'ACCESS_2_TRANSFER_READ_BIT_KHR', @srcStageMask@ /must/
--     include 'PIPELINE_STAGE_2_COPY_BIT_KHR',
--     'PIPELINE_STAGE_2_BLIT_BIT_KHR', 'PIPELINE_STAGE_2_RESOLVE_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03915# If @srcAccessMask@
--     includes 'ACCESS_2_TRANSFER_WRITE_BIT_KHR', @srcStageMask@ /must/
--     include 'PIPELINE_STAGE_2_COPY_BIT_KHR',
--     'PIPELINE_STAGE_2_BLIT_BIT_KHR', 'PIPELINE_STAGE_2_RESOLVE_BIT_KHR',
--     'PIPELINE_STAGE_2_CLEAR_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03916# If @srcAccessMask@
--     includes 'ACCESS_2_HOST_READ_BIT_KHR', @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_HOST_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03917# If @srcAccessMask@
--     includes 'ACCESS_2_HOST_WRITE_BIT_KHR', @srcStageMask@ /must/
--     include 'PIPELINE_STAGE_2_HOST_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03918# If @srcAccessMask@
--     includes 'ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03919# If @srcAccessMask@
--     includes 'ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03920# If @srcAccessMask@
--     includes 'ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-04747# If @srcAccessMask@
--     includes 'ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR',
--     'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03922# If @srcAccessMask@
--     includes 'ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03923# If @srcAccessMask@
--     includes 'ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-04994# If @srcAccessMask@
--     includes 'ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03924# If @srcAccessMask@
--     includes 'ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV' or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03925# If @srcAccessMask@
--     includes 'ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV' or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03926# If @srcAccessMask@
--     includes 'ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR'
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03927# If @srcAccessMask@
--     includes 'ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-03928# If @srcAccessMask@
--     includes 'ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR' or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-06256# If
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayQuery rayQuery>
--     is not enabled and @srcAccessMask@ includes
--     'ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR', @srcStageMask@
--     /must/ not include any of the @VK_PIPELINE_STAGE_*_SHADER_BIT@
--     stages except 'PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstStageMask-03929# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstStageMask-03930# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR' or
--     'PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstStageMask-03931# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstStageMask-03932# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstStageMask-03933# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstStageMask-03934# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_MESH_SHADER_BIT_NV'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstStageMask-03935# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstStageMask-04956# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstStageMask-04957# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subpassShading subpass shading>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstStageMask-04995# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocation mask image>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03900# If @dstAccessMask@
--     includes 'ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03901# If @dstAccessMask@
--     includes 'ACCESS_2_INDEX_READ_BIT_KHR', @dstStageMask@ /must/
--     include 'PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03902# If @dstAccessMask@
--     includes 'ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03903# If @dstAccessMask@
--     includes 'ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR',
--     'PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03904# If @dstAccessMask@
--     includes 'ACCESS_2_UNIFORM_READ_BIT_KHR', @dstStageMask@ /must/
--     include 'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03905# If @dstAccessMask@
--     includes 'ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03906# If @dstAccessMask@
--     includes 'ACCESS_2_SHADER_STORAGE_READ_BIT_KHR', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03907# If @dstAccessMask@
--     includes 'ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03908# If @dstAccessMask@
--     includes 'ACCESS_2_SHADER_READ_BIT_KHR', @dstStageMask@ /must/
--     include 'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR', or one of
--     the @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03909# If @dstAccessMask@
--     includes 'ACCESS_2_SHADER_WRITE_BIT_KHR', @dstStageMask@ /must/
--     include 'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03910# If @dstAccessMask@
--     includes 'ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR'
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03911# If @dstAccessMask@
--     includes 'ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR'
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03912# If @dstAccessMask@
--     includes 'ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03913# If @dstAccessMask@
--     includes 'ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03914# If @dstAccessMask@
--     includes 'ACCESS_2_TRANSFER_READ_BIT_KHR', @dstStageMask@ /must/
--     include 'PIPELINE_STAGE_2_COPY_BIT_KHR',
--     'PIPELINE_STAGE_2_BLIT_BIT_KHR', 'PIPELINE_STAGE_2_RESOLVE_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03915# If @dstAccessMask@
--     includes 'ACCESS_2_TRANSFER_WRITE_BIT_KHR', @dstStageMask@ /must/
--     include 'PIPELINE_STAGE_2_COPY_BIT_KHR',
--     'PIPELINE_STAGE_2_BLIT_BIT_KHR', 'PIPELINE_STAGE_2_RESOLVE_BIT_KHR',
--     'PIPELINE_STAGE_2_CLEAR_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03916# If @dstAccessMask@
--     includes 'ACCESS_2_HOST_READ_BIT_KHR', @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_HOST_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03917# If @dstAccessMask@
--     includes 'ACCESS_2_HOST_WRITE_BIT_KHR', @dstStageMask@ /must/
--     include 'PIPELINE_STAGE_2_HOST_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03918# If @dstAccessMask@
--     includes 'ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03919# If @dstAccessMask@
--     includes 'ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03920# If @dstAccessMask@
--     includes 'ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-04747# If @dstAccessMask@
--     includes 'ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR',
--     'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03922# If @dstAccessMask@
--     includes 'ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03923# If @dstAccessMask@
--     includes 'ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-04994# If @dstAccessMask@
--     includes 'ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03924# If @dstAccessMask@
--     includes 'ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV' or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03925# If @dstAccessMask@
--     includes 'ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV' or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03926# If @dstAccessMask@
--     includes 'ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR'
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03927# If @dstAccessMask@
--     includes 'ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-03928# If @dstAccessMask@
--     includes 'ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR' or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-06256# If
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayQuery rayQuery>
--     is not enabled and @dstAccessMask@ includes
--     'ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR', @dstStageMask@
--     /must/ not include any of the @VK_PIPELINE_STAGE_*_SHADER_BIT@
--     stages except 'PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkMemoryBarrier2KHR-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR'
--
-- -   #VUID-VkMemoryBarrier2KHR-srcStageMask-parameter# @srcStageMask@
--     /must/ be a valid combination of 'PipelineStageFlagBits2KHR' values
--
-- -   #VUID-VkMemoryBarrier2KHR-srcAccessMask-parameter# @srcAccessMask@
--     /must/ be a valid combination of 'AccessFlagBits2KHR' values
--
-- -   #VUID-VkMemoryBarrier2KHR-dstStageMask-parameter# @dstStageMask@
--     /must/ be a valid combination of 'PipelineStageFlagBits2KHR' values
--
-- -   #VUID-VkMemoryBarrier2KHR-dstAccessMask-parameter# @dstAccessMask@
--     /must/ be a valid combination of 'AccessFlagBits2KHR' values
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>,
-- 'AccessFlags2KHR', 'DependencyInfoKHR', 'PipelineStageFlags2KHR',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data MemoryBarrier2KHR = MemoryBarrier2KHR
  { -- | @srcStageMask@ is a 'PipelineStageFlags2KHR' mask of pipeline stages to
    -- be included in the
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes first synchronization scope>.
    MemoryBarrier2KHR -> "stageMask" ::: PipelineStageFlags2KHR
srcStageMask :: PipelineStageFlags2KHR
  , -- | @srcAccessMask@ is a 'AccessFlags2KHR' mask of access flags to be
    -- included in the
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes first access scope>.
    MemoryBarrier2KHR -> AccessFlagBits2KHR
srcAccessMask :: AccessFlags2KHR
  , -- | @dstStageMask@ is a 'PipelineStageFlags2KHR' mask of pipeline stages to
    -- be included in the
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes second synchronization scope>.
    MemoryBarrier2KHR -> "stageMask" ::: PipelineStageFlags2KHR
dstStageMask :: PipelineStageFlags2KHR
  , -- | @dstAccessMask@ is a 'AccessFlags2KHR' mask of access flags to be
    -- included in the
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes second access scope>.
    MemoryBarrier2KHR -> AccessFlagBits2KHR
dstAccessMask :: AccessFlags2KHR
  }
  deriving (Typeable, MemoryBarrier2KHR -> MemoryBarrier2KHR -> Bool
(MemoryBarrier2KHR -> MemoryBarrier2KHR -> Bool)
-> (MemoryBarrier2KHR -> MemoryBarrier2KHR -> Bool)
-> Eq MemoryBarrier2KHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MemoryBarrier2KHR -> MemoryBarrier2KHR -> Bool
$c/= :: MemoryBarrier2KHR -> MemoryBarrier2KHR -> Bool
== :: MemoryBarrier2KHR -> MemoryBarrier2KHR -> Bool
$c== :: MemoryBarrier2KHR -> MemoryBarrier2KHR -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (MemoryBarrier2KHR)
#endif
deriving instance Show MemoryBarrier2KHR

instance ToCStruct MemoryBarrier2KHR where
  withCStruct :: MemoryBarrier2KHR -> (Ptr MemoryBarrier2KHR -> IO b) -> IO b
withCStruct MemoryBarrier2KHR
x Ptr MemoryBarrier2KHR -> IO b
f = Int -> (Ptr MemoryBarrier2KHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
48 ((Ptr MemoryBarrier2KHR -> IO b) -> IO b)
-> (Ptr MemoryBarrier2KHR -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr MemoryBarrier2KHR
p -> Ptr MemoryBarrier2KHR -> MemoryBarrier2KHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr MemoryBarrier2KHR
p MemoryBarrier2KHR
x (Ptr MemoryBarrier2KHR -> IO b
f Ptr MemoryBarrier2KHR
p)
  pokeCStruct :: Ptr MemoryBarrier2KHR -> MemoryBarrier2KHR -> IO b -> IO b
pokeCStruct Ptr MemoryBarrier2KHR
p MemoryBarrier2KHR{"stageMask" ::: PipelineStageFlags2KHR
AccessFlagBits2KHR
dstAccessMask :: AccessFlagBits2KHR
dstStageMask :: "stageMask" ::: PipelineStageFlags2KHR
srcAccessMask :: AccessFlagBits2KHR
srcStageMask :: "stageMask" ::: PipelineStageFlags2KHR
$sel:dstAccessMask:MemoryBarrier2KHR :: MemoryBarrier2KHR -> AccessFlagBits2KHR
$sel:dstStageMask:MemoryBarrier2KHR :: MemoryBarrier2KHR -> "stageMask" ::: PipelineStageFlags2KHR
$sel:srcAccessMask:MemoryBarrier2KHR :: MemoryBarrier2KHR -> AccessFlagBits2KHR
$sel:srcStageMask:MemoryBarrier2KHR :: MemoryBarrier2KHR -> "stageMask" ::: PipelineStageFlags2KHR
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MemoryBarrier2KHR
p Ptr MemoryBarrier2KHR -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MemoryBarrier2KHR
p Ptr MemoryBarrier2KHR -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MemoryBarrier2KHR
p Ptr MemoryBarrier2KHR
-> Int -> Ptr ("stageMask" ::: PipelineStageFlags2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineStageFlags2KHR)) ("stageMask" ::: PipelineStageFlags2KHR
srcStageMask)
    Ptr AccessFlagBits2KHR -> AccessFlagBits2KHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MemoryBarrier2KHR
p Ptr MemoryBarrier2KHR -> Int -> Ptr AccessFlagBits2KHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr AccessFlags2KHR)) (AccessFlagBits2KHR
srcAccessMask)
    Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MemoryBarrier2KHR
p Ptr MemoryBarrier2KHR
-> Int -> Ptr ("stageMask" ::: PipelineStageFlags2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr PipelineStageFlags2KHR)) ("stageMask" ::: PipelineStageFlags2KHR
dstStageMask)
    Ptr AccessFlagBits2KHR -> AccessFlagBits2KHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MemoryBarrier2KHR
p Ptr MemoryBarrier2KHR -> Int -> Ptr AccessFlagBits2KHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr AccessFlags2KHR)) (AccessFlagBits2KHR
dstAccessMask)
    IO b
f
  cStructSize :: Int
cStructSize = Int
48
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr MemoryBarrier2KHR -> IO b -> IO b
pokeZeroCStruct Ptr MemoryBarrier2KHR
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MemoryBarrier2KHR
p Ptr MemoryBarrier2KHR -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr MemoryBarrier2KHR
p Ptr MemoryBarrier2KHR -> 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 MemoryBarrier2KHR where
  peekCStruct :: Ptr MemoryBarrier2KHR -> IO MemoryBarrier2KHR
peekCStruct Ptr MemoryBarrier2KHR
p = do
    "stageMask" ::: PipelineStageFlags2KHR
srcStageMask <- Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> IO ("stageMask" ::: PipelineStageFlags2KHR)
forall a. Storable a => Ptr a -> IO a
peek @PipelineStageFlags2KHR ((Ptr MemoryBarrier2KHR
p Ptr MemoryBarrier2KHR
-> Int -> Ptr ("stageMask" ::: PipelineStageFlags2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineStageFlags2KHR))
    AccessFlagBits2KHR
srcAccessMask <- Ptr AccessFlagBits2KHR -> IO AccessFlagBits2KHR
forall a. Storable a => Ptr a -> IO a
peek @AccessFlags2KHR ((Ptr MemoryBarrier2KHR
p Ptr MemoryBarrier2KHR -> Int -> Ptr AccessFlagBits2KHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr AccessFlags2KHR))
    "stageMask" ::: PipelineStageFlags2KHR
dstStageMask <- Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> IO ("stageMask" ::: PipelineStageFlags2KHR)
forall a. Storable a => Ptr a -> IO a
peek @PipelineStageFlags2KHR ((Ptr MemoryBarrier2KHR
p Ptr MemoryBarrier2KHR
-> Int -> Ptr ("stageMask" ::: PipelineStageFlags2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr PipelineStageFlags2KHR))
    AccessFlagBits2KHR
dstAccessMask <- Ptr AccessFlagBits2KHR -> IO AccessFlagBits2KHR
forall a. Storable a => Ptr a -> IO a
peek @AccessFlags2KHR ((Ptr MemoryBarrier2KHR
p Ptr MemoryBarrier2KHR -> Int -> Ptr AccessFlagBits2KHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr AccessFlags2KHR))
    MemoryBarrier2KHR -> IO MemoryBarrier2KHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (MemoryBarrier2KHR -> IO MemoryBarrier2KHR)
-> MemoryBarrier2KHR -> IO MemoryBarrier2KHR
forall a b. (a -> b) -> a -> b
$ ("stageMask" ::: PipelineStageFlags2KHR)
-> AccessFlagBits2KHR
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> AccessFlagBits2KHR
-> MemoryBarrier2KHR
MemoryBarrier2KHR
             "stageMask" ::: PipelineStageFlags2KHR
srcStageMask AccessFlagBits2KHR
srcAccessMask "stageMask" ::: PipelineStageFlags2KHR
dstStageMask AccessFlagBits2KHR
dstAccessMask

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

instance Zero MemoryBarrier2KHR where
  zero :: MemoryBarrier2KHR
zero = ("stageMask" ::: PipelineStageFlags2KHR)
-> AccessFlagBits2KHR
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> AccessFlagBits2KHR
-> MemoryBarrier2KHR
MemoryBarrier2KHR
           "stageMask" ::: PipelineStageFlags2KHR
forall a. Zero a => a
zero
           AccessFlagBits2KHR
forall a. Zero a => a
zero
           "stageMask" ::: PipelineStageFlags2KHR
forall a. Zero a => a
zero
           AccessFlagBits2KHR
forall a. Zero a => a
zero


-- | VkImageMemoryBarrier2KHR - Structure specifying an image memory barrier
--
-- = Description
--
-- This structure defines a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-memory memory dependency>
-- limited to an image subresource range, and /can/ define a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family transfer operation>
-- and
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>
-- for that subresource range.
--
-- The first
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
-- and
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
-- described by this structure include only operations and memory accesses
-- specified by @srcStageMask@ and @srcAccessMask@.
--
-- The second
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
-- and
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
-- described by this structure include only operations and memory accesses
-- specified by @dstStageMask@ and @dstAccessMask@.
--
-- Both
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scopes>
-- are limited to only memory accesses to @image@ in the subresource range
-- defined by @subresourceRange@.
--
-- If @image@ was created with
-- 'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE', and
-- @srcQueueFamilyIndex@ is not equal to @dstQueueFamilyIndex@, this memory
-- barrier defines a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family transfer operation>.
-- When executed on a queue in the family identified by
-- @srcQueueFamilyIndex@, this barrier defines a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers-release queue family release operation>
-- for the specified image subresource range, and the second
-- synchronization and access scopes do not synchronize operations on that
-- queue. When executed on a queue in the family identified by
-- @dstQueueFamilyIndex@, this barrier defines a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers-acquire queue family acquire operation>
-- for the specified image subresource range, and the first synchronization
-- and access scopes do not synchronize operations on that queue.
--
-- A
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family transfer operation>
-- is also defined if the values are not equal, and either is one of the
-- special queue family values reserved for external memory ownership
-- transfers, as described in
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers>.
-- A
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers-release queue family release operation>
-- is defined when @dstQueueFamilyIndex@ is one of those values, and a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers-acquire queue family acquire operation>
-- is defined when @srcQueueFamilyIndex@ is one of those values.
--
-- If @oldLayout@ is not equal to @newLayout@, then the memory barrier
-- defines an
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>
-- for the specified image subresource range. If this memory barrier
-- defines a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family transfer operation>,
-- the layout transition is only executed once between the queues.
--
-- Note
--
-- When the old and new layout are equal, the layout values are ignored -
-- data is preserved no matter what values are specified, or what layout
-- the image is currently in.
--
-- If @image@ has a multi-planar format and the image is /disjoint/, then
-- including
-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT' in the
-- @aspectMask@ member of @subresourceRange@ is equivalent to including
-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT', and
-- (for three-plane formats only)
-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'.
--
-- == Valid Usage
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcStageMask-03929# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcStageMask-03930# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR' or
--     'PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcStageMask-03931# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcStageMask-03932# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcStageMask-03933# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcStageMask-03934# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_MESH_SHADER_BIT_NV'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcStageMask-03935# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcStageMask-04956# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcStageMask-04957# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subpassShading subpass shading>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcStageMask-04995# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocation mask image>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03900# If
--     @srcAccessMask@ includes 'ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03901# If
--     @srcAccessMask@ includes 'ACCESS_2_INDEX_READ_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03902# If
--     @srcAccessMask@ includes 'ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03903# If
--     @srcAccessMask@ includes 'ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR',
--     'PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03904# If
--     @srcAccessMask@ includes 'ACCESS_2_UNIFORM_READ_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03905# If
--     @srcAccessMask@ includes 'ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03906# If
--     @srcAccessMask@ includes 'ACCESS_2_SHADER_STORAGE_READ_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03907# If
--     @srcAccessMask@ includes 'ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03908# If
--     @srcAccessMask@ includes 'ACCESS_2_SHADER_READ_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR', or one of
--     the @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03909# If
--     @srcAccessMask@ includes 'ACCESS_2_SHADER_WRITE_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03910# If
--     @srcAccessMask@ includes 'ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR'
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03911# If
--     @srcAccessMask@ includes 'ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR'
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03912# If
--     @srcAccessMask@ includes
--     'ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03913# If
--     @srcAccessMask@ includes
--     'ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03914# If
--     @srcAccessMask@ includes 'ACCESS_2_TRANSFER_READ_BIT_KHR',
--     @srcStageMask@ /must/ include 'PIPELINE_STAGE_2_COPY_BIT_KHR',
--     'PIPELINE_STAGE_2_BLIT_BIT_KHR', 'PIPELINE_STAGE_2_RESOLVE_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03915# If
--     @srcAccessMask@ includes 'ACCESS_2_TRANSFER_WRITE_BIT_KHR',
--     @srcStageMask@ /must/ include 'PIPELINE_STAGE_2_COPY_BIT_KHR',
--     'PIPELINE_STAGE_2_BLIT_BIT_KHR', 'PIPELINE_STAGE_2_RESOLVE_BIT_KHR',
--     'PIPELINE_STAGE_2_CLEAR_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03916# If
--     @srcAccessMask@ includes 'ACCESS_2_HOST_READ_BIT_KHR',
--     @srcStageMask@ /must/ include 'PIPELINE_STAGE_2_HOST_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03917# If
--     @srcAccessMask@ includes 'ACCESS_2_HOST_WRITE_BIT_KHR',
--     @srcStageMask@ /must/ include 'PIPELINE_STAGE_2_HOST_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03918# If
--     @srcAccessMask@ includes
--     'ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT', @srcStageMask@ /must/
--     include 'PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03919# If
--     @srcAccessMask@ includes
--     'ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT', @srcStageMask@ /must/
--     include 'PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03920# If
--     @srcAccessMask@ includes
--     'ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT', @srcStageMask@ /must/
--     include 'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-04747# If
--     @srcAccessMask@ includes
--     'ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR',
--     'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03922# If
--     @srcAccessMask@ includes
--     'ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03923# If
--     @srcAccessMask@ includes 'ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-04994# If
--     @srcAccessMask@ includes 'ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03924# If
--     @srcAccessMask@ includes 'ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV' or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03925# If
--     @srcAccessMask@ includes 'ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV' or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03926# If
--     @srcAccessMask@ includes
--     'ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR'
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03927# If
--     @srcAccessMask@ includes
--     'ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR', @srcStageMask@
--     /must/ include
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-03928# If
--     @srcAccessMask@ includes
--     'ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR', @srcStageMask@
--     /must/ include
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR' or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-06256# If
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayQuery rayQuery>
--     is not enabled and @srcAccessMask@ includes
--     'ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR', @srcStageMask@
--     /must/ not include any of the @VK_PIPELINE_STAGE_*_SHADER_BIT@
--     stages except 'PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstStageMask-03929# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstStageMask-03930# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR' or
--     'PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstStageMask-03931# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstStageMask-03932# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstStageMask-03933# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstStageMask-03934# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_MESH_SHADER_BIT_NV'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstStageMask-03935# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstStageMask-04956# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstStageMask-04957# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subpassShading subpass shading>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstStageMask-04995# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocation mask image>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03900# If
--     @dstAccessMask@ includes 'ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03901# If
--     @dstAccessMask@ includes 'ACCESS_2_INDEX_READ_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03902# If
--     @dstAccessMask@ includes 'ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03903# If
--     @dstAccessMask@ includes 'ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR',
--     'PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03904# If
--     @dstAccessMask@ includes 'ACCESS_2_UNIFORM_READ_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03905# If
--     @dstAccessMask@ includes 'ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03906# If
--     @dstAccessMask@ includes 'ACCESS_2_SHADER_STORAGE_READ_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03907# If
--     @dstAccessMask@ includes 'ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03908# If
--     @dstAccessMask@ includes 'ACCESS_2_SHADER_READ_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR', or one of
--     the @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03909# If
--     @dstAccessMask@ includes 'ACCESS_2_SHADER_WRITE_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03910# If
--     @dstAccessMask@ includes 'ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR'
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03911# If
--     @dstAccessMask@ includes 'ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR'
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03912# If
--     @dstAccessMask@ includes
--     'ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03913# If
--     @dstAccessMask@ includes
--     'ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03914# If
--     @dstAccessMask@ includes 'ACCESS_2_TRANSFER_READ_BIT_KHR',
--     @dstStageMask@ /must/ include 'PIPELINE_STAGE_2_COPY_BIT_KHR',
--     'PIPELINE_STAGE_2_BLIT_BIT_KHR', 'PIPELINE_STAGE_2_RESOLVE_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03915# If
--     @dstAccessMask@ includes 'ACCESS_2_TRANSFER_WRITE_BIT_KHR',
--     @dstStageMask@ /must/ include 'PIPELINE_STAGE_2_COPY_BIT_KHR',
--     'PIPELINE_STAGE_2_BLIT_BIT_KHR', 'PIPELINE_STAGE_2_RESOLVE_BIT_KHR',
--     'PIPELINE_STAGE_2_CLEAR_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03916# If
--     @dstAccessMask@ includes 'ACCESS_2_HOST_READ_BIT_KHR',
--     @dstStageMask@ /must/ include 'PIPELINE_STAGE_2_HOST_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03917# If
--     @dstAccessMask@ includes 'ACCESS_2_HOST_WRITE_BIT_KHR',
--     @dstStageMask@ /must/ include 'PIPELINE_STAGE_2_HOST_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03918# If
--     @dstAccessMask@ includes
--     'ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT', @dstStageMask@ /must/
--     include 'PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03919# If
--     @dstAccessMask@ includes
--     'ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT', @dstStageMask@ /must/
--     include 'PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03920# If
--     @dstAccessMask@ includes
--     'ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT', @dstStageMask@ /must/
--     include 'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-04747# If
--     @dstAccessMask@ includes
--     'ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR',
--     'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03922# If
--     @dstAccessMask@ includes
--     'ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03923# If
--     @dstAccessMask@ includes 'ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-04994# If
--     @dstAccessMask@ includes 'ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03924# If
--     @dstAccessMask@ includes 'ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV' or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03925# If
--     @dstAccessMask@ includes 'ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV' or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03926# If
--     @dstAccessMask@ includes
--     'ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR'
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03927# If
--     @dstAccessMask@ includes
--     'ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR', @dstStageMask@
--     /must/ include
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-03928# If
--     @dstAccessMask@ includes
--     'ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR', @dstStageMask@
--     /must/ include
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR' or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-06256# If
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayQuery rayQuery>
--     is not enabled and @dstAccessMask@ includes
--     'ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR', @dstStageMask@
--     /must/ not include any of the @VK_PIPELINE_STAGE_*_SHADER_BIT@
--     stages except 'PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-subresourceRange-01486#
--     @subresourceRange.baseMipLevel@ /must/ be less than the @mipLevels@
--     specified in 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
--     created
--
-- -   #VUID-VkImageMemoryBarrier2KHR-subresourceRange-01724# If
--     @subresourceRange.levelCount@ is not
--     'Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS',
--     @subresourceRange.baseMipLevel@ + @subresourceRange.levelCount@
--     /must/ be less than or equal to the @mipLevels@ specified in
--     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created
--
-- -   #VUID-VkImageMemoryBarrier2KHR-subresourceRange-01488#
--     @subresourceRange.baseArrayLayer@ /must/ be less than the
--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'
--     when @image@ was created
--
-- -   #VUID-VkImageMemoryBarrier2KHR-subresourceRange-01725# If
--     @subresourceRange.layerCount@ is not
--     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS',
--     @subresourceRange.baseArrayLayer@ + @subresourceRange.layerCount@
--     /must/ be less than or equal to the @arrayLayers@ specified in
--     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created
--
-- -   #VUID-VkImageMemoryBarrier2KHR-image-01932# If @image@ is non-sparse
--     then it /must/ be bound completely and contiguously to a single
--     'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-VkImageMemoryBarrier2KHR-oldLayout-01208# If
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>
--     or @oldLayout@ and @newLayout@ define an
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
--     and @oldLayout@ or @newLayout@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'
--     then @image@ /must/ have been created with
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-oldLayout-01209# If
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>
--     or @oldLayout@ and @newLayout@ define an
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
--     and @oldLayout@ or @newLayout@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL'
--     then @image@ /must/ have been created with
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-oldLayout-01210# If
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>
--     or @oldLayout@ and @newLayout@ define an
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
--     and @oldLayout@ or @newLayout@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'
--     then @image@ /must/ have been created with
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-oldLayout-01211# If
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>
--     or @oldLayout@ and @newLayout@ define an
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
--     and @oldLayout@ or @newLayout@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL'
--     then @image@ /must/ have been created with
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT' or
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-oldLayout-01212# If
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>
--     or @oldLayout@ and @newLayout@ define an
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
--     and @oldLayout@ or @newLayout@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'
--     then @image@ /must/ have been created with
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-oldLayout-01213# If
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>
--     or @oldLayout@ and @newLayout@ define an
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
--     and @oldLayout@ or @newLayout@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'
--     then @image@ /must/ have been created with
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-oldLayout-01197# If
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>
--     or @oldLayout@ and @newLayout@ define an
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
--     @oldLayout@ /must/ be
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or the
--     current layout of the image subresources affected by the barrier
--
-- -   #VUID-VkImageMemoryBarrier2KHR-newLayout-01198# If
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>
--     or @oldLayout@ and @newLayout@ define an
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
--     @newLayout@ /must/ not be
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-oldLayout-01658# If
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>
--     or @oldLayout@ and @newLayout@ define an
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
--     and @oldLayout@ or @newLayout@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'
--     then @image@ /must/ have been created with
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-oldLayout-01659# If
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>
--     or @oldLayout@ and @newLayout@ define an
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
--     and @oldLayout@ or @newLayout@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL'
--     then @image@ /must/ have been created with
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcQueueFamilyIndex-04065# If
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>
--     or @oldLayout@ and @newLayout@ define an
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
--     and @oldLayout@ or @newLayout@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL'
--     then @image@ /must/ have been created with at least one of
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT',
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT', or
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcQueueFamilyIndex-04066# If
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>
--     or @oldLayout@ and @newLayout@ define an
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
--     and @oldLayout@ or @newLayout@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL'
--     then @image@ /must/ have been created with
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
--     set
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcQueueFamilyIndex-04067# If
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>
--     or @oldLayout@ and @newLayout@ define an
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
--     and @oldLayout@ or @newLayout@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'
--     then @image@ /must/ have been created with at least one of
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT',
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT', or
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcQueueFamilyIndex-04068# If
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>
--     or @oldLayout@ and @newLayout@ define an
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
--     and @oldLayout@ or @newLayout@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL'
--     then @image@ /must/ have been created with
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
--     set
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcQueueFamilyIndex-03938# If
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>
--     or @oldLayout@ and @newLayout@ define an
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
--     and @oldLayout@ or @newLayout@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR',
--     @image@ /must/ have been created with
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'
--     or
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcQueueFamilyIndex-03939# If
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>
--     or @oldLayout@ and @newLayout@ define an
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
--     and @oldLayout@ or @newLayout@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR',
--     @image@ /must/ have been created with at least one of
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT',
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT', or
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-oldLayout-02088# If
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>
--     or @oldLayout@ and @newLayout@ define an
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
--     and @oldLayout@ or @newLayout@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR'
--     then @image@ /must/ have been created with
--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'
--     set
--
-- -   #VUID-VkImageMemoryBarrier2KHR-image-01671# If @image@ has a
--     single-plane color format or is not /disjoint/, then the
--     @aspectMask@ member of @subresourceRange@ /must/ be
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-image-01672# If @image@ has a
--     multi-planar format and the image is /disjoint/, then the
--     @aspectMask@ member of @subresourceRange@ /must/ include either at
--     least one of
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
--     and
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT';
--     or /must/ include
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-image-01673# If @image@ has a
--     multi-planar format with only two planes, then the @aspectMask@
--     member of @subresourceRange@ /must/ not include
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-image-03319# If @image@ has a
--     depth\/stencil format with both depth and stencil and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
--     feature is enabled, then the @aspectMask@ member of
--     @subresourceRange@ /must/ include either or both
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' and
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-image-03320# If @image@ has a
--     depth\/stencil format with both depth and stencil and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts>
--     feature is not enabled, then the @aspectMask@ member of
--     @subresourceRange@ /must/ include both
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' and
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcQueueFamilyIndex-04070# If
--     @srcQueueFamilyIndex@ is not equal to @dstQueueFamilyIndex@, at
--     least one /must/ not be a special queue family reserved for external
--     memory ownership transfers, as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers ???>
--
-- -   #VUID-VkImageMemoryBarrier2KHR-image-04071# If @image@ was created
--     with a sharing mode of
--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ are not equal, and
--     one of @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ is one of the
--     special queue family values reserved for external memory transfers,
--     the other /must/ be
--     'Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-image-04072# If @image@ was created
--     with a sharing mode of
--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE', and
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ are not equal,
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ /must/ both be valid
--     queue families, or one of the special queue family values reserved
--     for external memory transfers, as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers ???>
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcStageMask-03854# If either
--     @srcStageMask@ or @dstStageMask@ includes
--     'PIPELINE_STAGE_2_HOST_BIT_KHR', @srcQueueFamilyIndex@ and
--     @dstQueueFamilyIndex@ /must/ be equal
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcStageMask-03855# If @srcStageMask@
--     includes 'PIPELINE_STAGE_2_HOST_BIT_KHR', and @srcQueueFamilyIndex@
--     and @dstQueueFamilyIndex@ define a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>
--     or @oldLayout@ and @newLayout@ define an
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,
--     @oldLayout@ /must/ be one of
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED',
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED', or
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkImageMemoryBarrier2KHR-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-pNext-pNext# @pNext@ /must/ be @NULL@
--     or a pointer to a valid instance of
--     'Vulkan.Extensions.VK_EXT_sample_locations.SampleLocationsInfoEXT'
--
-- -   #VUID-VkImageMemoryBarrier2KHR-sType-unique# The @sType@ value of
--     each struct in the @pNext@ chain /must/ be unique
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcStageMask-parameter#
--     @srcStageMask@ /must/ be a valid combination of
--     'PipelineStageFlagBits2KHR' values
--
-- -   #VUID-VkImageMemoryBarrier2KHR-srcAccessMask-parameter#
--     @srcAccessMask@ /must/ be a valid combination of
--     'AccessFlagBits2KHR' values
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstStageMask-parameter#
--     @dstStageMask@ /must/ be a valid combination of
--     'PipelineStageFlagBits2KHR' values
--
-- -   #VUID-VkImageMemoryBarrier2KHR-dstAccessMask-parameter#
--     @dstAccessMask@ /must/ be a valid combination of
--     'AccessFlagBits2KHR' values
--
-- -   #VUID-VkImageMemoryBarrier2KHR-oldLayout-parameter# @oldLayout@
--     /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'
--     value
--
-- -   #VUID-VkImageMemoryBarrier2KHR-newLayout-parameter# @newLayout@
--     /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'
--     value
--
-- -   #VUID-VkImageMemoryBarrier2KHR-image-parameter# @image@ /must/ be a
--     valid 'Vulkan.Core10.Handles.Image' handle
--
-- -   #VUID-VkImageMemoryBarrier2KHR-subresourceRange-parameter#
--     @subresourceRange@ /must/ be a valid
--     'Vulkan.Core10.ImageView.ImageSubresourceRange' structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>,
-- 'AccessFlags2KHR', 'DependencyInfoKHR', 'Vulkan.Core10.Handles.Image',
-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',
-- 'Vulkan.Core10.ImageView.ImageSubresourceRange',
-- 'PipelineStageFlags2KHR',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data ImageMemoryBarrier2KHR (es :: [Type]) = ImageMemoryBarrier2KHR
  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
    ImageMemoryBarrier2KHR es -> Chain es
next :: Chain es
  , -- | @srcStageMask@ is a 'PipelineStageFlags2KHR' mask of pipeline stages to
    -- be included in the
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes first synchronization scope>.
    ImageMemoryBarrier2KHR es -> "stageMask" ::: PipelineStageFlags2KHR
srcStageMask :: PipelineStageFlags2KHR
  , -- | @srcAccessMask@ is a 'AccessFlags2KHR' mask of access flags to be
    -- included in the
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes first access scope>.
    ImageMemoryBarrier2KHR es -> AccessFlagBits2KHR
srcAccessMask :: AccessFlags2KHR
  , -- | @dstStageMask@ is a 'PipelineStageFlags2KHR' mask of pipeline stages to
    -- be included in the
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes second synchronization scope>.
    ImageMemoryBarrier2KHR es -> "stageMask" ::: PipelineStageFlags2KHR
dstStageMask :: PipelineStageFlags2KHR
  , -- | @dstAccessMask@ is a 'AccessFlags2KHR' mask of access flags to be
    -- included in the
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes second access scope>.
    ImageMemoryBarrier2KHR es -> AccessFlagBits2KHR
dstAccessMask :: AccessFlags2KHR
  , -- | @oldLayout@ is the old layout in an
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>.
    ImageMemoryBarrier2KHR es -> ImageLayout
oldLayout :: ImageLayout
  , -- | @newLayout@ is the new layout in an
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>.
    ImageMemoryBarrier2KHR es -> ImageLayout
newLayout :: ImageLayout
  , -- | @srcQueueFamilyIndex@ is the source queue family for a
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>.
    ImageMemoryBarrier2KHR es -> Word32
srcQueueFamilyIndex :: Word32
  , -- | @dstQueueFamilyIndex@ is the destination queue family for a
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>.
    ImageMemoryBarrier2KHR es -> Word32
dstQueueFamilyIndex :: Word32
  , -- | @image@ is a handle to the image affected by this barrier.
    ImageMemoryBarrier2KHR es -> Image
image :: Image
  , -- | @subresourceRange@ describes the
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views image subresource range>
    -- within @image@ that is affected by this barrier.
    ImageMemoryBarrier2KHR es -> ImageSubresourceRange
subresourceRange :: ImageSubresourceRange
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (ImageMemoryBarrier2KHR (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (ImageMemoryBarrier2KHR es)

instance Extensible ImageMemoryBarrier2KHR where
  extensibleTypeName :: String
extensibleTypeName = String
"ImageMemoryBarrier2KHR"
  setNext :: ImageMemoryBarrier2KHR ds -> Chain es -> ImageMemoryBarrier2KHR es
setNext ImageMemoryBarrier2KHR{Word32
Chain ds
ImageLayout
Image
ImageSubresourceRange
"stageMask" ::: PipelineStageFlags2KHR
AccessFlagBits2KHR
subresourceRange :: ImageSubresourceRange
image :: Image
dstQueueFamilyIndex :: Word32
srcQueueFamilyIndex :: Word32
newLayout :: ImageLayout
oldLayout :: ImageLayout
dstAccessMask :: AccessFlagBits2KHR
dstStageMask :: "stageMask" ::: PipelineStageFlags2KHR
srcAccessMask :: AccessFlagBits2KHR
srcStageMask :: "stageMask" ::: PipelineStageFlags2KHR
next :: Chain ds
$sel:subresourceRange:ImageMemoryBarrier2KHR :: forall (es :: [*]).
ImageMemoryBarrier2KHR es -> ImageSubresourceRange
$sel:image:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> Image
$sel:dstQueueFamilyIndex:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> Word32
$sel:srcQueueFamilyIndex:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> Word32
$sel:newLayout:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> ImageLayout
$sel:oldLayout:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> ImageLayout
$sel:dstAccessMask:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> AccessFlagBits2KHR
$sel:dstStageMask:ImageMemoryBarrier2KHR :: forall (es :: [*]).
ImageMemoryBarrier2KHR es -> "stageMask" ::: PipelineStageFlags2KHR
$sel:srcAccessMask:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> AccessFlagBits2KHR
$sel:srcStageMask:ImageMemoryBarrier2KHR :: forall (es :: [*]).
ImageMemoryBarrier2KHR es -> "stageMask" ::: PipelineStageFlags2KHR
$sel:next:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> Chain es
..} Chain es
next' = ImageMemoryBarrier2KHR :: forall (es :: [*]).
Chain es
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> AccessFlagBits2KHR
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> AccessFlagBits2KHR
-> ImageLayout
-> ImageLayout
-> Word32
-> Word32
-> Image
-> ImageSubresourceRange
-> ImageMemoryBarrier2KHR es
ImageMemoryBarrier2KHR{$sel:next:ImageMemoryBarrier2KHR :: Chain es
next = Chain es
next', Word32
ImageLayout
Image
ImageSubresourceRange
"stageMask" ::: PipelineStageFlags2KHR
AccessFlagBits2KHR
subresourceRange :: ImageSubresourceRange
image :: Image
dstQueueFamilyIndex :: Word32
srcQueueFamilyIndex :: Word32
newLayout :: ImageLayout
oldLayout :: ImageLayout
dstAccessMask :: AccessFlagBits2KHR
dstStageMask :: "stageMask" ::: PipelineStageFlags2KHR
srcAccessMask :: AccessFlagBits2KHR
srcStageMask :: "stageMask" ::: PipelineStageFlags2KHR
$sel:subresourceRange:ImageMemoryBarrier2KHR :: ImageSubresourceRange
$sel:image:ImageMemoryBarrier2KHR :: Image
$sel:dstQueueFamilyIndex:ImageMemoryBarrier2KHR :: Word32
$sel:srcQueueFamilyIndex:ImageMemoryBarrier2KHR :: Word32
$sel:newLayout:ImageMemoryBarrier2KHR :: ImageLayout
$sel:oldLayout:ImageMemoryBarrier2KHR :: ImageLayout
$sel:dstAccessMask:ImageMemoryBarrier2KHR :: AccessFlagBits2KHR
$sel:dstStageMask:ImageMemoryBarrier2KHR :: "stageMask" ::: PipelineStageFlags2KHR
$sel:srcAccessMask:ImageMemoryBarrier2KHR :: AccessFlagBits2KHR
$sel:srcStageMask:ImageMemoryBarrier2KHR :: "stageMask" ::: PipelineStageFlags2KHR
..}
  getNext :: ImageMemoryBarrier2KHR es -> Chain es
getNext ImageMemoryBarrier2KHR{Word32
Chain es
ImageLayout
Image
ImageSubresourceRange
"stageMask" ::: PipelineStageFlags2KHR
AccessFlagBits2KHR
subresourceRange :: ImageSubresourceRange
image :: Image
dstQueueFamilyIndex :: Word32
srcQueueFamilyIndex :: Word32
newLayout :: ImageLayout
oldLayout :: ImageLayout
dstAccessMask :: AccessFlagBits2KHR
dstStageMask :: "stageMask" ::: PipelineStageFlags2KHR
srcAccessMask :: AccessFlagBits2KHR
srcStageMask :: "stageMask" ::: PipelineStageFlags2KHR
next :: Chain es
$sel:subresourceRange:ImageMemoryBarrier2KHR :: forall (es :: [*]).
ImageMemoryBarrier2KHR es -> ImageSubresourceRange
$sel:image:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> Image
$sel:dstQueueFamilyIndex:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> Word32
$sel:srcQueueFamilyIndex:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> Word32
$sel:newLayout:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> ImageLayout
$sel:oldLayout:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> ImageLayout
$sel:dstAccessMask:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> AccessFlagBits2KHR
$sel:dstStageMask:ImageMemoryBarrier2KHR :: forall (es :: [*]).
ImageMemoryBarrier2KHR es -> "stageMask" ::: PipelineStageFlags2KHR
$sel:srcAccessMask:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> AccessFlagBits2KHR
$sel:srcStageMask:ImageMemoryBarrier2KHR :: forall (es :: [*]).
ImageMemoryBarrier2KHR es -> "stageMask" ::: PipelineStageFlags2KHR
$sel:next:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> Chain es
..} = Chain es
next
  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ImageMemoryBarrier2KHR e => b) -> Maybe b
  extends :: proxy e -> (Extends ImageMemoryBarrier2KHR e => b) -> Maybe b
extends proxy e
_ Extends ImageMemoryBarrier2KHR e => b
f
    | Just e :~: SampleLocationsInfoEXT
Refl <- (Typeable e, Typeable SampleLocationsInfoEXT) =>
Maybe (e :~: SampleLocationsInfoEXT)
forall k (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
eqT @e @SampleLocationsInfoEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends ImageMemoryBarrier2KHR e => b
f
    | Bool
otherwise = Maybe b
forall a. Maybe a
Nothing

instance (Extendss ImageMemoryBarrier2KHR es, PokeChain es) => ToCStruct (ImageMemoryBarrier2KHR es) where
  withCStruct :: ImageMemoryBarrier2KHR es
-> (Ptr (ImageMemoryBarrier2KHR es) -> IO b) -> IO b
withCStruct ImageMemoryBarrier2KHR es
x Ptr (ImageMemoryBarrier2KHR es) -> IO b
f = Int -> (Ptr (ImageMemoryBarrier2KHR es) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
96 ((Ptr (ImageMemoryBarrier2KHR es) -> IO b) -> IO b)
-> (Ptr (ImageMemoryBarrier2KHR es) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (ImageMemoryBarrier2KHR es)
p -> Ptr (ImageMemoryBarrier2KHR es)
-> ImageMemoryBarrier2KHR es -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (ImageMemoryBarrier2KHR es)
p ImageMemoryBarrier2KHR es
x (Ptr (ImageMemoryBarrier2KHR es) -> IO b
f Ptr (ImageMemoryBarrier2KHR es)
p)
  pokeCStruct :: Ptr (ImageMemoryBarrier2KHR es)
-> ImageMemoryBarrier2KHR es -> IO b -> IO b
pokeCStruct Ptr (ImageMemoryBarrier2KHR es)
p ImageMemoryBarrier2KHR{Word32
Chain es
ImageLayout
Image
ImageSubresourceRange
"stageMask" ::: PipelineStageFlags2KHR
AccessFlagBits2KHR
subresourceRange :: ImageSubresourceRange
image :: Image
dstQueueFamilyIndex :: Word32
srcQueueFamilyIndex :: Word32
newLayout :: ImageLayout
oldLayout :: ImageLayout
dstAccessMask :: AccessFlagBits2KHR
dstStageMask :: "stageMask" ::: PipelineStageFlags2KHR
srcAccessMask :: AccessFlagBits2KHR
srcStageMask :: "stageMask" ::: PipelineStageFlags2KHR
next :: Chain es
$sel:subresourceRange:ImageMemoryBarrier2KHR :: forall (es :: [*]).
ImageMemoryBarrier2KHR es -> ImageSubresourceRange
$sel:image:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> Image
$sel:dstQueueFamilyIndex:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> Word32
$sel:srcQueueFamilyIndex:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> Word32
$sel:newLayout:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> ImageLayout
$sel:oldLayout:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> ImageLayout
$sel:dstAccessMask:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> AccessFlagBits2KHR
$sel:dstStageMask:ImageMemoryBarrier2KHR :: forall (es :: [*]).
ImageMemoryBarrier2KHR es -> "stageMask" ::: PipelineStageFlags2KHR
$sel:srcAccessMask:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> AccessFlagBits2KHR
$sel:srcStageMask:ImageMemoryBarrier2KHR :: forall (es :: [*]).
ImageMemoryBarrier2KHR es -> "stageMask" ::: PipelineStageFlags2KHR
$sel:next:ImageMemoryBarrier2KHR :: forall (es :: [*]). ImageMemoryBarrier2KHR es -> Chain es
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR)
    Ptr ()
pNext'' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
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
withChain (Chain es
next)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) Ptr ()
pNext''
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es)
-> Int -> Ptr ("stageMask" ::: PipelineStageFlags2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineStageFlags2KHR)) ("stageMask" ::: PipelineStageFlags2KHR
srcStageMask)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr AccessFlagBits2KHR -> AccessFlagBits2KHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es) -> Int -> Ptr AccessFlagBits2KHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr AccessFlags2KHR)) (AccessFlagBits2KHR
srcAccessMask)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es)
-> Int -> Ptr ("stageMask" ::: PipelineStageFlags2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr PipelineStageFlags2KHR)) ("stageMask" ::: PipelineStageFlags2KHR
dstStageMask)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr AccessFlagBits2KHR -> AccessFlagBits2KHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es) -> Int -> Ptr AccessFlagBits2KHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr AccessFlags2KHR)) (AccessFlagBits2KHR
dstAccessMask)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ImageLayout -> ImageLayout -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es) -> Int -> Ptr ImageLayout
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr ImageLayout)) (ImageLayout
oldLayout)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ImageLayout -> ImageLayout -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es) -> Int -> Ptr ImageLayout
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr ImageLayout)) (ImageLayout
newLayout)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ ("pCheckpointDataCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es)
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Word32)) (Word32
srcQueueFamilyIndex)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ ("pCheckpointDataCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es)
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
60 :: Ptr Word32)) (Word32
dstQueueFamilyIndex)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Image -> Image -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es) -> Int -> Ptr Image
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr Image)) (Image
image)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ImageSubresourceRange -> ImageSubresourceRange -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es) -> Int -> Ptr ImageSubresourceRange
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
72 :: Ptr ImageSubresourceRange)) (ImageSubresourceRange
subresourceRange)
    IO b -> ContT b IO b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
96
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr (ImageMemoryBarrier2KHR es) -> IO b -> IO b
pokeZeroCStruct Ptr (ImageMemoryBarrier2KHR es)
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR)
    Ptr ()
pNext' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
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 a. PokeChain es => (Ptr (Chain es) -> IO a) -> IO a
forall (es :: [*]) a.
PokeChain es =>
(Ptr (Chain es) -> IO a) -> IO a
withZeroChain @es
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) Ptr ()
pNext'
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ImageLayout -> ImageLayout -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es) -> Int -> Ptr ImageLayout
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr ImageLayout)) (ImageLayout
forall a. Zero a => a
zero)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ImageLayout -> ImageLayout -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es) -> Int -> Ptr ImageLayout
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr ImageLayout)) (ImageLayout
forall a. Zero a => a
zero)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ ("pCheckpointDataCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es)
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ ("pCheckpointDataCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es)
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
60 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Image -> Image -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es) -> Int -> Ptr Image
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr Image)) (Image
forall a. Zero a => a
zero)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ImageSubresourceRange -> ImageSubresourceRange -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es) -> Int -> Ptr ImageSubresourceRange
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
72 :: Ptr ImageSubresourceRange)) (ImageSubresourceRange
forall a. Zero a => a
zero)
    IO b -> ContT b IO b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f

instance (Extendss ImageMemoryBarrier2KHR es, PeekChain es) => FromCStruct (ImageMemoryBarrier2KHR es) where
  peekCStruct :: Ptr (ImageMemoryBarrier2KHR es) -> IO (ImageMemoryBarrier2KHR es)
peekCStruct Ptr (ImageMemoryBarrier2KHR es)
p = do
    Ptr ()
pNext <- Ptr (Ptr ()) -> IO (Ptr ())
forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ())))
    Chain es
next <- Ptr (Chain es) -> IO (Chain es)
forall (es :: [*]). PeekChain es => Ptr (Chain es) -> IO (Chain es)
peekChain (Ptr () -> Ptr (Chain es)
forall a b. Ptr a -> Ptr b
castPtr Ptr ()
pNext)
    "stageMask" ::: PipelineStageFlags2KHR
srcStageMask <- Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> IO ("stageMask" ::: PipelineStageFlags2KHR)
forall a. Storable a => Ptr a -> IO a
peek @PipelineStageFlags2KHR ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es)
-> Int -> Ptr ("stageMask" ::: PipelineStageFlags2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineStageFlags2KHR))
    AccessFlagBits2KHR
srcAccessMask <- Ptr AccessFlagBits2KHR -> IO AccessFlagBits2KHR
forall a. Storable a => Ptr a -> IO a
peek @AccessFlags2KHR ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es) -> Int -> Ptr AccessFlagBits2KHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr AccessFlags2KHR))
    "stageMask" ::: PipelineStageFlags2KHR
dstStageMask <- Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> IO ("stageMask" ::: PipelineStageFlags2KHR)
forall a. Storable a => Ptr a -> IO a
peek @PipelineStageFlags2KHR ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es)
-> Int -> Ptr ("stageMask" ::: PipelineStageFlags2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr PipelineStageFlags2KHR))
    AccessFlagBits2KHR
dstAccessMask <- Ptr AccessFlagBits2KHR -> IO AccessFlagBits2KHR
forall a. Storable a => Ptr a -> IO a
peek @AccessFlags2KHR ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es) -> Int -> Ptr AccessFlagBits2KHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr AccessFlags2KHR))
    ImageLayout
oldLayout <- Ptr ImageLayout -> IO ImageLayout
forall a. Storable a => Ptr a -> IO a
peek @ImageLayout ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es) -> Int -> Ptr ImageLayout
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr ImageLayout))
    ImageLayout
newLayout <- Ptr ImageLayout -> IO ImageLayout
forall a. Storable a => Ptr a -> IO a
peek @ImageLayout ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es) -> Int -> Ptr ImageLayout
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr ImageLayout))
    Word32
srcQueueFamilyIndex <- ("pCheckpointDataCount" ::: Ptr Word32) -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es)
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Word32))
    Word32
dstQueueFamilyIndex <- ("pCheckpointDataCount" ::: Ptr Word32) -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es)
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
60 :: Ptr Word32))
    Image
image <- Ptr Image -> IO Image
forall a. Storable a => Ptr a -> IO a
peek @Image ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es) -> Int -> Ptr Image
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr Image))
    ImageSubresourceRange
subresourceRange <- Ptr ImageSubresourceRange -> IO ImageSubresourceRange
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @ImageSubresourceRange ((Ptr (ImageMemoryBarrier2KHR es)
p Ptr (ImageMemoryBarrier2KHR es) -> Int -> Ptr ImageSubresourceRange
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
72 :: Ptr ImageSubresourceRange))
    ImageMemoryBarrier2KHR es -> IO (ImageMemoryBarrier2KHR es)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (ImageMemoryBarrier2KHR es -> IO (ImageMemoryBarrier2KHR es))
-> ImageMemoryBarrier2KHR es -> IO (ImageMemoryBarrier2KHR es)
forall a b. (a -> b) -> a -> b
$ Chain es
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> AccessFlagBits2KHR
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> AccessFlagBits2KHR
-> ImageLayout
-> ImageLayout
-> Word32
-> Word32
-> Image
-> ImageSubresourceRange
-> ImageMemoryBarrier2KHR es
forall (es :: [*]).
Chain es
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> AccessFlagBits2KHR
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> AccessFlagBits2KHR
-> ImageLayout
-> ImageLayout
-> Word32
-> Word32
-> Image
-> ImageSubresourceRange
-> ImageMemoryBarrier2KHR es
ImageMemoryBarrier2KHR
             Chain es
next "stageMask" ::: PipelineStageFlags2KHR
srcStageMask AccessFlagBits2KHR
srcAccessMask "stageMask" ::: PipelineStageFlags2KHR
dstStageMask AccessFlagBits2KHR
dstAccessMask ImageLayout
oldLayout ImageLayout
newLayout Word32
srcQueueFamilyIndex Word32
dstQueueFamilyIndex Image
image ImageSubresourceRange
subresourceRange

instance es ~ '[] => Zero (ImageMemoryBarrier2KHR es) where
  zero :: ImageMemoryBarrier2KHR es
zero = Chain es
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> AccessFlagBits2KHR
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> AccessFlagBits2KHR
-> ImageLayout
-> ImageLayout
-> Word32
-> Word32
-> Image
-> ImageSubresourceRange
-> ImageMemoryBarrier2KHR es
forall (es :: [*]).
Chain es
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> AccessFlagBits2KHR
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> AccessFlagBits2KHR
-> ImageLayout
-> ImageLayout
-> Word32
-> Word32
-> Image
-> ImageSubresourceRange
-> ImageMemoryBarrier2KHR es
ImageMemoryBarrier2KHR
           ()
           "stageMask" ::: PipelineStageFlags2KHR
forall a. Zero a => a
zero
           AccessFlagBits2KHR
forall a. Zero a => a
zero
           "stageMask" ::: PipelineStageFlags2KHR
forall a. Zero a => a
zero
           AccessFlagBits2KHR
forall a. Zero a => a
zero
           ImageLayout
forall a. Zero a => a
zero
           ImageLayout
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Image
forall a. Zero a => a
zero
           ImageSubresourceRange
forall a. Zero a => a
zero


-- | VkBufferMemoryBarrier2KHR - Structure specifying a buffer memory barrier
--
-- = Description
--
-- This structure defines a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-memory memory dependency>
-- limited to a range of a buffer, and /can/ define a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family transfer operation>
-- for that range.
--
-- The first
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
-- and
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
-- described by this structure include only operations and memory accesses
-- specified by @srcStageMask@ and @srcAccessMask@.
--
-- The second
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>
-- and
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>
-- described by this structure include only operations and memory accesses
-- specified by @dstStageMask@ and @dstAccessMask@.
--
-- Both
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scopes>
-- are limited to only memory accesses to @buffer@ in the range defined by
-- @offset@ and @size@.
--
-- If @buffer@ was created with
-- 'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE', and
-- @srcQueueFamilyIndex@ is not equal to @dstQueueFamilyIndex@, this memory
-- barrier defines a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family transfer operation>.
-- When executed on a queue in the family identified by
-- @srcQueueFamilyIndex@, this barrier defines a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers-release queue family release operation>
-- for the specified buffer range, and the second synchronization and
-- access scopes do not synchronize operations on that queue. When executed
-- on a queue in the family identified by @dstQueueFamilyIndex@, this
-- barrier defines a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers-acquire queue family acquire operation>
-- for the specified buffer range, and the first synchronization and access
-- scopes do not synchronize operations on that queue.
--
-- A
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family transfer operation>
-- is also defined if the values are not equal, and either is one of the
-- special queue family values reserved for external memory ownership
-- transfers, as described in
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers>.
-- A
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers-release queue family release operation>
-- is defined when @dstQueueFamilyIndex@ is one of those values, and a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers-acquire queue family acquire operation>
-- is defined when @srcQueueFamilyIndex@ is one of those values.
--
-- == Valid Usage
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcStageMask-03929# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcStageMask-03930# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR' or
--     'PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcStageMask-03931# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcStageMask-03932# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcStageMask-03933# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcStageMask-03934# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_MESH_SHADER_BIT_NV'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcStageMask-03935# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcStageMask-04956# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcStageMask-04957# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subpassShading subpass shading>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcStageMask-04995# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocation mask image>
--     feature is not enabled, @srcStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03900# If
--     @srcAccessMask@ includes 'ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03901# If
--     @srcAccessMask@ includes 'ACCESS_2_INDEX_READ_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03902# If
--     @srcAccessMask@ includes 'ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03903# If
--     @srcAccessMask@ includes 'ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR',
--     'PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03904# If
--     @srcAccessMask@ includes 'ACCESS_2_UNIFORM_READ_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03905# If
--     @srcAccessMask@ includes 'ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03906# If
--     @srcAccessMask@ includes 'ACCESS_2_SHADER_STORAGE_READ_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03907# If
--     @srcAccessMask@ includes 'ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03908# If
--     @srcAccessMask@ includes 'ACCESS_2_SHADER_READ_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR', or one of
--     the @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03909# If
--     @srcAccessMask@ includes 'ACCESS_2_SHADER_WRITE_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03910# If
--     @srcAccessMask@ includes 'ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR'
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03911# If
--     @srcAccessMask@ includes 'ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR'
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03912# If
--     @srcAccessMask@ includes
--     'ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03913# If
--     @srcAccessMask@ includes
--     'ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03914# If
--     @srcAccessMask@ includes 'ACCESS_2_TRANSFER_READ_BIT_KHR',
--     @srcStageMask@ /must/ include 'PIPELINE_STAGE_2_COPY_BIT_KHR',
--     'PIPELINE_STAGE_2_BLIT_BIT_KHR', 'PIPELINE_STAGE_2_RESOLVE_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03915# If
--     @srcAccessMask@ includes 'ACCESS_2_TRANSFER_WRITE_BIT_KHR',
--     @srcStageMask@ /must/ include 'PIPELINE_STAGE_2_COPY_BIT_KHR',
--     'PIPELINE_STAGE_2_BLIT_BIT_KHR', 'PIPELINE_STAGE_2_RESOLVE_BIT_KHR',
--     'PIPELINE_STAGE_2_CLEAR_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03916# If
--     @srcAccessMask@ includes 'ACCESS_2_HOST_READ_BIT_KHR',
--     @srcStageMask@ /must/ include 'PIPELINE_STAGE_2_HOST_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03917# If
--     @srcAccessMask@ includes 'ACCESS_2_HOST_WRITE_BIT_KHR',
--     @srcStageMask@ /must/ include 'PIPELINE_STAGE_2_HOST_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03918# If
--     @srcAccessMask@ includes
--     'ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT', @srcStageMask@ /must/
--     include 'PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03919# If
--     @srcAccessMask@ includes
--     'ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT', @srcStageMask@ /must/
--     include 'PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03920# If
--     @srcAccessMask@ includes
--     'ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT', @srcStageMask@ /must/
--     include 'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-04747# If
--     @srcAccessMask@ includes
--     'ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR',
--     'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03922# If
--     @srcAccessMask@ includes
--     'ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03923# If
--     @srcAccessMask@ includes 'ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-04994# If
--     @srcAccessMask@ includes 'ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03924# If
--     @srcAccessMask@ includes 'ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV' or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03925# If
--     @srcAccessMask@ includes 'ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV',
--     @srcStageMask@ /must/ include
--     'PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV' or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03926# If
--     @srcAccessMask@ includes
--     'ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT', @srcStageMask@
--     /must/ include 'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR'
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03927# If
--     @srcAccessMask@ includes
--     'ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR', @srcStageMask@
--     /must/ include
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-03928# If
--     @srcAccessMask@ includes
--     'ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR', @srcStageMask@
--     /must/ include
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR' or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-06256# If
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayQuery rayQuery>
--     is not enabled and @srcAccessMask@ includes
--     'ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR', @srcStageMask@
--     /must/ not include any of the @VK_PIPELINE_STAGE_*_SHADER_BIT@
--     stages except 'PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstStageMask-03929# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstStageMask-03930# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR' or
--     'PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstStageMask-03931# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstStageMask-03932# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstStageMask-03933# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstStageMask-03934# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_MESH_SHADER_BIT_NV'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstStageMask-03935# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstStageMask-04956# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstStageMask-04957# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subpassShading subpass shading>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstStageMask-04995# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocation mask image>
--     feature is not enabled, @dstStageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03900# If
--     @dstAccessMask@ includes 'ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03901# If
--     @dstAccessMask@ includes 'ACCESS_2_INDEX_READ_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03902# If
--     @dstAccessMask@ includes 'ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03903# If
--     @dstAccessMask@ includes 'ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR',
--     'PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03904# If
--     @dstAccessMask@ includes 'ACCESS_2_UNIFORM_READ_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03905# If
--     @dstAccessMask@ includes 'ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03906# If
--     @dstAccessMask@ includes 'ACCESS_2_SHADER_STORAGE_READ_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03907# If
--     @dstAccessMask@ includes 'ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03908# If
--     @dstAccessMask@ includes 'ACCESS_2_SHADER_READ_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR', or one of
--     the @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03909# If
--     @dstAccessMask@ includes 'ACCESS_2_SHADER_WRITE_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03910# If
--     @dstAccessMask@ includes 'ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR'
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03911# If
--     @dstAccessMask@ includes 'ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR'
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03912# If
--     @dstAccessMask@ includes
--     'ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03913# If
--     @dstAccessMask@ includes
--     'ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03914# If
--     @dstAccessMask@ includes 'ACCESS_2_TRANSFER_READ_BIT_KHR',
--     @dstStageMask@ /must/ include 'PIPELINE_STAGE_2_COPY_BIT_KHR',
--     'PIPELINE_STAGE_2_BLIT_BIT_KHR', 'PIPELINE_STAGE_2_RESOLVE_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03915# If
--     @dstAccessMask@ includes 'ACCESS_2_TRANSFER_WRITE_BIT_KHR',
--     @dstStageMask@ /must/ include 'PIPELINE_STAGE_2_COPY_BIT_KHR',
--     'PIPELINE_STAGE_2_BLIT_BIT_KHR', 'PIPELINE_STAGE_2_RESOLVE_BIT_KHR',
--     'PIPELINE_STAGE_2_CLEAR_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR',
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03916# If
--     @dstAccessMask@ includes 'ACCESS_2_HOST_READ_BIT_KHR',
--     @dstStageMask@ /must/ include 'PIPELINE_STAGE_2_HOST_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03917# If
--     @dstAccessMask@ includes 'ACCESS_2_HOST_WRITE_BIT_KHR',
--     @dstStageMask@ /must/ include 'PIPELINE_STAGE_2_HOST_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03918# If
--     @dstAccessMask@ includes
--     'ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT', @dstStageMask@ /must/
--     include 'PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03919# If
--     @dstAccessMask@ includes
--     'ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT', @dstStageMask@ /must/
--     include 'PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03920# If
--     @dstAccessMask@ includes
--     'ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT', @dstStageMask@ /must/
--     include 'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-04747# If
--     @dstAccessMask@ includes
--     'ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR',
--     'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03922# If
--     @dstAccessMask@ includes
--     'ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03923# If
--     @dstAccessMask@ includes 'ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV',
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-04994# If
--     @dstAccessMask@ includes 'ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03924# If
--     @dstAccessMask@ includes 'ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV' or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03925# If
--     @dstAccessMask@ includes 'ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV',
--     @dstStageMask@ /must/ include
--     'PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV' or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03926# If
--     @dstAccessMask@ includes
--     'ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT', @dstStageMask@
--     /must/ include 'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR'
--     'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR', or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03927# If
--     @dstAccessMask@ includes
--     'ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR', @dstStageMask@
--     /must/ include
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR',
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR', or one of the
--     @VK_PIPELINE_STAGE_*_SHADER_BIT@ stages
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-03928# If
--     @dstAccessMask@ includes
--     'ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR', @dstStageMask@
--     /must/ include
--     'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR' or
--     'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-06256# If
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayQuery rayQuery>
--     is not enabled and @dstAccessMask@ includes
--     'ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR', @dstStageMask@
--     /must/ not include any of the @VK_PIPELINE_STAGE_*_SHADER_BIT@
--     stages except 'PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-offset-01187# @offset@ /must/ be
--     less than the size of @buffer@
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-size-01188# If @size@ is not equal
--     to 'Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ be greater
--     than @0@
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-size-01189# If @size@ is not equal
--     to 'Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ be less
--     than or equal to than the size of @buffer@ minus @offset@
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-buffer-01931# If @buffer@ is
--     non-sparse then it /must/ be bound completely and contiguously to a
--     single 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcQueueFamilyIndex-04087# If
--     @srcQueueFamilyIndex@ is not equal to @dstQueueFamilyIndex@, at
--     least one /must/ not be a special queue family reserved for external
--     memory ownership transfers, as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers ???>
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-buffer-04088# If @buffer@ was
--     created with a sharing mode of
--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT',
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ are not equal, and
--     one of @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ is one of the
--     special queue family values reserved for external memory transfers,
--     the other /must/ be
--     'Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-buffer-04089# If @buffer@ was
--     created with a sharing mode of
--     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE', and
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ are not equal,
--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ /must/ both be valid
--     queue families, or one of the special queue family values reserved
--     for external memory transfers, as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers ???>
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcStageMask-03851# If either
--     @srcStageMask@ or @dstStageMask@ includes
--     'PIPELINE_STAGE_2_HOST_BIT_KHR', @srcQueueFamilyIndex@ and
--     @dstQueueFamilyIndex@ /must/ be equal
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR'
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-pNext-pNext# @pNext@ /must/ be
--     @NULL@
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcStageMask-parameter#
--     @srcStageMask@ /must/ be a valid combination of
--     'PipelineStageFlagBits2KHR' values
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-srcAccessMask-parameter#
--     @srcAccessMask@ /must/ be a valid combination of
--     'AccessFlagBits2KHR' values
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstStageMask-parameter#
--     @dstStageMask@ /must/ be a valid combination of
--     'PipelineStageFlagBits2KHR' values
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-dstAccessMask-parameter#
--     @dstAccessMask@ /must/ be a valid combination of
--     'AccessFlagBits2KHR' values
--
-- -   #VUID-VkBufferMemoryBarrier2KHR-buffer-parameter# @buffer@ /must/ be
--     a valid 'Vulkan.Core10.Handles.Buffer' handle
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>,
-- 'AccessFlags2KHR', 'Vulkan.Core10.Handles.Buffer', 'DependencyInfoKHR',
-- 'Vulkan.Core10.FundamentalTypes.DeviceSize', 'PipelineStageFlags2KHR',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data BufferMemoryBarrier2KHR = BufferMemoryBarrier2KHR
  { -- | @srcStageMask@ is a 'PipelineStageFlags2KHR' mask of pipeline stages to
    -- be included in the
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes first synchronization scope>.
    BufferMemoryBarrier2KHR -> "stageMask" ::: PipelineStageFlags2KHR
srcStageMask :: PipelineStageFlags2KHR
  , -- | @srcAccessMask@ is a 'AccessFlags2KHR' mask of access flags to be
    -- included in the
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes first access scope>.
    BufferMemoryBarrier2KHR -> AccessFlagBits2KHR
srcAccessMask :: AccessFlags2KHR
  , -- | @dstStageMask@ is a 'PipelineStageFlags2KHR' mask of pipeline stages to
    -- be included in the
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes second synchronization scope>.
    BufferMemoryBarrier2KHR -> "stageMask" ::: PipelineStageFlags2KHR
dstStageMask :: PipelineStageFlags2KHR
  , -- | @dstAccessMask@ is a 'AccessFlags2KHR' mask of access flags to be
    -- included in the
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes second access scope>.
    BufferMemoryBarrier2KHR -> AccessFlagBits2KHR
dstAccessMask :: AccessFlags2KHR
  , -- | @srcQueueFamilyIndex@ is the source queue family for a
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>.
    BufferMemoryBarrier2KHR -> Word32
srcQueueFamilyIndex :: Word32
  , -- | @dstQueueFamilyIndex@ is the destination queue family for a
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>.
    BufferMemoryBarrier2KHR -> Word32
dstQueueFamilyIndex :: Word32
  , -- | @buffer@ is a handle to the buffer whose backing memory is affected by
    -- the barrier.
    BufferMemoryBarrier2KHR -> "dstBuffer" ::: Buffer
buffer :: Buffer
  , -- | @offset@ is an offset in bytes into the backing memory for @buffer@;
    -- this is relative to the base offset as bound to the buffer (see
    -- 'Vulkan.Core10.MemoryManagement.bindBufferMemory').
    BufferMemoryBarrier2KHR -> "dstOffset" ::: DeviceSize
offset :: DeviceSize
  , -- | @size@ is a size in bytes of the affected area of backing memory for
    -- @buffer@, or 'Vulkan.Core10.APIConstants.WHOLE_SIZE' to use the range
    -- from @offset@ to the end of the buffer.
    BufferMemoryBarrier2KHR -> "dstOffset" ::: DeviceSize
size :: DeviceSize
  }
  deriving (Typeable, BufferMemoryBarrier2KHR -> BufferMemoryBarrier2KHR -> Bool
(BufferMemoryBarrier2KHR -> BufferMemoryBarrier2KHR -> Bool)
-> (BufferMemoryBarrier2KHR -> BufferMemoryBarrier2KHR -> Bool)
-> Eq BufferMemoryBarrier2KHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BufferMemoryBarrier2KHR -> BufferMemoryBarrier2KHR -> Bool
$c/= :: BufferMemoryBarrier2KHR -> BufferMemoryBarrier2KHR -> Bool
== :: BufferMemoryBarrier2KHR -> BufferMemoryBarrier2KHR -> Bool
$c== :: BufferMemoryBarrier2KHR -> BufferMemoryBarrier2KHR -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (BufferMemoryBarrier2KHR)
#endif
deriving instance Show BufferMemoryBarrier2KHR

instance ToCStruct BufferMemoryBarrier2KHR where
  withCStruct :: BufferMemoryBarrier2KHR
-> (Ptr BufferMemoryBarrier2KHR -> IO b) -> IO b
withCStruct BufferMemoryBarrier2KHR
x Ptr BufferMemoryBarrier2KHR -> IO b
f = Int -> (Ptr BufferMemoryBarrier2KHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
80 ((Ptr BufferMemoryBarrier2KHR -> IO b) -> IO b)
-> (Ptr BufferMemoryBarrier2KHR -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr BufferMemoryBarrier2KHR
p -> Ptr BufferMemoryBarrier2KHR
-> BufferMemoryBarrier2KHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr BufferMemoryBarrier2KHR
p BufferMemoryBarrier2KHR
x (Ptr BufferMemoryBarrier2KHR -> IO b
f Ptr BufferMemoryBarrier2KHR
p)
  pokeCStruct :: Ptr BufferMemoryBarrier2KHR
-> BufferMemoryBarrier2KHR -> IO b -> IO b
pokeCStruct Ptr BufferMemoryBarrier2KHR
p BufferMemoryBarrier2KHR{Word32
"dstOffset" ::: DeviceSize
"dstBuffer" ::: Buffer
"stageMask" ::: PipelineStageFlags2KHR
AccessFlagBits2KHR
size :: "dstOffset" ::: DeviceSize
offset :: "dstOffset" ::: DeviceSize
buffer :: "dstBuffer" ::: Buffer
dstQueueFamilyIndex :: Word32
srcQueueFamilyIndex :: Word32
dstAccessMask :: AccessFlagBits2KHR
dstStageMask :: "stageMask" ::: PipelineStageFlags2KHR
srcAccessMask :: AccessFlagBits2KHR
srcStageMask :: "stageMask" ::: PipelineStageFlags2KHR
$sel:size:BufferMemoryBarrier2KHR :: BufferMemoryBarrier2KHR -> "dstOffset" ::: DeviceSize
$sel:offset:BufferMemoryBarrier2KHR :: BufferMemoryBarrier2KHR -> "dstOffset" ::: DeviceSize
$sel:buffer:BufferMemoryBarrier2KHR :: BufferMemoryBarrier2KHR -> "dstBuffer" ::: Buffer
$sel:dstQueueFamilyIndex:BufferMemoryBarrier2KHR :: BufferMemoryBarrier2KHR -> Word32
$sel:srcQueueFamilyIndex:BufferMemoryBarrier2KHR :: BufferMemoryBarrier2KHR -> Word32
$sel:dstAccessMask:BufferMemoryBarrier2KHR :: BufferMemoryBarrier2KHR -> AccessFlagBits2KHR
$sel:dstStageMask:BufferMemoryBarrier2KHR :: BufferMemoryBarrier2KHR -> "stageMask" ::: PipelineStageFlags2KHR
$sel:srcAccessMask:BufferMemoryBarrier2KHR :: BufferMemoryBarrier2KHR -> AccessFlagBits2KHR
$sel:srcStageMask:BufferMemoryBarrier2KHR :: BufferMemoryBarrier2KHR -> "stageMask" ::: PipelineStageFlags2KHR
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR
-> Int -> Ptr ("stageMask" ::: PipelineStageFlags2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineStageFlags2KHR)) ("stageMask" ::: PipelineStageFlags2KHR
srcStageMask)
    Ptr AccessFlagBits2KHR -> AccessFlagBits2KHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR -> Int -> Ptr AccessFlagBits2KHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr AccessFlags2KHR)) (AccessFlagBits2KHR
srcAccessMask)
    Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR
-> Int -> Ptr ("stageMask" ::: PipelineStageFlags2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr PipelineStageFlags2KHR)) ("stageMask" ::: PipelineStageFlags2KHR
dstStageMask)
    Ptr AccessFlagBits2KHR -> AccessFlagBits2KHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR -> Int -> Ptr AccessFlagBits2KHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr AccessFlags2KHR)) (AccessFlagBits2KHR
dstAccessMask)
    ("pCheckpointDataCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32)) (Word32
srcQueueFamilyIndex)
    ("pCheckpointDataCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr Word32)) (Word32
dstQueueFamilyIndex)
    Ptr ("dstBuffer" ::: Buffer) -> ("dstBuffer" ::: Buffer) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR -> Int -> Ptr ("dstBuffer" ::: Buffer)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Buffer)) ("dstBuffer" ::: Buffer
buffer)
    Ptr ("dstOffset" ::: DeviceSize)
-> ("dstOffset" ::: DeviceSize) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR
-> Int -> Ptr ("dstOffset" ::: DeviceSize)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr DeviceSize)) ("dstOffset" ::: DeviceSize
offset)
    Ptr ("dstOffset" ::: DeviceSize)
-> ("dstOffset" ::: DeviceSize) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR
-> Int -> Ptr ("dstOffset" ::: DeviceSize)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
72 :: Ptr DeviceSize)) ("dstOffset" ::: DeviceSize
size)
    IO b
f
  cStructSize :: Int
cStructSize = Int
80
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr BufferMemoryBarrier2KHR -> IO b -> IO b
pokeZeroCStruct Ptr BufferMemoryBarrier2KHR
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    ("pCheckpointDataCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    ("pCheckpointDataCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr ("dstBuffer" ::: Buffer) -> ("dstBuffer" ::: Buffer) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR -> Int -> Ptr ("dstBuffer" ::: Buffer)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Buffer)) ("dstBuffer" ::: Buffer
forall a. Zero a => a
zero)
    Ptr ("dstOffset" ::: DeviceSize)
-> ("dstOffset" ::: DeviceSize) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR
-> Int -> Ptr ("dstOffset" ::: DeviceSize)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr DeviceSize)) ("dstOffset" ::: DeviceSize
forall a. Zero a => a
zero)
    Ptr ("dstOffset" ::: DeviceSize)
-> ("dstOffset" ::: DeviceSize) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR
-> Int -> Ptr ("dstOffset" ::: DeviceSize)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
72 :: Ptr DeviceSize)) ("dstOffset" ::: DeviceSize
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct BufferMemoryBarrier2KHR where
  peekCStruct :: Ptr BufferMemoryBarrier2KHR -> IO BufferMemoryBarrier2KHR
peekCStruct Ptr BufferMemoryBarrier2KHR
p = do
    "stageMask" ::: PipelineStageFlags2KHR
srcStageMask <- Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> IO ("stageMask" ::: PipelineStageFlags2KHR)
forall a. Storable a => Ptr a -> IO a
peek @PipelineStageFlags2KHR ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR
-> Int -> Ptr ("stageMask" ::: PipelineStageFlags2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineStageFlags2KHR))
    AccessFlagBits2KHR
srcAccessMask <- Ptr AccessFlagBits2KHR -> IO AccessFlagBits2KHR
forall a. Storable a => Ptr a -> IO a
peek @AccessFlags2KHR ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR -> Int -> Ptr AccessFlagBits2KHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr AccessFlags2KHR))
    "stageMask" ::: PipelineStageFlags2KHR
dstStageMask <- Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> IO ("stageMask" ::: PipelineStageFlags2KHR)
forall a. Storable a => Ptr a -> IO a
peek @PipelineStageFlags2KHR ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR
-> Int -> Ptr ("stageMask" ::: PipelineStageFlags2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr PipelineStageFlags2KHR))
    AccessFlagBits2KHR
dstAccessMask <- Ptr AccessFlagBits2KHR -> IO AccessFlagBits2KHR
forall a. Storable a => Ptr a -> IO a
peek @AccessFlags2KHR ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR -> Int -> Ptr AccessFlagBits2KHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr AccessFlags2KHR))
    Word32
srcQueueFamilyIndex <- ("pCheckpointDataCount" ::: Ptr Word32) -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32))
    Word32
dstQueueFamilyIndex <- ("pCheckpointDataCount" ::: Ptr Word32) -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr Word32))
    "dstBuffer" ::: Buffer
buffer <- Ptr ("dstBuffer" ::: Buffer) -> IO ("dstBuffer" ::: Buffer)
forall a. Storable a => Ptr a -> IO a
peek @Buffer ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR -> Int -> Ptr ("dstBuffer" ::: Buffer)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Buffer))
    "dstOffset" ::: DeviceSize
offset <- Ptr ("dstOffset" ::: DeviceSize) -> IO ("dstOffset" ::: DeviceSize)
forall a. Storable a => Ptr a -> IO a
peek @DeviceSize ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR
-> Int -> Ptr ("dstOffset" ::: DeviceSize)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr DeviceSize))
    "dstOffset" ::: DeviceSize
size <- Ptr ("dstOffset" ::: DeviceSize) -> IO ("dstOffset" ::: DeviceSize)
forall a. Storable a => Ptr a -> IO a
peek @DeviceSize ((Ptr BufferMemoryBarrier2KHR
p Ptr BufferMemoryBarrier2KHR
-> Int -> Ptr ("dstOffset" ::: DeviceSize)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
72 :: Ptr DeviceSize))
    BufferMemoryBarrier2KHR -> IO BufferMemoryBarrier2KHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (BufferMemoryBarrier2KHR -> IO BufferMemoryBarrier2KHR)
-> BufferMemoryBarrier2KHR -> IO BufferMemoryBarrier2KHR
forall a b. (a -> b) -> a -> b
$ ("stageMask" ::: PipelineStageFlags2KHR)
-> AccessFlagBits2KHR
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> AccessFlagBits2KHR
-> Word32
-> Word32
-> ("dstBuffer" ::: Buffer)
-> ("dstOffset" ::: DeviceSize)
-> ("dstOffset" ::: DeviceSize)
-> BufferMemoryBarrier2KHR
BufferMemoryBarrier2KHR
             "stageMask" ::: PipelineStageFlags2KHR
srcStageMask AccessFlagBits2KHR
srcAccessMask "stageMask" ::: PipelineStageFlags2KHR
dstStageMask AccessFlagBits2KHR
dstAccessMask Word32
srcQueueFamilyIndex Word32
dstQueueFamilyIndex "dstBuffer" ::: Buffer
buffer "dstOffset" ::: DeviceSize
offset "dstOffset" ::: DeviceSize
size

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

instance Zero BufferMemoryBarrier2KHR where
  zero :: BufferMemoryBarrier2KHR
zero = ("stageMask" ::: PipelineStageFlags2KHR)
-> AccessFlagBits2KHR
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> AccessFlagBits2KHR
-> Word32
-> Word32
-> ("dstBuffer" ::: Buffer)
-> ("dstOffset" ::: DeviceSize)
-> ("dstOffset" ::: DeviceSize)
-> BufferMemoryBarrier2KHR
BufferMemoryBarrier2KHR
           "stageMask" ::: PipelineStageFlags2KHR
forall a. Zero a => a
zero
           AccessFlagBits2KHR
forall a. Zero a => a
zero
           "stageMask" ::: PipelineStageFlags2KHR
forall a. Zero a => a
zero
           AccessFlagBits2KHR
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           "dstBuffer" ::: Buffer
forall a. Zero a => a
zero
           "dstOffset" ::: DeviceSize
forall a. Zero a => a
zero
           "dstOffset" ::: DeviceSize
forall a. Zero a => a
zero


-- | VkDependencyInfoKHR - Structure specifying dependency information for a
-- synchronization command
--
-- = Description
--
-- This structure defines a set of
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-memory memory dependencies>,
-- as well as
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family transfer operations>
-- and
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transitions>.
--
-- Each member of @pMemoryBarriers@, @pBufferMemoryBarriers@, and
-- @pImageMemoryBarriers@ defines a separate
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-memory memory dependency>.
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDependencyInfoKHR-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEPENDENCY_INFO_KHR'
--
-- -   #VUID-VkDependencyInfoKHR-pNext-pNext# @pNext@ /must/ be @NULL@
--
-- -   #VUID-VkDependencyInfoKHR-dependencyFlags-parameter#
--     @dependencyFlags@ /must/ be a valid combination of
--     'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits' values
--
-- -   #VUID-VkDependencyInfoKHR-pMemoryBarriers-parameter# If
--     @memoryBarrierCount@ is not @0@, @pMemoryBarriers@ /must/ be a valid
--     pointer to an array of @memoryBarrierCount@ valid
--     'MemoryBarrier2KHR' structures
--
-- -   #VUID-VkDependencyInfoKHR-pBufferMemoryBarriers-parameter# If
--     @bufferMemoryBarrierCount@ is not @0@, @pBufferMemoryBarriers@
--     /must/ be a valid pointer to an array of @bufferMemoryBarrierCount@
--     valid 'BufferMemoryBarrier2KHR' structures
--
-- -   #VUID-VkDependencyInfoKHR-pImageMemoryBarriers-parameter# If
--     @imageMemoryBarrierCount@ is not @0@, @pImageMemoryBarriers@ /must/
--     be a valid pointer to an array of @imageMemoryBarrierCount@ valid
--     'ImageMemoryBarrier2KHR' structures
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>,
-- 'BufferMemoryBarrier2KHR',
-- 'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlags',
-- 'ImageMemoryBarrier2KHR', 'MemoryBarrier2KHR',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'cmdPipelineBarrier2KHR', 'cmdSetEvent2KHR', 'cmdWaitEvents2KHR'
data DependencyInfoKHR = DependencyInfoKHR
  { -- | @dependencyFlags@ is a bitmask of
    -- 'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits' specifying
    -- how execution and memory dependencies are formed.
    DependencyInfoKHR -> DependencyFlags
dependencyFlags :: DependencyFlags
  , -- | @pMemoryBarriers@ is a pointer to an array of 'MemoryBarrier2KHR'
    -- structures defining memory dependencies between any memory accesses.
    DependencyInfoKHR -> Vector MemoryBarrier2KHR
memoryBarriers :: Vector MemoryBarrier2KHR
  , -- | @pBufferMemoryBarriers@ is a pointer to an array of
    -- 'BufferMemoryBarrier2KHR' structures defining memory dependencies
    -- between buffer ranges.
    DependencyInfoKHR -> Vector BufferMemoryBarrier2KHR
bufferMemoryBarriers :: Vector BufferMemoryBarrier2KHR
  , -- | @pImageMemoryBarriers@ is a pointer to an array of
    -- 'ImageMemoryBarrier2KHR' structures defining memory dependencies between
    -- image subresources.
    DependencyInfoKHR -> Vector (SomeStruct ImageMemoryBarrier2KHR)
imageMemoryBarriers :: Vector (SomeStruct ImageMemoryBarrier2KHR)
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DependencyInfoKHR)
#endif
deriving instance Show DependencyInfoKHR

instance ToCStruct DependencyInfoKHR where
  withCStruct :: DependencyInfoKHR
-> (("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO b) -> IO b
withCStruct DependencyInfoKHR
x ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO b
f = Int
-> (("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
64 ((("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO b) -> IO b)
-> (("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \"pDependencyInfo" ::: Ptr DependencyInfoKHR
p -> ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> DependencyInfoKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pDependencyInfo" ::: Ptr DependencyInfoKHR
p DependencyInfoKHR
x (("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO b
f "pDependencyInfo" ::: Ptr DependencyInfoKHR
p)
  pokeCStruct :: ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> DependencyInfoKHR -> IO b -> IO b
pokeCStruct "pDependencyInfo" ::: Ptr DependencyInfoKHR
p DependencyInfoKHR{Vector MemoryBarrier2KHR
Vector BufferMemoryBarrier2KHR
Vector (SomeStruct ImageMemoryBarrier2KHR)
DependencyFlags
imageMemoryBarriers :: Vector (SomeStruct ImageMemoryBarrier2KHR)
bufferMemoryBarriers :: Vector BufferMemoryBarrier2KHR
memoryBarriers :: Vector MemoryBarrier2KHR
dependencyFlags :: DependencyFlags
$sel:imageMemoryBarriers:DependencyInfoKHR :: DependencyInfoKHR -> Vector (SomeStruct ImageMemoryBarrier2KHR)
$sel:bufferMemoryBarriers:DependencyInfoKHR :: DependencyInfoKHR -> Vector BufferMemoryBarrier2KHR
$sel:memoryBarriers:DependencyInfoKHR :: DependencyInfoKHR -> Vector MemoryBarrier2KHR
$sel:dependencyFlags:DependencyInfoKHR :: DependencyInfoKHR -> DependencyFlags
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pDependencyInfo" ::: Ptr DependencyInfoKHR
p ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEPENDENCY_INFO_KHR)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pDependencyInfo" ::: Ptr DependencyInfoKHR
p ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> 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 (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 DependencyFlags -> DependencyFlags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pDependencyInfo" ::: Ptr DependencyInfoKHR
p ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> Int -> Ptr DependencyFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DependencyFlags)) (DependencyFlags
dependencyFlags)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ ("pCheckpointDataCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pDependencyInfo" ::: Ptr DependencyInfoKHR
p ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) ((Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector MemoryBarrier2KHR -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector MemoryBarrier2KHR -> Int)
-> Vector MemoryBarrier2KHR -> Int
forall a b. (a -> b) -> a -> b
$ (Vector MemoryBarrier2KHR
memoryBarriers)) :: Word32))
    Ptr MemoryBarrier2KHR
pPMemoryBarriers' <- ((Ptr MemoryBarrier2KHR -> IO b) -> IO b)
-> ContT b IO (Ptr MemoryBarrier2KHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr MemoryBarrier2KHR -> IO b) -> IO b)
 -> ContT b IO (Ptr MemoryBarrier2KHR))
-> ((Ptr MemoryBarrier2KHR -> IO b) -> IO b)
-> ContT b IO (Ptr MemoryBarrier2KHR)
forall a b. (a -> b) -> a -> b
$ Int -> (Ptr MemoryBarrier2KHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @MemoryBarrier2KHR ((Vector MemoryBarrier2KHR -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector MemoryBarrier2KHR
memoryBarriers)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
48)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ (Int -> MemoryBarrier2KHR -> IO ())
-> Vector MemoryBarrier2KHR -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i MemoryBarrier2KHR
e -> Ptr MemoryBarrier2KHR -> MemoryBarrier2KHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr MemoryBarrier2KHR
pPMemoryBarriers' Ptr MemoryBarrier2KHR -> Int -> Ptr MemoryBarrier2KHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
48 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr MemoryBarrier2KHR) (MemoryBarrier2KHR
e)) (Vector MemoryBarrier2KHR
memoryBarriers)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr MemoryBarrier2KHR) -> Ptr MemoryBarrier2KHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pDependencyInfo" ::: Ptr DependencyInfoKHR
p ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> Int -> Ptr (Ptr MemoryBarrier2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr MemoryBarrier2KHR))) (Ptr MemoryBarrier2KHR
pPMemoryBarriers')
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ ("pCheckpointDataCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pDependencyInfo" ::: Ptr DependencyInfoKHR
p ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32)) ((Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector BufferMemoryBarrier2KHR -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector BufferMemoryBarrier2KHR -> Int)
-> Vector BufferMemoryBarrier2KHR -> Int
forall a b. (a -> b) -> a -> b
$ (Vector BufferMemoryBarrier2KHR
bufferMemoryBarriers)) :: Word32))
    Ptr BufferMemoryBarrier2KHR
pPBufferMemoryBarriers' <- ((Ptr BufferMemoryBarrier2KHR -> IO b) -> IO b)
-> ContT b IO (Ptr BufferMemoryBarrier2KHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr BufferMemoryBarrier2KHR -> IO b) -> IO b)
 -> ContT b IO (Ptr BufferMemoryBarrier2KHR))
-> ((Ptr BufferMemoryBarrier2KHR -> IO b) -> IO b)
-> ContT b IO (Ptr BufferMemoryBarrier2KHR)
forall a b. (a -> b) -> a -> b
$ Int -> (Ptr BufferMemoryBarrier2KHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @BufferMemoryBarrier2KHR ((Vector BufferMemoryBarrier2KHR -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector BufferMemoryBarrier2KHR
bufferMemoryBarriers)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
80)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ (Int -> BufferMemoryBarrier2KHR -> IO ())
-> Vector BufferMemoryBarrier2KHR -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i BufferMemoryBarrier2KHR
e -> Ptr BufferMemoryBarrier2KHR -> BufferMemoryBarrier2KHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr BufferMemoryBarrier2KHR
pPBufferMemoryBarriers' Ptr BufferMemoryBarrier2KHR -> Int -> Ptr BufferMemoryBarrier2KHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
80 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr BufferMemoryBarrier2KHR) (BufferMemoryBarrier2KHR
e)) (Vector BufferMemoryBarrier2KHR
bufferMemoryBarriers)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr BufferMemoryBarrier2KHR)
-> Ptr BufferMemoryBarrier2KHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pDependencyInfo" ::: Ptr DependencyInfoKHR
p ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> Int -> Ptr (Ptr BufferMemoryBarrier2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr (Ptr BufferMemoryBarrier2KHR))) (Ptr BufferMemoryBarrier2KHR
pPBufferMemoryBarriers')
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ ("pCheckpointDataCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pDependencyInfo" ::: Ptr DependencyInfoKHR
p ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32)) ((Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector (SomeStruct ImageMemoryBarrier2KHR) -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector (SomeStruct ImageMemoryBarrier2KHR) -> Int)
-> Vector (SomeStruct ImageMemoryBarrier2KHR) -> Int
forall a b. (a -> b) -> a -> b
$ (Vector (SomeStruct ImageMemoryBarrier2KHR)
imageMemoryBarriers)) :: Word32))
    Ptr (ImageMemoryBarrier2KHR Any)
pPImageMemoryBarriers' <- ((Ptr (ImageMemoryBarrier2KHR Any) -> IO b) -> IO b)
-> ContT b IO (Ptr (ImageMemoryBarrier2KHR Any))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (ImageMemoryBarrier2KHR Any) -> IO b) -> IO b)
 -> ContT b IO (Ptr (ImageMemoryBarrier2KHR Any)))
-> ((Ptr (ImageMemoryBarrier2KHR Any) -> IO b) -> IO b)
-> ContT b IO (Ptr (ImageMemoryBarrier2KHR Any))
forall a b. (a -> b) -> a -> b
$ Int -> (Ptr (ImageMemoryBarrier2KHR Any) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @(ImageMemoryBarrier2KHR _) ((Vector (SomeStruct ImageMemoryBarrier2KHR) -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector (SomeStruct ImageMemoryBarrier2KHR)
imageMemoryBarriers)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
96)
    (Int -> SomeStruct ImageMemoryBarrier2KHR -> ContT b IO ())
-> Vector (SomeStruct ImageMemoryBarrier2KHR) -> ContT b IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i SomeStruct ImageMemoryBarrier2KHR
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 ImageMemoryBarrier2KHR)
-> SomeStruct ImageMemoryBarrier2KHR -> 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 (ImageMemoryBarrier2KHR Any)
-> Ptr (SomeStruct ImageMemoryBarrier2KHR)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (ImageMemoryBarrier2KHR Any)
pPImageMemoryBarriers' Ptr (ImageMemoryBarrier2KHR Any)
-> Int -> Ptr (ImageMemoryBarrier2KHR _)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
96 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (ImageMemoryBarrier2KHR _))) (SomeStruct ImageMemoryBarrier2KHR
e) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())) (Vector (SomeStruct ImageMemoryBarrier2KHR)
imageMemoryBarriers)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr (ImageMemoryBarrier2KHR Any))
-> Ptr (ImageMemoryBarrier2KHR Any) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pDependencyInfo" ::: Ptr DependencyInfoKHR
p ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> Int -> Ptr (Ptr (ImageMemoryBarrier2KHR _))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr (Ptr (ImageMemoryBarrier2KHR _)))) (Ptr (ImageMemoryBarrier2KHR Any)
pPImageMemoryBarriers')
    IO b -> ContT b IO b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
64
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: ("pDependencyInfo" ::: Ptr DependencyInfoKHR) -> IO b -> IO b
pokeZeroCStruct "pDependencyInfo" ::: Ptr DependencyInfoKHR
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pDependencyInfo" ::: Ptr DependencyInfoKHR
p ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEPENDENCY_INFO_KHR)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pDependencyInfo" ::: Ptr DependencyInfoKHR
p ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> 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 DependencyInfoKHR where
  peekCStruct :: ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> IO DependencyInfoKHR
peekCStruct "pDependencyInfo" ::: Ptr DependencyInfoKHR
p = do
    DependencyFlags
dependencyFlags <- Ptr DependencyFlags -> IO DependencyFlags
forall a. Storable a => Ptr a -> IO a
peek @DependencyFlags (("pDependencyInfo" ::: Ptr DependencyInfoKHR
p ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> Int -> Ptr DependencyFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DependencyFlags))
    Word32
memoryBarrierCount <- ("pCheckpointDataCount" ::: Ptr Word32) -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 (("pDependencyInfo" ::: Ptr DependencyInfoKHR
p ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32))
    Ptr MemoryBarrier2KHR
pMemoryBarriers <- Ptr (Ptr MemoryBarrier2KHR) -> IO (Ptr MemoryBarrier2KHR)
forall a. Storable a => Ptr a -> IO a
peek @(Ptr MemoryBarrier2KHR) (("pDependencyInfo" ::: Ptr DependencyInfoKHR
p ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> Int -> Ptr (Ptr MemoryBarrier2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr MemoryBarrier2KHR)))
    Vector MemoryBarrier2KHR
pMemoryBarriers' <- Int
-> (Int -> IO MemoryBarrier2KHR) -> IO (Vector MemoryBarrier2KHR)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
memoryBarrierCount) (\Int
i -> Ptr MemoryBarrier2KHR -> IO MemoryBarrier2KHR
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @MemoryBarrier2KHR ((Ptr MemoryBarrier2KHR
pMemoryBarriers Ptr MemoryBarrier2KHR -> Int -> Ptr MemoryBarrier2KHR
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
48 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr MemoryBarrier2KHR)))
    Word32
bufferMemoryBarrierCount <- ("pCheckpointDataCount" ::: Ptr Word32) -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 (("pDependencyInfo" ::: Ptr DependencyInfoKHR
p ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32))
    Ptr BufferMemoryBarrier2KHR
pBufferMemoryBarriers <- Ptr (Ptr BufferMemoryBarrier2KHR)
-> IO (Ptr BufferMemoryBarrier2KHR)
forall a. Storable a => Ptr a -> IO a
peek @(Ptr BufferMemoryBarrier2KHR) (("pDependencyInfo" ::: Ptr DependencyInfoKHR
p ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> Int -> Ptr (Ptr BufferMemoryBarrier2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr (Ptr BufferMemoryBarrier2KHR)))
    Vector BufferMemoryBarrier2KHR
pBufferMemoryBarriers' <- Int
-> (Int -> IO BufferMemoryBarrier2KHR)
-> IO (Vector BufferMemoryBarrier2KHR)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
bufferMemoryBarrierCount) (\Int
i -> Ptr BufferMemoryBarrier2KHR -> IO BufferMemoryBarrier2KHR
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @BufferMemoryBarrier2KHR ((Ptr BufferMemoryBarrier2KHR
pBufferMemoryBarriers Ptr BufferMemoryBarrier2KHR -> Int -> Ptr BufferMemoryBarrier2KHR
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
80 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr BufferMemoryBarrier2KHR)))
    Word32
imageMemoryBarrierCount <- ("pCheckpointDataCount" ::: Ptr Word32) -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 (("pDependencyInfo" ::: Ptr DependencyInfoKHR
p ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32))
    Ptr (ImageMemoryBarrier2KHR Any)
pImageMemoryBarriers <- Ptr (Ptr (ImageMemoryBarrier2KHR Any))
-> IO (Ptr (ImageMemoryBarrier2KHR Any))
forall a. Storable a => Ptr a -> IO a
peek @(Ptr (ImageMemoryBarrier2KHR _)) (("pDependencyInfo" ::: Ptr DependencyInfoKHR
p ("pDependencyInfo" ::: Ptr DependencyInfoKHR)
-> Int -> Ptr (Ptr (ImageMemoryBarrier2KHR _))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr (Ptr (ImageMemoryBarrier2KHR _))))
    Vector (SomeStruct ImageMemoryBarrier2KHR)
pImageMemoryBarriers' <- Int
-> (Int -> IO (SomeStruct ImageMemoryBarrier2KHR))
-> IO (Vector (SomeStruct ImageMemoryBarrier2KHR))
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
imageMemoryBarrierCount) (\Int
i -> Ptr (SomeStruct ImageMemoryBarrier2KHR)
-> IO (SomeStruct ImageMemoryBarrier2KHR)
forall (a :: [*] -> *).
(Extensible a,
 forall (es :: [*]).
 (Extendss a es, PeekChain es) =>
 FromCStruct (a es)) =>
Ptr (SomeStruct a) -> IO (SomeStruct a)
peekSomeCStruct (Ptr (ImageMemoryBarrier2KHR Any)
-> Ptr (SomeStruct ImageMemoryBarrier2KHR)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions ((Ptr (ImageMemoryBarrier2KHR Any)
pImageMemoryBarriers Ptr (ImageMemoryBarrier2KHR Any)
-> Int -> Ptr (ImageMemoryBarrier2KHR Any)
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
96 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (ImageMemoryBarrier2KHR _)))))
    DependencyInfoKHR -> IO DependencyInfoKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (DependencyInfoKHR -> IO DependencyInfoKHR)
-> DependencyInfoKHR -> IO DependencyInfoKHR
forall a b. (a -> b) -> a -> b
$ DependencyFlags
-> Vector MemoryBarrier2KHR
-> Vector BufferMemoryBarrier2KHR
-> Vector (SomeStruct ImageMemoryBarrier2KHR)
-> DependencyInfoKHR
DependencyInfoKHR
             DependencyFlags
dependencyFlags Vector MemoryBarrier2KHR
pMemoryBarriers' Vector BufferMemoryBarrier2KHR
pBufferMemoryBarriers' Vector (SomeStruct ImageMemoryBarrier2KHR)
pImageMemoryBarriers'

instance Zero DependencyInfoKHR where
  zero :: DependencyInfoKHR
zero = DependencyFlags
-> Vector MemoryBarrier2KHR
-> Vector BufferMemoryBarrier2KHR
-> Vector (SomeStruct ImageMemoryBarrier2KHR)
-> DependencyInfoKHR
DependencyInfoKHR
           DependencyFlags
forall a. Zero a => a
zero
           Vector MemoryBarrier2KHR
forall a. Monoid a => a
mempty
           Vector BufferMemoryBarrier2KHR
forall a. Monoid a => a
mempty
           Vector (SomeStruct ImageMemoryBarrier2KHR)
forall a. Monoid a => a
mempty


-- | VkSemaphoreSubmitInfoKHR - Structure specifying a semaphore signal or
-- wait operation
--
-- = Description
--
-- Whether this structure defines a semaphore wait or signal operation is
-- defined by how it is used.
--
-- == Valid Usage
--
-- -   #VUID-VkSemaphoreSubmitInfoKHR-stageMask-03929# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>
--     feature is not enabled, @stageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR'
--
-- -   #VUID-VkSemaphoreSubmitInfoKHR-stageMask-03930# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>
--     feature is not enabled, @stageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR' or
--     'PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR'
--
-- -   #VUID-VkSemaphoreSubmitInfoKHR-stageMask-03931# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>
--     feature is not enabled, @stageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT'
--
-- -   #VUID-VkSemaphoreSubmitInfoKHR-stageMask-03932# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>
--     feature is not enabled, @stageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT'
--
-- -   #VUID-VkSemaphoreSubmitInfoKHR-stageMask-03933# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>
--     feature is not enabled, @stageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT'
--
-- -   #VUID-VkSemaphoreSubmitInfoKHR-stageMask-03934# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>
--     feature is not enabled, @stageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_MESH_SHADER_BIT_NV'
--
-- -   #VUID-VkSemaphoreSubmitInfoKHR-stageMask-03935# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>
--     feature is not enabled, @stageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
--
-- -   #VUID-VkSemaphoreSubmitInfoKHR-stageMask-04956# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>
--     feature is not enabled, @stageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
--
-- -   #VUID-VkSemaphoreSubmitInfoKHR-stageMask-04957# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subpassShading subpass shading>
--     feature is not enabled, @stageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI'
--
-- -   #VUID-VkSemaphoreSubmitInfoKHR-stageMask-04995# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-invocationMask invocation mask image>
--     feature is not enabled, @stageMask@ /must/ not contain
--     'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
--
-- -   #VUID-VkSemaphoreSubmitInfoKHR-device-03888# If the @device@ that
--     @semaphore@ was created on is not a device group, @deviceIndex@
--     /must/ be @0@
--
-- -   #VUID-VkSemaphoreSubmitInfoKHR-device-03889# If the @device@ that
--     @semaphore@ was created on is a device group, @deviceIndex@ /must/
--     be a valid device index
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkSemaphoreSubmitInfoKHR-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR'
--
-- -   #VUID-VkSemaphoreSubmitInfoKHR-pNext-pNext# @pNext@ /must/ be @NULL@
--
-- -   #VUID-VkSemaphoreSubmitInfoKHR-semaphore-parameter# @semaphore@
--     /must/ be a valid 'Vulkan.Core10.Handles.Semaphore' handle
--
-- -   #VUID-VkSemaphoreSubmitInfoKHR-stageMask-parameter# @stageMask@
--     /must/ be a valid combination of 'PipelineStageFlagBits2KHR' values
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>,
-- 'PipelineStageFlags2KHR', 'Vulkan.Core10.Handles.Semaphore',
-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'SubmitInfo2KHR'
data SemaphoreSubmitInfoKHR = SemaphoreSubmitInfoKHR
  { -- | @semaphore@ is a 'Vulkan.Core10.Handles.Semaphore' affected by this
    -- operation.
    SemaphoreSubmitInfoKHR -> Semaphore
semaphore :: Semaphore
  , -- | @value@ is either the value used to signal @semaphore@ or the value
    -- waited on by @semaphore@, if @semaphore@ is a timeline semaphore.
    -- Otherwise it is ignored.
    SemaphoreSubmitInfoKHR -> "dstOffset" ::: DeviceSize
value :: Word64
  , -- | @stageMask@ is a 'PipelineStageFlags2KHR' mask of pipeline stages which
    -- limit the first synchronization scope of a semaphore signal operation,
    -- or second synchronization scope of a semaphore wait operation as
    -- described in the
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-waiting semaphore wait operation>
    -- and
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operation>
    -- sections of
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization the synchronization chapter>.
    SemaphoreSubmitInfoKHR -> "stageMask" ::: PipelineStageFlags2KHR
stageMask :: PipelineStageFlags2KHR
  , -- | @deviceIndex@ is the index of the device within a device group that
    -- executes the semaphore wait or signal operation.
    SemaphoreSubmitInfoKHR -> Word32
deviceIndex :: Word32
  }
  deriving (Typeable, SemaphoreSubmitInfoKHR -> SemaphoreSubmitInfoKHR -> Bool
(SemaphoreSubmitInfoKHR -> SemaphoreSubmitInfoKHR -> Bool)
-> (SemaphoreSubmitInfoKHR -> SemaphoreSubmitInfoKHR -> Bool)
-> Eq SemaphoreSubmitInfoKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SemaphoreSubmitInfoKHR -> SemaphoreSubmitInfoKHR -> Bool
$c/= :: SemaphoreSubmitInfoKHR -> SemaphoreSubmitInfoKHR -> Bool
== :: SemaphoreSubmitInfoKHR -> SemaphoreSubmitInfoKHR -> Bool
$c== :: SemaphoreSubmitInfoKHR -> SemaphoreSubmitInfoKHR -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (SemaphoreSubmitInfoKHR)
#endif
deriving instance Show SemaphoreSubmitInfoKHR

instance ToCStruct SemaphoreSubmitInfoKHR where
  withCStruct :: SemaphoreSubmitInfoKHR
-> (Ptr SemaphoreSubmitInfoKHR -> IO b) -> IO b
withCStruct SemaphoreSubmitInfoKHR
x Ptr SemaphoreSubmitInfoKHR -> IO b
f = Int -> (Ptr SemaphoreSubmitInfoKHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
48 ((Ptr SemaphoreSubmitInfoKHR -> IO b) -> IO b)
-> (Ptr SemaphoreSubmitInfoKHR -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr SemaphoreSubmitInfoKHR
p -> Ptr SemaphoreSubmitInfoKHR
-> SemaphoreSubmitInfoKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr SemaphoreSubmitInfoKHR
p SemaphoreSubmitInfoKHR
x (Ptr SemaphoreSubmitInfoKHR -> IO b
f Ptr SemaphoreSubmitInfoKHR
p)
  pokeCStruct :: Ptr SemaphoreSubmitInfoKHR
-> SemaphoreSubmitInfoKHR -> IO b -> IO b
pokeCStruct Ptr SemaphoreSubmitInfoKHR
p SemaphoreSubmitInfoKHR{Word32
"dstOffset" ::: DeviceSize
Semaphore
"stageMask" ::: PipelineStageFlags2KHR
deviceIndex :: Word32
stageMask :: "stageMask" ::: PipelineStageFlags2KHR
value :: "dstOffset" ::: DeviceSize
semaphore :: Semaphore
$sel:deviceIndex:SemaphoreSubmitInfoKHR :: SemaphoreSubmitInfoKHR -> Word32
$sel:stageMask:SemaphoreSubmitInfoKHR :: SemaphoreSubmitInfoKHR -> "stageMask" ::: PipelineStageFlags2KHR
$sel:value:SemaphoreSubmitInfoKHR :: SemaphoreSubmitInfoKHR -> "dstOffset" ::: DeviceSize
$sel:semaphore:SemaphoreSubmitInfoKHR :: SemaphoreSubmitInfoKHR -> Semaphore
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SemaphoreSubmitInfoKHR
p Ptr SemaphoreSubmitInfoKHR -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SemaphoreSubmitInfoKHR
p Ptr SemaphoreSubmitInfoKHR -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Semaphore -> Semaphore -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SemaphoreSubmitInfoKHR
p Ptr SemaphoreSubmitInfoKHR -> Int -> Ptr Semaphore
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Semaphore)) (Semaphore
semaphore)
    Ptr ("dstOffset" ::: DeviceSize)
-> ("dstOffset" ::: DeviceSize) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SemaphoreSubmitInfoKHR
p Ptr SemaphoreSubmitInfoKHR
-> Int -> Ptr ("dstOffset" ::: DeviceSize)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word64)) ("dstOffset" ::: DeviceSize
value)
    Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SemaphoreSubmitInfoKHR
p Ptr SemaphoreSubmitInfoKHR
-> Int -> Ptr ("stageMask" ::: PipelineStageFlags2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr PipelineStageFlags2KHR)) ("stageMask" ::: PipelineStageFlags2KHR
stageMask)
    ("pCheckpointDataCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SemaphoreSubmitInfoKHR
p Ptr SemaphoreSubmitInfoKHR
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32)) (Word32
deviceIndex)
    IO b
f
  cStructSize :: Int
cStructSize = Int
48
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr SemaphoreSubmitInfoKHR -> IO b -> IO b
pokeZeroCStruct Ptr SemaphoreSubmitInfoKHR
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SemaphoreSubmitInfoKHR
p Ptr SemaphoreSubmitInfoKHR -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SemaphoreSubmitInfoKHR
p Ptr SemaphoreSubmitInfoKHR -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Semaphore -> Semaphore -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SemaphoreSubmitInfoKHR
p Ptr SemaphoreSubmitInfoKHR -> Int -> Ptr Semaphore
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Semaphore)) (Semaphore
forall a. Zero a => a
zero)
    Ptr ("dstOffset" ::: DeviceSize)
-> ("dstOffset" ::: DeviceSize) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SemaphoreSubmitInfoKHR
p Ptr SemaphoreSubmitInfoKHR
-> Int -> Ptr ("dstOffset" ::: DeviceSize)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word64)) ("dstOffset" ::: DeviceSize
forall a. Zero a => a
zero)
    ("pCheckpointDataCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SemaphoreSubmitInfoKHR
p Ptr SemaphoreSubmitInfoKHR
-> Int -> "pCheckpointDataCount" ::: 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 SemaphoreSubmitInfoKHR where
  peekCStruct :: Ptr SemaphoreSubmitInfoKHR -> IO SemaphoreSubmitInfoKHR
peekCStruct Ptr SemaphoreSubmitInfoKHR
p = do
    Semaphore
semaphore <- Ptr Semaphore -> IO Semaphore
forall a. Storable a => Ptr a -> IO a
peek @Semaphore ((Ptr SemaphoreSubmitInfoKHR
p Ptr SemaphoreSubmitInfoKHR -> Int -> Ptr Semaphore
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Semaphore))
    "dstOffset" ::: DeviceSize
value <- Ptr ("dstOffset" ::: DeviceSize) -> IO ("dstOffset" ::: DeviceSize)
forall a. Storable a => Ptr a -> IO a
peek @Word64 ((Ptr SemaphoreSubmitInfoKHR
p Ptr SemaphoreSubmitInfoKHR
-> Int -> Ptr ("dstOffset" ::: DeviceSize)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word64))
    "stageMask" ::: PipelineStageFlags2KHR
stageMask <- Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> IO ("stageMask" ::: PipelineStageFlags2KHR)
forall a. Storable a => Ptr a -> IO a
peek @PipelineStageFlags2KHR ((Ptr SemaphoreSubmitInfoKHR
p Ptr SemaphoreSubmitInfoKHR
-> Int -> Ptr ("stageMask" ::: PipelineStageFlags2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr PipelineStageFlags2KHR))
    Word32
deviceIndex <- ("pCheckpointDataCount" ::: Ptr Word32) -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr SemaphoreSubmitInfoKHR
p Ptr SemaphoreSubmitInfoKHR
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32))
    SemaphoreSubmitInfoKHR -> IO SemaphoreSubmitInfoKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (SemaphoreSubmitInfoKHR -> IO SemaphoreSubmitInfoKHR)
-> SemaphoreSubmitInfoKHR -> IO SemaphoreSubmitInfoKHR
forall a b. (a -> b) -> a -> b
$ Semaphore
-> ("dstOffset" ::: DeviceSize)
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> Word32
-> SemaphoreSubmitInfoKHR
SemaphoreSubmitInfoKHR
             Semaphore
semaphore "dstOffset" ::: DeviceSize
value "stageMask" ::: PipelineStageFlags2KHR
stageMask Word32
deviceIndex

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

instance Zero SemaphoreSubmitInfoKHR where
  zero :: SemaphoreSubmitInfoKHR
zero = Semaphore
-> ("dstOffset" ::: DeviceSize)
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> Word32
-> SemaphoreSubmitInfoKHR
SemaphoreSubmitInfoKHR
           Semaphore
forall a. Zero a => a
zero
           "dstOffset" ::: DeviceSize
forall a. Zero a => a
zero
           "stageMask" ::: PipelineStageFlags2KHR
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero


-- | VkCommandBufferSubmitInfoKHR - Structure specifying a command buffer
-- submission
--
-- == Valid Usage
--
-- -   #VUID-VkCommandBufferSubmitInfoKHR-commandBuffer-03890#
--     @commandBuffer@ /must/ not have been allocated with
--     'Vulkan.Core10.Enums.CommandBufferLevel.COMMAND_BUFFER_LEVEL_SECONDARY'
--
-- -   #VUID-VkCommandBufferSubmitInfoKHR-deviceMask-03891# If @deviceMask@
--     is not @0@, it /must/ be a valid device mask
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkCommandBufferSubmitInfoKHR-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR'
--
-- -   #VUID-VkCommandBufferSubmitInfoKHR-pNext-pNext# @pNext@ /must/ be
--     @NULL@
--
-- -   #VUID-VkCommandBufferSubmitInfoKHR-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>,
-- 'Vulkan.Core10.Handles.CommandBuffer',
-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'SubmitInfo2KHR'
data CommandBufferSubmitInfoKHR = CommandBufferSubmitInfoKHR
  { -- | @commandBuffer@ is a 'Vulkan.Core10.Handles.CommandBuffer' to be
    -- submitted for execution.
    CommandBufferSubmitInfoKHR -> Ptr CommandBuffer_T
commandBuffer :: Ptr CommandBuffer_T
  , -- | @deviceMask@ is a bitmask indicating which devices in a device group
    -- execute the command buffer. A @deviceMask@ of @0@ is equivalent to
    -- setting all bits corresponding to valid devices in the group to @1@.
    CommandBufferSubmitInfoKHR -> Word32
deviceMask :: Word32
  }
  deriving (Typeable, CommandBufferSubmitInfoKHR -> CommandBufferSubmitInfoKHR -> Bool
(CommandBufferSubmitInfoKHR -> CommandBufferSubmitInfoKHR -> Bool)
-> (CommandBufferSubmitInfoKHR
    -> CommandBufferSubmitInfoKHR -> Bool)
-> Eq CommandBufferSubmitInfoKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CommandBufferSubmitInfoKHR -> CommandBufferSubmitInfoKHR -> Bool
$c/= :: CommandBufferSubmitInfoKHR -> CommandBufferSubmitInfoKHR -> Bool
== :: CommandBufferSubmitInfoKHR -> CommandBufferSubmitInfoKHR -> Bool
$c== :: CommandBufferSubmitInfoKHR -> CommandBufferSubmitInfoKHR -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (CommandBufferSubmitInfoKHR)
#endif
deriving instance Show CommandBufferSubmitInfoKHR

instance ToCStruct CommandBufferSubmitInfoKHR where
  withCStruct :: CommandBufferSubmitInfoKHR
-> (Ptr CommandBufferSubmitInfoKHR -> IO b) -> IO b
withCStruct CommandBufferSubmitInfoKHR
x Ptr CommandBufferSubmitInfoKHR -> IO b
f = Int -> (Ptr CommandBufferSubmitInfoKHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr CommandBufferSubmitInfoKHR -> IO b) -> IO b)
-> (Ptr CommandBufferSubmitInfoKHR -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr CommandBufferSubmitInfoKHR
p -> Ptr CommandBufferSubmitInfoKHR
-> CommandBufferSubmitInfoKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr CommandBufferSubmitInfoKHR
p CommandBufferSubmitInfoKHR
x (Ptr CommandBufferSubmitInfoKHR -> IO b
f Ptr CommandBufferSubmitInfoKHR
p)
  pokeCStruct :: Ptr CommandBufferSubmitInfoKHR
-> CommandBufferSubmitInfoKHR -> IO b -> IO b
pokeCStruct Ptr CommandBufferSubmitInfoKHR
p CommandBufferSubmitInfoKHR{Word32
Ptr CommandBuffer_T
deviceMask :: Word32
commandBuffer :: Ptr CommandBuffer_T
$sel:deviceMask:CommandBufferSubmitInfoKHR :: CommandBufferSubmitInfoKHR -> Word32
$sel:commandBuffer:CommandBufferSubmitInfoKHR :: CommandBufferSubmitInfoKHR -> Ptr CommandBuffer_T
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr CommandBufferSubmitInfoKHR
p Ptr CommandBufferSubmitInfoKHR -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr CommandBufferSubmitInfoKHR
p Ptr CommandBufferSubmitInfoKHR -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr (Ptr CommandBuffer_T) -> Ptr CommandBuffer_T -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr CommandBufferSubmitInfoKHR
p Ptr CommandBufferSubmitInfoKHR -> Int -> Ptr (Ptr CommandBuffer_T)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr CommandBuffer_T))) (Ptr CommandBuffer_T
commandBuffer)
    ("pCheckpointDataCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr CommandBufferSubmitInfoKHR
p Ptr CommandBufferSubmitInfoKHR
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) (Word32
deviceMask)
    IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr CommandBufferSubmitInfoKHR -> IO b -> IO b
pokeZeroCStruct Ptr CommandBufferSubmitInfoKHR
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr CommandBufferSubmitInfoKHR
p Ptr CommandBufferSubmitInfoKHR -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr CommandBufferSubmitInfoKHR
p Ptr CommandBufferSubmitInfoKHR -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr (Ptr CommandBuffer_T) -> Ptr CommandBuffer_T -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr CommandBufferSubmitInfoKHR
p Ptr CommandBufferSubmitInfoKHR -> Int -> Ptr (Ptr CommandBuffer_T)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr CommandBuffer_T))) (Ptr CommandBuffer_T
forall a. Zero a => a
zero)
    ("pCheckpointDataCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr CommandBufferSubmitInfoKHR
p Ptr CommandBufferSubmitInfoKHR
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct CommandBufferSubmitInfoKHR where
  peekCStruct :: Ptr CommandBufferSubmitInfoKHR -> IO CommandBufferSubmitInfoKHR
peekCStruct Ptr CommandBufferSubmitInfoKHR
p = do
    Ptr CommandBuffer_T
commandBuffer <- Ptr (Ptr CommandBuffer_T) -> IO (Ptr CommandBuffer_T)
forall a. Storable a => Ptr a -> IO a
peek @(Ptr CommandBuffer_T) ((Ptr CommandBufferSubmitInfoKHR
p Ptr CommandBufferSubmitInfoKHR -> Int -> Ptr (Ptr CommandBuffer_T)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr CommandBuffer_T)))
    Word32
deviceMask <- ("pCheckpointDataCount" ::: Ptr Word32) -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr CommandBufferSubmitInfoKHR
p Ptr CommandBufferSubmitInfoKHR
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32))
    CommandBufferSubmitInfoKHR -> IO CommandBufferSubmitInfoKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CommandBufferSubmitInfoKHR -> IO CommandBufferSubmitInfoKHR)
-> CommandBufferSubmitInfoKHR -> IO CommandBufferSubmitInfoKHR
forall a b. (a -> b) -> a -> b
$ Ptr CommandBuffer_T -> Word32 -> CommandBufferSubmitInfoKHR
CommandBufferSubmitInfoKHR
             Ptr CommandBuffer_T
commandBuffer Word32
deviceMask

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

instance Zero CommandBufferSubmitInfoKHR where
  zero :: CommandBufferSubmitInfoKHR
zero = Ptr CommandBuffer_T -> Word32 -> CommandBufferSubmitInfoKHR
CommandBufferSubmitInfoKHR
           Ptr CommandBuffer_T
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero


-- | VkSubmitInfo2KHR - Structure specifying a queue submit operation
--
-- == Valid Usage
--
-- -   #VUID-VkSubmitInfo2KHR-semaphore-03881# If the same semaphore is
--     used as the @semaphore@ member of both an element of
--     @pSignalSemaphoreInfos@ and @pWaitSemaphoreInfos@, and that
--     semaphore is a timeline semaphore, the @value@ member of the
--     @pSignalSemaphoreInfos@ element /must/ be greater than the @value@
--     member of the @pWaitSemaphoreInfos@ element
--
-- -   #VUID-VkSubmitInfo2KHR-semaphore-03882# If the @semaphore@ member of
--     any element of @pSignalSemaphoreInfos@ is a timeline semaphore, the
--     @value@ member of that element /must/ have a value greater than the
--     current value of the semaphore when the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operation>
--     is executed
--
-- -   #VUID-VkSubmitInfo2KHR-semaphore-03883# If the @semaphore@ member of
--     any element of @pSignalSemaphoreInfos@ is a timeline semaphore, the
--     @value@ member of that element /must/ have a value which does not
--     differ from the current value of the semaphore or the value of any
--     outstanding semaphore wait or signal operation on that semaphore by
--     more than
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxTimelineSemaphoreValueDifference maxTimelineSemaphoreValueDifference>
--
-- -   #VUID-VkSubmitInfo2KHR-semaphore-03884# If the @semaphore@ member of
--     any element of @pWaitSemaphoreInfos@ is a timeline semaphore, the
--     @value@ member of that element /must/ have a value which does not
--     differ from the current value of the semaphore or the value of any
--     outstanding semaphore wait or signal operation on that semaphore by
--     more than
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxTimelineSemaphoreValueDifference maxTimelineSemaphoreValueDifference>
--
-- -   #VUID-VkSubmitInfo2KHR-flags-03886# If @flags@ includes
--     'SUBMIT_PROTECTED_BIT_KHR', all elements of @pCommandBuffers@ /must/
--     be protected command buffers
--
-- -   #VUID-VkSubmitInfo2KHR-flags-03887# If @flags@ does not include
--     'SUBMIT_PROTECTED_BIT_KHR', each element of @pCommandBuffers@ /must/
--     not be a protected command buffer
--
-- -   #VUID-VkSubmitInfo2KHR-commandBuffer-06192# If any @commandBuffer@
--     member of an element of @pCommandBufferInfos@ contains any
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-suspension resumed render pass instances>,
--     they /must/ be suspended by a render pass instance earlier in
--     submission order within @pCommandBufferInfos@
--
-- -   #VUID-VkSubmitInfo2KHR-commandBuffer-06010# If any @commandBuffer@
--     member of an element of @pCommandBufferInfos@ contains any
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-suspension suspended render pass instances>,
--     they /must/ be resumed by a render pass instance later in submission
--     order within @pCommandBufferInfos@
--
-- -   #VUID-VkSubmitInfo2KHR-commandBuffer-06011# If any @commandBuffer@
--     member of an element of @pCommandBufferInfos@ contains any
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-suspension suspended render pass instances>,
--     there /must/ be no action or synchronization commands between that
--     render pass instance and the render pass instance that resumes it
--
-- -   #VUID-VkSubmitInfo2KHR-commandBuffer-06012# If any @commandBuffer@
--     member of an element of @pCommandBufferInfos@ contains any
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-suspension suspended render pass instances>,
--     there /must/ be no render pass instances between that render pass
--     instance and the render pass instance that resumes it
--
-- -   #VUID-VkSubmitInfo2KHR-variableSampleLocations-06013# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-variableSampleLocations variableSampleLocations>
--     limit is not supported, and any @commandBuffer@ member of an element
--     of @pCommandBufferInfos@ contains any
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-suspension suspended render pass instances>,
--     where a graphics pipeline has been bound, any pipelines bound in the
--     render pass instance that resumes it, or any subsequent render pass
--     instances that resume from that one and so on, /must/ use the same
--     sample locations
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkSubmitInfo2KHR-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SUBMIT_INFO_2_KHR'
--
-- -   #VUID-VkSubmitInfo2KHR-pNext-pNext# Each @pNext@ member of any
--     structure (including this one) in the @pNext@ chain /must/ be either
--     @NULL@ or a pointer to a valid instance of
--     'Vulkan.Extensions.VK_KHR_performance_query.PerformanceQuerySubmitInfoKHR',
--     'Vulkan.Extensions.VK_KHR_win32_keyed_mutex.Win32KeyedMutexAcquireReleaseInfoKHR',
--     or
--     'Vulkan.Extensions.VK_NV_win32_keyed_mutex.Win32KeyedMutexAcquireReleaseInfoNV'
--
-- -   #VUID-VkSubmitInfo2KHR-sType-unique# The @sType@ value of each
--     struct in the @pNext@ chain /must/ be unique
--
-- -   #VUID-VkSubmitInfo2KHR-flags-parameter# @flags@ /must/ be a valid
--     combination of 'SubmitFlagBitsKHR' values
--
-- -   #VUID-VkSubmitInfo2KHR-pWaitSemaphoreInfos-parameter# If
--     @waitSemaphoreInfoCount@ is not @0@, @pWaitSemaphoreInfos@ /must/ be
--     a valid pointer to an array of @waitSemaphoreInfoCount@ valid
--     'SemaphoreSubmitInfoKHR' structures
--
-- -   #VUID-VkSubmitInfo2KHR-pCommandBufferInfos-parameter# If
--     @commandBufferInfoCount@ is not @0@, @pCommandBufferInfos@ /must/ be
--     a valid pointer to an array of @commandBufferInfoCount@ valid
--     'CommandBufferSubmitInfoKHR' structures
--
-- -   #VUID-VkSubmitInfo2KHR-pSignalSemaphoreInfos-parameter# If
--     @signalSemaphoreInfoCount@ is not @0@, @pSignalSemaphoreInfos@
--     /must/ be a valid pointer to an array of @signalSemaphoreInfoCount@
--     valid 'SemaphoreSubmitInfoKHR' structures
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>,
-- 'CommandBufferSubmitInfoKHR', 'SemaphoreSubmitInfoKHR',
-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'SubmitFlagsKHR',
-- 'queueSubmit2KHR'
data SubmitInfo2KHR (es :: [Type]) = SubmitInfo2KHR
  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
    SubmitInfo2KHR es -> Chain es
next :: Chain es
  , -- | @flags@ is a bitmask of 'SubmitFlagBitsKHR'.
    SubmitInfo2KHR es -> SubmitFlagsKHR
flags :: SubmitFlagsKHR
  , -- | @pWaitSemaphoreInfos@ is a pointer to an array of
    -- 'SemaphoreSubmitInfoKHR' structures defining
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-waiting semaphore wait operations>.
    SubmitInfo2KHR es -> Vector SemaphoreSubmitInfoKHR
waitSemaphoreInfos :: Vector SemaphoreSubmitInfoKHR
  , -- | @pCommandBufferInfos@ is a pointer to an array of
    -- 'CommandBufferSubmitInfoKHR' structures describing command buffers to
    -- execute in the batch.
    SubmitInfo2KHR es -> Vector CommandBufferSubmitInfoKHR
commandBufferInfos :: Vector CommandBufferSubmitInfoKHR
  , -- | @pSignalSemaphoreInfos@ is a pointer to an array of
    -- 'SemaphoreSubmitInfoKHR' describing
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operations>.
    SubmitInfo2KHR es -> Vector SemaphoreSubmitInfoKHR
signalSemaphoreInfos :: Vector SemaphoreSubmitInfoKHR
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (SubmitInfo2KHR (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (SubmitInfo2KHR es)

instance Extensible SubmitInfo2KHR where
  extensibleTypeName :: String
extensibleTypeName = String
"SubmitInfo2KHR"
  setNext :: SubmitInfo2KHR ds -> Chain es -> SubmitInfo2KHR es
setNext SubmitInfo2KHR{Vector SemaphoreSubmitInfoKHR
Vector CommandBufferSubmitInfoKHR
Chain ds
SubmitFlagsKHR
signalSemaphoreInfos :: Vector SemaphoreSubmitInfoKHR
commandBufferInfos :: Vector CommandBufferSubmitInfoKHR
waitSemaphoreInfos :: Vector SemaphoreSubmitInfoKHR
flags :: SubmitFlagsKHR
next :: Chain ds
$sel:signalSemaphoreInfos:SubmitInfo2KHR :: forall (es :: [*]).
SubmitInfo2KHR es -> Vector SemaphoreSubmitInfoKHR
$sel:commandBufferInfos:SubmitInfo2KHR :: forall (es :: [*]).
SubmitInfo2KHR es -> Vector CommandBufferSubmitInfoKHR
$sel:waitSemaphoreInfos:SubmitInfo2KHR :: forall (es :: [*]).
SubmitInfo2KHR es -> Vector SemaphoreSubmitInfoKHR
$sel:flags:SubmitInfo2KHR :: forall (es :: [*]). SubmitInfo2KHR es -> SubmitFlagsKHR
$sel:next:SubmitInfo2KHR :: forall (es :: [*]). SubmitInfo2KHR es -> Chain es
..} Chain es
next' = SubmitInfo2KHR :: forall (es :: [*]).
Chain es
-> SubmitFlagsKHR
-> Vector SemaphoreSubmitInfoKHR
-> Vector CommandBufferSubmitInfoKHR
-> Vector SemaphoreSubmitInfoKHR
-> SubmitInfo2KHR es
SubmitInfo2KHR{$sel:next:SubmitInfo2KHR :: Chain es
next = Chain es
next', Vector SemaphoreSubmitInfoKHR
Vector CommandBufferSubmitInfoKHR
SubmitFlagsKHR
signalSemaphoreInfos :: Vector SemaphoreSubmitInfoKHR
commandBufferInfos :: Vector CommandBufferSubmitInfoKHR
waitSemaphoreInfos :: Vector SemaphoreSubmitInfoKHR
flags :: SubmitFlagsKHR
$sel:signalSemaphoreInfos:SubmitInfo2KHR :: Vector SemaphoreSubmitInfoKHR
$sel:commandBufferInfos:SubmitInfo2KHR :: Vector CommandBufferSubmitInfoKHR
$sel:waitSemaphoreInfos:SubmitInfo2KHR :: Vector SemaphoreSubmitInfoKHR
$sel:flags:SubmitInfo2KHR :: SubmitFlagsKHR
..}
  getNext :: SubmitInfo2KHR es -> Chain es
getNext SubmitInfo2KHR{Vector SemaphoreSubmitInfoKHR
Vector CommandBufferSubmitInfoKHR
Chain es
SubmitFlagsKHR
signalSemaphoreInfos :: Vector SemaphoreSubmitInfoKHR
commandBufferInfos :: Vector CommandBufferSubmitInfoKHR
waitSemaphoreInfos :: Vector SemaphoreSubmitInfoKHR
flags :: SubmitFlagsKHR
next :: Chain es
$sel:signalSemaphoreInfos:SubmitInfo2KHR :: forall (es :: [*]).
SubmitInfo2KHR es -> Vector SemaphoreSubmitInfoKHR
$sel:commandBufferInfos:SubmitInfo2KHR :: forall (es :: [*]).
SubmitInfo2KHR es -> Vector CommandBufferSubmitInfoKHR
$sel:waitSemaphoreInfos:SubmitInfo2KHR :: forall (es :: [*]).
SubmitInfo2KHR es -> Vector SemaphoreSubmitInfoKHR
$sel:flags:SubmitInfo2KHR :: forall (es :: [*]). SubmitInfo2KHR es -> SubmitFlagsKHR
$sel:next:SubmitInfo2KHR :: forall (es :: [*]). SubmitInfo2KHR es -> Chain es
..} = Chain es
next
  extends :: forall e b proxy. Typeable e => proxy e -> (Extends SubmitInfo2KHR e => b) -> Maybe b
  extends :: proxy e -> (Extends SubmitInfo2KHR e => b) -> Maybe b
extends proxy e
_ Extends SubmitInfo2KHR e => b
f
    | Just e :~: PerformanceQuerySubmitInfoKHR
Refl <- (Typeable e, Typeable PerformanceQuerySubmitInfoKHR) =>
Maybe (e :~: PerformanceQuerySubmitInfoKHR)
forall k (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
eqT @e @PerformanceQuerySubmitInfoKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends SubmitInfo2KHR e => b
f
    | Just e :~: Win32KeyedMutexAcquireReleaseInfoKHR
Refl <- (Typeable e, Typeable Win32KeyedMutexAcquireReleaseInfoKHR) =>
Maybe (e :~: Win32KeyedMutexAcquireReleaseInfoKHR)
forall k (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
eqT @e @Win32KeyedMutexAcquireReleaseInfoKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends SubmitInfo2KHR e => b
f
    | Just e :~: Win32KeyedMutexAcquireReleaseInfoNV
Refl <- (Typeable e, Typeable Win32KeyedMutexAcquireReleaseInfoNV) =>
Maybe (e :~: Win32KeyedMutexAcquireReleaseInfoNV)
forall k (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
eqT @e @Win32KeyedMutexAcquireReleaseInfoNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends SubmitInfo2KHR e => b
f
    | Bool
otherwise = Maybe b
forall a. Maybe a
Nothing

instance (Extendss SubmitInfo2KHR es, PokeChain es) => ToCStruct (SubmitInfo2KHR es) where
  withCStruct :: SubmitInfo2KHR es -> (Ptr (SubmitInfo2KHR es) -> IO b) -> IO b
withCStruct SubmitInfo2KHR es
x Ptr (SubmitInfo2KHR es) -> IO b
f = Int -> (Ptr (SubmitInfo2KHR es) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
64 ((Ptr (SubmitInfo2KHR es) -> IO b) -> IO b)
-> (Ptr (SubmitInfo2KHR es) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (SubmitInfo2KHR es)
p -> Ptr (SubmitInfo2KHR es) -> SubmitInfo2KHR es -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (SubmitInfo2KHR es)
p SubmitInfo2KHR es
x (Ptr (SubmitInfo2KHR es) -> IO b
f Ptr (SubmitInfo2KHR es)
p)
  pokeCStruct :: Ptr (SubmitInfo2KHR es) -> SubmitInfo2KHR es -> IO b -> IO b
pokeCStruct Ptr (SubmitInfo2KHR es)
p SubmitInfo2KHR{Vector SemaphoreSubmitInfoKHR
Vector CommandBufferSubmitInfoKHR
Chain es
SubmitFlagsKHR
signalSemaphoreInfos :: Vector SemaphoreSubmitInfoKHR
commandBufferInfos :: Vector CommandBufferSubmitInfoKHR
waitSemaphoreInfos :: Vector SemaphoreSubmitInfoKHR
flags :: SubmitFlagsKHR
next :: Chain es
$sel:signalSemaphoreInfos:SubmitInfo2KHR :: forall (es :: [*]).
SubmitInfo2KHR es -> Vector SemaphoreSubmitInfoKHR
$sel:commandBufferInfos:SubmitInfo2KHR :: forall (es :: [*]).
SubmitInfo2KHR es -> Vector CommandBufferSubmitInfoKHR
$sel:waitSemaphoreInfos:SubmitInfo2KHR :: forall (es :: [*]).
SubmitInfo2KHR es -> Vector SemaphoreSubmitInfoKHR
$sel:flags:SubmitInfo2KHR :: forall (es :: [*]). SubmitInfo2KHR es -> SubmitFlagsKHR
$sel:next:SubmitInfo2KHR :: forall (es :: [*]). SubmitInfo2KHR es -> Chain es
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (SubmitInfo2KHR es)
p Ptr (SubmitInfo2KHR es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_SUBMIT_INFO_2_KHR)
    Ptr ()
pNext'' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
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
withChain (Chain es
next)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (SubmitInfo2KHR es)
p Ptr (SubmitInfo2KHR es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) Ptr ()
pNext''
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr SubmitFlagsKHR -> SubmitFlagsKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (SubmitInfo2KHR es)
p Ptr (SubmitInfo2KHR es) -> Int -> Ptr SubmitFlagsKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr SubmitFlagsKHR)) (SubmitFlagsKHR
flags)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ ("pCheckpointDataCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (SubmitInfo2KHR es)
p Ptr (SubmitInfo2KHR es)
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) ((Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector SemaphoreSubmitInfoKHR -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector SemaphoreSubmitInfoKHR -> Int)
-> Vector SemaphoreSubmitInfoKHR -> Int
forall a b. (a -> b) -> a -> b
$ (Vector SemaphoreSubmitInfoKHR
waitSemaphoreInfos)) :: Word32))
    Ptr SemaphoreSubmitInfoKHR
pPWaitSemaphoreInfos' <- ((Ptr SemaphoreSubmitInfoKHR -> IO b) -> IO b)
-> ContT b IO (Ptr SemaphoreSubmitInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr SemaphoreSubmitInfoKHR -> IO b) -> IO b)
 -> ContT b IO (Ptr SemaphoreSubmitInfoKHR))
-> ((Ptr SemaphoreSubmitInfoKHR -> IO b) -> IO b)
-> ContT b IO (Ptr SemaphoreSubmitInfoKHR)
forall a b. (a -> b) -> a -> b
$ Int -> (Ptr SemaphoreSubmitInfoKHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @SemaphoreSubmitInfoKHR ((Vector SemaphoreSubmitInfoKHR -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector SemaphoreSubmitInfoKHR
waitSemaphoreInfos)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
48)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ (Int -> SemaphoreSubmitInfoKHR -> IO ())
-> Vector SemaphoreSubmitInfoKHR -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i SemaphoreSubmitInfoKHR
e -> Ptr SemaphoreSubmitInfoKHR -> SemaphoreSubmitInfoKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr SemaphoreSubmitInfoKHR
pPWaitSemaphoreInfos' Ptr SemaphoreSubmitInfoKHR -> Int -> Ptr SemaphoreSubmitInfoKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
48 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr SemaphoreSubmitInfoKHR) (SemaphoreSubmitInfoKHR
e)) (Vector SemaphoreSubmitInfoKHR
waitSemaphoreInfos)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr SemaphoreSubmitInfoKHR)
-> Ptr SemaphoreSubmitInfoKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (SubmitInfo2KHR es)
p Ptr (SubmitInfo2KHR es) -> Int -> Ptr (Ptr SemaphoreSubmitInfoKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr SemaphoreSubmitInfoKHR))) (Ptr SemaphoreSubmitInfoKHR
pPWaitSemaphoreInfos')
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ ("pCheckpointDataCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (SubmitInfo2KHR es)
p Ptr (SubmitInfo2KHR es)
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32)) ((Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector CommandBufferSubmitInfoKHR -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector CommandBufferSubmitInfoKHR -> Int)
-> Vector CommandBufferSubmitInfoKHR -> Int
forall a b. (a -> b) -> a -> b
$ (Vector CommandBufferSubmitInfoKHR
commandBufferInfos)) :: Word32))
    Ptr CommandBufferSubmitInfoKHR
pPCommandBufferInfos' <- ((Ptr CommandBufferSubmitInfoKHR -> IO b) -> IO b)
-> ContT b IO (Ptr CommandBufferSubmitInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr CommandBufferSubmitInfoKHR -> IO b) -> IO b)
 -> ContT b IO (Ptr CommandBufferSubmitInfoKHR))
-> ((Ptr CommandBufferSubmitInfoKHR -> IO b) -> IO b)
-> ContT b IO (Ptr CommandBufferSubmitInfoKHR)
forall a b. (a -> b) -> a -> b
$ Int -> (Ptr CommandBufferSubmitInfoKHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @CommandBufferSubmitInfoKHR ((Vector CommandBufferSubmitInfoKHR -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector CommandBufferSubmitInfoKHR
commandBufferInfos)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
32)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ (Int -> CommandBufferSubmitInfoKHR -> IO ())
-> Vector CommandBufferSubmitInfoKHR -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i CommandBufferSubmitInfoKHR
e -> Ptr CommandBufferSubmitInfoKHR
-> CommandBufferSubmitInfoKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CommandBufferSubmitInfoKHR
pPCommandBufferInfos' Ptr CommandBufferSubmitInfoKHR
-> Int -> Ptr CommandBufferSubmitInfoKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
32 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr CommandBufferSubmitInfoKHR) (CommandBufferSubmitInfoKHR
e)) (Vector CommandBufferSubmitInfoKHR
commandBufferInfos)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr CommandBufferSubmitInfoKHR)
-> Ptr CommandBufferSubmitInfoKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (SubmitInfo2KHR es)
p Ptr (SubmitInfo2KHR es)
-> Int -> Ptr (Ptr CommandBufferSubmitInfoKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr (Ptr CommandBufferSubmitInfoKHR))) (Ptr CommandBufferSubmitInfoKHR
pPCommandBufferInfos')
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ ("pCheckpointDataCount" ::: Ptr Word32) -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (SubmitInfo2KHR es)
p Ptr (SubmitInfo2KHR es)
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32)) ((Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector SemaphoreSubmitInfoKHR -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector SemaphoreSubmitInfoKHR -> Int)
-> Vector SemaphoreSubmitInfoKHR -> Int
forall a b. (a -> b) -> a -> b
$ (Vector SemaphoreSubmitInfoKHR
signalSemaphoreInfos)) :: Word32))
    Ptr SemaphoreSubmitInfoKHR
pPSignalSemaphoreInfos' <- ((Ptr SemaphoreSubmitInfoKHR -> IO b) -> IO b)
-> ContT b IO (Ptr SemaphoreSubmitInfoKHR)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr SemaphoreSubmitInfoKHR -> IO b) -> IO b)
 -> ContT b IO (Ptr SemaphoreSubmitInfoKHR))
-> ((Ptr SemaphoreSubmitInfoKHR -> IO b) -> IO b)
-> ContT b IO (Ptr SemaphoreSubmitInfoKHR)
forall a b. (a -> b) -> a -> b
$ Int -> (Ptr SemaphoreSubmitInfoKHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @SemaphoreSubmitInfoKHR ((Vector SemaphoreSubmitInfoKHR -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector SemaphoreSubmitInfoKHR
signalSemaphoreInfos)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
48)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ (Int -> SemaphoreSubmitInfoKHR -> IO ())
-> Vector SemaphoreSubmitInfoKHR -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i SemaphoreSubmitInfoKHR
e -> Ptr SemaphoreSubmitInfoKHR -> SemaphoreSubmitInfoKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr SemaphoreSubmitInfoKHR
pPSignalSemaphoreInfos' Ptr SemaphoreSubmitInfoKHR -> Int -> Ptr SemaphoreSubmitInfoKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
48 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr SemaphoreSubmitInfoKHR) (SemaphoreSubmitInfoKHR
e)) (Vector SemaphoreSubmitInfoKHR
signalSemaphoreInfos)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr SemaphoreSubmitInfoKHR)
-> Ptr SemaphoreSubmitInfoKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (SubmitInfo2KHR es)
p Ptr (SubmitInfo2KHR es) -> Int -> Ptr (Ptr SemaphoreSubmitInfoKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr (Ptr SemaphoreSubmitInfoKHR))) (Ptr SemaphoreSubmitInfoKHR
pPSignalSemaphoreInfos')
    IO b -> ContT b IO b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
64
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr (SubmitInfo2KHR es) -> IO b -> IO b
pokeZeroCStruct Ptr (SubmitInfo2KHR es)
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (SubmitInfo2KHR es)
p Ptr (SubmitInfo2KHR es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_SUBMIT_INFO_2_KHR)
    Ptr ()
pNext' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
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 a. PokeChain es => (Ptr (Chain es) -> IO a) -> IO a
forall (es :: [*]) a.
PokeChain es =>
(Ptr (Chain es) -> IO a) -> IO a
withZeroChain @es
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (SubmitInfo2KHR es)
p Ptr (SubmitInfo2KHR es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) Ptr ()
pNext'
    IO b -> ContT b IO b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f

instance (Extendss SubmitInfo2KHR es, PeekChain es) => FromCStruct (SubmitInfo2KHR es) where
  peekCStruct :: Ptr (SubmitInfo2KHR es) -> IO (SubmitInfo2KHR es)
peekCStruct Ptr (SubmitInfo2KHR es)
p = do
    Ptr ()
pNext <- Ptr (Ptr ()) -> IO (Ptr ())
forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr (SubmitInfo2KHR es)
p Ptr (SubmitInfo2KHR es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ())))
    Chain es
next <- Ptr (Chain es) -> IO (Chain es)
forall (es :: [*]). PeekChain es => Ptr (Chain es) -> IO (Chain es)
peekChain (Ptr () -> Ptr (Chain es)
forall a b. Ptr a -> Ptr b
castPtr Ptr ()
pNext)
    SubmitFlagsKHR
flags <- Ptr SubmitFlagsKHR -> IO SubmitFlagsKHR
forall a. Storable a => Ptr a -> IO a
peek @SubmitFlagsKHR ((Ptr (SubmitInfo2KHR es)
p Ptr (SubmitInfo2KHR es) -> Int -> Ptr SubmitFlagsKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr SubmitFlagsKHR))
    Word32
waitSemaphoreInfoCount <- ("pCheckpointDataCount" ::: Ptr Word32) -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr (SubmitInfo2KHR es)
p Ptr (SubmitInfo2KHR es)
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32))
    Ptr SemaphoreSubmitInfoKHR
pWaitSemaphoreInfos <- Ptr (Ptr SemaphoreSubmitInfoKHR) -> IO (Ptr SemaphoreSubmitInfoKHR)
forall a. Storable a => Ptr a -> IO a
peek @(Ptr SemaphoreSubmitInfoKHR) ((Ptr (SubmitInfo2KHR es)
p Ptr (SubmitInfo2KHR es) -> Int -> Ptr (Ptr SemaphoreSubmitInfoKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr SemaphoreSubmitInfoKHR)))
    Vector SemaphoreSubmitInfoKHR
pWaitSemaphoreInfos' <- Int
-> (Int -> IO SemaphoreSubmitInfoKHR)
-> IO (Vector SemaphoreSubmitInfoKHR)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
waitSemaphoreInfoCount) (\Int
i -> Ptr SemaphoreSubmitInfoKHR -> IO SemaphoreSubmitInfoKHR
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @SemaphoreSubmitInfoKHR ((Ptr SemaphoreSubmitInfoKHR
pWaitSemaphoreInfos Ptr SemaphoreSubmitInfoKHR -> Int -> Ptr SemaphoreSubmitInfoKHR
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
48 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr SemaphoreSubmitInfoKHR)))
    Word32
commandBufferInfoCount <- ("pCheckpointDataCount" ::: Ptr Word32) -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr (SubmitInfo2KHR es)
p Ptr (SubmitInfo2KHR es)
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32))
    Ptr CommandBufferSubmitInfoKHR
pCommandBufferInfos <- Ptr (Ptr CommandBufferSubmitInfoKHR)
-> IO (Ptr CommandBufferSubmitInfoKHR)
forall a. Storable a => Ptr a -> IO a
peek @(Ptr CommandBufferSubmitInfoKHR) ((Ptr (SubmitInfo2KHR es)
p Ptr (SubmitInfo2KHR es)
-> Int -> Ptr (Ptr CommandBufferSubmitInfoKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr (Ptr CommandBufferSubmitInfoKHR)))
    Vector CommandBufferSubmitInfoKHR
pCommandBufferInfos' <- Int
-> (Int -> IO CommandBufferSubmitInfoKHR)
-> IO (Vector CommandBufferSubmitInfoKHR)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
commandBufferInfoCount) (\Int
i -> Ptr CommandBufferSubmitInfoKHR -> IO CommandBufferSubmitInfoKHR
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @CommandBufferSubmitInfoKHR ((Ptr CommandBufferSubmitInfoKHR
pCommandBufferInfos Ptr CommandBufferSubmitInfoKHR
-> Int -> Ptr CommandBufferSubmitInfoKHR
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
32 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr CommandBufferSubmitInfoKHR)))
    Word32
signalSemaphoreInfoCount <- ("pCheckpointDataCount" ::: Ptr Word32) -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr (SubmitInfo2KHR es)
p Ptr (SubmitInfo2KHR es)
-> Int -> "pCheckpointDataCount" ::: Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32))
    Ptr SemaphoreSubmitInfoKHR
pSignalSemaphoreInfos <- Ptr (Ptr SemaphoreSubmitInfoKHR) -> IO (Ptr SemaphoreSubmitInfoKHR)
forall a. Storable a => Ptr a -> IO a
peek @(Ptr SemaphoreSubmitInfoKHR) ((Ptr (SubmitInfo2KHR es)
p Ptr (SubmitInfo2KHR es) -> Int -> Ptr (Ptr SemaphoreSubmitInfoKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr (Ptr SemaphoreSubmitInfoKHR)))
    Vector SemaphoreSubmitInfoKHR
pSignalSemaphoreInfos' <- Int
-> (Int -> IO SemaphoreSubmitInfoKHR)
-> IO (Vector SemaphoreSubmitInfoKHR)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
signalSemaphoreInfoCount) (\Int
i -> Ptr SemaphoreSubmitInfoKHR -> IO SemaphoreSubmitInfoKHR
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @SemaphoreSubmitInfoKHR ((Ptr SemaphoreSubmitInfoKHR
pSignalSemaphoreInfos Ptr SemaphoreSubmitInfoKHR -> Int -> Ptr SemaphoreSubmitInfoKHR
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
48 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr SemaphoreSubmitInfoKHR)))
    SubmitInfo2KHR es -> IO (SubmitInfo2KHR es)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (SubmitInfo2KHR es -> IO (SubmitInfo2KHR es))
-> SubmitInfo2KHR es -> IO (SubmitInfo2KHR es)
forall a b. (a -> b) -> a -> b
$ Chain es
-> SubmitFlagsKHR
-> Vector SemaphoreSubmitInfoKHR
-> Vector CommandBufferSubmitInfoKHR
-> Vector SemaphoreSubmitInfoKHR
-> SubmitInfo2KHR es
forall (es :: [*]).
Chain es
-> SubmitFlagsKHR
-> Vector SemaphoreSubmitInfoKHR
-> Vector CommandBufferSubmitInfoKHR
-> Vector SemaphoreSubmitInfoKHR
-> SubmitInfo2KHR es
SubmitInfo2KHR
             Chain es
next SubmitFlagsKHR
flags Vector SemaphoreSubmitInfoKHR
pWaitSemaphoreInfos' Vector CommandBufferSubmitInfoKHR
pCommandBufferInfos' Vector SemaphoreSubmitInfoKHR
pSignalSemaphoreInfos'

instance es ~ '[] => Zero (SubmitInfo2KHR es) where
  zero :: SubmitInfo2KHR es
zero = Chain es
-> SubmitFlagsKHR
-> Vector SemaphoreSubmitInfoKHR
-> Vector CommandBufferSubmitInfoKHR
-> Vector SemaphoreSubmitInfoKHR
-> SubmitInfo2KHR es
forall (es :: [*]).
Chain es
-> SubmitFlagsKHR
-> Vector SemaphoreSubmitInfoKHR
-> Vector CommandBufferSubmitInfoKHR
-> Vector SemaphoreSubmitInfoKHR
-> SubmitInfo2KHR es
SubmitInfo2KHR
           ()
           SubmitFlagsKHR
forall a. Zero a => a
zero
           Vector SemaphoreSubmitInfoKHR
forall a. Monoid a => a
mempty
           Vector CommandBufferSubmitInfoKHR
forall a. Monoid a => a
mempty
           Vector SemaphoreSubmitInfoKHR
forall a. Monoid a => a
mempty


-- | VkQueueFamilyCheckpointProperties2NV - Return structure for queue family
-- checkpoint information query
--
-- = Description
--
-- Additional queue family information can be queried by setting
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.QueueFamilyProperties2'::@pNext@
-- to point to a 'QueueFamilyCheckpointProperties2NV' structure.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_device_diagnostic_checkpoints VK_NV_device_diagnostic_checkpoints>,
-- 'PipelineStageFlags2KHR',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data QueueFamilyCheckpointProperties2NV = QueueFamilyCheckpointProperties2NV
  { -- | @checkpointExecutionStageMask@ is a mask indicating which pipeline
    -- stages the implementation can execute checkpoint markers in.
    QueueFamilyCheckpointProperties2NV
-> "stageMask" ::: PipelineStageFlags2KHR
checkpointExecutionStageMask :: PipelineStageFlags2KHR }
  deriving (Typeable, QueueFamilyCheckpointProperties2NV
-> QueueFamilyCheckpointProperties2NV -> Bool
(QueueFamilyCheckpointProperties2NV
 -> QueueFamilyCheckpointProperties2NV -> Bool)
-> (QueueFamilyCheckpointProperties2NV
    -> QueueFamilyCheckpointProperties2NV -> Bool)
-> Eq QueueFamilyCheckpointProperties2NV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: QueueFamilyCheckpointProperties2NV
-> QueueFamilyCheckpointProperties2NV -> Bool
$c/= :: QueueFamilyCheckpointProperties2NV
-> QueueFamilyCheckpointProperties2NV -> Bool
== :: QueueFamilyCheckpointProperties2NV
-> QueueFamilyCheckpointProperties2NV -> Bool
$c== :: QueueFamilyCheckpointProperties2NV
-> QueueFamilyCheckpointProperties2NV -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (QueueFamilyCheckpointProperties2NV)
#endif
deriving instance Show QueueFamilyCheckpointProperties2NV

instance ToCStruct QueueFamilyCheckpointProperties2NV where
  withCStruct :: QueueFamilyCheckpointProperties2NV
-> (Ptr QueueFamilyCheckpointProperties2NV -> IO b) -> IO b
withCStruct QueueFamilyCheckpointProperties2NV
x Ptr QueueFamilyCheckpointProperties2NV -> IO b
f = Int -> (Ptr QueueFamilyCheckpointProperties2NV -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr QueueFamilyCheckpointProperties2NV -> IO b) -> IO b)
-> (Ptr QueueFamilyCheckpointProperties2NV -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr QueueFamilyCheckpointProperties2NV
p -> Ptr QueueFamilyCheckpointProperties2NV
-> QueueFamilyCheckpointProperties2NV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr QueueFamilyCheckpointProperties2NV
p QueueFamilyCheckpointProperties2NV
x (Ptr QueueFamilyCheckpointProperties2NV -> IO b
f Ptr QueueFamilyCheckpointProperties2NV
p)
  pokeCStruct :: Ptr QueueFamilyCheckpointProperties2NV
-> QueueFamilyCheckpointProperties2NV -> IO b -> IO b
pokeCStruct Ptr QueueFamilyCheckpointProperties2NV
p QueueFamilyCheckpointProperties2NV{"stageMask" ::: PipelineStageFlags2KHR
checkpointExecutionStageMask :: "stageMask" ::: PipelineStageFlags2KHR
$sel:checkpointExecutionStageMask:QueueFamilyCheckpointProperties2NV :: QueueFamilyCheckpointProperties2NV
-> "stageMask" ::: PipelineStageFlags2KHR
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyCheckpointProperties2NV
p Ptr QueueFamilyCheckpointProperties2NV -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyCheckpointProperties2NV
p Ptr QueueFamilyCheckpointProperties2NV -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyCheckpointProperties2NV
p Ptr QueueFamilyCheckpointProperties2NV
-> Int -> Ptr ("stageMask" ::: PipelineStageFlags2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineStageFlags2KHR)) ("stageMask" ::: PipelineStageFlags2KHR
checkpointExecutionStageMask)
    IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr QueueFamilyCheckpointProperties2NV -> IO b -> IO b
pokeZeroCStruct Ptr QueueFamilyCheckpointProperties2NV
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyCheckpointProperties2NV
p Ptr QueueFamilyCheckpointProperties2NV -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyCheckpointProperties2NV
p Ptr QueueFamilyCheckpointProperties2NV -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyCheckpointProperties2NV
p Ptr QueueFamilyCheckpointProperties2NV
-> Int -> Ptr ("stageMask" ::: PipelineStageFlags2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineStageFlags2KHR)) ("stageMask" ::: PipelineStageFlags2KHR
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct QueueFamilyCheckpointProperties2NV where
  peekCStruct :: Ptr QueueFamilyCheckpointProperties2NV
-> IO QueueFamilyCheckpointProperties2NV
peekCStruct Ptr QueueFamilyCheckpointProperties2NV
p = do
    "stageMask" ::: PipelineStageFlags2KHR
checkpointExecutionStageMask <- Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> IO ("stageMask" ::: PipelineStageFlags2KHR)
forall a. Storable a => Ptr a -> IO a
peek @PipelineStageFlags2KHR ((Ptr QueueFamilyCheckpointProperties2NV
p Ptr QueueFamilyCheckpointProperties2NV
-> Int -> Ptr ("stageMask" ::: PipelineStageFlags2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineStageFlags2KHR))
    QueueFamilyCheckpointProperties2NV
-> IO QueueFamilyCheckpointProperties2NV
forall (f :: * -> *) a. Applicative f => a -> f a
pure (QueueFamilyCheckpointProperties2NV
 -> IO QueueFamilyCheckpointProperties2NV)
-> QueueFamilyCheckpointProperties2NV
-> IO QueueFamilyCheckpointProperties2NV
forall a b. (a -> b) -> a -> b
$ ("stageMask" ::: PipelineStageFlags2KHR)
-> QueueFamilyCheckpointProperties2NV
QueueFamilyCheckpointProperties2NV
             "stageMask" ::: PipelineStageFlags2KHR
checkpointExecutionStageMask

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

instance Zero QueueFamilyCheckpointProperties2NV where
  zero :: QueueFamilyCheckpointProperties2NV
zero = ("stageMask" ::: PipelineStageFlags2KHR)
-> QueueFamilyCheckpointProperties2NV
QueueFamilyCheckpointProperties2NV
           "stageMask" ::: PipelineStageFlags2KHR
forall a. Zero a => a
zero


-- | VkCheckpointData2NV - Return structure for command buffer checkpoint
-- data
--
-- == Valid Usage (Implicit)
--
-- The stages at which a checkpoint marker /can/ be executed are
-- implementation-defined and /can/ be queried by calling
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceQueueFamilyProperties2'.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_device_diagnostic_checkpoints VK_NV_device_diagnostic_checkpoints>,
-- 'PipelineStageFlags2KHR',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getQueueCheckpointData2NV'
data CheckpointData2NV = CheckpointData2NV
  { -- | @stage@ indicates a single pipeline stage which the checkpoint marker
    -- data refers to.
    CheckpointData2NV -> "stageMask" ::: PipelineStageFlags2KHR
stage :: PipelineStageFlags2KHR
  , -- | @pCheckpointMarker@ contains the value of the last checkpoint marker
    -- executed in the stage that @stage@ refers to.
    CheckpointData2NV -> Ptr ()
checkpointMarker :: Ptr ()
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (CheckpointData2NV)
#endif
deriving instance Show CheckpointData2NV

instance ToCStruct CheckpointData2NV where
  withCStruct :: CheckpointData2NV
-> (("pCheckpointData" ::: Ptr CheckpointData2NV) -> IO b) -> IO b
withCStruct CheckpointData2NV
x ("pCheckpointData" ::: Ptr CheckpointData2NV) -> IO b
f = Int
-> (("pCheckpointData" ::: Ptr CheckpointData2NV) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((("pCheckpointData" ::: Ptr CheckpointData2NV) -> IO b) -> IO b)
-> (("pCheckpointData" ::: Ptr CheckpointData2NV) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \"pCheckpointData" ::: Ptr CheckpointData2NV
p -> ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> CheckpointData2NV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pCheckpointData" ::: Ptr CheckpointData2NV
p CheckpointData2NV
x (("pCheckpointData" ::: Ptr CheckpointData2NV) -> IO b
f "pCheckpointData" ::: Ptr CheckpointData2NV
p)
  pokeCStruct :: ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> CheckpointData2NV -> IO b -> IO b
pokeCStruct "pCheckpointData" ::: Ptr CheckpointData2NV
p CheckpointData2NV{Ptr ()
"stageMask" ::: PipelineStageFlags2KHR
checkpointMarker :: Ptr ()
stage :: "stageMask" ::: PipelineStageFlags2KHR
$sel:checkpointMarker:CheckpointData2NV :: CheckpointData2NV -> Ptr ()
$sel:stage:CheckpointData2NV :: CheckpointData2NV -> "stageMask" ::: PipelineStageFlags2KHR
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCheckpointData" ::: Ptr CheckpointData2NV
p ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCheckpointData" ::: Ptr CheckpointData2NV
p ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCheckpointData" ::: Ptr CheckpointData2NV
p ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> Int -> Ptr ("stageMask" ::: PipelineStageFlags2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineStageFlags2KHR)) ("stageMask" ::: PipelineStageFlags2KHR
stage)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCheckpointData" ::: Ptr CheckpointData2NV
p ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr ()))) (Ptr ()
checkpointMarker)
    IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: ("pCheckpointData" ::: Ptr CheckpointData2NV) -> IO b -> IO b
pokeZeroCStruct "pCheckpointData" ::: Ptr CheckpointData2NV
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCheckpointData" ::: Ptr CheckpointData2NV
p ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCheckpointData" ::: Ptr CheckpointData2NV
p ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCheckpointData" ::: Ptr CheckpointData2NV
p ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> Int -> Ptr ("stageMask" ::: PipelineStageFlags2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineStageFlags2KHR)) ("stageMask" ::: PipelineStageFlags2KHR
forall a. Zero a => a
zero)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCheckpointData" ::: Ptr CheckpointData2NV
p ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr ()))) (Ptr ()
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct CheckpointData2NV where
  peekCStruct :: ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> IO CheckpointData2NV
peekCStruct "pCheckpointData" ::: Ptr CheckpointData2NV
p = do
    "stageMask" ::: PipelineStageFlags2KHR
stage <- Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> IO ("stageMask" ::: PipelineStageFlags2KHR)
forall a. Storable a => Ptr a -> IO a
peek @PipelineStageFlags2KHR (("pCheckpointData" ::: Ptr CheckpointData2NV
p ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> Int -> Ptr ("stageMask" ::: PipelineStageFlags2KHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineStageFlags2KHR))
    Ptr ()
pCheckpointMarker <- Ptr (Ptr ()) -> IO (Ptr ())
forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) (("pCheckpointData" ::: Ptr CheckpointData2NV
p ("pCheckpointData" ::: Ptr CheckpointData2NV)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr ())))
    CheckpointData2NV -> IO CheckpointData2NV
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CheckpointData2NV -> IO CheckpointData2NV)
-> CheckpointData2NV -> IO CheckpointData2NV
forall a b. (a -> b) -> a -> b
$ ("stageMask" ::: PipelineStageFlags2KHR)
-> Ptr () -> CheckpointData2NV
CheckpointData2NV
             "stageMask" ::: PipelineStageFlags2KHR
stage Ptr ()
pCheckpointMarker

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

instance Zero CheckpointData2NV where
  zero :: CheckpointData2NV
zero = ("stageMask" ::: PipelineStageFlags2KHR)
-> Ptr () -> CheckpointData2NV
CheckpointData2NV
           "stageMask" ::: PipelineStageFlags2KHR
forall a. Zero a => a
zero
           Ptr ()
forall a. Zero a => a
zero


-- | VkPhysicalDeviceSynchronization2FeaturesKHR - Structure describing
-- whether the implementation supports v2 synchronization commands
--
-- = Members
--
-- This structure describes the following feature:
--
-- = Description
--
-- If the 'PhysicalDeviceSynchronization2FeaturesKHR' 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. 'PhysicalDeviceSynchronization2FeaturesKHR' /can/ also be
-- used in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to
-- selectively enable these features.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceSynchronization2FeaturesKHR = PhysicalDeviceSynchronization2FeaturesKHR
  { -- | #features-synchronization2# @synchronization2@ indicates whether the
    -- implementation supports the new set of synchronization commands
    -- introduced in @VK_KHR_synchronization2@.
    PhysicalDeviceSynchronization2FeaturesKHR -> Bool
synchronization2 :: Bool }
  deriving (Typeable, PhysicalDeviceSynchronization2FeaturesKHR
-> PhysicalDeviceSynchronization2FeaturesKHR -> Bool
(PhysicalDeviceSynchronization2FeaturesKHR
 -> PhysicalDeviceSynchronization2FeaturesKHR -> Bool)
-> (PhysicalDeviceSynchronization2FeaturesKHR
    -> PhysicalDeviceSynchronization2FeaturesKHR -> Bool)
-> Eq PhysicalDeviceSynchronization2FeaturesKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PhysicalDeviceSynchronization2FeaturesKHR
-> PhysicalDeviceSynchronization2FeaturesKHR -> Bool
$c/= :: PhysicalDeviceSynchronization2FeaturesKHR
-> PhysicalDeviceSynchronization2FeaturesKHR -> Bool
== :: PhysicalDeviceSynchronization2FeaturesKHR
-> PhysicalDeviceSynchronization2FeaturesKHR -> Bool
$c== :: PhysicalDeviceSynchronization2FeaturesKHR
-> PhysicalDeviceSynchronization2FeaturesKHR -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceSynchronization2FeaturesKHR)
#endif
deriving instance Show PhysicalDeviceSynchronization2FeaturesKHR

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

instance FromCStruct PhysicalDeviceSynchronization2FeaturesKHR where
  peekCStruct :: Ptr PhysicalDeviceSynchronization2FeaturesKHR
-> IO PhysicalDeviceSynchronization2FeaturesKHR
peekCStruct Ptr PhysicalDeviceSynchronization2FeaturesKHR
p = do
    Bool32
synchronization2 <- Ptr Bool32 -> IO Bool32
forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceSynchronization2FeaturesKHR
p Ptr PhysicalDeviceSynchronization2FeaturesKHR -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32))
    PhysicalDeviceSynchronization2FeaturesKHR
-> IO PhysicalDeviceSynchronization2FeaturesKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PhysicalDeviceSynchronization2FeaturesKHR
 -> IO PhysicalDeviceSynchronization2FeaturesKHR)
-> PhysicalDeviceSynchronization2FeaturesKHR
-> IO PhysicalDeviceSynchronization2FeaturesKHR
forall a b. (a -> b) -> a -> b
$ Bool -> PhysicalDeviceSynchronization2FeaturesKHR
PhysicalDeviceSynchronization2FeaturesKHR
             (Bool32 -> Bool
bool32ToBool Bool32
synchronization2)

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

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


type AccessFlags2KHR = AccessFlagBits2KHR

-- | VkAccessFlagBits2KHR - Access flags for VkAccessFlags2KHR
--
-- = Description
--
-- Note
--
-- In situations where an application wishes to select all access types for
-- a given set of pipeline stages, 'ACCESS_2_MEMORY_READ_BIT_KHR' or
-- 'ACCESS_2_MEMORY_WRITE_BIT_KHR' can be used. This is particularly useful
-- when specifying stages that only have a single access type.
--
-- Note
--
-- The 'AccessFlags2KHR' bitmask goes beyond the 31 individual bit flags
-- allowable within a C99 enum, which is how
-- 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' is defined. The
-- first 31 values are common to both, and are interchangeable.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>
newtype AccessFlagBits2KHR = AccessFlagBits2KHR Flags64
  deriving newtype (AccessFlagBits2KHR -> AccessFlagBits2KHR -> Bool
(AccessFlagBits2KHR -> AccessFlagBits2KHR -> Bool)
-> (AccessFlagBits2KHR -> AccessFlagBits2KHR -> Bool)
-> Eq AccessFlagBits2KHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> Bool
$c/= :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> Bool
== :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> Bool
$c== :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> Bool
Eq, Eq AccessFlagBits2KHR
Eq AccessFlagBits2KHR
-> (AccessFlagBits2KHR -> AccessFlagBits2KHR -> Ordering)
-> (AccessFlagBits2KHR -> AccessFlagBits2KHR -> Bool)
-> (AccessFlagBits2KHR -> AccessFlagBits2KHR -> Bool)
-> (AccessFlagBits2KHR -> AccessFlagBits2KHR -> Bool)
-> (AccessFlagBits2KHR -> AccessFlagBits2KHR -> Bool)
-> (AccessFlagBits2KHR -> AccessFlagBits2KHR -> AccessFlagBits2KHR)
-> (AccessFlagBits2KHR -> AccessFlagBits2KHR -> AccessFlagBits2KHR)
-> Ord AccessFlagBits2KHR
AccessFlagBits2KHR -> AccessFlagBits2KHR -> Bool
AccessFlagBits2KHR -> AccessFlagBits2KHR -> Ordering
AccessFlagBits2KHR -> AccessFlagBits2KHR -> AccessFlagBits2KHR
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> AccessFlagBits2KHR
$cmin :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> AccessFlagBits2KHR
max :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> AccessFlagBits2KHR
$cmax :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> AccessFlagBits2KHR
>= :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> Bool
$c>= :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> Bool
> :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> Bool
$c> :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> Bool
<= :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> Bool
$c<= :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> Bool
< :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> Bool
$c< :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> Bool
compare :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> Ordering
$ccompare :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> Ordering
$cp1Ord :: Eq AccessFlagBits2KHR
Ord, Ptr b -> Int -> IO AccessFlagBits2KHR
Ptr b -> Int -> AccessFlagBits2KHR -> IO ()
Ptr AccessFlagBits2KHR -> IO AccessFlagBits2KHR
Ptr AccessFlagBits2KHR -> Int -> IO AccessFlagBits2KHR
Ptr AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR -> IO ()
Ptr AccessFlagBits2KHR -> AccessFlagBits2KHR -> IO ()
AccessFlagBits2KHR -> Int
(AccessFlagBits2KHR -> Int)
-> (AccessFlagBits2KHR -> Int)
-> (Ptr AccessFlagBits2KHR -> Int -> IO AccessFlagBits2KHR)
-> (Ptr AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR -> IO ())
-> (forall b. Ptr b -> Int -> IO AccessFlagBits2KHR)
-> (forall b. Ptr b -> Int -> AccessFlagBits2KHR -> IO ())
-> (Ptr AccessFlagBits2KHR -> IO AccessFlagBits2KHR)
-> (Ptr AccessFlagBits2KHR -> AccessFlagBits2KHR -> IO ())
-> Storable AccessFlagBits2KHR
forall b. Ptr b -> Int -> IO AccessFlagBits2KHR
forall b. Ptr b -> Int -> AccessFlagBits2KHR -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
poke :: Ptr AccessFlagBits2KHR -> AccessFlagBits2KHR -> IO ()
$cpoke :: Ptr AccessFlagBits2KHR -> AccessFlagBits2KHR -> IO ()
peek :: Ptr AccessFlagBits2KHR -> IO AccessFlagBits2KHR
$cpeek :: Ptr AccessFlagBits2KHR -> IO AccessFlagBits2KHR
pokeByteOff :: Ptr b -> Int -> AccessFlagBits2KHR -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> AccessFlagBits2KHR -> IO ()
peekByteOff :: Ptr b -> Int -> IO AccessFlagBits2KHR
$cpeekByteOff :: forall b. Ptr b -> Int -> IO AccessFlagBits2KHR
pokeElemOff :: Ptr AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR -> IO ()
$cpokeElemOff :: Ptr AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR -> IO ()
peekElemOff :: Ptr AccessFlagBits2KHR -> Int -> IO AccessFlagBits2KHR
$cpeekElemOff :: Ptr AccessFlagBits2KHR -> Int -> IO AccessFlagBits2KHR
alignment :: AccessFlagBits2KHR -> Int
$calignment :: AccessFlagBits2KHR -> Int
sizeOf :: AccessFlagBits2KHR -> Int
$csizeOf :: AccessFlagBits2KHR -> Int
Storable, AccessFlagBits2KHR
AccessFlagBits2KHR -> Zero AccessFlagBits2KHR
forall a. a -> Zero a
zero :: AccessFlagBits2KHR
$czero :: AccessFlagBits2KHR
Zero, Eq AccessFlagBits2KHR
AccessFlagBits2KHR
Eq AccessFlagBits2KHR
-> (AccessFlagBits2KHR -> AccessFlagBits2KHR -> AccessFlagBits2KHR)
-> (AccessFlagBits2KHR -> AccessFlagBits2KHR -> AccessFlagBits2KHR)
-> (AccessFlagBits2KHR -> AccessFlagBits2KHR -> AccessFlagBits2KHR)
-> (AccessFlagBits2KHR -> AccessFlagBits2KHR)
-> (AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR)
-> (AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR)
-> AccessFlagBits2KHR
-> (Int -> AccessFlagBits2KHR)
-> (AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR)
-> (AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR)
-> (AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR)
-> (AccessFlagBits2KHR -> Int -> Bool)
-> (AccessFlagBits2KHR -> Maybe Int)
-> (AccessFlagBits2KHR -> Int)
-> (AccessFlagBits2KHR -> Bool)
-> (AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR)
-> (AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR)
-> (AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR)
-> (AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR)
-> (AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR)
-> (AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR)
-> (AccessFlagBits2KHR -> Int)
-> Bits AccessFlagBits2KHR
Int -> AccessFlagBits2KHR
AccessFlagBits2KHR -> Bool
AccessFlagBits2KHR -> Int
AccessFlagBits2KHR -> Maybe Int
AccessFlagBits2KHR -> AccessFlagBits2KHR
AccessFlagBits2KHR -> Int -> Bool
AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
AccessFlagBits2KHR -> AccessFlagBits2KHR -> AccessFlagBits2KHR
forall a.
Eq a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
popCount :: AccessFlagBits2KHR -> Int
$cpopCount :: AccessFlagBits2KHR -> Int
rotateR :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
$crotateR :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
rotateL :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
$crotateL :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
unsafeShiftR :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
$cunsafeShiftR :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
shiftR :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
$cshiftR :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
unsafeShiftL :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
$cunsafeShiftL :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
shiftL :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
$cshiftL :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
isSigned :: AccessFlagBits2KHR -> Bool
$cisSigned :: AccessFlagBits2KHR -> Bool
bitSize :: AccessFlagBits2KHR -> Int
$cbitSize :: AccessFlagBits2KHR -> Int
bitSizeMaybe :: AccessFlagBits2KHR -> Maybe Int
$cbitSizeMaybe :: AccessFlagBits2KHR -> Maybe Int
testBit :: AccessFlagBits2KHR -> Int -> Bool
$ctestBit :: AccessFlagBits2KHR -> Int -> Bool
complementBit :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
$ccomplementBit :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
clearBit :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
$cclearBit :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
setBit :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
$csetBit :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
bit :: Int -> AccessFlagBits2KHR
$cbit :: Int -> AccessFlagBits2KHR
zeroBits :: AccessFlagBits2KHR
$czeroBits :: AccessFlagBits2KHR
rotate :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
$crotate :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
shift :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
$cshift :: AccessFlagBits2KHR -> Int -> AccessFlagBits2KHR
complement :: AccessFlagBits2KHR -> AccessFlagBits2KHR
$ccomplement :: AccessFlagBits2KHR -> AccessFlagBits2KHR
xor :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> AccessFlagBits2KHR
$cxor :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> AccessFlagBits2KHR
.|. :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> AccessFlagBits2KHR
$c.|. :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> AccessFlagBits2KHR
.&. :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> AccessFlagBits2KHR
$c.&. :: AccessFlagBits2KHR -> AccessFlagBits2KHR -> AccessFlagBits2KHR
$cp1Bits :: Eq AccessFlagBits2KHR
Bits, Bits AccessFlagBits2KHR
Bits AccessFlagBits2KHR
-> (AccessFlagBits2KHR -> Int)
-> (AccessFlagBits2KHR -> Int)
-> (AccessFlagBits2KHR -> Int)
-> FiniteBits AccessFlagBits2KHR
AccessFlagBits2KHR -> Int
forall b.
Bits b -> (b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
countTrailingZeros :: AccessFlagBits2KHR -> Int
$ccountTrailingZeros :: AccessFlagBits2KHR -> Int
countLeadingZeros :: AccessFlagBits2KHR -> Int
$ccountLeadingZeros :: AccessFlagBits2KHR -> Int
finiteBitSize :: AccessFlagBits2KHR -> Int
$cfiniteBitSize :: AccessFlagBits2KHR -> Int
$cp1FiniteBits :: Bits AccessFlagBits2KHR
FiniteBits)

-- | 'ACCESS_2_NONE_KHR' specifies no accesses.
pattern $bACCESS_2_NONE_KHR :: AccessFlagBits2KHR
$mACCESS_2_NONE_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_NONE_KHR                               = AccessFlagBits2KHR 0x0000000000000000
-- | 'ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR' specifies read access to
-- command data read from indirect buffers as part of an indirect build,
-- trace, drawing or dispatch command. Such access occurs in the
-- 'PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR' pipeline stage.
pattern $bACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR          = AccessFlagBits2KHR 0x0000000000000001
-- | 'ACCESS_2_INDEX_READ_BIT_KHR' specifies read access to an index buffer
-- as part of an indexed drawing command, bound by
-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer'. Such access
-- occurs in the 'PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR' pipeline stage.
pattern $bACCESS_2_INDEX_READ_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_INDEX_READ_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_INDEX_READ_BIT_KHR                     = AccessFlagBits2KHR 0x0000000000000002
-- | 'ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR' specifies read access to a
-- vertex buffer as part of a drawing command, bound by
-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindVertexBuffers'. Such access
-- occurs in the 'PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR' pipeline
-- stage.
pattern $bACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR          = AccessFlagBits2KHR 0x0000000000000004
-- | 'ACCESS_2_UNIFORM_READ_BIT_KHR' specifies read access to a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbuffer uniform buffer>
-- in any shader pipeline stage.
pattern $bACCESS_2_UNIFORM_READ_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_UNIFORM_READ_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_UNIFORM_READ_BIT_KHR                   = AccessFlagBits2KHR 0x0000000000000008
-- | 'ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR' specifies read access to an
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass input attachment>
-- within a render pass during subpass shading or fragment shading. Such
-- access occurs in the 'PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI' or
-- 'PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR' pipeline stage.
pattern $bACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR          = AccessFlagBits2KHR 0x0000000000000010
-- | 'ACCESS_2_SHADER_READ_BIT_KHR' specifies read access to a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shader-binding-table shader binding table>
-- in any shader pipeline. In addition, it is equivalent to the logical OR
-- of:
--
-- -   'ACCESS_2_UNIFORM_READ_BIT_KHR'
--
-- -   'ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR'
--
-- -   'ACCESS_2_SHADER_STORAGE_READ_BIT_KHR'
pattern $bACCESS_2_SHADER_READ_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_SHADER_READ_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_SHADER_READ_BIT_KHR                    = AccessFlagBits2KHR 0x0000000000000020
-- | 'ACCESS_2_SHADER_WRITE_BIT_KHR' is equivalent to
-- 'ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR'.
pattern $bACCESS_2_SHADER_WRITE_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_SHADER_WRITE_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_SHADER_WRITE_BIT_KHR                   = AccessFlagBits2KHR 0x0000000000000040
-- | 'ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR' specifies read access to a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass color attachment>,
-- such as via
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blending blending>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-logicop logic operations>,
-- or via certain
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops subpass load operations>.
-- It does not include
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operations>.
-- Such access occurs in the
-- 'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR' pipeline stage.
pattern $bACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR          = AccessFlagBits2KHR 0x0000000000000080
-- | 'ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR' specifies write access to a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass color, resolve, or depth\/stencil resolve attachment>
-- during a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass render pass>
-- or via certain
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops subpass load and store operations>.
-- Such access occurs in the
-- 'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR' pipeline stage.
pattern $bACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR         = AccessFlagBits2KHR 0x0000000000000100
-- | 'ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR' specifies read access
-- to a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass depth\/stencil attachment>,
-- via
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-ds-state depth or stencil operations>
-- or via certain
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops subpass load operations>.
-- Such access occurs in the
-- 'PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR' or
-- 'PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR' pipeline stages.
pattern $bACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR  = AccessFlagBits2KHR 0x0000000000000200
-- | 'ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR' specifies write access
-- to a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass depth\/stencil attachment>,
-- via
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-ds-state depth or stencil operations>
-- or via certain
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops subpass load and store operations>.
-- Such access occurs in the
-- 'PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR' or
-- 'PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR' pipeline stages.
pattern $bACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR = AccessFlagBits2KHR 0x0000000000000400
-- | 'ACCESS_2_TRANSFER_READ_BIT_KHR' specifies read access to an image or
-- buffer in a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy>
-- operation. Such access occurs in the 'PIPELINE_STAGE_2_COPY_BIT_KHR',
-- 'PIPELINE_STAGE_2_BLIT_BIT_KHR', or 'PIPELINE_STAGE_2_RESOLVE_BIT_KHR'
-- pipeline stages.
pattern $bACCESS_2_TRANSFER_READ_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_TRANSFER_READ_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_TRANSFER_READ_BIT_KHR                  = AccessFlagBits2KHR 0x0000000000000800
-- | 'ACCESS_2_TRANSFER_WRITE_BIT_KHR' specifies write access to an image or
-- buffer in a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears clear>
-- or
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy>
-- operation. Such access occurs in the 'PIPELINE_STAGE_2_COPY_BIT_KHR',
-- 'PIPELINE_STAGE_2_BLIT_BIT_KHR', 'PIPELINE_STAGE_2_CLEAR_BIT_KHR', or
-- 'PIPELINE_STAGE_2_RESOLVE_BIT_KHR' pipeline stages.
pattern $bACCESS_2_TRANSFER_WRITE_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_TRANSFER_WRITE_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_TRANSFER_WRITE_BIT_KHR                 = AccessFlagBits2KHR 0x0000000000001000
-- | 'ACCESS_2_HOST_READ_BIT_KHR' specifies read access by a host operation.
-- Accesses of this type are not performed through a resource, but directly
-- on memory. Such access occurs in the 'PIPELINE_STAGE_2_HOST_BIT_KHR'
-- pipeline stage.
pattern $bACCESS_2_HOST_READ_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_HOST_READ_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_HOST_READ_BIT_KHR                      = AccessFlagBits2KHR 0x0000000000002000
-- | 'ACCESS_2_HOST_WRITE_BIT_KHR' specifies write access by a host
-- operation. Accesses of this type are not performed through a resource,
-- but directly on memory. Such access occurs in the
-- 'PIPELINE_STAGE_2_HOST_BIT_KHR' pipeline stage.
pattern $bACCESS_2_HOST_WRITE_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_HOST_WRITE_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_HOST_WRITE_BIT_KHR                     = AccessFlagBits2KHR 0x0000000000004000
-- | 'ACCESS_2_MEMORY_READ_BIT_KHR' specifies all read accesses. It is always
-- valid in any access mask, and is treated as equivalent to setting all
-- @READ@ access flags that are valid where it is used.
pattern $bACCESS_2_MEMORY_READ_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_MEMORY_READ_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_MEMORY_READ_BIT_KHR                    = AccessFlagBits2KHR 0x0000000000008000
-- | 'ACCESS_2_MEMORY_WRITE_BIT_KHR' specifies all write accesses. It is
-- always valid in any access mask, and is treated as equivalent to setting
-- all @WRITE@ access flags that are valid where it is used.
pattern $bACCESS_2_MEMORY_WRITE_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_MEMORY_WRITE_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_MEMORY_WRITE_BIT_KHR                   = AccessFlagBits2KHR 0x0000000000010000
-- | 'ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR' specifies read access to a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformtexelbuffer uniform texel buffer>
-- or
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage sampled image>
-- in any shader pipeline stage.
pattern $bACCESS_2_SHADER_SAMPLED_READ_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_SHADER_SAMPLED_READ_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR            = AccessFlagBits2KHR 0x0000000100000000
-- | 'ACCESS_2_SHADER_STORAGE_READ_BIT_KHR' specifies read access to a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebuffer storage buffer>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-physical-storage-buffer physical storage buffer>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer storage texel buffer>,
-- or
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage storage image>
-- in any shader pipeline stage.
pattern $bACCESS_2_SHADER_STORAGE_READ_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_SHADER_STORAGE_READ_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_SHADER_STORAGE_READ_BIT_KHR            = AccessFlagBits2KHR 0x0000000200000000
-- | 'ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR' specifies write access to a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebuffer storage buffer>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-physical-storage-buffer physical storage buffer>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer storage texel buffer>,
-- or
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage storage image>
-- in any shader pipeline stage.
pattern $bACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR           = AccessFlagBits2KHR 0x0000000400000000
-- | 'ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI' specifies read access to a
-- invocation mask image in the
-- 'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI' pipeline stage.
pattern $bACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI :: AccessFlagBits2KHR
$mACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI        = AccessFlagBits2KHR 0x0000008000000000
-- | 'ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT' specifies read
-- access to
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass color attachments>,
-- including
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operations>.
-- Such access occurs in the
-- 'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR' pipeline stage.
pattern $bACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT :: AccessFlagBits2KHR
$mACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = AccessFlagBits2KHR 0x0000000000080000
-- | 'ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT' specifies read access to a
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-fragmentdensitymapattachment fragment density map attachment>
-- during dynamic
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragmentdensitymapops fragment density map operations>.
-- Such access occurs in the
-- 'PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT' pipeline stage.
pattern $bACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT :: AccessFlagBits2KHR
$mACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT      = AccessFlagBits2KHR 0x0000000001000000
-- | 'ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR' specifies write access
-- to an acceleration structure or
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-scratch acceleration structure scratch buffer>
-- as part of a build or copy command. Such access occurs in the
-- 'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR' pipeline stage.
pattern $bACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR   = AccessFlagBits2KHR 0x0000000000400000
-- | 'ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR' specifies read access to
-- an acceleration structure as part of a trace, build, or copy command, or
-- to an
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-scratch acceleration structure scratch buffer>
-- as part of a build command. Such access occurs in the
-- 'PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR' pipeline stage or
-- 'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR' pipeline stage.
pattern $bACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR    = AccessFlagBits2KHR 0x0000000000200000
-- | 'ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR' specifies read
-- access to a fragment shading rate attachment during rasterization. Such
-- access occurs in the
-- 'PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR' pipeline
-- stage.
pattern $bACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR :: AccessFlagBits2KHR
$mACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = AccessFlagBits2KHR 0x0000000000800000
-- | 'ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV' specifies writes to the
-- target command buffer preprocess outputs. Such access occurs in the
-- 'PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV' pipeline stage.
pattern $bACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV :: AccessFlagBits2KHR
$mACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV        = AccessFlagBits2KHR 0x0000000000040000
-- | 'ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV' specifies reads from buffer
-- inputs to
-- 'Vulkan.Extensions.VK_NV_device_generated_commands.cmdPreprocessGeneratedCommandsNV'.
-- Such access occurs in the 'PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV'
-- pipeline stage.
pattern $bACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV :: AccessFlagBits2KHR
$mACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV         = AccessFlagBits2KHR 0x0000000000020000
-- | 'ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT' specifies read access to a
-- predicate as part of conditional rendering. Such access occurs in the
-- 'PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT' pipeline stage.
pattern $bACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT :: AccessFlagBits2KHR
$mACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT     = AccessFlagBits2KHR 0x0000000000100000
-- | 'ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT' specifies write
-- access to a transform feedback counter buffer which is written when
-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndTransformFeedbackEXT'
-- executes. Such access occurs in the
-- 'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT' pipeline stage.
pattern $bACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT :: AccessFlagBits2KHR
$mACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = AccessFlagBits2KHR 0x0000000008000000
-- | 'ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT' specifies read access
-- to a transform feedback counter buffer which is read when
-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginTransformFeedbackEXT'
-- executes. Such access occurs in the
-- 'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT' pipeline stage.
pattern $bACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT :: AccessFlagBits2KHR
$mACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = AccessFlagBits2KHR 0x0000000004000000
-- | 'ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT' specifies write access to a
-- transform feedback buffer made when transform feedback is active. Such
-- access occurs in the 'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT'
-- pipeline stage.
pattern $bACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT :: AccessFlagBits2KHR
$mACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT :: forall r. AccessFlagBits2KHR -> (Void# -> r) -> (Void# -> r) -> r
ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT       = AccessFlagBits2KHR 0x0000000002000000

conNameAccessFlagBits2KHR :: String
conNameAccessFlagBits2KHR :: String
conNameAccessFlagBits2KHR = String
"AccessFlagBits2KHR"

enumPrefixAccessFlagBits2KHR :: String
enumPrefixAccessFlagBits2KHR :: String
enumPrefixAccessFlagBits2KHR = String
"ACCESS_2_"

showTableAccessFlagBits2KHR :: [(AccessFlagBits2KHR, String)]
showTableAccessFlagBits2KHR :: [(AccessFlagBits2KHR, String)]
showTableAccessFlagBits2KHR =
  [ (AccessFlagBits2KHR
ACCESS_2_NONE_KHR                              , String
"NONE_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR         , String
"INDIRECT_COMMAND_READ_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_INDEX_READ_BIT_KHR                    , String
"INDEX_READ_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR         , String
"VERTEX_ATTRIBUTE_READ_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_UNIFORM_READ_BIT_KHR                  , String
"UNIFORM_READ_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR         , String
"INPUT_ATTACHMENT_READ_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_SHADER_READ_BIT_KHR                   , String
"SHADER_READ_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_SHADER_WRITE_BIT_KHR                  , String
"SHADER_WRITE_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR         , String
"COLOR_ATTACHMENT_READ_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR        , String
"COLOR_ATTACHMENT_WRITE_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR , String
"DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR, String
"DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_TRANSFER_READ_BIT_KHR                 , String
"TRANSFER_READ_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_TRANSFER_WRITE_BIT_KHR                , String
"TRANSFER_WRITE_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_HOST_READ_BIT_KHR                     , String
"HOST_READ_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_HOST_WRITE_BIT_KHR                    , String
"HOST_WRITE_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_MEMORY_READ_BIT_KHR                   , String
"MEMORY_READ_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_MEMORY_WRITE_BIT_KHR                  , String
"MEMORY_WRITE_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR           , String
"SHADER_SAMPLED_READ_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_SHADER_STORAGE_READ_BIT_KHR           , String
"SHADER_STORAGE_READ_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR          , String
"SHADER_STORAGE_WRITE_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI       , String
"INVOCATION_MASK_READ_BIT_HUAWEI")
  , (AccessFlagBits2KHR
ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT, String
"COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT")
  , (AccessFlagBits2KHR
ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT     , String
"FRAGMENT_DENSITY_MAP_READ_BIT_EXT")
  , (AccessFlagBits2KHR
ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR  , String
"ACCELERATION_STRUCTURE_WRITE_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR   , String
"ACCELERATION_STRUCTURE_READ_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR, String
"FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR")
  , (AccessFlagBits2KHR
ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV       , String
"COMMAND_PREPROCESS_WRITE_BIT_NV")
  , (AccessFlagBits2KHR
ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV        , String
"COMMAND_PREPROCESS_READ_BIT_NV")
  , (AccessFlagBits2KHR
ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT    , String
"CONDITIONAL_RENDERING_READ_BIT_EXT")
  , (AccessFlagBits2KHR
ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT, String
"TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT")
  , (AccessFlagBits2KHR
ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT, String
"TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT")
  , (AccessFlagBits2KHR
ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT      , String
"TRANSFORM_FEEDBACK_WRITE_BIT_EXT")
  ]

instance Show AccessFlagBits2KHR where
  showsPrec :: Int -> AccessFlagBits2KHR -> ShowS
showsPrec = String
-> [(AccessFlagBits2KHR, String)]
-> String
-> (AccessFlagBits2KHR -> "dstOffset" ::: DeviceSize)
-> (("dstOffset" ::: DeviceSize) -> ShowS)
-> Int
-> AccessFlagBits2KHR
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixAccessFlagBits2KHR
                            [(AccessFlagBits2KHR, String)]
showTableAccessFlagBits2KHR
                            String
conNameAccessFlagBits2KHR
                            (\(AccessFlagBits2KHR "dstOffset" ::: DeviceSize
x) -> "dstOffset" ::: DeviceSize
x)
                            (\"dstOffset" ::: DeviceSize
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ("dstOffset" ::: DeviceSize) -> ShowS
forall a. (Integral a, Show a) => a -> ShowS
showHex "dstOffset" ::: DeviceSize
x)

instance Read AccessFlagBits2KHR where
  readPrec :: ReadPrec AccessFlagBits2KHR
readPrec =
    String
-> [(AccessFlagBits2KHR, String)]
-> String
-> (("dstOffset" ::: DeviceSize) -> AccessFlagBits2KHR)
-> ReadPrec AccessFlagBits2KHR
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixAccessFlagBits2KHR [(AccessFlagBits2KHR, String)]
showTableAccessFlagBits2KHR String
conNameAccessFlagBits2KHR ("dstOffset" ::: DeviceSize) -> AccessFlagBits2KHR
AccessFlagBits2KHR


type PipelineStageFlags2KHR = PipelineStageFlagBits2KHR

-- | VkPipelineStageFlagBits2KHR - Pipeline stage flags for
-- VkPipelineStageFlags2KHR
--
-- = Description
--
-- Note
--
-- The @TOP@ and @BOTTOM@ pipeline stages are deprecated, and applications
-- should prefer 'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR' and
-- 'PIPELINE_STAGE_2_NONE_KHR'.
--
-- Note
--
-- The 'PipelineStageFlags2KHR' bitmask goes beyond the 31 individual bit
-- flags allowable within a C99 enum, which is how
-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits' is
-- defined. The first 31 values are common to both, and are
-- interchangeable.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>
newtype PipelineStageFlagBits2KHR = PipelineStageFlagBits2KHR Flags64
  deriving newtype (("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> Bool
(("stageMask" ::: PipelineStageFlags2KHR)
 -> ("stageMask" ::: PipelineStageFlags2KHR) -> Bool)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> ("stageMask" ::: PipelineStageFlags2KHR) -> Bool)
-> Eq ("stageMask" ::: PipelineStageFlags2KHR)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> Bool
$c/= :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> Bool
== :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> Bool
$c== :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> Bool
Eq, Eq ("stageMask" ::: PipelineStageFlags2KHR)
Eq ("stageMask" ::: PipelineStageFlags2KHR)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> ("stageMask" ::: PipelineStageFlags2KHR) -> Ordering)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> ("stageMask" ::: PipelineStageFlags2KHR) -> Bool)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> ("stageMask" ::: PipelineStageFlags2KHR) -> Bool)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> ("stageMask" ::: PipelineStageFlags2KHR) -> Bool)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> ("stageMask" ::: PipelineStageFlags2KHR) -> Bool)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> ("stageMask" ::: PipelineStageFlags2KHR)
    -> "stageMask" ::: PipelineStageFlags2KHR)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> ("stageMask" ::: PipelineStageFlags2KHR)
    -> "stageMask" ::: PipelineStageFlags2KHR)
-> Ord ("stageMask" ::: PipelineStageFlags2KHR)
("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> Bool
("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> Ordering
("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> "stageMask" ::: PipelineStageFlags2KHR
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> "stageMask" ::: PipelineStageFlags2KHR
$cmin :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> "stageMask" ::: PipelineStageFlags2KHR
max :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> "stageMask" ::: PipelineStageFlags2KHR
$cmax :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> "stageMask" ::: PipelineStageFlags2KHR
>= :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> Bool
$c>= :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> Bool
> :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> Bool
$c> :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> Bool
<= :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> Bool
$c<= :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> Bool
< :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> Bool
$c< :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> Bool
compare :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> Ordering
$ccompare :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> Ordering
$cp1Ord :: Eq ("stageMask" ::: PipelineStageFlags2KHR)
Ord, Ptr b -> Int -> IO ("stageMask" ::: PipelineStageFlags2KHR)
Ptr b -> Int -> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> IO ("stageMask" ::: PipelineStageFlags2KHR)
Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> IO ("stageMask" ::: PipelineStageFlags2KHR)
Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
("stageMask" ::: PipelineStageFlags2KHR) -> Int
(("stageMask" ::: PipelineStageFlags2KHR) -> Int)
-> (("stageMask" ::: PipelineStageFlags2KHR) -> Int)
-> (Ptr ("stageMask" ::: PipelineStageFlags2KHR)
    -> Int -> IO ("stageMask" ::: PipelineStageFlags2KHR))
-> (Ptr ("stageMask" ::: PipelineStageFlags2KHR)
    -> Int -> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ())
-> (forall b.
    Ptr b -> Int -> IO ("stageMask" ::: PipelineStageFlags2KHR))
-> (forall b.
    Ptr b -> Int -> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ())
-> (Ptr ("stageMask" ::: PipelineStageFlags2KHR)
    -> IO ("stageMask" ::: PipelineStageFlags2KHR))
-> (Ptr ("stageMask" ::: PipelineStageFlags2KHR)
    -> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ())
-> Storable ("stageMask" ::: PipelineStageFlags2KHR)
forall b.
Ptr b -> Int -> IO ("stageMask" ::: PipelineStageFlags2KHR)
forall b.
Ptr b -> Int -> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
poke :: Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
$cpoke :: Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
peek :: Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> IO ("stageMask" ::: PipelineStageFlags2KHR)
$cpeek :: Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> IO ("stageMask" ::: PipelineStageFlags2KHR)
pokeByteOff :: Ptr b -> Int -> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
$cpokeByteOff :: forall b.
Ptr b -> Int -> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
peekByteOff :: Ptr b -> Int -> IO ("stageMask" ::: PipelineStageFlags2KHR)
$cpeekByteOff :: forall b.
Ptr b -> Int -> IO ("stageMask" ::: PipelineStageFlags2KHR)
pokeElemOff :: Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
$cpokeElemOff :: Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> ("stageMask" ::: PipelineStageFlags2KHR) -> IO ()
peekElemOff :: Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> IO ("stageMask" ::: PipelineStageFlags2KHR)
$cpeekElemOff :: Ptr ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> IO ("stageMask" ::: PipelineStageFlags2KHR)
alignment :: ("stageMask" ::: PipelineStageFlags2KHR) -> Int
$calignment :: ("stageMask" ::: PipelineStageFlags2KHR) -> Int
sizeOf :: ("stageMask" ::: PipelineStageFlags2KHR) -> Int
$csizeOf :: ("stageMask" ::: PipelineStageFlags2KHR) -> Int
Storable, "stageMask" ::: PipelineStageFlags2KHR
("stageMask" ::: PipelineStageFlags2KHR)
-> Zero ("stageMask" ::: PipelineStageFlags2KHR)
forall a. a -> Zero a
zero :: "stageMask" ::: PipelineStageFlags2KHR
$czero :: "stageMask" ::: PipelineStageFlags2KHR
Zero, Eq ("stageMask" ::: PipelineStageFlags2KHR)
"stageMask" ::: PipelineStageFlags2KHR
Eq ("stageMask" ::: PipelineStageFlags2KHR)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> ("stageMask" ::: PipelineStageFlags2KHR)
    -> "stageMask" ::: PipelineStageFlags2KHR)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> ("stageMask" ::: PipelineStageFlags2KHR)
    -> "stageMask" ::: PipelineStageFlags2KHR)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> ("stageMask" ::: PipelineStageFlags2KHR)
    -> "stageMask" ::: PipelineStageFlags2KHR)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> "stageMask" ::: PipelineStageFlags2KHR)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> Int -> "stageMask" ::: PipelineStageFlags2KHR)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> Int -> "stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> (Int -> "stageMask" ::: PipelineStageFlags2KHR)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> Int -> "stageMask" ::: PipelineStageFlags2KHR)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> Int -> "stageMask" ::: PipelineStageFlags2KHR)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> Int -> "stageMask" ::: PipelineStageFlags2KHR)
-> (("stageMask" ::: PipelineStageFlags2KHR) -> Int -> Bool)
-> (("stageMask" ::: PipelineStageFlags2KHR) -> Maybe Int)
-> (("stageMask" ::: PipelineStageFlags2KHR) -> Int)
-> (("stageMask" ::: PipelineStageFlags2KHR) -> Bool)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> Int -> "stageMask" ::: PipelineStageFlags2KHR)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> Int -> "stageMask" ::: PipelineStageFlags2KHR)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> Int -> "stageMask" ::: PipelineStageFlags2KHR)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> Int -> "stageMask" ::: PipelineStageFlags2KHR)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> Int -> "stageMask" ::: PipelineStageFlags2KHR)
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> Int -> "stageMask" ::: PipelineStageFlags2KHR)
-> (("stageMask" ::: PipelineStageFlags2KHR) -> Int)
-> Bits ("stageMask" ::: PipelineStageFlags2KHR)
Int -> "stageMask" ::: PipelineStageFlags2KHR
("stageMask" ::: PipelineStageFlags2KHR) -> Bool
("stageMask" ::: PipelineStageFlags2KHR) -> Int
("stageMask" ::: PipelineStageFlags2KHR) -> Maybe Int
("stageMask" ::: PipelineStageFlags2KHR)
-> "stageMask" ::: PipelineStageFlags2KHR
("stageMask" ::: PipelineStageFlags2KHR) -> Int -> Bool
("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> "stageMask" ::: PipelineStageFlags2KHR
forall a.
Eq a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
popCount :: ("stageMask" ::: PipelineStageFlags2KHR) -> Int
$cpopCount :: ("stageMask" ::: PipelineStageFlags2KHR) -> Int
rotateR :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
$crotateR :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
rotateL :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
$crotateL :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
unsafeShiftR :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
$cunsafeShiftR :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
shiftR :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
$cshiftR :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
unsafeShiftL :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
$cunsafeShiftL :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
shiftL :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
$cshiftL :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
isSigned :: ("stageMask" ::: PipelineStageFlags2KHR) -> Bool
$cisSigned :: ("stageMask" ::: PipelineStageFlags2KHR) -> Bool
bitSize :: ("stageMask" ::: PipelineStageFlags2KHR) -> Int
$cbitSize :: ("stageMask" ::: PipelineStageFlags2KHR) -> Int
bitSizeMaybe :: ("stageMask" ::: PipelineStageFlags2KHR) -> Maybe Int
$cbitSizeMaybe :: ("stageMask" ::: PipelineStageFlags2KHR) -> Maybe Int
testBit :: ("stageMask" ::: PipelineStageFlags2KHR) -> Int -> Bool
$ctestBit :: ("stageMask" ::: PipelineStageFlags2KHR) -> Int -> Bool
complementBit :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
$ccomplementBit :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
clearBit :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
$cclearBit :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
setBit :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
$csetBit :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
bit :: Int -> "stageMask" ::: PipelineStageFlags2KHR
$cbit :: Int -> "stageMask" ::: PipelineStageFlags2KHR
zeroBits :: "stageMask" ::: PipelineStageFlags2KHR
$czeroBits :: "stageMask" ::: PipelineStageFlags2KHR
rotate :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
$crotate :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
shift :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
$cshift :: ("stageMask" ::: PipelineStageFlags2KHR)
-> Int -> "stageMask" ::: PipelineStageFlags2KHR
complement :: ("stageMask" ::: PipelineStageFlags2KHR)
-> "stageMask" ::: PipelineStageFlags2KHR
$ccomplement :: ("stageMask" ::: PipelineStageFlags2KHR)
-> "stageMask" ::: PipelineStageFlags2KHR
xor :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> "stageMask" ::: PipelineStageFlags2KHR
$cxor :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> "stageMask" ::: PipelineStageFlags2KHR
.|. :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> "stageMask" ::: PipelineStageFlags2KHR
$c.|. :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> "stageMask" ::: PipelineStageFlags2KHR
.&. :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> "stageMask" ::: PipelineStageFlags2KHR
$c.&. :: ("stageMask" ::: PipelineStageFlags2KHR)
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> "stageMask" ::: PipelineStageFlags2KHR
$cp1Bits :: Eq ("stageMask" ::: PipelineStageFlags2KHR)
Bits, Bits ("stageMask" ::: PipelineStageFlags2KHR)
Bits ("stageMask" ::: PipelineStageFlags2KHR)
-> (("stageMask" ::: PipelineStageFlags2KHR) -> Int)
-> (("stageMask" ::: PipelineStageFlags2KHR) -> Int)
-> (("stageMask" ::: PipelineStageFlags2KHR) -> Int)
-> FiniteBits ("stageMask" ::: PipelineStageFlags2KHR)
("stageMask" ::: PipelineStageFlags2KHR) -> Int
forall b.
Bits b -> (b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
countTrailingZeros :: ("stageMask" ::: PipelineStageFlags2KHR) -> Int
$ccountTrailingZeros :: ("stageMask" ::: PipelineStageFlags2KHR) -> Int
countLeadingZeros :: ("stageMask" ::: PipelineStageFlags2KHR) -> Int
$ccountLeadingZeros :: ("stageMask" ::: PipelineStageFlags2KHR) -> Int
finiteBitSize :: ("stageMask" ::: PipelineStageFlags2KHR) -> Int
$cfiniteBitSize :: ("stageMask" ::: PipelineStageFlags2KHR) -> Int
$cp1FiniteBits :: Bits ("stageMask" ::: PipelineStageFlags2KHR)
FiniteBits)

-- | 'PIPELINE_STAGE_2_NONE_KHR' specifies no stages of execution.
pattern $bPIPELINE_STAGE_2_NONE_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_NONE_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_NONE_KHR                               = PipelineStageFlagBits2KHR 0x0000000000000000
-- | 'PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR' is equivalent to
-- 'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR' with 'AccessFlags2KHR' set to
-- @0@ when specified in the second synchronization scope, but equivalent
-- to 'PIPELINE_STAGE_2_NONE_KHR' in the first scope.
pattern $bPIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR                    = PipelineStageFlagBits2KHR 0x0000000000000001
-- | 'PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR' specifies the stage of the
-- pipeline where indirect command parameters are consumed. This stage also
-- includes reading commands written by
-- 'Vulkan.Extensions.VK_NV_device_generated_commands.cmdPreprocessGeneratedCommandsNV'.
pattern $bPIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR                  = PipelineStageFlagBits2KHR 0x0000000000000002
-- | 'PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR' is equivalent to the logical OR
-- of:
--
-- -   'PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR'
--
-- -   'PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR'
pattern $bPIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR                   = PipelineStageFlagBits2KHR 0x0000000000000004
-- | 'PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR' specifies the vertex shader
-- stage.
pattern $bPIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR                  = PipelineStageFlagBits2KHR 0x0000000000000008
-- | 'PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR' specifies the
-- tessellation control shader stage.
pattern $bPIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR    = PipelineStageFlagBits2KHR 0x0000000000000010
-- | 'PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR' specifies the
-- tessellation evaluation shader stage.
pattern $bPIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR = PipelineStageFlagBits2KHR 0x0000000000000020
-- | 'PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR' specifies the geometry shader
-- stage.
pattern $bPIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR                = PipelineStageFlagBits2KHR 0x0000000000000040
-- | 'PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR' specifies the fragment shader
-- stage.
pattern $bPIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR                = PipelineStageFlagBits2KHR 0x0000000000000080
-- | 'PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR' specifies the stage of
-- the pipeline where early fragment tests (depth and stencil tests before
-- fragment shading) are performed. This stage also includes
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops subpass load operations>
-- for framebuffer attachments with a depth\/stencil format.
pattern $bPIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR           = PipelineStageFlagBits2KHR 0x0000000000000100
-- | 'PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR' specifies the stage of
-- the pipeline where late fragment tests (depth and stencil tests after
-- fragment shading) are performed. This stage also includes
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops subpass store operations>
-- for framebuffer attachments with a depth\/stencil format.
pattern $bPIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR            = PipelineStageFlagBits2KHR 0x0000000000000200
-- | 'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR' specifies the stage
-- of the pipeline after blending where the final color values are output
-- from the pipeline. This stage also includes
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops subpass load and store operations>
-- and multisample resolve operations for framebuffer attachments with a
-- color or depth\/stencil format.
pattern $bPIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR        = PipelineStageFlagBits2KHR 0x0000000000000400
-- | 'PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR' specifies the compute shader
-- stage.
pattern $bPIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR                 = PipelineStageFlagBits2KHR 0x0000000000000800
-- | 'PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR' is equivalent to specifying all
-- of:
--
-- -   'PIPELINE_STAGE_2_COPY_BIT_KHR'
--
-- -   'PIPELINE_STAGE_2_BLIT_BIT_KHR'
--
-- -   'PIPELINE_STAGE_2_RESOLVE_BIT_KHR'
--
-- -   'PIPELINE_STAGE_2_CLEAR_BIT_KHR'
pattern $bPIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR                   = PipelineStageFlagBits2KHR 0x0000000000001000
-- | 'PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR' is equivalent to
-- 'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR' with 'AccessFlags2KHR' set to
-- @0@ when specified in the first synchronization scope, but equivalent to
-- 'PIPELINE_STAGE_2_NONE_KHR' in the second scope.
pattern $bPIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR                 = PipelineStageFlagBits2KHR 0x0000000000002000
-- | 'PIPELINE_STAGE_2_HOST_BIT_KHR' specifies a pseudo-stage indicating
-- execution on the host of reads\/writes of device memory. This stage is
-- not invoked by any commands recorded in a command buffer.
pattern $bPIPELINE_STAGE_2_HOST_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_HOST_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_HOST_BIT_KHR                           = PipelineStageFlagBits2KHR 0x0000000000004000
-- | 'PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR' specifies the execution of all
-- graphics pipeline stages, and is equivalent to the logical OR of:
--
-- -   'PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR'
--
-- -   'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
--
-- -   'PIPELINE_STAGE_2_MESH_SHADER_BIT_NV'
--
-- -   'PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR'
--
-- -   'PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR'
--
-- -   'PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR'
--
-- -   'PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR'
--
-- -   'PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR'
--
-- -   'PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR'
--
-- -   'PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR'
--
-- -   'PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR'
--
-- -   'PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR'
--
-- -   'PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT'
--
-- -   'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT'
--
-- -   'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV'
--
-- -   'PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT'
--
-- -   'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI'
pattern $bPIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR                   = PipelineStageFlagBits2KHR 0x0000000000008000
-- | 'PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR' specifies all operations
-- performed by all commands supported on the queue it is used with.
pattern $bPIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR                   = PipelineStageFlagBits2KHR 0x0000000000010000
-- | 'PIPELINE_STAGE_2_COPY_BIT_KHR' specifies the execution of all
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy commands>,
-- including 'Vulkan.Core10.CommandBufferBuilding.cmdCopyQueryPoolResults'.
pattern $bPIPELINE_STAGE_2_COPY_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_COPY_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_COPY_BIT_KHR                           = PipelineStageFlagBits2KHR 0x0000000100000000
-- | 'PIPELINE_STAGE_2_RESOLVE_BIT_KHR' specifies the execution of
-- 'Vulkan.Core10.CommandBufferBuilding.cmdResolveImage'.
pattern $bPIPELINE_STAGE_2_RESOLVE_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_RESOLVE_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_RESOLVE_BIT_KHR                        = PipelineStageFlagBits2KHR 0x0000000200000000
-- | 'PIPELINE_STAGE_2_BLIT_BIT_KHR' specifies the execution of
-- 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage'.
pattern $bPIPELINE_STAGE_2_BLIT_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_BLIT_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_BLIT_BIT_KHR                           = PipelineStageFlagBits2KHR 0x0000000400000000
-- | 'PIPELINE_STAGE_2_CLEAR_BIT_KHR' specifies the execution of
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears clear commands>,
-- with the exception of
-- 'Vulkan.Core10.CommandBufferBuilding.cmdClearAttachments'.
pattern $bPIPELINE_STAGE_2_CLEAR_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_CLEAR_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_CLEAR_BIT_KHR                          = PipelineStageFlagBits2KHR 0x0000000800000000
-- | 'PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR' specifies the stage of the
-- pipeline where index buffers are consumed.
pattern $bPIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR                    = PipelineStageFlagBits2KHR 0x0000001000000000
-- | 'PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR' specifies the stage of
-- the pipeline where vertex buffers are consumed.
pattern $bPIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR         = PipelineStageFlagBits2KHR 0x0000002000000000
-- | 'PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR' is equivalent to
-- specifying all supported
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader stages>:
--
-- -   'PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR'
--
-- -   'PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR'
--
-- -   'PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR'
--
-- -   'PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR'
--
-- -   'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV'
--
-- -   'PIPELINE_STAGE_2_MESH_SHADER_BIT_NV'
pattern $bPIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR      = PipelineStageFlagBits2KHR 0x0000004000000000
-- | 'PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI' specifies the stage of the
-- pipeline where the invocation mask image is read by the implementation
-- to optimize the ray dispatch.
pattern $bPIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI             = PipelineStageFlagBits2KHR 0x0000010000000000
-- | 'PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI' specifies the subpass
-- shading shader stage.
pattern $bPIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI             = PipelineStageFlagBits2KHR 0x0000008000000000
-- | 'PIPELINE_STAGE_2_MESH_SHADER_BIT_NV' specifies the mesh shader stage.
pattern $bPIPELINE_STAGE_2_MESH_SHADER_BIT_NV :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_MESH_SHADER_BIT_NV :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_MESH_SHADER_BIT_NV                     = PipelineStageFlagBits2KHR 0x0000000000100000
-- | 'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV' specifies the task shader stage.
pattern $bPIPELINE_STAGE_2_TASK_SHADER_BIT_NV :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_TASK_SHADER_BIT_NV :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_TASK_SHADER_BIT_NV                     = PipelineStageFlagBits2KHR 0x0000000000080000
-- | 'PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT' specifies the stage
-- of the pipeline where the fragment density map is read to
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragmentdensitymapops generate the fragment areas>.
pattern $bPIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT       = PipelineStageFlagBits2KHR 0x0000000000800000
-- | 'PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR' specifies the execution of
-- the ray tracing shader stages.
pattern $bPIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR             = PipelineStageFlagBits2KHR 0x0000000000200000
-- | 'PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR' specifies the
-- execution of
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure acceleration structure commands>.
pattern $bPIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR   = PipelineStageFlagBits2KHR 0x0000000002000000
-- | 'PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR' specifies
-- the stage of the pipeline where the
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-attachment fragment shading rate attachment>
-- or
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-shading-rate-image shading rate image>
-- is read to determine the fragment shading rate for portions of a
-- rasterized primitive.
pattern $bPIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = PipelineStageFlagBits2KHR 0x0000000000400000
-- | 'PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV' specifies the stage of the
-- pipeline where device-side generation of commands via
-- 'Vulkan.Extensions.VK_NV_device_generated_commands.cmdPreprocessGeneratedCommandsNV'
-- is handled.
pattern $bPIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV              = PipelineStageFlagBits2KHR 0x0000000000020000
-- | 'PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT' specifies the stage of
-- the pipeline where the predicate of conditional rendering is consumed.
pattern $bPIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT          = PipelineStageFlagBits2KHR 0x0000000000040000
-- | 'PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT' specifies the stage of the
-- pipeline where vertex attribute output values are written to the
-- transform feedback buffers.
pattern $bPIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT :: "stageMask" ::: PipelineStageFlags2KHR
$mPIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT :: forall r.
("stageMask" ::: PipelineStageFlags2KHR)
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT             = PipelineStageFlagBits2KHR 0x0000000001000000

conNamePipelineStageFlagBits2KHR :: String
conNamePipelineStageFlagBits2KHR :: String
conNamePipelineStageFlagBits2KHR = String
"PipelineStageFlagBits2KHR"

enumPrefixPipelineStageFlagBits2KHR :: String
enumPrefixPipelineStageFlagBits2KHR :: String
enumPrefixPipelineStageFlagBits2KHR = String
"PIPELINE_STAGE_2_"

showTablePipelineStageFlagBits2KHR :: [(PipelineStageFlagBits2KHR, String)]
showTablePipelineStageFlagBits2KHR :: [("stageMask" ::: PipelineStageFlags2KHR, String)]
showTablePipelineStageFlagBits2KHR =
  [ ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_NONE_KHR                              , String
"NONE_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR                   , String
"TOP_OF_PIPE_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR                 , String
"DRAW_INDIRECT_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR                  , String
"VERTEX_INPUT_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR                 , String
"VERTEX_SHADER_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR   , String
"TESSELLATION_CONTROL_SHADER_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR, String
"TESSELLATION_EVALUATION_SHADER_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR               , String
"GEOMETRY_SHADER_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR               , String
"FRAGMENT_SHADER_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR          , String
"EARLY_FRAGMENT_TESTS_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR           , String
"LATE_FRAGMENT_TESTS_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR       , String
"COLOR_ATTACHMENT_OUTPUT_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR                , String
"COMPUTE_SHADER_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR                  , String
"ALL_TRANSFER_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR                , String
"BOTTOM_OF_PIPE_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_HOST_BIT_KHR                          , String
"HOST_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR                  , String
"ALL_GRAPHICS_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR                  , String
"ALL_COMMANDS_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_COPY_BIT_KHR                          , String
"COPY_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_RESOLVE_BIT_KHR                       , String
"RESOLVE_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_BLIT_BIT_KHR                          , String
"BLIT_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_CLEAR_BIT_KHR                         , String
"CLEAR_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR                   , String
"INDEX_INPUT_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR        , String
"VERTEX_ATTRIBUTE_INPUT_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR     , String
"PRE_RASTERIZATION_SHADERS_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI            , String
"INVOCATION_MASK_BIT_HUAWEI")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI            , String
"SUBPASS_SHADING_BIT_HUAWEI")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_MESH_SHADER_BIT_NV                    , String
"MESH_SHADER_BIT_NV")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_TASK_SHADER_BIT_NV                    , String
"TASK_SHADER_BIT_NV")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT      , String
"FRAGMENT_DENSITY_PROCESS_BIT_EXT")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR            , String
"RAY_TRACING_SHADER_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR  , String
"ACCELERATION_STRUCTURE_BUILD_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, String
"FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV             , String
"COMMAND_PREPROCESS_BIT_NV")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT         , String
"CONDITIONAL_RENDERING_BIT_EXT")
  , ("stageMask" ::: PipelineStageFlags2KHR
PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT            , String
"TRANSFORM_FEEDBACK_BIT_EXT")
  ]

instance Show PipelineStageFlagBits2KHR where
  showsPrec :: Int -> ("stageMask" ::: PipelineStageFlags2KHR) -> ShowS
showsPrec = String
-> [("stageMask" ::: PipelineStageFlags2KHR, String)]
-> String
-> (("stageMask" ::: PipelineStageFlags2KHR)
    -> "dstOffset" ::: DeviceSize)
-> (("dstOffset" ::: DeviceSize) -> ShowS)
-> Int
-> ("stageMask" ::: PipelineStageFlags2KHR)
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixPipelineStageFlagBits2KHR
                            [("stageMask" ::: PipelineStageFlags2KHR, String)]
showTablePipelineStageFlagBits2KHR
                            String
conNamePipelineStageFlagBits2KHR
                            (\(PipelineStageFlagBits2KHR "dstOffset" ::: DeviceSize
x) -> "dstOffset" ::: DeviceSize
x)
                            (\"dstOffset" ::: DeviceSize
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ("dstOffset" ::: DeviceSize) -> ShowS
forall a. (Integral a, Show a) => a -> ShowS
showHex "dstOffset" ::: DeviceSize
x)

instance Read PipelineStageFlagBits2KHR where
  readPrec :: ReadPrec ("stageMask" ::: PipelineStageFlags2KHR)
readPrec = String
-> [("stageMask" ::: PipelineStageFlags2KHR, String)]
-> String
-> (("dstOffset" ::: DeviceSize)
    -> "stageMask" ::: PipelineStageFlags2KHR)
-> ReadPrec ("stageMask" ::: PipelineStageFlags2KHR)
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixPipelineStageFlagBits2KHR
                          [("stageMask" ::: PipelineStageFlags2KHR, String)]
showTablePipelineStageFlagBits2KHR
                          String
conNamePipelineStageFlagBits2KHR
                          ("dstOffset" ::: DeviceSize)
-> "stageMask" ::: PipelineStageFlags2KHR
PipelineStageFlagBits2KHR


type SubmitFlagsKHR = SubmitFlagBitsKHR

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

-- | 'SUBMIT_PROTECTED_BIT_KHR' specifies that this batch is a protected
-- submission.
pattern $bSUBMIT_PROTECTED_BIT_KHR :: SubmitFlagsKHR
$mSUBMIT_PROTECTED_BIT_KHR :: forall r. SubmitFlagsKHR -> (Void# -> r) -> (Void# -> r) -> r
SUBMIT_PROTECTED_BIT_KHR = SubmitFlagBitsKHR 0x00000001

conNameSubmitFlagBitsKHR :: String
conNameSubmitFlagBitsKHR :: String
conNameSubmitFlagBitsKHR = String
"SubmitFlagBitsKHR"

enumPrefixSubmitFlagBitsKHR :: String
enumPrefixSubmitFlagBitsKHR :: String
enumPrefixSubmitFlagBitsKHR = String
"SUBMIT_PROTECTED_BIT_KHR"

showTableSubmitFlagBitsKHR :: [(SubmitFlagBitsKHR, String)]
showTableSubmitFlagBitsKHR :: [(SubmitFlagsKHR, String)]
showTableSubmitFlagBitsKHR = [(SubmitFlagsKHR
SUBMIT_PROTECTED_BIT_KHR, String
"")]

instance Show SubmitFlagBitsKHR where
  showsPrec :: Int -> SubmitFlagsKHR -> ShowS
showsPrec = String
-> [(SubmitFlagsKHR, String)]
-> String
-> (SubmitFlagsKHR -> Word32)
-> (Word32 -> ShowS)
-> Int
-> SubmitFlagsKHR
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixSubmitFlagBitsKHR
                            [(SubmitFlagsKHR, String)]
showTableSubmitFlagBitsKHR
                            String
conNameSubmitFlagBitsKHR
                            (\(SubmitFlagBitsKHR 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, Show a) => a -> ShowS
showHex Word32
x)

instance Read SubmitFlagBitsKHR where
  readPrec :: ReadPrec SubmitFlagsKHR
readPrec =
    String
-> [(SubmitFlagsKHR, String)]
-> String
-> (Word32 -> SubmitFlagsKHR)
-> ReadPrec SubmitFlagsKHR
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixSubmitFlagBitsKHR [(SubmitFlagsKHR, String)]
showTableSubmitFlagBitsKHR String
conNameSubmitFlagBitsKHR Word32 -> SubmitFlagsKHR
SubmitFlagBitsKHR


type KHR_SYNCHRONIZATION_2_SPEC_VERSION = 1

-- No documentation found for TopLevel "VK_KHR_SYNCHRONIZATION_2_SPEC_VERSION"
pattern KHR_SYNCHRONIZATION_2_SPEC_VERSION :: forall a . Integral a => a
pattern $bKHR_SYNCHRONIZATION_2_SPEC_VERSION :: a
$mKHR_SYNCHRONIZATION_2_SPEC_VERSION :: forall r a. Integral a => a -> (Void# -> r) -> (Void# -> r) -> r
KHR_SYNCHRONIZATION_2_SPEC_VERSION = 1


type KHR_SYNCHRONIZATION_2_EXTENSION_NAME = "VK_KHR_synchronization2"

-- No documentation found for TopLevel "VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME"
pattern KHR_SYNCHRONIZATION_2_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bKHR_SYNCHRONIZATION_2_EXTENSION_NAME :: a
$mKHR_SYNCHRONIZATION_2_EXTENSION_NAME :: forall r a.
(Eq a, IsString a) =>
a -> (Void# -> r) -> (Void# -> r) -> r
KHR_SYNCHRONIZATION_2_EXTENSION_NAME = "VK_KHR_synchronization2"