vulkan 3.13 → 3.13.1
raw patch · 81 files changed
+17300/−10745 lines, 81 files
Files
- changelog.md +3/−0
- package.yaml +1/−1
- src/Vulkan/CStruct/Extends.hs +35/−0
- src/Vulkan/Core10/Buffer.hs +4/−0
- src/Vulkan/Core10/CommandBuffer.hs +52/−18
- src/Vulkan/Core10/CommandBufferBuilding.hs +11661/−10418
- src/Vulkan/Core10/Device.hs +3/−0
- src/Vulkan/Core10/DeviceInitialization.hs +1/−1
- src/Vulkan/Core10/Enums/AttachmentLoadOp.hs +2/−1
- src/Vulkan/Core10/Enums/AttachmentStoreOp.hs +10/−9
- src/Vulkan/Core10/Enums/Format.hs +2/−0
- src/Vulkan/Core10/Enums/ImageLayout.hs +3/−0
- src/Vulkan/Core10/Enums/PipelineCreateFlagBits.hs +46/−23
- src/Vulkan/Core10/Enums/PipelineStageFlagBits.hs +1/−1
- src/Vulkan/Core10/Enums/RenderPassCreateFlagBits.hs +2/−2
- src/Vulkan/Core10/Enums/SampleCountFlagBits.hs +2/−0
- src/Vulkan/Core10/Enums/StructureType.hs +64/−6
- src/Vulkan/Core10/FundamentalTypes.hs +4/−0
- src/Vulkan/Core10/Handles.hs +5/−0
- src/Vulkan/Core10/Image.hs +4/−0
- src/Vulkan/Core10/ImageView.hs +5/−1
- src/Vulkan/Core10/Pass.hs +117/−78
- src/Vulkan/Core10/Pipeline.hs +163/−33
- src/Vulkan/Core10/Query.hs +4/−0
- src/Vulkan/Core10/Queue.hs +34/−0
- src/Vulkan/Core11/Originally_Based_On_VK_KHR_protected_memory.hs +1/−1
- src/Vulkan/Core11/Promoted_From_VK_KHR_device_group.hs +19/−1
- src/Vulkan/Core11/Promoted_From_VK_KHR_get_physical_device_properties2.hs +6/−0
- src/Vulkan/Core12/Enums/ResolveModeFlagBits.hs +1/−0
- src/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs +16/−11
- src/Vulkan/Core12/Promoted_From_VK_KHR_draw_indirect_count.hs +484/−12
- src/Vulkan/Core12/Promoted_From_VK_KHR_imageless_framebuffer.hs +1/−1
- src/Vulkan/Dynamic.hs +8/−1
- src/Vulkan/Extensions.hs +2/−0
- src/Vulkan/Extensions/Dependencies.hs +2/−0
- src/Vulkan/Extensions/VK_EXT_buffer_device_address.hs +4/−0
- src/Vulkan/Extensions/VK_EXT_buffer_device_address.hs-boot +4/−0
- src/Vulkan/Extensions/VK_EXT_conditional_rendering.hs +1/−1
- src/Vulkan/Extensions/VK_EXT_conditional_rendering.hs-boot +1/−1
- src/Vulkan/Extensions/VK_EXT_debug_report.hs +2/−0
- src/Vulkan/Extensions/VK_EXT_debug_report.hs-boot +2/−0
- src/Vulkan/Extensions/VK_EXT_display_surface_counter.hs +2/−0
- src/Vulkan/Extensions/VK_EXT_display_surface_counter.hs-boot +2/−0
- src/Vulkan/Extensions/VK_EXT_load_store_op_none.hs +13/−9
- src/Vulkan/Extensions/VK_EXT_multi_draw.hs +484/−12
- src/Vulkan/Extensions/VK_EXT_pipeline_creation_cache_control.hs +2/−0
- src/Vulkan/Extensions/VK_EXT_pipeline_creation_cache_control.hs-boot +2/−0
- src/Vulkan/Extensions/VK_EXT_provoking_vertex.hs +9/−9
- src/Vulkan/Extensions/VK_EXT_provoking_vertex.hs-boot +6/−6
- src/Vulkan/Extensions/VK_EXT_swapchain_colorspace.hs +2/−0
- src/Vulkan/Extensions/VK_EXT_transform_feedback.hs +242/−6
- src/Vulkan/Extensions/VK_GOOGLE_hlsl_functionality1.hs +4/−0
- src/Vulkan/Extensions/VK_HUAWEI_subpass_shading.hs +3/−3
- src/Vulkan/Extensions/VK_INTEL_performance_query.hs +4/−0
- src/Vulkan/Extensions/VK_INTEL_performance_query.hs-boot +4/−0
- src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs +9/−2
- src/Vulkan/Extensions/VK_KHR_create_renderpass2.hs +1/−1
- src/Vulkan/Extensions/VK_KHR_device_group.hs +2/−1
- src/Vulkan/Extensions/VK_KHR_display_swapchain.hs +1/−1
- src/Vulkan/Extensions/VK_KHR_display_swapchain.hs-boot +1/−1
- src/Vulkan/Extensions/VK_KHR_dynamic_rendering.hs +2320/−0
- src/Vulkan/Extensions/VK_KHR_dynamic_rendering.hs-boot +339/−0
- src/Vulkan/Extensions/VK_KHR_external_memory_win32.hs +2/−18
- src/Vulkan/Extensions/VK_KHR_maintenance1.hs +4/−0
- src/Vulkan/Extensions/VK_KHR_maintenance2.hs +4/−0
- src/Vulkan/Extensions/VK_KHR_maintenance3.hs +4/−0
- src/Vulkan/Extensions/VK_KHR_present_id.hs +1/−1
- src/Vulkan/Extensions/VK_KHR_present_wait.hs +1/−1
- src/Vulkan/Extensions/VK_KHR_sampler_mirror_clamp_to_edge.hs +2/−0
- src/Vulkan/Extensions/VK_KHR_synchronization2.hs +47/−5
- src/Vulkan/Extensions/VK_KHR_synchronization2.hs-boot +6/−2
- src/Vulkan/Extensions/VK_KHR_variable_pointers.hs +2/−0
- src/Vulkan/Extensions/VK_NV_device_generated_commands.hs +252/−18
- src/Vulkan/Extensions/VK_NV_mesh_shader.hs +726/−18
- src/Vulkan/Extensions/VK_NV_viewport_array2.hs +4/−0
- src/Vulkan/Extensions/VK_QCOM_render_pass_shader_resolve.hs +1/−1
- src/Vulkan/Extensions/VK_QCOM_render_pass_store_ops.hs +4/−4
- src/Vulkan/Extensions/VK_QCOM_rotated_copy_commands.hs +1/−1
- src/Vulkan/Extensions/VK_QCOM_rotated_copy_commands.hs-boot +1/−1
- src/Vulkan/Version.hs +2/−2
- vulkan.cabal +2/−1
changelog.md view
@@ -2,6 +2,9 @@ ## WIP +## [3.13.1] - 2021-11-03+- Bump API version to v1.2.197+ ## [3.13] - 2021-10-14 - Bump API version to v1.2.196
package.yaml view
@@ -1,5 +1,5 @@ name: vulkan-version: "3.13"+version: "3.13.1" synopsis: Bindings to the Vulkan graphics API. description: Please see [the readme](https://github.com/expipiplus1/vulkan/#readme) category: Graphics
src/Vulkan/CStruct/Extends.hs view
@@ -84,6 +84,7 @@ import {-# SOURCE #-} Vulkan.Core10.Pass (AttachmentReference) import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (AttachmentReference2) import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (AttachmentReferenceStencilLayout)+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (AttachmentSampleCountInfoAMD) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (AttachmentSampleLocationsEXT) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (BindAccelerationStructureMemoryInfoNV) import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2 (BindBufferMemoryDeviceGroupInfo)@@ -128,6 +129,7 @@ import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_conditional_rendering (CommandBufferInheritanceConditionalRenderingInfoEXT) import {-# SOURCE #-} Vulkan.Core10.CommandBuffer (CommandBufferInheritanceInfo) import {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_render_pass_transform (CommandBufferInheritanceRenderPassTransformInfoQCOM)+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (CommandBufferInheritanceRenderingInfoKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_inherited_viewport_scissor (CommandBufferInheritanceViewportScissorInfoNV) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_synchronization2 (CommandBufferSubmitInfoKHR) import {-# SOURCE #-} Vulkan.Core10.CommandPool (CommandPoolCreateInfo)@@ -345,6 +347,7 @@ import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_multi_draw (MultiDrawIndexedInfoEXT) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_multi_draw (MultiDrawInfoEXT) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (MultisamplePropertiesEXT)+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (MultiviewPerViewAttributesInfoNVX) import {-# SOURCE #-} Vulkan.Extensions.VK_VALVE_mutable_descriptor_type (MutableDescriptorTypeCreateInfoVALVE) import {-# SOURCE #-} Vulkan.Extensions.VK_VALVE_mutable_descriptor_type (MutableDescriptorTypeListVALVE) import {-# SOURCE #-} Vulkan.Core10.FundamentalTypes (Offset2D)@@ -392,6 +395,7 @@ import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_discard_rectangles (PhysicalDeviceDiscardRectanglePropertiesEXT) import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_driver_properties (PhysicalDeviceDriverProperties) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_physical_device_drm (PhysicalDeviceDrmPropertiesEXT)+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (PhysicalDeviceDynamicRenderingFeaturesKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_scissor_exclusive (PhysicalDeviceExclusiveScissorFeaturesNV) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_extended_dynamic_state2 (PhysicalDeviceExtendedDynamicState2FeaturesEXT) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_extended_dynamic_state (PhysicalDeviceExtendedDynamicStateFeaturesEXT)@@ -566,6 +570,7 @@ import {-# SOURCE #-} Vulkan.Core10.Pipeline (PipelineRasterizationStateCreateInfo) import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_rasterization_order (PipelineRasterizationStateRasterizationOrderAMD) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_transform_feedback (PipelineRasterizationStateStreamCreateInfoEXT)+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (PipelineRenderingCreateInfoKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_representative_fragment_test (PipelineRepresentativeFragmentTestStateCreateInfoNV) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (PipelineSampleLocationsStateCreateInfoEXT) import {-# SOURCE #-} Vulkan.Core10.Pipeline (PipelineShaderStageCreateInfo)@@ -615,6 +620,10 @@ import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_multiview (RenderPassMultiviewCreateInfo) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (RenderPassSampleLocationsBeginInfoEXT) import {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_render_pass_transform (RenderPassTransformBeginInfoQCOM)+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (RenderingAttachmentInfoKHR)+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (RenderingFragmentDensityMapAttachmentInfoEXT)+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (RenderingFragmentShadingRateAttachmentInfoKHR)+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (RenderingInfoKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_copy_commands2 (ResolveImageInfo2KHR) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (SRTDataNV) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (SampleLocationEXT)@@ -843,6 +852,9 @@ Extends CommandBufferInheritanceInfo CommandBufferInheritanceConditionalRenderingInfoEXT = () Extends CommandBufferInheritanceInfo CommandBufferInheritanceRenderPassTransformInfoQCOM = () Extends CommandBufferInheritanceInfo CommandBufferInheritanceViewportScissorInfoNV = ()+ Extends CommandBufferInheritanceInfo CommandBufferInheritanceRenderingInfoKHR = ()+ Extends CommandBufferInheritanceInfo AttachmentSampleCountInfoAMD = ()+ Extends CommandBufferInheritanceInfo MultiviewPerViewAttributesInfoNVX = () Extends ComputePipelineCreateInfo PipelineCreationFeedbackCreateInfoEXT = () Extends ComputePipelineCreateInfo SubpassShadingPipelineCreateInfoHUAWEI = () Extends ComputePipelineCreateInfo PipelineCompilerControlCreateInfoAMD = ()@@ -960,6 +972,7 @@ Extends DeviceCreateInfo PhysicalDeviceShaderIntegerDotProductFeaturesKHR = () Extends DeviceCreateInfo PhysicalDeviceRayTracingMotionBlurFeaturesNV = () Extends DeviceCreateInfo PhysicalDeviceRGBA10X6FormatsFeaturesEXT = ()+ Extends DeviceCreateInfo PhysicalDeviceDynamicRenderingFeaturesKHR = () Extends DeviceQueueCreateInfo DeviceQueueGlobalPriorityCreateInfoEXT = () Extends FenceCreateInfo ExportFenceCreateInfo = () Extends FenceCreateInfo ExportFenceWin32HandleInfoKHR = ()@@ -974,6 +987,9 @@ Extends GraphicsPipelineCreateInfo PipelineCompilerControlCreateInfoAMD = () Extends GraphicsPipelineCreateInfo PipelineFragmentShadingRateStateCreateInfoKHR = () Extends GraphicsPipelineCreateInfo PipelineFragmentShadingRateEnumStateCreateInfoNV = ()+ Extends GraphicsPipelineCreateInfo PipelineRenderingCreateInfoKHR = ()+ Extends GraphicsPipelineCreateInfo AttachmentSampleCountInfoAMD = ()+ Extends GraphicsPipelineCreateInfo MultiviewPerViewAttributesInfoNVX = () Extends ImageBlit2KHR CopyCommandTransformInfoQCOM = () Extends ImageCreateInfo DedicatedAllocationImageCreateInfoNV = () Extends ImageCreateInfo ExternalMemoryImageCreateInfoNV = ()@@ -1120,6 +1136,7 @@ Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderIntegerDotProductFeaturesKHR = () Extends PhysicalDeviceFeatures2 PhysicalDeviceRayTracingMotionBlurFeaturesNV = () Extends PhysicalDeviceFeatures2 PhysicalDeviceRGBA10X6FormatsFeaturesEXT = ()+ Extends PhysicalDeviceFeatures2 PhysicalDeviceDynamicRenderingFeaturesKHR = () Extends PhysicalDeviceImageFormatInfo2 PhysicalDeviceExternalImageFormatInfo = () Extends PhysicalDeviceImageFormatInfo2 ImageFormatListCreateInfo = () Extends PhysicalDeviceImageFormatInfo2 PhysicalDeviceImageDrmFormatModifierInfoEXT = ()@@ -1221,6 +1238,10 @@ Extends RenderPassCreateInfo RenderPassInputAttachmentAspectCreateInfo = () Extends RenderPassCreateInfo RenderPassFragmentDensityMapCreateInfoEXT = () Extends RenderPassCreateInfo2 RenderPassFragmentDensityMapCreateInfoEXT = ()+ Extends RenderingInfoKHR DeviceGroupRenderPassBeginInfo = ()+ Extends RenderingInfoKHR RenderingFragmentShadingRateAttachmentInfoKHR = ()+ Extends RenderingInfoKHR RenderingFragmentDensityMapAttachmentInfoEXT = ()+ Extends RenderingInfoKHR MultiviewPerViewAttributesInfoNVX = () Extends SamplerCreateInfo SamplerYcbcrConversionInfo = () Extends SamplerCreateInfo SamplerReductionModeCreateInfo = () Extends SamplerCreateInfo SamplerCustomBorderColorCreateInfoEXT = ()@@ -1671,6 +1692,13 @@ STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR -> go @FormatProperties3KHR STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT -> go @DrmFormatModifierPropertiesList2EXT STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID -> go @AndroidHardwareBufferFormatProperties2ANDROID+ STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR -> go @PipelineRenderingCreateInfoKHR+ STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR -> go @RenderingFragmentShadingRateAttachmentInfoKHR+ STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT -> go @RenderingFragmentDensityMapAttachmentInfoEXT+ STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR -> go @PhysicalDeviceDynamicRenderingFeaturesKHR+ STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR -> go @CommandBufferInheritanceRenderingInfoKHR+ STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD -> go @AttachmentSampleCountInfoAMD+ STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX -> go @MultiviewPerViewAttributesInfoNVX t -> throwIO $ IOError Nothing InvalidArgument "peekChainHead" ("Unrecognized struct type: " <> show t) Nothing Nothing where go :: forall e . (Typeable e, FromCStruct e, ToCStruct e, Show e) => IO b@@ -2037,6 +2065,13 @@ {-# complete (::&) :: FormatProperties3KHR #-} {-# complete (::&) :: DrmFormatModifierPropertiesList2EXT #-} {-# complete (::&) :: AndroidHardwareBufferFormatProperties2ANDROID #-}+{-# complete (::&) :: PipelineRenderingCreateInfoKHR #-}+{-# complete (::&) :: RenderingFragmentShadingRateAttachmentInfoKHR #-}+{-# complete (::&) :: RenderingFragmentDensityMapAttachmentInfoEXT #-}+{-# complete (::&) :: PhysicalDeviceDynamicRenderingFeaturesKHR #-}+{-# complete (::&) :: CommandBufferInheritanceRenderingInfoKHR #-}+{-# complete (::&) :: AttachmentSampleCountInfoAMD #-}+{-# complete (::&) :: MultiviewPerViewAttributesInfoNVX #-} -- | View the head and tail of a 'Chain', see '::&' --
src/Vulkan/Core10/Buffer.hs view
@@ -386,6 +386,10 @@ -- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.BufferOpaqueCaptureAddressCreateInfo', -- 'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationBufferCreateInfoNV', -- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo',+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH264ProfileEXT VkVideoDecodeH264ProfileEXT>,+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH265ProfileEXT VkVideoDecodeH265ProfileEXT>,+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264ProfileEXT VkVideoEncodeH264ProfileEXT>,+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH265ProfileEXT VkVideoEncodeH265ProfileEXT>, -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoProfileKHR VkVideoProfileKHR>, -- or -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoProfilesKHR VkVideoProfilesKHR>
src/Vulkan/Core10/CommandBuffer.hs view
@@ -68,6 +68,7 @@ import Vulkan.CStruct.Extends (peekSomeCStruct) import Vulkan.CStruct.Extends (withSomeCStruct) import Vulkan.NamedType ((:::))+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (AttachmentSampleCountInfoAMD) import Vulkan.Core10.FundamentalTypes (Bool32) import Vulkan.CStruct.Extends (Chain) import Vulkan.Core10.Handles (CommandBuffer)@@ -75,6 +76,7 @@ import Vulkan.Core10.Handles (CommandBuffer(CommandBuffer)) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_conditional_rendering (CommandBufferInheritanceConditionalRenderingInfoEXT) import {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_render_pass_transform (CommandBufferInheritanceRenderPassTransformInfoQCOM)+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (CommandBufferInheritanceRenderingInfoKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_inherited_viewport_scissor (CommandBufferInheritanceViewportScissorInfoNV) import Vulkan.Core10.Enums.CommandBufferLevel (CommandBufferLevel) import Vulkan.Core10.Enums.CommandBufferResetFlagBits (CommandBufferResetFlagBits(..))@@ -96,6 +98,7 @@ import Vulkan.CStruct.Extends (Extendss) import Vulkan.CStruct.Extends (Extensible(..)) import Vulkan.Core10.Handles (Framebuffer)+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (MultiviewPerViewAttributesInfoNVX) import Vulkan.CStruct.Extends (PeekChain) import Vulkan.CStruct.Extends (PeekChain(..)) import Vulkan.CStruct.Extends (PokeChain)@@ -659,6 +662,13 @@ -- | VkCommandBufferInheritanceInfo - Structure specifying command buffer -- inheritance information --+-- = Description+--+-- If the 'Vulkan.Core10.Handles.CommandBuffer' will not be executed within+-- a render pass instance, or if the render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- @renderPass@, @subpass@, and @framebuffer@ are ignored.+-- -- == Valid Usage -- -- - #VUID-VkCommandBufferInheritanceInfo-occlusionQueryEnable-00056# If@@ -698,10 +708,13 @@ -- - #VUID-VkCommandBufferInheritanceInfo-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_dynamic_rendering.AttachmentSampleCountInfoAMD', -- 'Vulkan.Extensions.VK_EXT_conditional_rendering.CommandBufferInheritanceConditionalRenderingInfoEXT', -- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.CommandBufferInheritanceRenderingInfoKHR',+-- 'Vulkan.Extensions.VK_NV_inherited_viewport_scissor.CommandBufferInheritanceViewportScissorInfoNV', -- or--- 'Vulkan.Extensions.VK_NV_inherited_viewport_scissor.CommandBufferInheritanceViewportScissorInfoNV'+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.MultiviewPerViewAttributesInfoNVX' -- -- - #VUID-VkCommandBufferInheritanceInfo-sType-unique# The @sType@ value -- of each struct in the @pNext@ chain /must/ be unique@@ -726,21 +739,16 @@ , -- | @renderPass@ is a 'Vulkan.Core10.Handles.RenderPass' object defining -- which render passes the 'Vulkan.Core10.Handles.CommandBuffer' will be -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>- -- with and /can/ be executed within. If the- -- 'Vulkan.Core10.Handles.CommandBuffer' will not be executed within a- -- render pass instance, @renderPass@ is ignored.+ -- with and /can/ be executed within. renderPass :: RenderPass , -- | @subpass@ is the index of the subpass within the render pass instance -- that the 'Vulkan.Core10.Handles.CommandBuffer' will be executed within.- -- If the 'Vulkan.Core10.Handles.CommandBuffer' will not be executed within- -- a render pass instance, @subpass@ is ignored. subpass :: Word32 , -- | @framebuffer@ /can/ refer to the 'Vulkan.Core10.Handles.Framebuffer' -- object that the 'Vulkan.Core10.Handles.CommandBuffer' will be rendering -- to if it is executed within a render pass instance. It /can/ be -- 'Vulkan.Core10.APIConstants.NULL_HANDLE' if the framebuffer is not- -- known, or if the 'Vulkan.Core10.Handles.CommandBuffer' will not be- -- executed within a render pass instance.+ -- known. -- -- Note --@@ -788,6 +796,9 @@ getNext CommandBufferInheritanceInfo{..} = next extends :: forall e b proxy. Typeable e => proxy e -> (Extends CommandBufferInheritanceInfo e => b) -> Maybe b extends _ f+ | Just Refl <- eqT @e @MultiviewPerViewAttributesInfoNVX = Just f+ | Just Refl <- eqT @e @AttachmentSampleCountInfoAMD = Just f+ | Just Refl <- eqT @e @CommandBufferInheritanceRenderingInfoKHR = Just f | Just Refl <- eqT @e @CommandBufferInheritanceViewportScissorInfoNV = Just f | Just Refl <- eqT @e @CommandBufferInheritanceRenderPassTransformInfoQCOM = Just f | Just Refl <- eqT @e @CommandBufferInheritanceConditionalRenderingInfoEXT = Just f@@ -845,22 +856,45 @@ -- -- == Valid Usage ----- - #VUID-VkCommandBufferBeginInfo-flags-00053# If @flags@ contains--- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT',--- the @renderPass@ member of @pInheritanceInfo@ /must/ be a valid--- 'Vulkan.Core10.Handles.RenderPass'------ - #VUID-VkCommandBufferBeginInfo-flags-00054# If @flags@ contains--- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT',--- the @subpass@ member of @pInheritanceInfo@ /must/ be a valid subpass--- index within the @renderPass@ member of @pInheritanceInfo@--- -- - #VUID-VkCommandBufferBeginInfo-flags-00055# If @flags@ contains -- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT', -- the @framebuffer@ member of @pInheritanceInfo@ /must/ be either -- 'Vulkan.Core10.APIConstants.NULL_HANDLE', or a valid -- 'Vulkan.Core10.Handles.Framebuffer' that is compatible with the -- @renderPass@ member of @pInheritanceInfo@+--+-- - #VUID-VkCommandBufferBeginInfo-flags-06000# If @flags@ contains+-- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT'+-- and the @renderPass@ member of @pInheritanceInfo@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', @renderPass@ /must/ be a+-- valid 'Vulkan.Core10.Handles.RenderPass'+--+-- - #VUID-VkCommandBufferBeginInfo-flags-06001# If @flags@ contains+-- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT'+-- and the @renderPass@ member of @pInheritanceInfo@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', the @subpass@ member of+-- @pInheritanceInfo@ /must/ be a valid subpass index within the+-- @renderPass@ member of @pInheritanceInfo@+--+-- - #VUID-VkCommandBufferBeginInfo-flags-06002# If @flags@ contains+-- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT'+-- and the @renderPass@ member of @pInheritanceInfo@ is+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', the @pNext@ chain of+-- @pInheritanceInfo@ /must/ include a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.CommandBufferInheritanceRenderingInfoKHR'+-- structure+--+-- - #VUID-VkCommandBufferBeginInfo-flags-06003# If @flags@ contains+-- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT',+-- the @renderPass@ member of @pInheritanceInfo@ is+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @pNext@ chain of+-- @pInheritanceInfo@ includes a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, the @colorAttachmentCount@ member of that structure+-- /must/ be equal to the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.CommandBufferInheritanceRenderingInfoKHR'::@colorAttachmentCount@ -- -- == Valid Usage (Implicit) --
src/Vulkan/Core10/CommandBufferBuilding.hs view
@@ -368,10424 +368,11667 @@ -- limit is 'Vulkan.Core10.FundamentalTypes.FALSE', then pipeline’s -- 'Vulkan.Extensions.VK_EXT_provoking_vertex.PipelineRasterizationProvokingVertexStateCreateInfoEXT'::@provokingVertexMode@ -- /must/ be the same as that of any other pipelines previously bound--- to this bind point within the current renderpass instance, including--- any pipeline already bound when beginning the renderpass instance------ - #VUID-vkCmdBindPipeline-pipelineBindPoint-04949# If--- @pipelineBindPoint@ is--- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI',--- the 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support compute operations------ - #VUID-vkCmdBindPipeline-pipelineBindPoint-04950# If--- @pipelineBindPoint@ is--- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI',--- @pipeline@ /must/ be a subpass shading pipeline------ == Valid Usage (Implicit)------ - #VUID-vkCmdBindPipeline-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdBindPipeline-pipelineBindPoint-parameter#--- @pipelineBindPoint@ /must/ be a valid--- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value------ - #VUID-vkCmdBindPipeline-pipeline-parameter# @pipeline@ /must/ be a--- valid 'Vulkan.Core10.Handles.Pipeline' handle------ - #VUID-vkCmdBindPipeline-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-vkCmdBindPipeline-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics, or compute operations------ - #VUID-vkCmdBindPipeline-commonparent# Both of @commandBuffer@, and--- @pipeline@ /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_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Pipeline',--- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'-cmdBindPipeline :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer that the pipeline will be bound- -- to.- CommandBuffer- -> -- | @pipelineBindPoint@ is a- -- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value- -- specifying to which bind point the pipeline is bound. Binding one does- -- not disturb the others.- PipelineBindPoint- -> -- | @pipeline@ is the pipeline to be bound.- Pipeline- -> io ()-cmdBindPipeline commandBuffer pipelineBindPoint pipeline = liftIO $ do- let vkCmdBindPipelinePtr = pVkCmdBindPipeline (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdBindPipelinePtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindPipeline is null" Nothing Nothing- let vkCmdBindPipeline' = mkVkCmdBindPipeline vkCmdBindPipelinePtr- traceAroundEvent "vkCmdBindPipeline" (vkCmdBindPipeline' (commandBufferHandle (commandBuffer)) (pipelineBindPoint) (pipeline))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdSetViewport- :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Viewport -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Viewport -> IO ()---- | vkCmdSetViewport - Set the viewport dynamically for a command buffer------ = Description------ This command sets the viewport transformation parameters state for--- subsequent drawing commands when the graphics pipeline is created with--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT' set in--- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.--- Otherwise, this state is specified by the--- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@pViewports@--- values used to create the currently active pipeline.------ The viewport parameters taken from element i of @pViewports@ replace the--- current state for the viewport index @firstViewport@ + i, for i in [0,--- @viewportCount@).------ == Valid Usage------ - #VUID-vkCmdSetViewport-firstViewport-01223# The sum of--- @firstViewport@ and @viewportCount@ /must/ be between @1@ and--- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,--- inclusive------ - #VUID-vkCmdSetViewport-firstViewport-01224# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>--- feature is not enabled, @firstViewport@ /must/ be @0@------ - #VUID-vkCmdSetViewport-viewportCount-01225# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>--- feature is not enabled, @viewportCount@ /must/ be @1@------ - #VUID-vkCmdSetViewport-commandBuffer-04821# @commandBuffer@ /must/--- not have--- 'Vulkan.Extensions.VK_NV_inherited_viewport_scissor.CommandBufferInheritanceViewportScissorInfoNV'::@viewportScissor2D@--- enabled------ == Valid Usage (Implicit)------ - #VUID-vkCmdSetViewport-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdSetViewport-pViewports-parameter# @pViewports@ /must/ be--- a valid pointer to an array of @viewportCount@ valid--- 'Vulkan.Core10.Pipeline.Viewport' structures------ - #VUID-vkCmdSetViewport-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-vkCmdSetViewport-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics operations------ - #VUID-vkCmdSetViewport-viewportCount-arraylength# @viewportCount@--- /must/ be greater than @0@------ == Host Synchronization------ - Host access to @commandBuffer@ /must/ be externally synchronized------ - Host access to the 'Vulkan.Core10.Handles.CommandPool' that--- @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+--- | Primary | Both | Graphics |--- | Secondary | | |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Pipeline.Viewport'-cmdSetViewport :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @firstViewport@ is the index of the first viewport whose parameters are- -- updated by the command.- ("firstViewport" ::: Word32)- -> -- | @pViewports@ is a pointer to an array of- -- 'Vulkan.Core10.Pipeline.Viewport' structures specifying viewport- -- parameters.- ("viewports" ::: Vector Viewport)- -> io ()-cmdSetViewport commandBuffer firstViewport viewports = liftIO . evalContT $ do- let vkCmdSetViewportPtr = pVkCmdSetViewport (deviceCmds (commandBuffer :: CommandBuffer))- lift $ unless (vkCmdSetViewportPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetViewport is null" Nothing Nothing- let vkCmdSetViewport' = mkVkCmdSetViewport vkCmdSetViewportPtr- pPViewports <- ContT $ allocaBytes @Viewport ((Data.Vector.length (viewports)) * 24)- lift $ Data.Vector.imapM_ (\i e -> poke (pPViewports `plusPtr` (24 * (i)) :: Ptr Viewport) (e)) (viewports)- lift $ traceAroundEvent "vkCmdSetViewport" (vkCmdSetViewport' (commandBufferHandle (commandBuffer)) (firstViewport) ((fromIntegral (Data.Vector.length $ (viewports)) :: Word32)) (pPViewports))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdSetScissor- :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Rect2D -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Rect2D -> IO ()---- | vkCmdSetScissor - Set scissor rectangles dynamically for a command--- buffer------ = Description------ The scissor rectangles taken from element i of @pScissors@ replace the--- current state for the scissor index @firstScissor@ + i, for i in [0,--- @scissorCount@).------ This command sets the scissor rectangles for subsequent drawing commands--- when the graphics pipeline is created with--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR' set in--- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.--- Otherwise, this state is specified by the--- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@pScissors@--- values used to create the currently active pipeline.------ == Valid Usage------ - #VUID-vkCmdSetScissor-firstScissor-00592# The sum of @firstScissor@--- and @scissorCount@ /must/ be between @1@ and--- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,--- inclusive------ - #VUID-vkCmdSetScissor-firstScissor-00593# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>--- feature is not enabled, @firstScissor@ /must/ be @0@------ - #VUID-vkCmdSetScissor-scissorCount-00594# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>--- feature is not enabled, @scissorCount@ /must/ be @1@------ - #VUID-vkCmdSetScissor-x-00595# The @x@ and @y@ members of @offset@--- member of any element of @pScissors@ /must/ be greater than or equal--- to @0@------ - #VUID-vkCmdSetScissor-offset-00596# Evaluation of (@offset.x@ +--- @extent.width@) /must/ not cause a signed integer addition overflow--- for any element of @pScissors@------ - #VUID-vkCmdSetScissor-offset-00597# Evaluation of (@offset.y@ +--- @extent.height@) /must/ not cause a signed integer addition overflow--- for any element of @pScissors@------ - #VUID-vkCmdSetScissor-viewportScissor2D-04789# If this command is--- recorded in a secondary command buffer with--- 'Vulkan.Extensions.VK_NV_inherited_viewport_scissor.CommandBufferInheritanceViewportScissorInfoNV'::@viewportScissor2D@--- enabled, then this function /must/ not be called------ == Valid Usage (Implicit)------ - #VUID-vkCmdSetScissor-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdSetScissor-pScissors-parameter# @pScissors@ /must/ be a--- valid pointer to an array of @scissorCount@--- 'Vulkan.Core10.FundamentalTypes.Rect2D' structures------ - #VUID-vkCmdSetScissor-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-vkCmdSetScissor-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics operations------ - #VUID-vkCmdSetScissor-scissorCount-arraylength# @scissorCount@--- /must/ be greater than @0@------ == Host Synchronization------ - Host access to @commandBuffer@ /must/ be externally synchronized------ - Host access to the 'Vulkan.Core10.Handles.CommandPool' that--- @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+--- | Primary | Both | Graphics |--- | Secondary | | |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.FundamentalTypes.Rect2D'-cmdSetScissor :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @firstScissor@ is the index of the first scissor whose state is updated- -- by the command.- ("firstScissor" ::: Word32)- -> -- | @pScissors@ is a pointer to an array of- -- 'Vulkan.Core10.FundamentalTypes.Rect2D' structures defining scissor- -- rectangles.- ("scissors" ::: Vector Rect2D)- -> io ()-cmdSetScissor commandBuffer firstScissor scissors = liftIO . evalContT $ do- let vkCmdSetScissorPtr = pVkCmdSetScissor (deviceCmds (commandBuffer :: CommandBuffer))- lift $ unless (vkCmdSetScissorPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetScissor is null" Nothing Nothing- let vkCmdSetScissor' = mkVkCmdSetScissor vkCmdSetScissorPtr- pPScissors <- ContT $ allocaBytes @Rect2D ((Data.Vector.length (scissors)) * 16)- lift $ Data.Vector.imapM_ (\i e -> poke (pPScissors `plusPtr` (16 * (i)) :: Ptr Rect2D) (e)) (scissors)- lift $ traceAroundEvent "vkCmdSetScissor" (vkCmdSetScissor' (commandBufferHandle (commandBuffer)) (firstScissor) ((fromIntegral (Data.Vector.length $ (scissors)) :: Word32)) (pPScissors))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdSetLineWidth- :: FunPtr (Ptr CommandBuffer_T -> CFloat -> IO ()) -> Ptr CommandBuffer_T -> CFloat -> IO ()---- | vkCmdSetLineWidth - Set line width dynamically for a command buffer------ = Description------ This command sets the line width for subsequent drawing commands when--- the graphics pipeline is created with--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_WIDTH' set in--- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.--- Otherwise, this state is specified by the--- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'::@lineWidth@--- value used to create the currently active pipeline.------ == Valid Usage------ - #VUID-vkCmdSetLineWidth-lineWidth-00788# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-wideLines wide lines>--- feature is not enabled, @lineWidth@ /must/ be @1.0@------ == Valid Usage (Implicit)------ - #VUID-vkCmdSetLineWidth-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdSetLineWidth-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-vkCmdSetLineWidth-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics 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 | Graphics |--- | Secondary | | |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer'-cmdSetLineWidth :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @lineWidth@ is the width of rasterized line segments.- ("lineWidth" ::: Float)- -> io ()-cmdSetLineWidth commandBuffer lineWidth = liftIO $ do- let vkCmdSetLineWidthPtr = pVkCmdSetLineWidth (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdSetLineWidthPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetLineWidth is null" Nothing Nothing- let vkCmdSetLineWidth' = mkVkCmdSetLineWidth vkCmdSetLineWidthPtr- traceAroundEvent "vkCmdSetLineWidth" (vkCmdSetLineWidth' (commandBufferHandle (commandBuffer)) (CFloat (lineWidth)))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdSetDepthBias- :: FunPtr (Ptr CommandBuffer_T -> CFloat -> CFloat -> CFloat -> IO ()) -> Ptr CommandBuffer_T -> CFloat -> CFloat -> CFloat -> IO ()---- | vkCmdSetDepthBias - Set depth bias factors and clamp dynamically for a--- command buffer------ = Description------ This command sets the depth bias parameters for subsequent drawing--- commands when the graphics pipeline is created with--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS' set in--- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.--- Otherwise, this state is specified by the corresponding--- 'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@depthBiasConstantFactor@,--- @depthBiasClamp@, and @depthBiasSlopeFactor@ values used to create the--- currently active pipeline.------ == Valid Usage------ - #VUID-vkCmdSetDepthBias-depthBiasClamp-00790# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-depthBiasClamp depth bias clamping>--- feature is not enabled, @depthBiasClamp@ /must/ be @0.0@------ == Valid Usage (Implicit)------ - #VUID-vkCmdSetDepthBias-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdSetDepthBias-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-vkCmdSetDepthBias-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics 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 | Graphics |--- | Secondary | | |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer'-cmdSetDepthBias :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @depthBiasConstantFactor@ is a scalar factor controlling the constant- -- depth value added to each fragment.- ("depthBiasConstantFactor" ::: Float)- -> -- | @depthBiasClamp@ is the maximum (or minimum) depth bias of a fragment.- ("depthBiasClamp" ::: Float)- -> -- | @depthBiasSlopeFactor@ is a scalar factor applied to a fragment’s slope- -- in depth bias calculations.- ("depthBiasSlopeFactor" ::: Float)- -> io ()-cmdSetDepthBias commandBuffer depthBiasConstantFactor depthBiasClamp depthBiasSlopeFactor = liftIO $ do- let vkCmdSetDepthBiasPtr = pVkCmdSetDepthBias (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdSetDepthBiasPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetDepthBias is null" Nothing Nothing- let vkCmdSetDepthBias' = mkVkCmdSetDepthBias vkCmdSetDepthBiasPtr- traceAroundEvent "vkCmdSetDepthBias" (vkCmdSetDepthBias' (commandBufferHandle (commandBuffer)) (CFloat (depthBiasConstantFactor)) (CFloat (depthBiasClamp)) (CFloat (depthBiasSlopeFactor)))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdSetBlendConstants- :: FunPtr (Ptr CommandBuffer_T -> Ptr (FixedArray 4 CFloat) -> IO ()) -> Ptr CommandBuffer_T -> Ptr (FixedArray 4 CFloat) -> IO ()---- | vkCmdSetBlendConstants - Set the values of blend constants------ = Description------ This command sets blend constants for subsequent drawing commands when--- the graphics pipeline is created with--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_BLEND_CONSTANTS' set in--- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.--- Otherwise, this state is specified by the--- 'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'::@blendConstants@--- values used to create the currently active pipeline.------ == Valid Usage (Implicit)------ - #VUID-vkCmdSetBlendConstants-commandBuffer-parameter#--- @commandBuffer@ /must/ be a valid--- 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdSetBlendConstants-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-vkCmdSetBlendConstants-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics 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 | Graphics |--- | Secondary | | |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer'-cmdSetBlendConstants :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @blendConstants@ is a pointer to an array of four values specifying the- -- Rc, Gc, Bc, and Ac components of the blend constant color used in- -- blending, depending on the- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blendfactors blend factor>.- ("blendConstants" ::: (Float, Float, Float, Float))- -> io ()-cmdSetBlendConstants commandBuffer blendConstants = liftIO . evalContT $ do- let vkCmdSetBlendConstantsPtr = pVkCmdSetBlendConstants (deviceCmds (commandBuffer :: CommandBuffer))- lift $ unless (vkCmdSetBlendConstantsPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetBlendConstants is null" Nothing Nothing- let vkCmdSetBlendConstants' = mkVkCmdSetBlendConstants vkCmdSetBlendConstantsPtr- pBlendConstants <- ContT $ allocaBytes @(FixedArray 4 CFloat) 16- let pBlendConstants' = lowerArrayPtr pBlendConstants- lift $ case (blendConstants) of- (e0, e1, e2, e3) -> do- poke (pBlendConstants' :: Ptr CFloat) (CFloat (e0))- poke (pBlendConstants' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))- poke (pBlendConstants' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))- poke (pBlendConstants' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))- lift $ traceAroundEvent "vkCmdSetBlendConstants" (vkCmdSetBlendConstants' (commandBufferHandle (commandBuffer)) (pBlendConstants))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdSetDepthBounds- :: FunPtr (Ptr CommandBuffer_T -> CFloat -> CFloat -> IO ()) -> Ptr CommandBuffer_T -> CFloat -> CFloat -> IO ()---- | vkCmdSetDepthBounds - Set depth bounds range dynamically for a command--- buffer------ = Description------ This command sets the depth bounds range for subsequent drawing commands--- when the graphics pipeline is created with--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BOUNDS' set in--- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.--- Otherwise, this state is specified by the--- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'::@minDepthBounds@--- and--- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'::@maxDepthBounds@--- values used to create the currently active pipeline.------ == Valid Usage------ - #VUID-vkCmdSetDepthBounds-minDepthBounds-00600# Unless the--- @VK_EXT_depth_range_unrestricted@ extension is enabled--- @minDepthBounds@ /must/ be between @0.0@ and @1.0@, inclusive------ - #VUID-vkCmdSetDepthBounds-maxDepthBounds-00601# Unless the--- @VK_EXT_depth_range_unrestricted@ extension is enabled--- @maxDepthBounds@ /must/ be between @0.0@ and @1.0@, inclusive------ == Valid Usage (Implicit)------ - #VUID-vkCmdSetDepthBounds-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdSetDepthBounds-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-vkCmdSetDepthBounds-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics 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 | Graphics |--- | Secondary | | |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer'-cmdSetDepthBounds :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @minDepthBounds@ is the minimum depth bound.- ("minDepthBounds" ::: Float)- -> -- | @maxDepthBounds@ is the maximum depth bound.- ("maxDepthBounds" ::: Float)- -> io ()-cmdSetDepthBounds commandBuffer minDepthBounds maxDepthBounds = liftIO $ do- let vkCmdSetDepthBoundsPtr = pVkCmdSetDepthBounds (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdSetDepthBoundsPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetDepthBounds is null" Nothing Nothing- let vkCmdSetDepthBounds' = mkVkCmdSetDepthBounds vkCmdSetDepthBoundsPtr- traceAroundEvent "vkCmdSetDepthBounds" (vkCmdSetDepthBounds' (commandBufferHandle (commandBuffer)) (CFloat (minDepthBounds)) (CFloat (maxDepthBounds)))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdSetStencilCompareMask- :: FunPtr (Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()---- | vkCmdSetStencilCompareMask - Set stencil compare mask dynamically for a--- command buffer------ = Description------ This command sets the stencil compare mask for subsequent drawing--- commands when the graphics pipeline is created with--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_COMPARE_MASK'--- set in--- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.--- Otherwise, this state is specified by the--- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'::@compareMask@--- value used to create the currently active pipeline, for both front and--- back faces.------ == Valid Usage (Implicit)------ - #VUID-vkCmdSetStencilCompareMask-commandBuffer-parameter#--- @commandBuffer@ /must/ be a valid--- 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdSetStencilCompareMask-faceMask-parameter# @faceMask@--- /must/ be a valid combination of--- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' values------ - #VUID-vkCmdSetStencilCompareMask-faceMask-requiredbitmask#--- @faceMask@ /must/ not be @0@------ - #VUID-vkCmdSetStencilCompareMask-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-vkCmdSetStencilCompareMask-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics 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 | Graphics |--- | Secondary | | |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlags'-cmdSetStencilCompareMask :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @faceMask@ is a bitmask of- -- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' specifying- -- the set of stencil state for which to update the compare mask.- ("faceMask" ::: StencilFaceFlags)- -> -- | @compareMask@ is the new value to use as the stencil compare mask.- ("compareMask" ::: Word32)- -> io ()-cmdSetStencilCompareMask commandBuffer faceMask compareMask = liftIO $ do- let vkCmdSetStencilCompareMaskPtr = pVkCmdSetStencilCompareMask (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdSetStencilCompareMaskPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetStencilCompareMask is null" Nothing Nothing- let vkCmdSetStencilCompareMask' = mkVkCmdSetStencilCompareMask vkCmdSetStencilCompareMaskPtr- traceAroundEvent "vkCmdSetStencilCompareMask" (vkCmdSetStencilCompareMask' (commandBufferHandle (commandBuffer)) (faceMask) (compareMask))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdSetStencilWriteMask- :: FunPtr (Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()---- | vkCmdSetStencilWriteMask - Set stencil write mask dynamically for a--- command buffer------ = Description------ This command sets the stencil write mask for subsequent drawing commands--- when the graphics pipeline is created with--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_WRITE_MASK' set--- in--- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.--- Otherwise, this state is specified by the--- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'::@writeMask@--- value used to create the currently active pipeline, for both front and--- back faces.------ == Valid Usage (Implicit)------ - #VUID-vkCmdSetStencilWriteMask-commandBuffer-parameter#--- @commandBuffer@ /must/ be a valid--- 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdSetStencilWriteMask-faceMask-parameter# @faceMask@ /must/--- be a valid combination of--- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' values------ - #VUID-vkCmdSetStencilWriteMask-faceMask-requiredbitmask# @faceMask@--- /must/ not be @0@------ - #VUID-vkCmdSetStencilWriteMask-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-vkCmdSetStencilWriteMask-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics 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 | Graphics |--- | Secondary | | |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlags'-cmdSetStencilWriteMask :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @faceMask@ is a bitmask of- -- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' specifying- -- the set of stencil state for which to update the write mask, as- -- described above for 'cmdSetStencilCompareMask'.- ("faceMask" ::: StencilFaceFlags)- -> -- | @writeMask@ is the new value to use as the stencil write mask.- ("writeMask" ::: Word32)- -> io ()-cmdSetStencilWriteMask commandBuffer faceMask writeMask = liftIO $ do- let vkCmdSetStencilWriteMaskPtr = pVkCmdSetStencilWriteMask (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdSetStencilWriteMaskPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetStencilWriteMask is null" Nothing Nothing- let vkCmdSetStencilWriteMask' = mkVkCmdSetStencilWriteMask vkCmdSetStencilWriteMaskPtr- traceAroundEvent "vkCmdSetStencilWriteMask" (vkCmdSetStencilWriteMask' (commandBufferHandle (commandBuffer)) (faceMask) (writeMask))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdSetStencilReference- :: FunPtr (Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()---- | vkCmdSetStencilReference - Set stencil reference value dynamically for a--- command buffer------ = Description------ This command sets the stencil reference value for subsequent drawing--- commands when the graphics pipeline is created with--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_REFERENCE' set--- in--- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.--- Otherwise, this state is specified by the--- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'::@reference@--- value used to create the currently active pipeline, for both front and--- back faces.------ == Valid Usage (Implicit)------ - #VUID-vkCmdSetStencilReference-commandBuffer-parameter#--- @commandBuffer@ /must/ be a valid--- 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdSetStencilReference-faceMask-parameter# @faceMask@ /must/--- be a valid combination of--- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' values------ - #VUID-vkCmdSetStencilReference-faceMask-requiredbitmask# @faceMask@--- /must/ not be @0@------ - #VUID-vkCmdSetStencilReference-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-vkCmdSetStencilReference-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics 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 | Graphics |--- | Secondary | | |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlags'-cmdSetStencilReference :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @faceMask@ is a bitmask of- -- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' specifying- -- the set of stencil state for which to update the reference value, as- -- described above for 'cmdSetStencilCompareMask'.- ("faceMask" ::: StencilFaceFlags)- -> -- | @reference@ is the new value to use as the stencil reference value.- ("reference" ::: Word32)- -> io ()-cmdSetStencilReference commandBuffer faceMask reference = liftIO $ do- let vkCmdSetStencilReferencePtr = pVkCmdSetStencilReference (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdSetStencilReferencePtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetStencilReference is null" Nothing Nothing- let vkCmdSetStencilReference' = mkVkCmdSetStencilReference vkCmdSetStencilReferencePtr- traceAroundEvent "vkCmdSetStencilReference" (vkCmdSetStencilReference' (commandBufferHandle (commandBuffer)) (faceMask) (reference))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdBindDescriptorSets- :: FunPtr (Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> Word32 -> Word32 -> Ptr DescriptorSet -> Word32 -> Ptr Word32 -> IO ()) -> Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> Word32 -> Word32 -> Ptr DescriptorSet -> Word32 -> Ptr Word32 -> IO ()---- | vkCmdBindDescriptorSets - Binds descriptor sets to a command buffer------ = Description------ 'cmdBindDescriptorSets' causes the sets numbered [@firstSet@..--- @firstSet@+@descriptorSetCount@-1] to use the bindings stored in--- @pDescriptorSets@[0..descriptorSetCount-1] for subsequent--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-bindpoint-commands bound pipeline commands>--- set by @pipelineBindPoint@. Any bindings that were previously applied--- via these sets are no longer valid.------ Once bound, a descriptor set affects rendering of subsequent commands--- that interact with the given pipeline type in the command buffer until--- either a different set is bound to the same set number, or the set is--- disturbed as described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility Pipeline Layout Compatibility>.------ A compatible descriptor set /must/ be bound for all set numbers that any--- shaders in a pipeline access, at the time that a drawing or dispatching--- command is recorded to execute using that pipeline. However, if none of--- the shaders in a pipeline statically use any bindings with a particular--- set number, then no descriptor set need be bound for that set number,--- even if the pipeline layout includes a non-trivial descriptor set layout--- for that set number.------ If any of the sets being bound include dynamic uniform or storage--- buffers, then @pDynamicOffsets@ includes one element for each array--- element in each dynamic descriptor type binding in each set. Values are--- taken from @pDynamicOffsets@ in an order such that all entries for set N--- come before set N+1; within a set, entries are ordered by the binding--- numbers in the descriptor set layouts; and within a binding array,--- elements are in order. @dynamicOffsetCount@ /must/ equal the total--- number of dynamic descriptors in the sets being bound.------ The effective offset used for dynamic uniform and storage buffer--- bindings is the sum of the relative offset taken from @pDynamicOffsets@,--- and the base address of the buffer plus base offset in the descriptor--- set. The range of the dynamic uniform and storage buffer bindings is the--- buffer range as specified in the descriptor set.------ Each of the @pDescriptorSets@ /must/ be compatible with the pipeline--- layout specified by @layout@. The layout used to program the bindings--- /must/ also be compatible with the pipeline used in subsequent--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-bindpoint-commands bound pipeline commands>--- with that pipeline type, as defined in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility Pipeline Layout Compatibility>--- section.------ The descriptor set contents bound by a call to 'cmdBindDescriptorSets'--- /may/ be consumed at the following times:------ - For descriptor bindings created with the--- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'--- bit set, the contents /may/ be consumed when the command buffer is--- submitted to a queue, or during shader execution of the resulting--- draws and dispatches, or any time in between. Otherwise,------ - during host execution of the command, or during shader execution of--- the resulting draws and dispatches, or any time in between.------ Thus, the contents of a descriptor set binding /must/ not be altered--- (overwritten by an update command, or freed) between the first point in--- time that it /may/ be consumed, and when the command completes executing--- on the queue.------ The contents of @pDynamicOffsets@ are consumed immediately during--- execution of 'cmdBindDescriptorSets'. Once all pending uses have--- completed, it is legal to update and reuse a descriptor set.------ == Valid Usage------ - #VUID-vkCmdBindDescriptorSets-pDescriptorSets-00358# Each element of--- @pDescriptorSets@ /must/ have been allocated with a--- 'Vulkan.Core10.Handles.DescriptorSetLayout' that matches (is the--- same as, or identically defined as) the--- 'Vulkan.Core10.Handles.DescriptorSetLayout' at set /n/ in @layout@,--- where /n/ is the sum of @firstSet@ and the index into--- @pDescriptorSets@------ - #VUID-vkCmdBindDescriptorSets-dynamicOffsetCount-00359#--- @dynamicOffsetCount@ /must/ be equal to the total number of dynamic--- descriptors in @pDescriptorSets@------ - #VUID-vkCmdBindDescriptorSets-firstSet-00360# The sum of @firstSet@--- and @descriptorSetCount@ /must/ be less than or equal to--- 'Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo'::@setLayoutCount@--- provided when @layout@ was created------ - #VUID-vkCmdBindDescriptorSets-pipelineBindPoint-00361#--- @pipelineBindPoint@ /must/ be supported by the @commandBuffer@’s--- parent 'Vulkan.Core10.Handles.CommandPool'’s queue family------ - #VUID-vkCmdBindDescriptorSets-pDynamicOffsets-01971# Each element of--- @pDynamicOffsets@ which corresponds to a descriptor binding with--- type--- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'--- /must/ be a multiple of--- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minUniformBufferOffsetAlignment@------ - #VUID-vkCmdBindDescriptorSets-pDynamicOffsets-01972# Each element of--- @pDynamicOffsets@ which corresponds to a descriptor binding with--- type--- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'--- /must/ be a multiple of--- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minStorageBufferOffsetAlignment@------ - #VUID-vkCmdBindDescriptorSets-pDescriptorSets-01979# For each--- dynamic uniform or storage buffer binding in @pDescriptorSets@, the--- sum of the effective offset, as defined above, and the range of the--- binding /must/ be less than or equal to the size of the buffer------ - #VUID-vkCmdBindDescriptorSets-pDescriptorSets-04616# Each element of--- @pDescriptorSets@ /must/ not have been allocated from a--- 'Vulkan.Core10.Handles.DescriptorPool' with the--- 'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE'--- flag set------ == Valid Usage (Implicit)------ - #VUID-vkCmdBindDescriptorSets-commandBuffer-parameter#--- @commandBuffer@ /must/ be a valid--- 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdBindDescriptorSets-pipelineBindPoint-parameter#--- @pipelineBindPoint@ /must/ be a valid--- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value------ - #VUID-vkCmdBindDescriptorSets-layout-parameter# @layout@ /must/ be a--- valid 'Vulkan.Core10.Handles.PipelineLayout' handle------ - #VUID-vkCmdBindDescriptorSets-pDescriptorSets-parameter#--- @pDescriptorSets@ /must/ be a valid pointer to an array of--- @descriptorSetCount@ valid 'Vulkan.Core10.Handles.DescriptorSet'--- handles------ - #VUID-vkCmdBindDescriptorSets-pDynamicOffsets-parameter# If--- @dynamicOffsetCount@ is not @0@, @pDynamicOffsets@ /must/ be a valid--- pointer to an array of @dynamicOffsetCount@ @uint32_t@ values------ - #VUID-vkCmdBindDescriptorSets-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-vkCmdBindDescriptorSets-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics, or compute operations------ - #VUID-vkCmdBindDescriptorSets-descriptorSetCount-arraylength#--- @descriptorSetCount@ /must/ be greater than @0@------ - #VUID-vkCmdBindDescriptorSets-commonparent# Each of @commandBuffer@,--- @layout@, and the elements of @pDescriptorSets@ /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_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Handles.DescriptorSet',--- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',--- 'Vulkan.Core10.Handles.PipelineLayout'-cmdBindDescriptorSets :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer that the descriptor sets will be- -- bound to.- CommandBuffer- -> -- | @pipelineBindPoint@ is a- -- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' indicating the- -- type of the pipeline that will use the descriptors. There is a separate- -- set of bind points for each pipeline type, so binding one does not- -- disturb the others.- PipelineBindPoint- -> -- | @layout@ is a 'Vulkan.Core10.Handles.PipelineLayout' object used to- -- program the bindings.- PipelineLayout- -> -- | @firstSet@ is the set number of the first descriptor set to be bound.- ("firstSet" ::: Word32)- -> -- | @pDescriptorSets@ is a pointer to an array of handles to- -- 'Vulkan.Core10.Handles.DescriptorSet' objects describing the descriptor- -- sets to bind to.- ("descriptorSets" ::: Vector DescriptorSet)- -> -- | @pDynamicOffsets@ is a pointer to an array of @uint32_t@ values- -- specifying dynamic offsets.- ("dynamicOffsets" ::: Vector Word32)- -> io ()-cmdBindDescriptorSets commandBuffer pipelineBindPoint layout firstSet descriptorSets dynamicOffsets = liftIO . evalContT $ do- let vkCmdBindDescriptorSetsPtr = pVkCmdBindDescriptorSets (deviceCmds (commandBuffer :: CommandBuffer))- lift $ unless (vkCmdBindDescriptorSetsPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindDescriptorSets is null" Nothing Nothing- let vkCmdBindDescriptorSets' = mkVkCmdBindDescriptorSets vkCmdBindDescriptorSetsPtr- pPDescriptorSets <- ContT $ allocaBytes @DescriptorSet ((Data.Vector.length (descriptorSets)) * 8)- lift $ Data.Vector.imapM_ (\i e -> poke (pPDescriptorSets `plusPtr` (8 * (i)) :: Ptr DescriptorSet) (e)) (descriptorSets)- pPDynamicOffsets <- ContT $ allocaBytes @Word32 ((Data.Vector.length (dynamicOffsets)) * 4)- lift $ Data.Vector.imapM_ (\i e -> poke (pPDynamicOffsets `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (dynamicOffsets)- lift $ traceAroundEvent "vkCmdBindDescriptorSets" (vkCmdBindDescriptorSets' (commandBufferHandle (commandBuffer)) (pipelineBindPoint) (layout) (firstSet) ((fromIntegral (Data.Vector.length $ (descriptorSets)) :: Word32)) (pPDescriptorSets) ((fromIntegral (Data.Vector.length $ (dynamicOffsets)) :: Word32)) (pPDynamicOffsets))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdBindIndexBuffer- :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IndexType -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IndexType -> IO ()---- | vkCmdBindIndexBuffer - Bind an index buffer to a command buffer------ == Valid Usage------ - #VUID-vkCmdBindIndexBuffer-offset-00431# @offset@ /must/ be less--- than the size of @buffer@------ - #VUID-vkCmdBindIndexBuffer-offset-00432# The sum of @offset@ and the--- address of the range of 'Vulkan.Core10.Handles.DeviceMemory' object--- that is backing @buffer@, /must/ be a multiple of the type indicated--- by @indexType@------ - #VUID-vkCmdBindIndexBuffer-buffer-00433# @buffer@ /must/ have been--- created with the--- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDEX_BUFFER_BIT'--- flag------ - #VUID-vkCmdBindIndexBuffer-buffer-00434# If @buffer@ is non-sparse--- then it /must/ be bound completely and contiguously to a single--- 'Vulkan.Core10.Handles.DeviceMemory' object------ - #VUID-vkCmdBindIndexBuffer-indexType-02507# @indexType@ /must/ not--- be 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR'------ - #VUID-vkCmdBindIndexBuffer-indexType-02765# If @indexType@ is--- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT8_EXT', the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-indexTypeUint8 indexTypeUint8>--- feature /must/ be enabled------ == Valid Usage (Implicit)------ - #VUID-vkCmdBindIndexBuffer-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdBindIndexBuffer-buffer-parameter# @buffer@ /must/ be a--- valid 'Vulkan.Core10.Handles.Buffer' handle------ - #VUID-vkCmdBindIndexBuffer-indexType-parameter# @indexType@ /must/--- be a valid 'Vulkan.Core10.Enums.IndexType.IndexType' value------ - #VUID-vkCmdBindIndexBuffer-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-vkCmdBindIndexBuffer-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics operations------ - #VUID-vkCmdBindIndexBuffer-commonparent# Both of @buffer@, and--- @commandBuffer@ /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 | | |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize',--- 'Vulkan.Core10.Enums.IndexType.IndexType'-cmdBindIndexBuffer :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command is- -- recorded.- CommandBuffer- -> -- | @buffer@ is the buffer being bound.- Buffer- -> -- | @offset@ is the starting offset in bytes within @buffer@ used in index- -- buffer address calculations.- ("offset" ::: DeviceSize)- -> -- | @indexType@ is a 'Vulkan.Core10.Enums.IndexType.IndexType' value- -- specifying the size of the indices.- IndexType- -> io ()-cmdBindIndexBuffer commandBuffer buffer offset indexType = liftIO $ do- let vkCmdBindIndexBufferPtr = pVkCmdBindIndexBuffer (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdBindIndexBufferPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindIndexBuffer is null" Nothing Nothing- let vkCmdBindIndexBuffer' = mkVkCmdBindIndexBuffer vkCmdBindIndexBufferPtr- traceAroundEvent "vkCmdBindIndexBuffer" (vkCmdBindIndexBuffer' (commandBufferHandle (commandBuffer)) (buffer) (offset) (indexType))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdBindVertexBuffers- :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> IO ()---- | vkCmdBindVertexBuffers - Bind vertex buffers to a command buffer------ = Description------ The values taken from elements i of @pBuffers@ and @pOffsets@ replace--- the current state for the vertex input binding @firstBinding@ + i, for i--- in [0, @bindingCount@). The vertex input binding is updated to start at--- the offset indicated by @pOffsets@[i] from the start of the buffer--- @pBuffers@[i]. All vertex input attributes that use each of these--- bindings will use these updated addresses in their address calculations--- for subsequent drawing commands. If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>--- feature is enabled, elements of @pBuffers@ /can/ be--- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and /can/ be used by the--- vertex shader. If a vertex input attribute is bound to a vertex input--- binding that is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the values--- taken from memory are considered to be zero, and missing G, B, or A--- components are--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input-extraction filled with (0,0,1)>.------ == Valid Usage------ - #VUID-vkCmdBindVertexBuffers-firstBinding-00624# @firstBinding@--- /must/ be less than--- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@------ - #VUID-vkCmdBindVertexBuffers-firstBinding-00625# The sum of--- @firstBinding@ and @bindingCount@ /must/ be less than or equal to--- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@------ - #VUID-vkCmdBindVertexBuffers-pOffsets-00626# All elements of--- @pOffsets@ /must/ be less than the size of the corresponding element--- in @pBuffers@------ - #VUID-vkCmdBindVertexBuffers-pBuffers-00627# All elements of--- @pBuffers@ /must/ have been created with the--- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_VERTEX_BUFFER_BIT'--- flag------ - #VUID-vkCmdBindVertexBuffers-pBuffers-00628# Each element of--- @pBuffers@ that is non-sparse /must/ be bound completely and--- contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ - #VUID-vkCmdBindVertexBuffers-pBuffers-04001# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>--- feature is not enabled, all elements of @pBuffers@ /must/ not be--- 'Vulkan.Core10.APIConstants.NULL_HANDLE'------ - #VUID-vkCmdBindVertexBuffers-pBuffers-04002# If an element of--- @pBuffers@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', then the--- corresponding element of @pOffsets@ /must/ be zero------ == Valid Usage (Implicit)------ - #VUID-vkCmdBindVertexBuffers-commandBuffer-parameter#--- @commandBuffer@ /must/ be a valid--- 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdBindVertexBuffers-pBuffers-parameter# @pBuffers@ /must/--- be a valid pointer to an array of @bindingCount@ valid or--- 'Vulkan.Core10.APIConstants.NULL_HANDLE'--- 'Vulkan.Core10.Handles.Buffer' handles------ - #VUID-vkCmdBindVertexBuffers-pOffsets-parameter# @pOffsets@ /must/--- be a valid pointer to an array of @bindingCount@--- 'Vulkan.Core10.FundamentalTypes.DeviceSize' values------ - #VUID-vkCmdBindVertexBuffers-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-vkCmdBindVertexBuffers-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics operations------ - #VUID-vkCmdBindVertexBuffers-bindingCount-arraylength#--- @bindingCount@ /must/ be greater than @0@------ - #VUID-vkCmdBindVertexBuffers-commonparent# Both of @commandBuffer@,--- and the elements of @pBuffers@ 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 @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 | | |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize'-cmdBindVertexBuffers :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command is- -- recorded.- CommandBuffer- -> -- | @firstBinding@ is the index of the first vertex input binding whose- -- state is updated by the command.- ("firstBinding" ::: Word32)- -> -- | @pBuffers@ is a pointer to an array of buffer handles.- ("buffers" ::: Vector Buffer)- -> -- | @pOffsets@ is a pointer to an array of buffer offsets.- ("offsets" ::: Vector DeviceSize)- -> io ()-cmdBindVertexBuffers commandBuffer firstBinding buffers offsets = liftIO . evalContT $ do- let vkCmdBindVertexBuffersPtr = pVkCmdBindVertexBuffers (deviceCmds (commandBuffer :: CommandBuffer))- lift $ unless (vkCmdBindVertexBuffersPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindVertexBuffers is null" Nothing Nothing- let vkCmdBindVertexBuffers' = mkVkCmdBindVertexBuffers vkCmdBindVertexBuffersPtr- let pBuffersLength = Data.Vector.length $ (buffers)- lift $ unless ((Data.Vector.length $ (offsets)) == pBuffersLength) $- throwIO $ IOError Nothing InvalidArgument "" "pOffsets and pBuffers must have the same length" Nothing Nothing- pPBuffers <- ContT $ allocaBytes @Buffer ((Data.Vector.length (buffers)) * 8)- lift $ Data.Vector.imapM_ (\i e -> poke (pPBuffers `plusPtr` (8 * (i)) :: Ptr Buffer) (e)) (buffers)- pPOffsets <- ContT $ allocaBytes @DeviceSize ((Data.Vector.length (offsets)) * 8)- lift $ Data.Vector.imapM_ (\i e -> poke (pPOffsets `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) (offsets)- lift $ traceAroundEvent "vkCmdBindVertexBuffers" (vkCmdBindVertexBuffers' (commandBufferHandle (commandBuffer)) (firstBinding) ((fromIntegral pBuffersLength :: Word32)) (pPBuffers) (pPOffsets))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdDraw- :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Word32 -> IO ()---- | vkCmdDraw - Draw primitives------ = Description------ When the command is executed, primitives are assembled using the current--- primitive topology and @vertexCount@ consecutive vertex indices with the--- first @vertexIndex@ value equal to @firstVertex@. The primitives are--- drawn @instanceCount@ times with @instanceIndex@ starting with--- @firstInstance@ and increasing sequentially for each instance. The--- assembled primitives execute the bound graphics pipeline.------ == Valid Usage------ - #VUID-vkCmdDraw-magFilter-04553# If a--- 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or--- @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and--- @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is--- used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of--- this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ - #VUID-vkCmdDraw-mipmapMode-04770# If a--- 'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to--- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'--- and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE'--- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of--- this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ - #VUID-vkCmdDraw-None-02691# If a 'Vulkan.Core10.Handles.ImageView'--- is accessed using atomic operations as a result of this command,--- then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'------ - #VUID-vkCmdDraw-None-02692# If a 'Vulkan.Core10.Handles.ImageView'--- is sampled with--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result--- of this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'------ - #VUID-vkCmdDraw-filterCubic-02694# Any--- 'Vulkan.Core10.Handles.ImageView' being sampled with--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result--- of this command /must/ have a--- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that--- supports cubic filtering, as specified by--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@--- returned by--- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ - #VUID-vkCmdDraw-filterCubicMinmax-02695# Any--- 'Vulkan.Core10.Handles.ImageView' being sampled with--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a--- reduction mode of either--- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'--- or--- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'--- as a result of this command /must/ have a--- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that--- supports cubic filtering together with minmax filtering, as--- specified by--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@--- returned by--- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ - #VUID-vkCmdDraw-flags-02696# Any 'Vulkan.Core10.Handles.Image'--- created with a 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@--- containing--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'--- sampled as a result of this command /must/ only be sampled using a--- 'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of--- 'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'------ - #VUID-vkCmdDraw-OpTypeImage-06423# Any--- 'Vulkan.Core10.Handles.ImageView' or--- 'Vulkan.Core10.Handles.BufferView' being written as a storage image--- or storage texel buffer where the image format field of the--- @OpTypeImage@ is @Unknown@ /must/ have image format features that--- support--- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR'------ - #VUID-vkCmdDraw-OpTypeImage-06424# Any--- 'Vulkan.Core10.Handles.ImageView' or--- 'Vulkan.Core10.Handles.BufferView' being read as a storage image or--- storage texel buffer where the image format field of the--- @OpTypeImage@ is @Unknown@ /must/ have image format features that--- support--- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR'------ - #VUID-vkCmdDraw-None-02697# For each set /n/ that is statically used--- by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind--- point used by this command, a descriptor set /must/ have been bound--- to /n/ at the same pipeline bind point, with a--- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set--- /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create--- the current 'Vulkan.Core10.Handles.Pipeline', as described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ - #VUID-vkCmdDraw-maintenance4-06425# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-maintenance4 maintenance4>--- feature is not enabled, then for each push constant that is--- statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the--- pipeline bind point used by this command, a push constant value--- /must/ have been set for the same pipeline bind point, with a--- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push--- constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to--- create the current 'Vulkan.Core10.Handles.Pipeline', as described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ - #VUID-vkCmdDraw-None-02699# Descriptors in each bound descriptor--- set, specified via 'cmdBindDescriptorSets', /must/ be valid if they--- are statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to--- the pipeline bind point used by this command------ - #VUID-vkCmdDraw-None-02700# A valid pipeline /must/ be bound to the--- pipeline bind point used by this command------ - #VUID-vkCmdDraw-commandBuffer-02701# If the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command requires any dynamic state, that state--- /must/ have been set or inherited (if the--- @VK_NV_inherited_viewport_scissor@ extension is enabled) for--- @commandBuffer@, and done so after any previously bound pipeline--- with the corresponding state not specified as dynamic------ - #VUID-vkCmdDraw-None-02859# There /must/ not have been any calls to--- dynamic state setting commands for any state not specified as--- dynamic in the 'Vulkan.Core10.Handles.Pipeline' object bound to the--- pipeline bind point used by this command, since that pipeline was--- bound------ - #VUID-vkCmdDraw-None-02702# If the 'Vulkan.Core10.Handles.Pipeline'--- object bound to the pipeline bind point used by this command--- accesses a 'Vulkan.Core10.Handles.Sampler' object that uses--- unnormalized coordinates, that sampler /must/ not be used to sample--- from any 'Vulkan.Core10.Handles.Image' with a--- 'Vulkan.Core10.Handles.ImageView' of the type--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in--- any shader stage------ - #VUID-vkCmdDraw-None-02703# If the 'Vulkan.Core10.Handles.Pipeline'--- object bound to the pipeline bind point used by this command--- accesses a 'Vulkan.Core10.Handles.Sampler' object that uses--- unnormalized coordinates, that sampler /must/ not be used with any--- of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@--- instructions with @ImplicitLod@, @Dref@ or @Proj@ in their name, in--- any shader stage------ - #VUID-vkCmdDraw-None-02704# If the 'Vulkan.Core10.Handles.Pipeline'--- object bound to the pipeline bind point used by this command--- accesses a 'Vulkan.Core10.Handles.Sampler' object that uses--- unnormalized coordinates, that sampler /must/ not be used with any--- of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@--- instructions that includes a LOD bias or any offset values, in any--- shader stage------ - #VUID-vkCmdDraw-None-02705# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>--- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'--- object bound to the pipeline bind point used by this command--- accesses a uniform buffer, it /must/ not access values outside of--- the range of the buffer as specified in the descriptor set bound to--- the same pipeline bind point------ - #VUID-vkCmdDraw-None-02706# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>--- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'--- object bound to the pipeline bind point used by this command--- accesses a storage buffer, it /must/ not access values outside of--- the range of the buffer as specified in the descriptor set bound to--- the same pipeline bind point------ - #VUID-vkCmdDraw-commandBuffer-02707# If @commandBuffer@ is an--- unprotected command buffer, any resource accessed by the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command /must/ not be a protected resource------ - #VUID-vkCmdDraw-None-04115# If a 'Vulkan.Core10.Handles.ImageView'--- is accessed using @OpImageWrite@ as a result of this command, then--- the @Type@ of the @Texel@ operand of that instruction /must/ have at--- least as many components as the image view’s format------ - #VUID-vkCmdDraw-OpImageWrite-04469# If a--- 'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@--- as a result of this command, then the @Type@ of the @Texel@ operand--- of that instruction /must/ have at least as many components as the--- buffer view’s format------ - #VUID-vkCmdDraw-SampledType-04470# If a--- 'Vulkan.Core10.Handles.ImageView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component--- width is accessed as a result of this command, the @SampledType@ of--- the @OpTypeImage@ operand of that instruction /must/ have a @Width@--- of 64------ - #VUID-vkCmdDraw-SampledType-04471# If a--- 'Vulkan.Core10.Handles.ImageView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a component width less--- than 64-bit is accessed as a result of this command, the--- @SampledType@ of the @OpTypeImage@ operand of that instruction--- /must/ have a @Width@ of 32------ - #VUID-vkCmdDraw-SampledType-04472# If a--- 'Vulkan.Core10.Handles.BufferView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component--- width is accessed as a result of this command, the @SampledType@ of--- the @OpTypeImage@ operand of that instruction /must/ have a @Width@--- of 64------ - #VUID-vkCmdDraw-SampledType-04473# If a--- 'Vulkan.Core10.Handles.BufferView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a component width less--- than 64-bit is accessed as a result of this command, the--- @SampledType@ of the @OpTypeImage@ operand of that instruction--- /must/ have a @Width@ of 32------ - #VUID-vkCmdDraw-sparseImageInt64Atomics-04474# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>--- feature is not enabled, 'Vulkan.Core10.Handles.Image' objects--- created with the--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'--- flag /must/ not be accessed by atomic instructions through an--- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this--- command------ - #VUID-vkCmdDraw-sparseImageInt64Atomics-04475# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>--- feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects--- created with the--- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'--- flag /must/ not be accessed by atomic instructions through an--- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this--- command------ - #VUID-vkCmdDraw-renderPass-02684# The current render pass /must/ be--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>--- with the @renderPass@ member of the--- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure--- specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound--- to--- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'------ - #VUID-vkCmdDraw-subpass-02685# The subpass index of the current--- render pass /must/ be equal to the @subpass@ member of the--- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure--- specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound--- to--- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'------ - #VUID-vkCmdDraw-None-02686# Every input attachment used by the--- current subpass /must/ be bound to the pipeline via a descriptor set------ - #VUID-vkCmdDraw-None-04584# Image subresources used as attachments--- in the current render pass /must/ not be accessed in any way other--- than as an attachment by this command, except for cases involving--- read-only access to depth\/stencil attachments as described in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-attachment-nonattachment Render Pass>--- chapter------ - #VUID-vkCmdDraw-maxMultiviewInstanceIndex-02688# If the draw is--- recorded in a render pass instance with multiview enabled, the--- maximum instance index /must/ be less than or equal to--- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@------ - #VUID-vkCmdDraw-sampleLocationsEnable-02689# If the bound graphics--- pipeline was created with--- 'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@--- set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass--- has a depth\/stencil attachment, then that attachment /must/ have--- been created with the--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'--- bit set------ - #VUID-vkCmdDraw-viewportCount-03417# If the bound graphics pipeline--- state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled, but not the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'--- dynamic state enabled, then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command, and the @viewportCount@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- /must/ match the--- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@--- of the pipeline------ - #VUID-vkCmdDraw-scissorCount-03418# If the bound graphics pipeline--- state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'--- dynamic state enabled, but not the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled, then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command, and the @scissorCount@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'--- /must/ match the--- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@--- of the pipeline------ - #VUID-vkCmdDraw-viewportCount-03419# If the bound graphics pipeline--- state was created with both the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'--- and--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic states enabled then both--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- and--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command, and the @viewportCount@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- /must/ match the @scissorCount@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'------ - #VUID-vkCmdDraw-viewportCount-04137# If the bound graphics pipeline--- state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled, but not the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'--- dynamic state enabled, then the bound graphics pipeline /must/ have--- been created with--- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@--- greater or equal to the @viewportCount@ parameter in the last call--- to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDraw-viewportCount-04138# If the bound graphics pipeline--- state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- and--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'--- dynamic states enabled then the @viewportCount@ parameter in the--- last call to--- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'--- /must/ be greater than or equal to the @viewportCount@ parameter in--- the last call to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDraw-viewportCount-04139# If the bound graphics pipeline--- state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled, but not the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'--- dynamic state enabled, then the bound graphics pipeline /must/ have--- been created with--- 'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'::@viewportCount@--- greater or equal to the @viewportCount@ parameter in the last call--- to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDraw-viewportCount-04140# If the bound graphics pipeline--- state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- and--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'--- dynamic states enabled then the @viewportCount@ parameter in the--- last call to--- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'--- /must/ be greater than or equal to the @viewportCount@ parameter in--- the last call to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDraw-VkPipelineVieportCreateInfo-04141# If the bound--- graphics pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of--- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with--- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@--- greater or equal to the @viewportCount@ parameter in the last call--- to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDraw-VkPipelineVieportCreateInfo-04142# If the bound--- graphics pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of--- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with--- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@--- greater or equal to the @viewportCount@ parameter in the last call--- to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDraw-primitiveTopology-03420# If the bound graphics--- pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command, and the @primitiveTopology@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'--- /must/ be of the same--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-topology-class topology class>--- as the pipeline--- 'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@--- state------ - #VUID-vkCmdDraw-None-04875# If the bound graphics pipeline state was--- created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPatchControlPointsEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command------ - #VUID-vkCmdDraw-None-04876# If the bound graphics pipeline state was--- created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnableEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command------ - #VUID-vkCmdDraw-None-04877# If the bound graphics pipeline state was--- created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetDepthBiasEnableEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command------ - #VUID-vkCmdDraw-logicOp-04878# If the bound graphics pipeline state--- was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LOGIC_OP_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetLogicOpEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command and the @logicOp@ /must/ be a valid--- 'Vulkan.Core10.Enums.LogicOp.LogicOp' value------ - #VUID-vkCmdDraw-None-04879# If the bound graphics pipeline state was--- created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPrimitiveRestartEnableEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command------ - #VUID-vkCmdDraw-primitiveFragmentShadingRateWithMultipleViewports-04552#--- If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>--- limit is not supported, the bound graphics pipeline was created with--- the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled, and any of the shader stages of the bound--- graphics pipeline write to the @PrimitiveShadingRateKHR@ built-in,--- then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command, and the @viewportCount@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- /must/ be @1@------ - #VUID-vkCmdDraw-blendEnable-04727# If rasterization is not disabled--- in the bound graphics pipeline, then for each color attachment in--- the subpass, if the corresponding image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- do not contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',--- then the @blendEnable@ member of the corresponding element of the--- @pAttachments@ member of @pColorBlendState@ /must/ be--- 'Vulkan.Core10.FundamentalTypes.FALSE'------ - #VUID-vkCmdDraw-rasterizationSamples-04740# If rasterization is not--- disabled in the bound graphics pipeline, and neither the--- @VK_AMD_mixed_attachment_samples@ nor the--- @VK_NV_framebuffer_mixed_samples@ extensions are enabled, then--- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@--- /must/ be the same as the current subpass color and\/or--- depth\/stencil attachments------ - #VUID-vkCmdDraw-None-04912# If the bound graphics pipeline was--- created with both the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'--- and--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'--- dynamic states enabled, then--- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'--- /must/ have been called in the current command buffer prior to this--- draw command------ - #VUID-vkCmdDraw-pStrides-04913# If the bound graphics pipeline was--- created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'--- dynamic state enabled, but not the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'--- dynamic state enabled, then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'--- /must/ have been called in the current command buffer prior to this--- draw command, and the @pStrides@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'--- /must/ not be @NULL@------ - #VUID-vkCmdDraw-None-04914# If the bound graphics pipeline state was--- created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'--- dynamic state enabled, then--- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'--- /must/ have been called in the current command buffer prior to this--- draw command------ - #VUID-vkCmdDraw-commandBuffer-02712# If @commandBuffer@ is a--- protected command buffer, any resource written to by the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command /must/ not be an unprotected resource------ - #VUID-vkCmdDraw-commandBuffer-02713# If @commandBuffer@ is a--- protected command buffer, pipeline stages other than the--- framebuffer-space and compute stages in the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command /must/ not write to any resource------ - #VUID-vkCmdDraw-commandBuffer-04617# If any of the shader stages of--- the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind--- point used by this command uses the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-RayQueryKHR RayQueryKHR>--- capability, then @commandBuffer@ /must/ not be a protected command--- buffer------ - #VUID-vkCmdDraw-None-04007# All vertex input bindings accessed via--- vertex input variables declared in the vertex shader entry point’s--- interface /must/ have either valid or--- 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers bound------ - #VUID-vkCmdDraw-None-04008# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>--- feature is not enabled, all vertex input bindings accessed via--- vertex input variables declared in the vertex shader entry point’s--- interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'------ - #VUID-vkCmdDraw-None-02721# For a given vertex buffer binding, any--- attribute data fetched /must/ be entirely contained within the--- corresponding vertex buffer binding, as described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>------ == Valid Usage (Implicit)------ - #VUID-vkCmdDraw-commandBuffer-parameter# @commandBuffer@ /must/ be a--- valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdDraw-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-vkCmdDraw-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics operations------ - #VUID-vkCmdDraw-renderpass# This command /must/ only be called--- inside of a render pass instance------ == Host Synchronization------ - Host access to @commandBuffer@ /must/ be externally synchronized------ - Host access to the 'Vulkan.Core10.Handles.CommandPool' that--- @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+--- | Primary | Inside | Graphics |--- | Secondary | | |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer'-cmdDraw :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command is- -- recorded.- CommandBuffer- -> -- | @vertexCount@ is the number of vertices to draw.- ("vertexCount" ::: Word32)- -> -- | @instanceCount@ is the number of instances to draw.- ("instanceCount" ::: Word32)- -> -- | @firstVertex@ is the index of the first vertex to draw.- ("firstVertex" ::: Word32)- -> -- | @firstInstance@ is the instance ID of the first instance to draw.- ("firstInstance" ::: Word32)- -> io ()-cmdDraw commandBuffer vertexCount instanceCount firstVertex firstInstance = liftIO $ do- let vkCmdDrawPtr = pVkCmdDraw (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdDrawPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDraw is null" Nothing Nothing- let vkCmdDraw' = mkVkCmdDraw vkCmdDrawPtr- traceAroundEvent "vkCmdDraw" (vkCmdDraw' (commandBufferHandle (commandBuffer)) (vertexCount) (instanceCount) (firstVertex) (firstInstance))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdDrawIndexed- :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Int32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Int32 -> Word32 -> IO ()---- | vkCmdDrawIndexed - Draw primitives with indexed vertices------ = Description------ When the command is executed, primitives are assembled using the current--- primitive topology and @indexCount@ vertices whose indices are retrieved--- from the index buffer. The index buffer is treated as an array of--- tightly packed unsigned integers of size defined by the--- 'cmdBindIndexBuffer'::@indexType@ parameter with which the buffer was--- bound.------ The first vertex index is at an offset of @firstIndex@ × @indexSize@ +--- @offset@ within the bound index buffer, where @offset@ is the offset--- specified by 'cmdBindIndexBuffer' and @indexSize@ is the byte size of--- the type specified by @indexType@. Subsequent index values are retrieved--- from consecutive locations in the index buffer. Indices are first--- compared to the primitive restart value, then zero extended to 32 bits--- (if the @indexType@ is--- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT8_EXT' or--- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16') and have--- @vertexOffset@ added to them, before being supplied as the @vertexIndex@--- value.------ The primitives are drawn @instanceCount@ times with @instanceIndex@--- starting with @firstInstance@ and increasing sequentially for each--- instance. The assembled primitives execute the bound graphics pipeline.------ == Valid Usage------ - #VUID-vkCmdDrawIndexed-magFilter-04553# If a--- 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or--- @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and--- @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is--- used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of--- this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ - #VUID-vkCmdDrawIndexed-mipmapMode-04770# If a--- 'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to--- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'--- and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE'--- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of--- this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ - #VUID-vkCmdDrawIndexed-None-02691# If a--- 'Vulkan.Core10.Handles.ImageView' is accessed using atomic--- operations as a result of this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'------ - #VUID-vkCmdDrawIndexed-None-02692# If a--- 'Vulkan.Core10.Handles.ImageView' is sampled with--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result--- of this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'------ - #VUID-vkCmdDrawIndexed-filterCubic-02694# Any--- 'Vulkan.Core10.Handles.ImageView' being sampled with--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result--- of this command /must/ have a--- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that--- supports cubic filtering, as specified by--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@--- returned by--- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ - #VUID-vkCmdDrawIndexed-filterCubicMinmax-02695# Any--- 'Vulkan.Core10.Handles.ImageView' being sampled with--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a--- reduction mode of either--- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'--- or--- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'--- as a result of this command /must/ have a--- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that--- supports cubic filtering together with minmax filtering, as--- specified by--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@--- returned by--- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ - #VUID-vkCmdDrawIndexed-flags-02696# Any--- 'Vulkan.Core10.Handles.Image' created with a--- 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'--- sampled as a result of this command /must/ only be sampled using a--- 'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of--- 'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'------ - #VUID-vkCmdDrawIndexed-OpTypeImage-06423# Any--- 'Vulkan.Core10.Handles.ImageView' or--- 'Vulkan.Core10.Handles.BufferView' being written as a storage image--- or storage texel buffer where the image format field of the--- @OpTypeImage@ is @Unknown@ /must/ have image format features that--- support--- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR'------ - #VUID-vkCmdDrawIndexed-OpTypeImage-06424# Any--- 'Vulkan.Core10.Handles.ImageView' or--- 'Vulkan.Core10.Handles.BufferView' being read as a storage image or--- storage texel buffer where the image format field of the--- @OpTypeImage@ is @Unknown@ /must/ have image format features that--- support--- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR'------ - #VUID-vkCmdDrawIndexed-None-02697# For each set /n/ that is--- statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the--- pipeline bind point used by this command, a descriptor set /must/--- have been bound to /n/ at the same pipeline bind point, with a--- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set--- /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create--- the current 'Vulkan.Core10.Handles.Pipeline', as described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ - #VUID-vkCmdDrawIndexed-maintenance4-06425# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-maintenance4 maintenance4>--- feature is not enabled, then for each push constant that is--- statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the--- pipeline bind point used by this command, a push constant value--- /must/ have been set for the same pipeline bind point, with a--- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push--- constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to--- create the current 'Vulkan.Core10.Handles.Pipeline', as described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ - #VUID-vkCmdDrawIndexed-None-02699# Descriptors in each bound--- descriptor set, specified via 'cmdBindDescriptorSets', /must/ be--- valid if they are statically used by the--- 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point--- used by this command------ - #VUID-vkCmdDrawIndexed-None-02700# A valid pipeline /must/ be bound--- to the pipeline bind point used by this command------ - #VUID-vkCmdDrawIndexed-commandBuffer-02701# If the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command requires any dynamic state, that state--- /must/ have been set or inherited (if the--- @VK_NV_inherited_viewport_scissor@ extension is enabled) for--- @commandBuffer@, and done so after any previously bound pipeline--- with the corresponding state not specified as dynamic------ - #VUID-vkCmdDrawIndexed-None-02859# There /must/ not have been any--- calls to dynamic state setting commands for any state not specified--- as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object bound to--- the pipeline bind point used by this command, since that pipeline--- was bound------ - #VUID-vkCmdDrawIndexed-None-02702# If the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command accesses a--- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized--- coordinates, that sampler /must/ not be used to sample from any--- 'Vulkan.Core10.Handles.Image' with a--- 'Vulkan.Core10.Handles.ImageView' of the type--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in--- any shader stage------ - #VUID-vkCmdDrawIndexed-None-02703# If the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command accesses a--- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized--- coordinates, that sampler /must/ not be used with any of the SPIR-V--- @OpImageSample*@ or @OpImageSparseSample*@ instructions with--- @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage------ - #VUID-vkCmdDrawIndexed-None-02704# If the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command accesses a--- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized--- coordinates, that sampler /must/ not be used with any of the SPIR-V--- @OpImageSample*@ or @OpImageSparseSample*@ instructions that--- includes a LOD bias or any offset values, in any shader stage------ - #VUID-vkCmdDrawIndexed-None-02705# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>--- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'--- object bound to the pipeline bind point used by this command--- accesses a uniform buffer, it /must/ not access values outside of--- the range of the buffer as specified in the descriptor set bound to--- the same pipeline bind point------ - #VUID-vkCmdDrawIndexed-None-02706# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>--- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'--- object bound to the pipeline bind point used by this command--- accesses a storage buffer, it /must/ not access values outside of--- the range of the buffer as specified in the descriptor set bound to--- the same pipeline bind point------ - #VUID-vkCmdDrawIndexed-commandBuffer-02707# If @commandBuffer@ is an--- unprotected command buffer, any resource accessed by the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command /must/ not be a protected resource------ - #VUID-vkCmdDrawIndexed-None-04115# If a--- 'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@--- as a result of this command, then the @Type@ of the @Texel@ operand--- of that instruction /must/ have at least as many components as the--- image view’s format------ - #VUID-vkCmdDrawIndexed-OpImageWrite-04469# If a--- 'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@--- as a result of this command, then the @Type@ of the @Texel@ operand--- of that instruction /must/ have at least as many components as the--- buffer view’s format------ - #VUID-vkCmdDrawIndexed-SampledType-04470# If a--- 'Vulkan.Core10.Handles.ImageView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component--- width is accessed as a result of this command, the @SampledType@ of--- the @OpTypeImage@ operand of that instruction /must/ have a @Width@--- of 64------ - #VUID-vkCmdDrawIndexed-SampledType-04471# If a--- 'Vulkan.Core10.Handles.ImageView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a component width less--- than 64-bit is accessed as a result of this command, the--- @SampledType@ of the @OpTypeImage@ operand of that instruction--- /must/ have a @Width@ of 32------ - #VUID-vkCmdDrawIndexed-SampledType-04472# If a--- 'Vulkan.Core10.Handles.BufferView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component--- width is accessed as a result of this command, the @SampledType@ of--- the @OpTypeImage@ operand of that instruction /must/ have a @Width@--- of 64------ - #VUID-vkCmdDrawIndexed-SampledType-04473# If a--- 'Vulkan.Core10.Handles.BufferView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a component width less--- than 64-bit is accessed as a result of this command, the--- @SampledType@ of the @OpTypeImage@ operand of that instruction--- /must/ have a @Width@ of 32------ - #VUID-vkCmdDrawIndexed-sparseImageInt64Atomics-04474# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>--- feature is not enabled, 'Vulkan.Core10.Handles.Image' objects--- created with the--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'--- flag /must/ not be accessed by atomic instructions through an--- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this--- command------ - #VUID-vkCmdDrawIndexed-sparseImageInt64Atomics-04475# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>--- feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects--- created with the--- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'--- flag /must/ not be accessed by atomic instructions through an--- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this--- command------ - #VUID-vkCmdDrawIndexed-renderPass-02684# The current render pass--- /must/ be--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>--- with the @renderPass@ member of the--- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure--- specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound--- to--- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'------ - #VUID-vkCmdDrawIndexed-subpass-02685# The subpass index of the--- current render pass /must/ be equal to the @subpass@ member of the--- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure--- specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound--- to--- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'------ - #VUID-vkCmdDrawIndexed-None-02686# Every input attachment used by--- the current subpass /must/ be bound to the pipeline via a descriptor--- set------ - #VUID-vkCmdDrawIndexed-None-04584# Image subresources used as--- attachments in the current render pass /must/ not be accessed in any--- way other than as an attachment by this command, except for cases--- involving read-only access to depth\/stencil attachments as--- described in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-attachment-nonattachment Render Pass>--- chapter------ - #VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-02688# If the draw--- is recorded in a render pass instance with multiview enabled, the--- maximum instance index /must/ be less than or equal to--- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@------ - #VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689# If the bound--- graphics pipeline was created with--- 'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@--- set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass--- has a depth\/stencil attachment, then that attachment /must/ have--- been created with the--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'--- bit set------ - #VUID-vkCmdDrawIndexed-viewportCount-03417# If the bound graphics--- pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled, but not the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'--- dynamic state enabled, then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command, and the @viewportCount@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- /must/ match the--- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@--- of the pipeline------ - #VUID-vkCmdDrawIndexed-scissorCount-03418# If the bound graphics--- pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'--- dynamic state enabled, but not the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled, then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command, and the @scissorCount@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'--- /must/ match the--- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@--- of the pipeline------ - #VUID-vkCmdDrawIndexed-viewportCount-03419# If the bound graphics--- pipeline state was created with both the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'--- and--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic states enabled then both--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- and--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command, and the @viewportCount@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- /must/ match the @scissorCount@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'------ - #VUID-vkCmdDrawIndexed-viewportCount-04137# If the bound graphics--- pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled, but not the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'--- dynamic state enabled, then the bound graphics pipeline /must/ have--- been created with--- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@--- greater or equal to the @viewportCount@ parameter in the last call--- to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDrawIndexed-viewportCount-04138# If the bound graphics--- pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- and--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'--- dynamic states enabled then the @viewportCount@ parameter in the--- last call to--- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'--- /must/ be greater than or equal to the @viewportCount@ parameter in--- the last call to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDrawIndexed-viewportCount-04139# If the bound graphics--- pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled, but not the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'--- dynamic state enabled, then the bound graphics pipeline /must/ have--- been created with--- 'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'::@viewportCount@--- greater or equal to the @viewportCount@ parameter in the last call--- to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDrawIndexed-viewportCount-04140# If the bound graphics--- pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- and--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'--- dynamic states enabled then the @viewportCount@ parameter in the--- last call to--- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'--- /must/ be greater than or equal to the @viewportCount@ parameter in--- the last call to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDrawIndexed-VkPipelineVieportCreateInfo-04141# If the--- bound graphics pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of--- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with--- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@--- greater or equal to the @viewportCount@ parameter in the last call--- to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDrawIndexed-VkPipelineVieportCreateInfo-04142# If the--- bound graphics pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of--- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with--- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@--- greater or equal to the @viewportCount@ parameter in the last call--- to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDrawIndexed-primitiveTopology-03420# If the bound--- graphics pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command, and the @primitiveTopology@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'--- /must/ be of the same--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-topology-class topology class>--- as the pipeline--- 'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@--- state------ - #VUID-vkCmdDrawIndexed-None-04875# If the bound graphics pipeline--- state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPatchControlPointsEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command------ - #VUID-vkCmdDrawIndexed-None-04876# If the bound graphics pipeline--- state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnableEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command------ - #VUID-vkCmdDrawIndexed-None-04877# If the bound graphics pipeline--- state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetDepthBiasEnableEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command------ - #VUID-vkCmdDrawIndexed-logicOp-04878# If the bound graphics pipeline--- state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LOGIC_OP_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetLogicOpEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command and the @logicOp@ /must/ be a valid--- 'Vulkan.Core10.Enums.LogicOp.LogicOp' value------ - #VUID-vkCmdDrawIndexed-None-04879# If the bound graphics pipeline--- state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPrimitiveRestartEnableEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command------ - #VUID-vkCmdDrawIndexed-primitiveFragmentShadingRateWithMultipleViewports-04552#--- If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>--- limit is not supported, the bound graphics pipeline was created with--- the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled, and any of the shader stages of the bound--- graphics pipeline write to the @PrimitiveShadingRateKHR@ built-in,--- then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command, and the @viewportCount@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- /must/ be @1@------ - #VUID-vkCmdDrawIndexed-blendEnable-04727# If rasterization is not--- disabled in the bound graphics pipeline, then for each color--- attachment in the subpass, if the corresponding image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- do not contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',--- then the @blendEnable@ member of the corresponding element of the--- @pAttachments@ member of @pColorBlendState@ /must/ be--- 'Vulkan.Core10.FundamentalTypes.FALSE'------ - #VUID-vkCmdDrawIndexed-rasterizationSamples-04740# If rasterization--- is not disabled in the bound graphics pipeline, and neither the--- @VK_AMD_mixed_attachment_samples@ nor the--- @VK_NV_framebuffer_mixed_samples@ extensions are enabled, then--- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@--- /must/ be the same as the current subpass color and\/or--- depth\/stencil attachments------ - #VUID-vkCmdDrawIndexed-None-04912# If the bound graphics pipeline--- was created with both the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'--- and--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'--- dynamic states enabled, then--- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'--- /must/ have been called in the current command buffer prior to this--- draw command------ - #VUID-vkCmdDrawIndexed-pStrides-04913# If the bound graphics--- pipeline was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'--- dynamic state enabled, but not the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'--- dynamic state enabled, then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'--- /must/ have been called in the current command buffer prior to this--- draw command, and the @pStrides@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'--- /must/ not be @NULL@------ - #VUID-vkCmdDrawIndexed-None-04914# If the bound graphics pipeline--- state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'--- dynamic state enabled, then--- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'--- /must/ have been called in the current command buffer prior to this--- draw command------ - #VUID-vkCmdDrawIndexed-commandBuffer-02712# If @commandBuffer@ is a--- protected command buffer, any resource written to by the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command /must/ not be an unprotected resource------ - #VUID-vkCmdDrawIndexed-commandBuffer-02713# If @commandBuffer@ is a--- protected command buffer, pipeline stages other than the--- framebuffer-space and compute stages in the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command /must/ not write to any resource------ - #VUID-vkCmdDrawIndexed-commandBuffer-04617# If any of the shader--- stages of the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline--- bind point used by this command uses the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-RayQueryKHR RayQueryKHR>--- capability, then @commandBuffer@ /must/ not be a protected command--- buffer------ - #VUID-vkCmdDrawIndexed-None-04007# All vertex input bindings--- accessed via vertex input variables declared in the vertex shader--- entry point’s interface /must/ have either valid or--- 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers bound------ - #VUID-vkCmdDrawIndexed-None-04008# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>--- feature is not enabled, all vertex input bindings accessed via--- vertex input variables declared in the vertex shader entry point’s--- interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'------ - #VUID-vkCmdDrawIndexed-None-02721# For a given vertex buffer--- binding, any attribute data fetched /must/ be entirely contained--- within the corresponding vertex buffer binding, as described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>------ - #VUID-vkCmdDrawIndexed-firstIndex-04932# (@indexSize@ ×--- (@firstIndex@ + @indexCount@) + @offset@) /must/ be less than or--- equal to the size of the bound index buffer, with @indexSize@ being--- based on the type specified by @indexType@, where the index buffer,--- @indexType@, and @offset@ are specified via 'cmdBindIndexBuffer'------ == Valid Usage (Implicit)------ - #VUID-vkCmdDrawIndexed-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdDrawIndexed-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-vkCmdDrawIndexed-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics operations------ - #VUID-vkCmdDrawIndexed-renderpass# This command /must/ only be--- called inside of a render pass instance------ == Host Synchronization------ - Host access to @commandBuffer@ /must/ be externally synchronized------ - Host access to the 'Vulkan.Core10.Handles.CommandPool' that--- @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+--- | Primary | Inside | Graphics |--- | Secondary | | |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer'-cmdDrawIndexed :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command is- -- recorded.- CommandBuffer- -> -- | @indexCount@ is the number of vertices to draw.- ("indexCount" ::: Word32)- -> -- | @instanceCount@ is the number of instances to draw.- ("instanceCount" ::: Word32)- -> -- | @firstIndex@ is the base index within the index buffer.- ("firstIndex" ::: Word32)- -> -- | @vertexOffset@ is the value added to the vertex index before indexing- -- into the vertex buffer.- ("vertexOffset" ::: Int32)- -> -- | @firstInstance@ is the instance ID of the first instance to draw.- ("firstInstance" ::: Word32)- -> io ()-cmdDrawIndexed commandBuffer indexCount instanceCount firstIndex vertexOffset firstInstance = liftIO $ do- let vkCmdDrawIndexedPtr = pVkCmdDrawIndexed (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdDrawIndexedPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawIndexed is null" Nothing Nothing- let vkCmdDrawIndexed' = mkVkCmdDrawIndexed vkCmdDrawIndexedPtr- traceAroundEvent "vkCmdDrawIndexed" (vkCmdDrawIndexed' (commandBufferHandle (commandBuffer)) (indexCount) (instanceCount) (firstIndex) (vertexOffset) (firstInstance))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdDrawIndirect- :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()---- | vkCmdDrawIndirect - Draw primitives with indirect parameters------ = Description------ 'cmdDrawIndirect' behaves similarly to 'cmdDraw' except that the--- parameters are read by the device from a buffer during execution.--- @drawCount@ draws are executed by the command, with parameters taken--- from @buffer@ starting at @offset@ and increasing by @stride@ bytes for--- each successive draw. The parameters of each draw are encoded in an--- array of 'Vulkan.Core10.OtherTypes.DrawIndirectCommand' structures. If--- @drawCount@ is less than or equal to one, @stride@ is ignored.------ == Valid Usage------ - #VUID-vkCmdDrawIndirect-magFilter-04553# If a--- 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or--- @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and--- @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is--- used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of--- this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ - #VUID-vkCmdDrawIndirect-mipmapMode-04770# If a--- 'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to--- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'--- and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE'--- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of--- this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ - #VUID-vkCmdDrawIndirect-None-02691# If a--- 'Vulkan.Core10.Handles.ImageView' is accessed using atomic--- operations as a result of this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'------ - #VUID-vkCmdDrawIndirect-None-02692# If a--- 'Vulkan.Core10.Handles.ImageView' is sampled with--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result--- of this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'------ - #VUID-vkCmdDrawIndirect-filterCubic-02694# Any--- 'Vulkan.Core10.Handles.ImageView' being sampled with--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result--- of this command /must/ have a--- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that--- supports cubic filtering, as specified by--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@--- returned by--- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ - #VUID-vkCmdDrawIndirect-filterCubicMinmax-02695# Any--- 'Vulkan.Core10.Handles.ImageView' being sampled with--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a--- reduction mode of either--- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'--- or--- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'--- as a result of this command /must/ have a--- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that--- supports cubic filtering together with minmax filtering, as--- specified by--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@--- returned by--- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ - #VUID-vkCmdDrawIndirect-flags-02696# Any--- 'Vulkan.Core10.Handles.Image' created with a--- 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'--- sampled as a result of this command /must/ only be sampled using a--- 'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of--- 'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'------ - #VUID-vkCmdDrawIndirect-OpTypeImage-06423# Any--- 'Vulkan.Core10.Handles.ImageView' or--- 'Vulkan.Core10.Handles.BufferView' being written as a storage image--- or storage texel buffer where the image format field of the--- @OpTypeImage@ is @Unknown@ /must/ have image format features that--- support--- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR'------ - #VUID-vkCmdDrawIndirect-OpTypeImage-06424# Any--- 'Vulkan.Core10.Handles.ImageView' or--- 'Vulkan.Core10.Handles.BufferView' being read as a storage image or--- storage texel buffer where the image format field of the--- @OpTypeImage@ is @Unknown@ /must/ have image format features that--- support--- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR'------ - #VUID-vkCmdDrawIndirect-None-02697# For each set /n/ that is--- statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the--- pipeline bind point used by this command, a descriptor set /must/--- have been bound to /n/ at the same pipeline bind point, with a--- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set--- /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create--- the current 'Vulkan.Core10.Handles.Pipeline', as described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ - #VUID-vkCmdDrawIndirect-maintenance4-06425# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-maintenance4 maintenance4>--- feature is not enabled, then for each push constant that is--- statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the--- pipeline bind point used by this command, a push constant value--- /must/ have been set for the same pipeline bind point, with a--- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push--- constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to--- create the current 'Vulkan.Core10.Handles.Pipeline', as described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ - #VUID-vkCmdDrawIndirect-None-02699# Descriptors in each bound--- descriptor set, specified via 'cmdBindDescriptorSets', /must/ be--- valid if they are statically used by the--- 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point--- used by this command------ - #VUID-vkCmdDrawIndirect-None-02700# A valid pipeline /must/ be bound--- to the pipeline bind point used by this command------ - #VUID-vkCmdDrawIndirect-commandBuffer-02701# If the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command requires any dynamic state, that state--- /must/ have been set or inherited (if the--- @VK_NV_inherited_viewport_scissor@ extension is enabled) for--- @commandBuffer@, and done so after any previously bound pipeline--- with the corresponding state not specified as dynamic------ - #VUID-vkCmdDrawIndirect-None-02859# There /must/ not have been any--- calls to dynamic state setting commands for any state not specified--- as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object bound to--- the pipeline bind point used by this command, since that pipeline--- was bound------ - #VUID-vkCmdDrawIndirect-None-02702# If the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command accesses a--- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized--- coordinates, that sampler /must/ not be used to sample from any--- 'Vulkan.Core10.Handles.Image' with a--- 'Vulkan.Core10.Handles.ImageView' of the type--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in--- any shader stage------ - #VUID-vkCmdDrawIndirect-None-02703# If the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command accesses a--- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized--- coordinates, that sampler /must/ not be used with any of the SPIR-V--- @OpImageSample*@ or @OpImageSparseSample*@ instructions with--- @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage------ - #VUID-vkCmdDrawIndirect-None-02704# If the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command accesses a--- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized--- coordinates, that sampler /must/ not be used with any of the SPIR-V--- @OpImageSample*@ or @OpImageSparseSample*@ instructions that--- includes a LOD bias or any offset values, in any shader stage------ - #VUID-vkCmdDrawIndirect-None-02705# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>--- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'--- object bound to the pipeline bind point used by this command--- accesses a uniform buffer, it /must/ not access values outside of--- the range of the buffer as specified in the descriptor set bound to--- the same pipeline bind point------ - #VUID-vkCmdDrawIndirect-None-02706# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>--- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'--- object bound to the pipeline bind point used by this command--- accesses a storage buffer, it /must/ not access values outside of--- the range of the buffer as specified in the descriptor set bound to--- the same pipeline bind point------ - #VUID-vkCmdDrawIndirect-commandBuffer-02707# If @commandBuffer@ is--- an unprotected command buffer, any resource accessed by the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command /must/ not be a protected resource------ - #VUID-vkCmdDrawIndirect-None-04115# If a--- 'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@--- as a result of this command, then the @Type@ of the @Texel@ operand--- of that instruction /must/ have at least as many components as the--- image view’s format------ - #VUID-vkCmdDrawIndirect-OpImageWrite-04469# If a--- 'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@--- as a result of this command, then the @Type@ of the @Texel@ operand--- of that instruction /must/ have at least as many components as the--- buffer view’s format------ - #VUID-vkCmdDrawIndirect-SampledType-04470# If a--- 'Vulkan.Core10.Handles.ImageView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component--- width is accessed as a result of this command, the @SampledType@ of--- the @OpTypeImage@ operand of that instruction /must/ have a @Width@--- of 64------ - #VUID-vkCmdDrawIndirect-SampledType-04471# If a--- 'Vulkan.Core10.Handles.ImageView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a component width less--- than 64-bit is accessed as a result of this command, the--- @SampledType@ of the @OpTypeImage@ operand of that instruction--- /must/ have a @Width@ of 32------ - #VUID-vkCmdDrawIndirect-SampledType-04472# If a--- 'Vulkan.Core10.Handles.BufferView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component--- width is accessed as a result of this command, the @SampledType@ of--- the @OpTypeImage@ operand of that instruction /must/ have a @Width@--- of 64------ - #VUID-vkCmdDrawIndirect-SampledType-04473# If a--- 'Vulkan.Core10.Handles.BufferView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a component width less--- than 64-bit is accessed as a result of this command, the--- @SampledType@ of the @OpTypeImage@ operand of that instruction--- /must/ have a @Width@ of 32------ - #VUID-vkCmdDrawIndirect-sparseImageInt64Atomics-04474# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>--- feature is not enabled, 'Vulkan.Core10.Handles.Image' objects--- created with the--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'--- flag /must/ not be accessed by atomic instructions through an--- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this--- command------ - #VUID-vkCmdDrawIndirect-sparseImageInt64Atomics-04475# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>--- feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects--- created with the--- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'--- flag /must/ not be accessed by atomic instructions through an--- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this--- command------ - #VUID-vkCmdDrawIndirect-renderPass-02684# The current render pass--- /must/ be--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>--- with the @renderPass@ member of the--- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure--- specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound--- to--- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'------ - #VUID-vkCmdDrawIndirect-subpass-02685# The subpass index of the--- current render pass /must/ be equal to the @subpass@ member of the--- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure--- specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound--- to--- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'------ - #VUID-vkCmdDrawIndirect-None-02686# Every input attachment used by--- the current subpass /must/ be bound to the pipeline via a descriptor--- set------ - #VUID-vkCmdDrawIndirect-None-04584# Image subresources used as--- attachments in the current render pass /must/ not be accessed in any--- way other than as an attachment by this command, except for cases--- involving read-only access to depth\/stencil attachments as--- described in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-attachment-nonattachment Render Pass>--- chapter------ - #VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-02688# If the draw--- is recorded in a render pass instance with multiview enabled, the--- maximum instance index /must/ be less than or equal to--- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@------ - #VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689# If the bound--- graphics pipeline was created with--- 'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@--- set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass--- has a depth\/stencil attachment, then that attachment /must/ have--- been created with the--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'--- bit set------ - #VUID-vkCmdDrawIndirect-viewportCount-03417# If the bound graphics--- pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled, but not the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'--- dynamic state enabled, then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command, and the @viewportCount@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- /must/ match the--- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@--- of the pipeline------ - #VUID-vkCmdDrawIndirect-scissorCount-03418# If the bound graphics--- pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'--- dynamic state enabled, but not the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled, then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command, and the @scissorCount@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'--- /must/ match the--- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@--- of the pipeline------ - #VUID-vkCmdDrawIndirect-viewportCount-03419# If the bound graphics--- pipeline state was created with both the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'--- and--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic states enabled then both--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- and--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command, and the @viewportCount@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- /must/ match the @scissorCount@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'------ - #VUID-vkCmdDrawIndirect-viewportCount-04137# If the bound graphics--- pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled, but not the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'--- dynamic state enabled, then the bound graphics pipeline /must/ have--- been created with--- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@--- greater or equal to the @viewportCount@ parameter in the last call--- to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDrawIndirect-viewportCount-04138# If the bound graphics--- pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- and--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'--- dynamic states enabled then the @viewportCount@ parameter in the--- last call to--- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'--- /must/ be greater than or equal to the @viewportCount@ parameter in--- the last call to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDrawIndirect-viewportCount-04139# If the bound graphics--- pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled, but not the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'--- dynamic state enabled, then the bound graphics pipeline /must/ have--- been created with--- 'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'::@viewportCount@--- greater or equal to the @viewportCount@ parameter in the last call--- to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDrawIndirect-viewportCount-04140# If the bound graphics--- pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- and--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'--- dynamic states enabled then the @viewportCount@ parameter in the--- last call to--- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'--- /must/ be greater than or equal to the @viewportCount@ parameter in--- the last call to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDrawIndirect-VkPipelineVieportCreateInfo-04141# If the--- bound graphics pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of--- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with--- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@--- greater or equal to the @viewportCount@ parameter in the last call--- to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDrawIndirect-VkPipelineVieportCreateInfo-04142# If the--- bound graphics pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of--- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with--- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@--- greater or equal to the @viewportCount@ parameter in the last call--- to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDrawIndirect-primitiveTopology-03420# If the bound--- graphics pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command, and the @primitiveTopology@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'--- /must/ be of the same--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-topology-class topology class>--- as the pipeline--- 'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@--- state------ - #VUID-vkCmdDrawIndirect-None-04875# If the bound graphics pipeline--- state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPatchControlPointsEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command------ - #VUID-vkCmdDrawIndirect-None-04876# If the bound graphics pipeline--- state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnableEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command------ - #VUID-vkCmdDrawIndirect-None-04877# If the bound graphics pipeline--- state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetDepthBiasEnableEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command------ - #VUID-vkCmdDrawIndirect-logicOp-04878# If the bound graphics--- pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LOGIC_OP_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetLogicOpEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command and the @logicOp@ /must/ be a valid--- 'Vulkan.Core10.Enums.LogicOp.LogicOp' value------ - #VUID-vkCmdDrawIndirect-None-04879# If the bound graphics pipeline--- state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPrimitiveRestartEnableEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command------ - #VUID-vkCmdDrawIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552#--- If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>--- limit is not supported, the bound graphics pipeline was created with--- the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled, and any of the shader stages of the bound--- graphics pipeline write to the @PrimitiveShadingRateKHR@ built-in,--- then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command, and the @viewportCount@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- /must/ be @1@------ - #VUID-vkCmdDrawIndirect-blendEnable-04727# If rasterization is not--- disabled in the bound graphics pipeline, then for each color--- attachment in the subpass, if the corresponding image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- do not contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',--- then the @blendEnable@ member of the corresponding element of the--- @pAttachments@ member of @pColorBlendState@ /must/ be--- 'Vulkan.Core10.FundamentalTypes.FALSE'------ - #VUID-vkCmdDrawIndirect-rasterizationSamples-04740# If rasterization--- is not disabled in the bound graphics pipeline, and neither the--- @VK_AMD_mixed_attachment_samples@ nor the--- @VK_NV_framebuffer_mixed_samples@ extensions are enabled, then--- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@--- /must/ be the same as the current subpass color and\/or--- depth\/stencil attachments------ - #VUID-vkCmdDrawIndirect-None-04912# If the bound graphics pipeline--- was created with both the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'--- and--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'--- dynamic states enabled, then--- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'--- /must/ have been called in the current command buffer prior to this--- draw command------ - #VUID-vkCmdDrawIndirect-pStrides-04913# If the bound graphics--- pipeline was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'--- dynamic state enabled, but not the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'--- dynamic state enabled, then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'--- /must/ have been called in the current command buffer prior to this--- draw command, and the @pStrides@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'--- /must/ not be @NULL@------ - #VUID-vkCmdDrawIndirect-None-04914# If the bound graphics pipeline--- state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'--- dynamic state enabled, then--- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'--- /must/ have been called in the current command buffer prior to this--- draw command------ - #VUID-vkCmdDrawIndirect-None-04007# All vertex input bindings--- accessed via vertex input variables declared in the vertex shader--- entry point’s interface /must/ have either valid or--- 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers bound------ - #VUID-vkCmdDrawIndirect-None-04008# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>--- feature is not enabled, all vertex input bindings accessed via--- vertex input variables declared in the vertex shader entry point’s--- interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'------ - #VUID-vkCmdDrawIndirect-None-02721# For a given vertex buffer--- binding, any attribute data fetched /must/ be entirely contained--- within the corresponding vertex buffer binding, as described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>------ - #VUID-vkCmdDrawIndirect-buffer-02708# If @buffer@ is non-sparse then--- it /must/ be bound completely and contiguously to a single--- 'Vulkan.Core10.Handles.DeviceMemory' object------ - #VUID-vkCmdDrawIndirect-buffer-02709# @buffer@ /must/ have been--- created with the--- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'--- bit set------ - #VUID-vkCmdDrawIndirect-offset-02710# @offset@ /must/ be a multiple--- of @4@------ - #VUID-vkCmdDrawIndirect-commandBuffer-02711# @commandBuffer@ /must/--- not be a protected command buffer------ - #VUID-vkCmdDrawIndirect-drawCount-02718# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiDrawIndirect multi-draw indirect>--- feature is not enabled, @drawCount@ /must/ be @0@ or @1@------ - #VUID-vkCmdDrawIndirect-drawCount-02719# @drawCount@ /must/ be less--- than or equal to--- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@------ - #VUID-vkCmdDrawIndirect-firstInstance-00478# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectFirstInstance drawIndirectFirstInstance>--- feature is not enabled, all the @firstInstance@ members of the--- 'Vulkan.Core10.OtherTypes.DrawIndirectCommand' structures accessed--- by this command /must/ be @0@------ - #VUID-vkCmdDrawIndirect-drawCount-00476# If @drawCount@ is greater--- than @1@, @stride@ /must/ be a multiple of @4@ and /must/ be greater--- than or equal to--- @sizeof@('Vulkan.Core10.OtherTypes.DrawIndirectCommand')------ - #VUID-vkCmdDrawIndirect-drawCount-00487# If @drawCount@ is equal to--- @1@, (@offset@ +--- @sizeof@('Vulkan.Core10.OtherTypes.DrawIndirectCommand')) /must/ be--- less than or equal to the size of @buffer@------ - #VUID-vkCmdDrawIndirect-drawCount-00488# If @drawCount@ is greater--- than @1@, (@stride@ × (@drawCount@ - 1) + @offset@ +--- @sizeof@('Vulkan.Core10.OtherTypes.DrawIndirectCommand')) /must/ be--- less than or equal to the size of @buffer@------ == Valid Usage (Implicit)------ - #VUID-vkCmdDrawIndirect-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdDrawIndirect-buffer-parameter# @buffer@ /must/ be a valid--- 'Vulkan.Core10.Handles.Buffer' handle------ - #VUID-vkCmdDrawIndirect-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-vkCmdDrawIndirect-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics operations------ - #VUID-vkCmdDrawIndirect-renderpass# This command /must/ only be--- called inside of a render pass instance------ - #VUID-vkCmdDrawIndirect-commonparent# Both of @buffer@, and--- @commandBuffer@ /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 | Inside | Graphics |--- | Secondary | | |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize'-cmdDrawIndirect :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command is- -- recorded.- CommandBuffer- -> -- | @buffer@ is the buffer containing draw parameters.- Buffer- -> -- | @offset@ is the byte offset into @buffer@ where parameters begin.- ("offset" ::: DeviceSize)- -> -- | @drawCount@ is the number of draws to execute, and /can/ be zero.- ("drawCount" ::: Word32)- -> -- | @stride@ is the byte stride between successive sets of draw parameters.- ("stride" ::: Word32)- -> io ()-cmdDrawIndirect commandBuffer buffer offset drawCount stride = liftIO $ do- let vkCmdDrawIndirectPtr = pVkCmdDrawIndirect (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdDrawIndirectPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawIndirect is null" Nothing Nothing- let vkCmdDrawIndirect' = mkVkCmdDrawIndirect vkCmdDrawIndirectPtr- traceAroundEvent "vkCmdDrawIndirect" (vkCmdDrawIndirect' (commandBufferHandle (commandBuffer)) (buffer) (offset) (drawCount) (stride))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdDrawIndexedIndirect- :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()---- | vkCmdDrawIndexedIndirect - Draw primitives with indirect parameters and--- indexed vertices------ = Description------ 'cmdDrawIndexedIndirect' behaves similarly to 'cmdDrawIndexed' except--- that the parameters are read by the device from a buffer during--- execution. @drawCount@ draws are executed by the command, with--- parameters taken from @buffer@ starting at @offset@ and increasing by--- @stride@ bytes for each successive draw. The parameters of each draw are--- encoded in an array of--- 'Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand' structures. If--- @drawCount@ is less than or equal to one, @stride@ is ignored.------ == Valid Usage------ - #VUID-vkCmdDrawIndexedIndirect-magFilter-04553# If a--- 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or--- @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and--- @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is--- used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of--- this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ - #VUID-vkCmdDrawIndexedIndirect-mipmapMode-04770# If a--- 'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to--- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'--- and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE'--- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of--- this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ - #VUID-vkCmdDrawIndexedIndirect-None-02691# If a--- 'Vulkan.Core10.Handles.ImageView' is accessed using atomic--- operations as a result of this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'------ - #VUID-vkCmdDrawIndexedIndirect-None-02692# If a--- 'Vulkan.Core10.Handles.ImageView' is sampled with--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result--- of this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'------ - #VUID-vkCmdDrawIndexedIndirect-filterCubic-02694# Any--- 'Vulkan.Core10.Handles.ImageView' being sampled with--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result--- of this command /must/ have a--- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that--- supports cubic filtering, as specified by--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@--- returned by--- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ - #VUID-vkCmdDrawIndexedIndirect-filterCubicMinmax-02695# Any--- 'Vulkan.Core10.Handles.ImageView' being sampled with--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a--- reduction mode of either--- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'--- or--- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'--- as a result of this command /must/ have a--- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that--- supports cubic filtering together with minmax filtering, as--- specified by--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@--- returned by--- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ - #VUID-vkCmdDrawIndexedIndirect-flags-02696# Any--- 'Vulkan.Core10.Handles.Image' created with a--- 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'--- sampled as a result of this command /must/ only be sampled using a--- 'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of--- 'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'------ - #VUID-vkCmdDrawIndexedIndirect-OpTypeImage-06423# Any--- 'Vulkan.Core10.Handles.ImageView' or--- 'Vulkan.Core10.Handles.BufferView' being written as a storage image--- or storage texel buffer where the image format field of the--- @OpTypeImage@ is @Unknown@ /must/ have image format features that--- support--- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR'------ - #VUID-vkCmdDrawIndexedIndirect-OpTypeImage-06424# Any--- 'Vulkan.Core10.Handles.ImageView' or--- 'Vulkan.Core10.Handles.BufferView' being read as a storage image or--- storage texel buffer where the image format field of the--- @OpTypeImage@ is @Unknown@ /must/ have image format features that--- support--- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR'------ - #VUID-vkCmdDrawIndexedIndirect-None-02697# For each set /n/ that is--- statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the--- pipeline bind point used by this command, a descriptor set /must/--- have been bound to /n/ at the same pipeline bind point, with a--- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set--- /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create--- the current 'Vulkan.Core10.Handles.Pipeline', as described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ - #VUID-vkCmdDrawIndexedIndirect-maintenance4-06425# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-maintenance4 maintenance4>--- feature is not enabled, then for each push constant that is--- statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the--- pipeline bind point used by this command, a push constant value--- /must/ have been set for the same pipeline bind point, with a--- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push--- constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to--- create the current 'Vulkan.Core10.Handles.Pipeline', as described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ - #VUID-vkCmdDrawIndexedIndirect-None-02699# Descriptors in each bound--- descriptor set, specified via 'cmdBindDescriptorSets', /must/ be--- valid if they are statically used by the--- 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point--- used by this command------ - #VUID-vkCmdDrawIndexedIndirect-None-02700# A valid pipeline /must/--- be bound to the pipeline bind point used by this command------ - #VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701# If the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command requires any dynamic state, that state--- /must/ have been set or inherited (if the--- @VK_NV_inherited_viewport_scissor@ extension is enabled) for--- @commandBuffer@, and done so after any previously bound pipeline--- with the corresponding state not specified as dynamic------ - #VUID-vkCmdDrawIndexedIndirect-None-02859# There /must/ not have--- been any calls to dynamic state setting commands for any state not--- specified as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object--- bound to the pipeline bind point used by this command, since that--- pipeline was bound------ - #VUID-vkCmdDrawIndexedIndirect-None-02702# If the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command accesses a--- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized--- coordinates, that sampler /must/ not be used to sample from any--- 'Vulkan.Core10.Handles.Image' with a--- 'Vulkan.Core10.Handles.ImageView' of the type--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in--- any shader stage------ - #VUID-vkCmdDrawIndexedIndirect-None-02703# If the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command accesses a--- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized--- coordinates, that sampler /must/ not be used with any of the SPIR-V--- @OpImageSample*@ or @OpImageSparseSample*@ instructions with--- @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage------ - #VUID-vkCmdDrawIndexedIndirect-None-02704# If the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command accesses a--- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized--- coordinates, that sampler /must/ not be used with any of the SPIR-V--- @OpImageSample*@ or @OpImageSparseSample*@ instructions that--- includes a LOD bias or any offset values, in any shader stage------ - #VUID-vkCmdDrawIndexedIndirect-None-02705# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>--- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'--- object bound to the pipeline bind point used by this command--- accesses a uniform buffer, it /must/ not access values outside of--- the range of the buffer as specified in the descriptor set bound to--- the same pipeline bind point------ - #VUID-vkCmdDrawIndexedIndirect-None-02706# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>--- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'--- object bound to the pipeline bind point used by this command--- accesses a storage buffer, it /must/ not access values outside of--- the range of the buffer as specified in the descriptor set bound to--- the same pipeline bind point------ - #VUID-vkCmdDrawIndexedIndirect-commandBuffer-02707# If--- @commandBuffer@ is an unprotected command buffer, any resource--- accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the--- pipeline bind point used by this command /must/ not be a protected--- resource------ - #VUID-vkCmdDrawIndexedIndirect-None-04115# If a--- 'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@--- as a result of this command, then the @Type@ of the @Texel@ operand--- of that instruction /must/ have at least as many components as the--- image view’s format------ - #VUID-vkCmdDrawIndexedIndirect-OpImageWrite-04469# If a--- 'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@--- as a result of this command, then the @Type@ of the @Texel@ operand--- of that instruction /must/ have at least as many components as the--- buffer view’s format------ - #VUID-vkCmdDrawIndexedIndirect-SampledType-04470# If a--- 'Vulkan.Core10.Handles.ImageView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component--- width is accessed as a result of this command, the @SampledType@ of--- the @OpTypeImage@ operand of that instruction /must/ have a @Width@--- of 64------ - #VUID-vkCmdDrawIndexedIndirect-SampledType-04471# If a--- 'Vulkan.Core10.Handles.ImageView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a component width less--- than 64-bit is accessed as a result of this command, the--- @SampledType@ of the @OpTypeImage@ operand of that instruction--- /must/ have a @Width@ of 32------ - #VUID-vkCmdDrawIndexedIndirect-SampledType-04472# If a--- 'Vulkan.Core10.Handles.BufferView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component--- width is accessed as a result of this command, the @SampledType@ of--- the @OpTypeImage@ operand of that instruction /must/ have a @Width@--- of 64------ - #VUID-vkCmdDrawIndexedIndirect-SampledType-04473# If a--- 'Vulkan.Core10.Handles.BufferView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a component width less--- than 64-bit is accessed as a result of this command, the--- @SampledType@ of the @OpTypeImage@ operand of that instruction--- /must/ have a @Width@ of 32------ - #VUID-vkCmdDrawIndexedIndirect-sparseImageInt64Atomics-04474# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>--- feature is not enabled, 'Vulkan.Core10.Handles.Image' objects--- created with the--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'--- flag /must/ not be accessed by atomic instructions through an--- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this--- command------ - #VUID-vkCmdDrawIndexedIndirect-sparseImageInt64Atomics-04475# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>--- feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects--- created with the--- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'--- flag /must/ not be accessed by atomic instructions through an--- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this--- command------ - #VUID-vkCmdDrawIndexedIndirect-renderPass-02684# The current render--- pass /must/ be--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>--- with the @renderPass@ member of the--- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure--- specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound--- to--- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'------ - #VUID-vkCmdDrawIndexedIndirect-subpass-02685# The subpass index of--- the current render pass /must/ be equal to the @subpass@ member of--- the 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure--- specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound--- to--- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'------ - #VUID-vkCmdDrawIndexedIndirect-None-02686# Every input attachment--- used by the current subpass /must/ be bound to the pipeline via a--- descriptor set------ - #VUID-vkCmdDrawIndexedIndirect-None-04584# Image subresources used--- as attachments in the current render pass /must/ not be accessed in--- any way other than as an attachment by this command, except for--- cases involving read-only access to depth\/stencil attachments as--- described in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-attachment-nonattachment Render Pass>--- chapter------ - #VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-02688# If--- the draw is recorded in a render pass instance with multiview--- enabled, the maximum instance index /must/ be less than or equal to--- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@------ - #VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689# If the--- bound graphics pipeline was created with--- 'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@--- set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass--- has a depth\/stencil attachment, then that attachment /must/ have--- been created with the--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'--- bit set------ - #VUID-vkCmdDrawIndexedIndirect-viewportCount-03417# If the bound--- graphics pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled, but not the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'--- dynamic state enabled, then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command, and the @viewportCount@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- /must/ match the--- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@--- of the pipeline------ - #VUID-vkCmdDrawIndexedIndirect-scissorCount-03418# If the bound--- graphics pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'--- dynamic state enabled, but not the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled, then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command, and the @scissorCount@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'--- /must/ match the--- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@--- of the pipeline------ - #VUID-vkCmdDrawIndexedIndirect-viewportCount-03419# If the bound--- graphics pipeline state was created with both the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'--- and--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic states enabled then both--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- and--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command, and the @viewportCount@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- /must/ match the @scissorCount@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'------ - #VUID-vkCmdDrawIndexedIndirect-viewportCount-04137# If the bound--- graphics pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled, but not the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'--- dynamic state enabled, then the bound graphics pipeline /must/ have--- been created with--- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@--- greater or equal to the @viewportCount@ parameter in the last call--- to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDrawIndexedIndirect-viewportCount-04138# If the bound--- graphics pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- and--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'--- dynamic states enabled then the @viewportCount@ parameter in the--- last call to--- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'--- /must/ be greater than or equal to the @viewportCount@ parameter in--- the last call to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDrawIndexedIndirect-viewportCount-04139# If the bound--- graphics pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled, but not the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'--- dynamic state enabled, then the bound graphics pipeline /must/ have--- been created with--- 'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'::@viewportCount@--- greater or equal to the @viewportCount@ parameter in the last call--- to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDrawIndexedIndirect-viewportCount-04140# If the bound--- graphics pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- and--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'--- dynamic states enabled then the @viewportCount@ parameter in the--- last call to--- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'--- /must/ be greater than or equal to the @viewportCount@ parameter in--- the last call to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDrawIndexedIndirect-VkPipelineVieportCreateInfo-04141# If--- the bound graphics pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of--- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with--- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@--- greater or equal to the @viewportCount@ parameter in the last call--- to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDrawIndexedIndirect-VkPipelineVieportCreateInfo-04142# If--- the bound graphics pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of--- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with--- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@--- greater or equal to the @viewportCount@ parameter in the last call--- to--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ - #VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420# If the bound--- graphics pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command, and the @primitiveTopology@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'--- /must/ be of the same--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-topology-class topology class>--- as the pipeline--- 'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@--- state------ - #VUID-vkCmdDrawIndexedIndirect-None-04875# If the bound graphics--- pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPatchControlPointsEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command------ - #VUID-vkCmdDrawIndexedIndirect-None-04876# If the bound graphics--- pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnableEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command------ - #VUID-vkCmdDrawIndexedIndirect-None-04877# If the bound graphics--- pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetDepthBiasEnableEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command------ - #VUID-vkCmdDrawIndexedIndirect-logicOp-04878# If the bound graphics--- pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LOGIC_OP_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetLogicOpEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command and the @logicOp@ /must/ be a valid--- 'Vulkan.Core10.Enums.LogicOp.LogicOp' value------ - #VUID-vkCmdDrawIndexedIndirect-None-04879# If the bound graphics--- pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT'--- dynamic state enabled then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPrimitiveRestartEnableEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command------ - #VUID-vkCmdDrawIndexedIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552#--- If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>--- limit is not supported, the bound graphics pipeline was created with--- the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled, and any of the shader stages of the bound--- graphics pipeline write to the @PrimitiveShadingRateKHR@ built-in,--- then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- /must/ have been called in the current command buffer prior to this--- drawing command, and the @viewportCount@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'--- /must/ be @1@------ - #VUID-vkCmdDrawIndexedIndirect-blendEnable-04727# If rasterization--- is not disabled in the bound graphics pipeline, then for each color--- attachment in the subpass, if the corresponding image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- do not contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',--- then the @blendEnable@ member of the corresponding element of the--- @pAttachments@ member of @pColorBlendState@ /must/ be--- 'Vulkan.Core10.FundamentalTypes.FALSE'------ - #VUID-vkCmdDrawIndexedIndirect-rasterizationSamples-04740# If--- rasterization is not disabled in the bound graphics pipeline, and--- neither the @VK_AMD_mixed_attachment_samples@ nor the--- @VK_NV_framebuffer_mixed_samples@ extensions are enabled, then--- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@--- /must/ be the same as the current subpass color and\/or--- depth\/stencil attachments------ - #VUID-vkCmdDrawIndexedIndirect-None-04912# If the bound graphics--- pipeline was created with both the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'--- and--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'--- dynamic states enabled, then--- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'--- /must/ have been called in the current command buffer prior to this--- draw command------ - #VUID-vkCmdDrawIndexedIndirect-pStrides-04913# If the bound graphics--- pipeline was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'--- dynamic state enabled, but not the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'--- dynamic state enabled, then--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'--- /must/ have been called in the current command buffer prior to this--- draw command, and the @pStrides@ parameter of--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'--- /must/ not be @NULL@------ - #VUID-vkCmdDrawIndexedIndirect-None-04914# If the bound graphics--- pipeline state was created with the--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'--- dynamic state enabled, then--- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'--- /must/ have been called in the current command buffer prior to this--- draw command------ - #VUID-vkCmdDrawIndexedIndirect-None-04007# All vertex input bindings--- accessed via vertex input variables declared in the vertex shader--- entry point’s interface /must/ have either valid or--- 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers bound------ - #VUID-vkCmdDrawIndexedIndirect-None-04008# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>--- feature is not enabled, all vertex input bindings accessed via--- vertex input variables declared in the vertex shader entry point’s--- interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'------ - #VUID-vkCmdDrawIndexedIndirect-None-02721# For a given vertex buffer--- binding, any attribute data fetched /must/ be entirely contained--- within the corresponding vertex buffer binding, as described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>------ - #VUID-vkCmdDrawIndexedIndirect-buffer-02708# If @buffer@ is--- non-sparse then it /must/ be bound completely and contiguously to a--- single 'Vulkan.Core10.Handles.DeviceMemory' object------ - #VUID-vkCmdDrawIndexedIndirect-buffer-02709# @buffer@ /must/ have--- been created with the--- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'--- bit set------ - #VUID-vkCmdDrawIndexedIndirect-offset-02710# @offset@ /must/ be a--- multiple of @4@------ - #VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711# @commandBuffer@--- /must/ not be a protected command buffer------ - #VUID-vkCmdDrawIndexedIndirect-drawCount-02718# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiDrawIndirect multi-draw indirect>--- feature is not enabled, @drawCount@ /must/ be @0@ or @1@------ - #VUID-vkCmdDrawIndexedIndirect-drawCount-02719# @drawCount@ /must/--- be less than or equal to--- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@------ - #VUID-vkCmdDrawIndexedIndirect-drawCount-00528# If @drawCount@ is--- greater than @1@, @stride@ /must/ be a multiple of @4@ and /must/ be--- greater than or equal to--- @sizeof@('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand')------ - #VUID-vkCmdDrawIndexedIndirect-firstInstance-00530# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectFirstInstance drawIndirectFirstInstance>--- feature is not enabled, all the @firstInstance@ members of the--- 'Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand' structures--- accessed by this command /must/ be @0@------ - #VUID-vkCmdDrawIndexedIndirect-drawCount-00539# If @drawCount@ is--- equal to @1@, (@offset@ +--- @sizeof@('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'))--- /must/ be less than or equal to the size of @buffer@------ - #VUID-vkCmdDrawIndexedIndirect-drawCount-00540# If @drawCount@ is--- greater than @1@, (@stride@ × (@drawCount@ - 1) + @offset@ +--- @sizeof@('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'))--- /must/ be less than or equal to the size of @buffer@------ == Valid Usage (Implicit)------ - #VUID-vkCmdDrawIndexedIndirect-commandBuffer-parameter#--- @commandBuffer@ /must/ be a valid--- 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdDrawIndexedIndirect-buffer-parameter# @buffer@ /must/ be--- a valid 'Vulkan.Core10.Handles.Buffer' handle------ - #VUID-vkCmdDrawIndexedIndirect-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-vkCmdDrawIndexedIndirect-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics operations------ - #VUID-vkCmdDrawIndexedIndirect-renderpass# This command /must/ only--- be called inside of a render pass instance------ - #VUID-vkCmdDrawIndexedIndirect-commonparent# Both of @buffer@, and--- @commandBuffer@ /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 | Inside | Graphics |--- | Secondary | | |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize'-cmdDrawIndexedIndirect :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command is- -- recorded.- CommandBuffer- -> -- | @buffer@ is the buffer containing draw parameters.- Buffer- -> -- | @offset@ is the byte offset into @buffer@ where parameters begin.- ("offset" ::: DeviceSize)- -> -- | @drawCount@ is the number of draws to execute, and /can/ be zero.- ("drawCount" ::: Word32)- -> -- | @stride@ is the byte stride between successive sets of draw parameters.- ("stride" ::: Word32)- -> io ()-cmdDrawIndexedIndirect commandBuffer buffer offset drawCount stride = liftIO $ do- let vkCmdDrawIndexedIndirectPtr = pVkCmdDrawIndexedIndirect (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdDrawIndexedIndirectPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawIndexedIndirect is null" Nothing Nothing- let vkCmdDrawIndexedIndirect' = mkVkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirectPtr- traceAroundEvent "vkCmdDrawIndexedIndirect" (vkCmdDrawIndexedIndirect' (commandBufferHandle (commandBuffer)) (buffer) (offset) (drawCount) (stride))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdDispatch- :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> IO ()---- | vkCmdDispatch - Dispatch compute work items------ = Description------ When the command is executed, a global workgroup consisting of--- @groupCountX@ × @groupCountY@ × @groupCountZ@ local workgroups is--- assembled.------ == Valid Usage------ - #VUID-vkCmdDispatch-magFilter-04553# If a--- 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or--- @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and--- @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is--- used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of--- this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ - #VUID-vkCmdDispatch-mipmapMode-04770# If a--- 'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to--- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'--- and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE'--- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of--- this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ - #VUID-vkCmdDispatch-None-02691# If a--- 'Vulkan.Core10.Handles.ImageView' is accessed using atomic--- operations as a result of this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'------ - #VUID-vkCmdDispatch-None-02692# If a--- 'Vulkan.Core10.Handles.ImageView' is sampled with--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result--- of this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'------ - #VUID-vkCmdDispatch-filterCubic-02694# Any--- 'Vulkan.Core10.Handles.ImageView' being sampled with--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result--- of this command /must/ have a--- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that--- supports cubic filtering, as specified by--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@--- returned by--- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ - #VUID-vkCmdDispatch-filterCubicMinmax-02695# Any--- 'Vulkan.Core10.Handles.ImageView' being sampled with--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a--- reduction mode of either--- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'--- or--- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'--- as a result of this command /must/ have a--- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that--- supports cubic filtering together with minmax filtering, as--- specified by--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@--- returned by--- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ - #VUID-vkCmdDispatch-flags-02696# Any 'Vulkan.Core10.Handles.Image'--- created with a 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@--- containing--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'--- sampled as a result of this command /must/ only be sampled using a--- 'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of--- 'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'------ - #VUID-vkCmdDispatch-OpTypeImage-06423# Any--- 'Vulkan.Core10.Handles.ImageView' or--- 'Vulkan.Core10.Handles.BufferView' being written as a storage image--- or storage texel buffer where the image format field of the--- @OpTypeImage@ is @Unknown@ /must/ have image format features that--- support--- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR'------ - #VUID-vkCmdDispatch-OpTypeImage-06424# Any--- 'Vulkan.Core10.Handles.ImageView' or--- 'Vulkan.Core10.Handles.BufferView' being read as a storage image or--- storage texel buffer where the image format field of the--- @OpTypeImage@ is @Unknown@ /must/ have image format features that--- support--- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR'------ - #VUID-vkCmdDispatch-None-02697# For each set /n/ that is statically--- used by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline--- bind point used by this command, a descriptor set /must/ have been--- bound to /n/ at the same pipeline bind point, with a--- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set--- /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create--- the current 'Vulkan.Core10.Handles.Pipeline', as described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ - #VUID-vkCmdDispatch-maintenance4-06425# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-maintenance4 maintenance4>--- feature is not enabled, then for each push constant that is--- statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the--- pipeline bind point used by this command, a push constant value--- /must/ have been set for the same pipeline bind point, with a--- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push--- constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to--- create the current 'Vulkan.Core10.Handles.Pipeline', as described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ - #VUID-vkCmdDispatch-None-02699# Descriptors in each bound descriptor--- set, specified via 'cmdBindDescriptorSets', /must/ be valid if they--- are statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to--- the pipeline bind point used by this command------ - #VUID-vkCmdDispatch-None-02700# A valid pipeline /must/ be bound to--- the pipeline bind point used by this command------ - #VUID-vkCmdDispatch-commandBuffer-02701# If the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command requires any dynamic state, that state--- /must/ have been set or inherited (if the--- @VK_NV_inherited_viewport_scissor@ extension is enabled) for--- @commandBuffer@, and done so after any previously bound pipeline--- with the corresponding state not specified as dynamic------ - #VUID-vkCmdDispatch-None-02859# There /must/ not have been any calls--- to dynamic state setting commands for any state not specified as--- dynamic in the 'Vulkan.Core10.Handles.Pipeline' object bound to the--- pipeline bind point used by this command, since that pipeline was--- bound------ - #VUID-vkCmdDispatch-None-02702# If the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command accesses a--- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized--- coordinates, that sampler /must/ not be used to sample from any--- 'Vulkan.Core10.Handles.Image' with a--- 'Vulkan.Core10.Handles.ImageView' of the type--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in--- any shader stage------ - #VUID-vkCmdDispatch-None-02703# If the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command accesses a--- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized--- coordinates, that sampler /must/ not be used with any of the SPIR-V--- @OpImageSample*@ or @OpImageSparseSample*@ instructions with--- @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage------ - #VUID-vkCmdDispatch-None-02704# If the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command accesses a--- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized--- coordinates, that sampler /must/ not be used with any of the SPIR-V--- @OpImageSample*@ or @OpImageSparseSample*@ instructions that--- includes a LOD bias or any offset values, in any shader stage------ - #VUID-vkCmdDispatch-None-02705# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>--- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'--- object bound to the pipeline bind point used by this command--- accesses a uniform buffer, it /must/ not access values outside of--- the range of the buffer as specified in the descriptor set bound to--- the same pipeline bind point------ - #VUID-vkCmdDispatch-None-02706# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>--- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'--- object bound to the pipeline bind point used by this command--- accesses a storage buffer, it /must/ not access values outside of--- the range of the buffer as specified in the descriptor set bound to--- the same pipeline bind point------ - #VUID-vkCmdDispatch-commandBuffer-02707# If @commandBuffer@ is an--- unprotected command buffer, any resource accessed by the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command /must/ not be a protected resource------ - #VUID-vkCmdDispatch-None-04115# If a--- 'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@--- as a result of this command, then the @Type@ of the @Texel@ operand--- of that instruction /must/ have at least as many components as the--- image view’s format------ - #VUID-vkCmdDispatch-OpImageWrite-04469# If a--- 'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@--- as a result of this command, then the @Type@ of the @Texel@ operand--- of that instruction /must/ have at least as many components as the--- buffer view’s format------ - #VUID-vkCmdDispatch-SampledType-04470# If a--- 'Vulkan.Core10.Handles.ImageView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component--- width is accessed as a result of this command, the @SampledType@ of--- the @OpTypeImage@ operand of that instruction /must/ have a @Width@--- of 64------ - #VUID-vkCmdDispatch-SampledType-04471# If a--- 'Vulkan.Core10.Handles.ImageView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a component width less--- than 64-bit is accessed as a result of this command, the--- @SampledType@ of the @OpTypeImage@ operand of that instruction--- /must/ have a @Width@ of 32------ - #VUID-vkCmdDispatch-SampledType-04472# If a--- 'Vulkan.Core10.Handles.BufferView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component--- width is accessed as a result of this command, the @SampledType@ of--- the @OpTypeImage@ operand of that instruction /must/ have a @Width@--- of 64------ - #VUID-vkCmdDispatch-SampledType-04473# If a--- 'Vulkan.Core10.Handles.BufferView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a component width less--- than 64-bit is accessed as a result of this command, the--- @SampledType@ of the @OpTypeImage@ operand of that instruction--- /must/ have a @Width@ of 32------ - #VUID-vkCmdDispatch-sparseImageInt64Atomics-04474# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>--- feature is not enabled, 'Vulkan.Core10.Handles.Image' objects--- created with the--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'--- flag /must/ not be accessed by atomic instructions through an--- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this--- command------ - #VUID-vkCmdDispatch-sparseImageInt64Atomics-04475# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>--- feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects--- created with the--- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'--- flag /must/ not be accessed by atomic instructions through an--- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this--- command------ - #VUID-vkCmdDispatch-commandBuffer-02712# If @commandBuffer@ is a--- protected command buffer, any resource written to by the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command /must/ not be an unprotected resource------ - #VUID-vkCmdDispatch-commandBuffer-02713# If @commandBuffer@ is a--- protected command buffer, pipeline stages other than the--- framebuffer-space and compute stages in the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command /must/ not write to any resource------ - #VUID-vkCmdDispatch-commandBuffer-04617# If any of the shader stages--- of the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind--- point used by this command uses the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-RayQueryKHR RayQueryKHR>--- capability, then @commandBuffer@ /must/ not be a protected command--- buffer------ - #VUID-vkCmdDispatch-groupCountX-00386# @groupCountX@ /must/ be less--- than or equal to--- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]------ - #VUID-vkCmdDispatch-groupCountY-00387# @groupCountY@ /must/ be less--- than or equal to--- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]------ - #VUID-vkCmdDispatch-groupCountZ-00388# @groupCountZ@ /must/ be less--- than or equal to--- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]------ == Valid Usage (Implicit)------ - #VUID-vkCmdDispatch-commandBuffer-parameter# @commandBuffer@ /must/--- be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdDispatch-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-vkCmdDispatch-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support compute operations------ - #VUID-vkCmdDispatch-renderpass# This command /must/ only be called--- outside of a render pass instance------ == Host Synchronization------ - Host access to @commandBuffer@ /must/ be externally synchronized------ - Host access to the 'Vulkan.Core10.Handles.CommandPool' that--- @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+--- | Primary | Outside | Compute |--- | Secondary | | |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer'-cmdDispatch :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @groupCountX@ is the number of local workgroups to dispatch in the X- -- dimension.- ("groupCountX" ::: Word32)- -> -- | @groupCountY@ is the number of local workgroups to dispatch in the Y- -- dimension.- ("groupCountY" ::: Word32)- -> -- | @groupCountZ@ is the number of local workgroups to dispatch in the Z- -- dimension.- ("groupCountZ" ::: Word32)- -> io ()-cmdDispatch commandBuffer groupCountX groupCountY groupCountZ = liftIO $ do- let vkCmdDispatchPtr = pVkCmdDispatch (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdDispatchPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDispatch is null" Nothing Nothing- let vkCmdDispatch' = mkVkCmdDispatch vkCmdDispatchPtr- traceAroundEvent "vkCmdDispatch" (vkCmdDispatch' (commandBufferHandle (commandBuffer)) (groupCountX) (groupCountY) (groupCountZ))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdDispatchIndirect- :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IO ()---- | vkCmdDispatchIndirect - Dispatch compute work items with indirect--- parameters------ = Description------ 'cmdDispatchIndirect' behaves similarly to 'cmdDispatch' except that the--- parameters are read by the device from a buffer during execution. The--- parameters of the dispatch are encoded in a--- 'Vulkan.Core10.OtherTypes.DispatchIndirectCommand' structure taken from--- @buffer@ starting at @offset@.------ == Valid Usage------ - #VUID-vkCmdDispatchIndirect-magFilter-04553# If a--- 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or--- @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and--- @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is--- used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of--- this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ - #VUID-vkCmdDispatchIndirect-mipmapMode-04770# If a--- 'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to--- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'--- and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE'--- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of--- this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ - #VUID-vkCmdDispatchIndirect-None-02691# If a--- 'Vulkan.Core10.Handles.ImageView' is accessed using atomic--- operations as a result of this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'------ - #VUID-vkCmdDispatchIndirect-None-02692# If a--- 'Vulkan.Core10.Handles.ImageView' is sampled with--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result--- of this command, then the image view’s--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>--- /must/ contain--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'------ - #VUID-vkCmdDispatchIndirect-filterCubic-02694# Any--- 'Vulkan.Core10.Handles.ImageView' being sampled with--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result--- of this command /must/ have a--- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that--- supports cubic filtering, as specified by--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@--- returned by--- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ - #VUID-vkCmdDispatchIndirect-filterCubicMinmax-02695# Any--- 'Vulkan.Core10.Handles.ImageView' being sampled with--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a--- reduction mode of either--- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'--- or--- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'--- as a result of this command /must/ have a--- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that--- supports cubic filtering together with minmax filtering, as--- specified by--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@--- returned by--- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ - #VUID-vkCmdDispatchIndirect-flags-02696# Any--- 'Vulkan.Core10.Handles.Image' created with a--- 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'--- sampled as a result of this command /must/ only be sampled using a--- 'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of--- 'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'------ - #VUID-vkCmdDispatchIndirect-OpTypeImage-06423# Any--- 'Vulkan.Core10.Handles.ImageView' or--- 'Vulkan.Core10.Handles.BufferView' being written as a storage image--- or storage texel buffer where the image format field of the--- @OpTypeImage@ is @Unknown@ /must/ have image format features that--- support--- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR'------ - #VUID-vkCmdDispatchIndirect-OpTypeImage-06424# Any--- 'Vulkan.Core10.Handles.ImageView' or--- 'Vulkan.Core10.Handles.BufferView' being read as a storage image or--- storage texel buffer where the image format field of the--- @OpTypeImage@ is @Unknown@ /must/ have image format features that--- support--- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR'------ - #VUID-vkCmdDispatchIndirect-None-02697# For each set /n/ that is--- statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the--- pipeline bind point used by this command, a descriptor set /must/--- have been bound to /n/ at the same pipeline bind point, with a--- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set--- /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create--- the current 'Vulkan.Core10.Handles.Pipeline', as described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ - #VUID-vkCmdDispatchIndirect-maintenance4-06425# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-maintenance4 maintenance4>--- feature is not enabled, then for each push constant that is--- statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the--- pipeline bind point used by this command, a push constant value--- /must/ have been set for the same pipeline bind point, with a--- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push--- constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to--- create the current 'Vulkan.Core10.Handles.Pipeline', as described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ - #VUID-vkCmdDispatchIndirect-None-02699# Descriptors in each bound--- descriptor set, specified via 'cmdBindDescriptorSets', /must/ be--- valid if they are statically used by the--- 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point--- used by this command------ - #VUID-vkCmdDispatchIndirect-None-02700# A valid pipeline /must/ be--- bound to the pipeline bind point used by this command------ - #VUID-vkCmdDispatchIndirect-commandBuffer-02701# If the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command requires any dynamic state, that state--- /must/ have been set or inherited (if the--- @VK_NV_inherited_viewport_scissor@ extension is enabled) for--- @commandBuffer@, and done so after any previously bound pipeline--- with the corresponding state not specified as dynamic------ - #VUID-vkCmdDispatchIndirect-None-02859# There /must/ not have been--- any calls to dynamic state setting commands for any state not--- specified as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object--- bound to the pipeline bind point used by this command, since that--- pipeline was bound------ - #VUID-vkCmdDispatchIndirect-None-02702# If the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command accesses a--- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized--- coordinates, that sampler /must/ not be used to sample from any--- 'Vulkan.Core10.Handles.Image' with a--- 'Vulkan.Core10.Handles.ImageView' of the type--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or--- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in--- any shader stage------ - #VUID-vkCmdDispatchIndirect-None-02703# If the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command accesses a--- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized--- coordinates, that sampler /must/ not be used with any of the SPIR-V--- @OpImageSample*@ or @OpImageSparseSample*@ instructions with--- @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage------ - #VUID-vkCmdDispatchIndirect-None-02704# If the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command accesses a--- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized--- coordinates, that sampler /must/ not be used with any of the SPIR-V--- @OpImageSample*@ or @OpImageSparseSample*@ instructions that--- includes a LOD bias or any offset values, in any shader stage------ - #VUID-vkCmdDispatchIndirect-None-02705# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>--- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'--- object bound to the pipeline bind point used by this command--- accesses a uniform buffer, it /must/ not access values outside of--- the range of the buffer as specified in the descriptor set bound to--- the same pipeline bind point------ - #VUID-vkCmdDispatchIndirect-None-02706# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>--- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'--- object bound to the pipeline bind point used by this command--- accesses a storage buffer, it /must/ not access values outside of--- the range of the buffer as specified in the descriptor set bound to--- the same pipeline bind point------ - #VUID-vkCmdDispatchIndirect-commandBuffer-02707# If @commandBuffer@--- is an unprotected command buffer, any resource accessed by the--- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind--- point used by this command /must/ not be a protected resource------ - #VUID-vkCmdDispatchIndirect-None-04115# If a--- 'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@--- as a result of this command, then the @Type@ of the @Texel@ operand--- of that instruction /must/ have at least as many components as the--- image view’s format------ - #VUID-vkCmdDispatchIndirect-OpImageWrite-04469# If a--- 'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@--- as a result of this command, then the @Type@ of the @Texel@ operand--- of that instruction /must/ have at least as many components as the--- buffer view’s format------ - #VUID-vkCmdDispatchIndirect-SampledType-04470# If a--- 'Vulkan.Core10.Handles.ImageView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component--- width is accessed as a result of this command, the @SampledType@ of--- the @OpTypeImage@ operand of that instruction /must/ have a @Width@--- of 64------ - #VUID-vkCmdDispatchIndirect-SampledType-04471# If a--- 'Vulkan.Core10.Handles.ImageView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a component width less--- than 64-bit is accessed as a result of this command, the--- @SampledType@ of the @OpTypeImage@ operand of that instruction--- /must/ have a @Width@ of 32------ - #VUID-vkCmdDispatchIndirect-SampledType-04472# If a--- 'Vulkan.Core10.Handles.BufferView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component--- width is accessed as a result of this command, the @SampledType@ of--- the @OpTypeImage@ operand of that instruction /must/ have a @Width@--- of 64------ - #VUID-vkCmdDispatchIndirect-SampledType-04473# If a--- 'Vulkan.Core10.Handles.BufferView' with a--- 'Vulkan.Core10.Enums.Format.Format' that has a component width less--- than 64-bit is accessed as a result of this command, the--- @SampledType@ of the @OpTypeImage@ operand of that instruction--- /must/ have a @Width@ of 32------ - #VUID-vkCmdDispatchIndirect-sparseImageInt64Atomics-04474# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>--- feature is not enabled, 'Vulkan.Core10.Handles.Image' objects--- created with the--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'--- flag /must/ not be accessed by atomic instructions through an--- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this--- command------ - #VUID-vkCmdDispatchIndirect-sparseImageInt64Atomics-04475# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>--- feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects--- created with the--- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'--- flag /must/ not be accessed by atomic instructions through an--- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this--- command------ - #VUID-vkCmdDispatchIndirect-buffer-02708# If @buffer@ is non-sparse--- then it /must/ be bound completely and contiguously to a single--- 'Vulkan.Core10.Handles.DeviceMemory' object------ - #VUID-vkCmdDispatchIndirect-buffer-02709# @buffer@ /must/ have been--- created with the--- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'--- bit set------ - #VUID-vkCmdDispatchIndirect-offset-02710# @offset@ /must/ be a--- multiple of @4@------ - #VUID-vkCmdDispatchIndirect-commandBuffer-02711# @commandBuffer@--- /must/ not be a protected command buffer------ - #VUID-vkCmdDispatchIndirect-offset-00407# The sum of @offset@ and--- the size of 'Vulkan.Core10.OtherTypes.DispatchIndirectCommand'--- /must/ be less than or equal to the size of @buffer@------ == Valid Usage (Implicit)------ - #VUID-vkCmdDispatchIndirect-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdDispatchIndirect-buffer-parameter# @buffer@ /must/ be a--- valid 'Vulkan.Core10.Handles.Buffer' handle------ - #VUID-vkCmdDispatchIndirect-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-vkCmdDispatchIndirect-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support compute operations------ - #VUID-vkCmdDispatchIndirect-renderpass# This command /must/ only be--- called outside of a render pass instance------ - #VUID-vkCmdDispatchIndirect-commonparent# Both of @buffer@, and--- @commandBuffer@ /must/ have been created, allocated, or retrieved--- from the same 'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ - Host access to @commandBuffer@ /must/ be externally synchronized------ - Host access to the 'Vulkan.Core10.Handles.CommandPool' that--- @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+--- | Primary | Outside | Compute |--- | Secondary | | |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize'-cmdDispatchIndirect :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @buffer@ is the buffer containing dispatch parameters.- Buffer- -> -- | @offset@ is the byte offset into @buffer@ where parameters begin.- ("offset" ::: DeviceSize)- -> io ()-cmdDispatchIndirect commandBuffer buffer offset = liftIO $ do- let vkCmdDispatchIndirectPtr = pVkCmdDispatchIndirect (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdDispatchIndirectPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDispatchIndirect is null" Nothing Nothing- let vkCmdDispatchIndirect' = mkVkCmdDispatchIndirect vkCmdDispatchIndirectPtr- traceAroundEvent "vkCmdDispatchIndirect" (vkCmdDispatchIndirect' (commandBufferHandle (commandBuffer)) (buffer) (offset))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdCopyBuffer- :: FunPtr (Ptr CommandBuffer_T -> Buffer -> Buffer -> Word32 -> Ptr BufferCopy -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> Buffer -> Word32 -> Ptr BufferCopy -> IO ()---- | vkCmdCopyBuffer - Copy data between buffer regions------ = Description------ Each region in @pRegions@ is copied from the source buffer to the same--- region of the destination buffer. @srcBuffer@ and @dstBuffer@ /can/ be--- the same buffer or alias the same memory, but the resulting values are--- undefined if the copy regions overlap in memory.------ == Valid Usage------ - #VUID-vkCmdCopyBuffer-commandBuffer-01822# If @commandBuffer@ is an--- unprotected command buffer, then @srcBuffer@ /must/ not be a--- protected buffer------ - #VUID-vkCmdCopyBuffer-commandBuffer-01823# If @commandBuffer@ is an--- unprotected command buffer, then @dstBuffer@ /must/ not be a--- protected buffer------ - #VUID-vkCmdCopyBuffer-commandBuffer-01824# If @commandBuffer@ is a--- protected command buffer, then @dstBuffer@ /must/ not be an--- unprotected buffer------ - #VUID-vkCmdCopyBuffer-srcOffset-00113# The @srcOffset@ member of--- each element of @pRegions@ /must/ be less than the size of--- @srcBuffer@------ - #VUID-vkCmdCopyBuffer-dstOffset-00114# The @dstOffset@ member of--- each element of @pRegions@ /must/ be less than the size of--- @dstBuffer@------ - #VUID-vkCmdCopyBuffer-size-00115# The @size@ member of each element--- of @pRegions@ /must/ be less than or equal to the size of--- @srcBuffer@ minus @srcOffset@------ - #VUID-vkCmdCopyBuffer-size-00116# The @size@ member of each element--- of @pRegions@ /must/ be less than or equal to the size of--- @dstBuffer@ minus @dstOffset@------ - #VUID-vkCmdCopyBuffer-pRegions-00117# The union of the source--- regions, and the union of the destination regions, specified by the--- elements of @pRegions@, /must/ not overlap in memory------ - #VUID-vkCmdCopyBuffer-srcBuffer-00118# @srcBuffer@ /must/ have been--- created with--- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_SRC_BIT'--- usage flag------ - #VUID-vkCmdCopyBuffer-srcBuffer-00119# If @srcBuffer@ is non-sparse--- then it /must/ be bound completely and contiguously to a single--- 'Vulkan.Core10.Handles.DeviceMemory' object------ - #VUID-vkCmdCopyBuffer-dstBuffer-00120# @dstBuffer@ /must/ have been--- created with--- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'--- usage flag------ - #VUID-vkCmdCopyBuffer-dstBuffer-00121# If @dstBuffer@ is non-sparse--- then it /must/ be bound completely and contiguously to a single--- 'Vulkan.Core10.Handles.DeviceMemory' object------ == Valid Usage (Implicit)------ - #VUID-vkCmdCopyBuffer-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdCopyBuffer-srcBuffer-parameter# @srcBuffer@ /must/ be a--- valid 'Vulkan.Core10.Handles.Buffer' handle------ - #VUID-vkCmdCopyBuffer-dstBuffer-parameter# @dstBuffer@ /must/ be a--- valid 'Vulkan.Core10.Handles.Buffer' handle------ - #VUID-vkCmdCopyBuffer-pRegions-parameter# @pRegions@ /must/ be a--- valid pointer to an array of @regionCount@ valid 'BufferCopy'--- structures------ - #VUID-vkCmdCopyBuffer-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-vkCmdCopyBuffer-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support transfer, graphics, or compute--- operations------ - #VUID-vkCmdCopyBuffer-renderpass# This command /must/ only be called--- outside of a render pass instance------ - #VUID-vkCmdCopyBuffer-regionCount-arraylength# @regionCount@ /must/--- be greater than @0@------ - #VUID-vkCmdCopyBuffer-commonparent# Each of @commandBuffer@,--- @dstBuffer@, and @srcBuffer@ /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 | Transfer |--- | Secondary | | Graphics |--- | | | Compute |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.Buffer', 'BufferCopy',--- 'Vulkan.Core10.Handles.CommandBuffer'-cmdCopyBuffer :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @srcBuffer@ is the source buffer.- ("srcBuffer" ::: Buffer)- -> -- | @dstBuffer@ is the destination buffer.- ("dstBuffer" ::: Buffer)- -> -- | @pRegions@ is a pointer to an array of 'BufferCopy' structures- -- specifying the regions to copy.- ("regions" ::: Vector BufferCopy)- -> io ()-cmdCopyBuffer commandBuffer srcBuffer dstBuffer regions = liftIO . evalContT $ do- let vkCmdCopyBufferPtr = pVkCmdCopyBuffer (deviceCmds (commandBuffer :: CommandBuffer))- lift $ unless (vkCmdCopyBufferPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyBuffer is null" Nothing Nothing- let vkCmdCopyBuffer' = mkVkCmdCopyBuffer vkCmdCopyBufferPtr- pPRegions <- ContT $ allocaBytes @BufferCopy ((Data.Vector.length (regions)) * 24)- lift $ Data.Vector.imapM_ (\i e -> poke (pPRegions `plusPtr` (24 * (i)) :: Ptr BufferCopy) (e)) (regions)- lift $ traceAroundEvent "vkCmdCopyBuffer" (vkCmdCopyBuffer' (commandBufferHandle (commandBuffer)) (srcBuffer) (dstBuffer) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdCopyImage- :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageCopy -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageCopy -> IO ()---- | vkCmdCopyImage - Copy data between images------ = Description------ Each region in @pRegions@ is copied from the source image to the same--- region of the destination image. @srcImage@ and @dstImage@ /can/ be the--- same image or alias the same memory.------ The formats of @srcImage@ and @dstImage@ /must/ be compatible. Formats--- are compatible if they share the same class, as shown in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatibility Compatible Formats>--- table. Depth\/stencil formats /must/ match exactly.------ If either @srcImage@ or @dstImage@ has a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,--- regions of each plane to be copied /must/ be specified separately using--- the @srcSubresource@ and @dstSubresource@ members of the 'ImageCopy'--- structure. In this case, the @aspectMask@ of the @srcSubresource@ or--- @dstSubresource@ that refers to the multi-planar image /must/ be--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT', or--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'. For--- the purposes of 'cmdCopyImage', each plane of a multi-planar image is--- treated as having the format listed in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>--- for the plane identified by the @aspectMask@ of the corresponding--- subresource. This applies both to 'Vulkan.Core10.Enums.Format.Format'--- and to coordinates used in the copy, which correspond to texels in the--- /plane/ rather than how these texels map to coordinates in the image as--- a whole.------ Note------ For example, the--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' plane--- of a 'Vulkan.Core10.Enums.Format.FORMAT_G8_B8R8_2PLANE_420_UNORM' image--- is compatible with an image of format--- 'Vulkan.Core10.Enums.Format.FORMAT_R8G8_UNORM' and (less usefully) with--- the 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'--- plane of an image of format--- 'Vulkan.Core10.Enums.Format.FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16',--- as each texel is 2 bytes in size.------ 'cmdCopyImage' allows copying between /size-compatible/ compressed and--- uncompressed internal formats. Formats are size-compatible if the texel--- block size of the uncompressed format is equal to the texel block size--- of the compressed format. Such a copy does not perform on-the-fly--- compression or decompression. When copying from an uncompressed format--- to a compressed format, each texel of uncompressed data of the source--- image is copied as a raw value to the corresponding compressed texel--- block of the destination image. When copying from a compressed format to--- an uncompressed format, each compressed texel block of the source image--- is copied as a raw value to the corresponding texel of uncompressed data--- in the destination image. Thus, for example, it is legal to copy between--- a 128-bit uncompressed format and a compressed format which has a--- 128-bit sized compressed texel block representing 4×4 texels (using 8--- bits per texel), or between a 64-bit uncompressed format and a--- compressed format which has a 64-bit sized compressed texel block--- representing 4×4 texels (using 4 bits per texel).------ When copying between compressed and uncompressed formats the @extent@--- members represent the texel dimensions of the source image and not the--- destination. When copying from a compressed image to an uncompressed--- image the image texel dimensions written to the uncompressed image will--- be source extent divided by the compressed texel block dimensions. When--- copying from an uncompressed image to a compressed image the image texel--- dimensions written to the compressed image will be the source extent--- multiplied by the compressed texel block dimensions. In both cases the--- number of bytes read and the number of bytes written will be identical.------ Copying to or from block-compressed images is typically done in--- multiples of the compressed texel block size. For this reason the--- @extent@ /must/ be a multiple of the compressed texel block dimension.--- There is one exception to this rule which is /required/ to handle--- compressed images created with dimensions that are not a multiple of the--- compressed texel block dimensions: if the @srcImage@ is compressed,--- then:------ - If @extent.width@ is not a multiple of the compressed texel block--- width, then (@extent.width@ + @srcOffset.x@) /must/ equal the image--- subresource width.------ - If @extent.height@ is not a multiple of the compressed texel block--- height, then (@extent.height@ + @srcOffset.y@) /must/ equal the--- image subresource height.------ - If @extent.depth@ is not a multiple of the compressed texel block--- depth, then (@extent.depth@ + @srcOffset.z@) /must/ equal the image--- subresource depth.------ Similarly, if the @dstImage@ is compressed, then:------ - If @extent.width@ is not a multiple of the compressed texel block--- width, then (@extent.width@ + @dstOffset.x@) /must/ equal the image--- subresource width.------ - If @extent.height@ is not a multiple of the compressed texel block--- height, then (@extent.height@ + @dstOffset.y@) /must/ equal the--- image subresource height.------ - If @extent.depth@ is not a multiple of the compressed texel block--- depth, then (@extent.depth@ + @dstOffset.z@) /must/ equal the image--- subresource depth.------ This allows the last compressed texel block of the image in each--- non-multiple dimension to be included as a source or destination of the--- copy.------ “@_422@” image formats that are not--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>--- are treated as having a 2×1 compressed texel block for the purposes of--- these rules.------ 'cmdCopyImage' /can/ be used to copy image data between multisample--- images, but both images /must/ have the same number of samples.------ == Valid Usage------ - #VUID-vkCmdCopyImage-commandBuffer-01825# If @commandBuffer@ is an--- unprotected command buffer, then @srcImage@ /must/ not be a--- protected image------ - #VUID-vkCmdCopyImage-commandBuffer-01826# If @commandBuffer@ is an--- unprotected command buffer, then @dstImage@ /must/ not be a--- protected image------ - #VUID-vkCmdCopyImage-commandBuffer-01827# If @commandBuffer@ is a--- protected command buffer, then @dstImage@ /must/ not be an--- unprotected image------ - #VUID-vkCmdCopyImage-pRegions-00124# The union of all source--- regions, and the union of all destination regions, specified by the--- elements of @pRegions@, /must/ not overlap in memory------ - #VUID-vkCmdCopyImage-srcImage-01995# The--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>--- of @srcImage@ /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_SRC_BIT'------ - #VUID-vkCmdCopyImage-srcImage-00126# @srcImage@ /must/ have been--- created with--- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'--- usage flag------ - #VUID-vkCmdCopyImage-srcImage-01546# If @srcImage@ is non-sparse--- then the image or /disjoint/ plane to be copied /must/ be bound--- completely and contiguously to a single--- 'Vulkan.Core10.Handles.DeviceMemory' object------ - #VUID-vkCmdCopyImage-srcImageLayout-00128# @srcImageLayout@ /must/--- specify the layout of the image subresources of @srcImage@ specified--- in @pRegions@ at the time this command is executed on a--- 'Vulkan.Core10.Handles.Device'------ - #VUID-vkCmdCopyImage-srcImageLayout-01917# @srcImageLayout@ /must/--- be--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL',--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'------ - #VUID-vkCmdCopyImage-dstImage-01996# The--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>--- of @dstImage@ /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'------ - #VUID-vkCmdCopyImage-dstImage-00131# @dstImage@ /must/ have been--- created with--- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'--- usage flag------ - #VUID-vkCmdCopyImage-dstImage-01547# If @dstImage@ is non-sparse--- then the image or /disjoint/ plane that is the destination of the--- copy /must/ be bound completely and contiguously to a single--- 'Vulkan.Core10.Handles.DeviceMemory' object------ - #VUID-vkCmdCopyImage-dstImageLayout-00133# @dstImageLayout@ /must/--- specify the layout of the image subresources of @dstImage@ specified--- in @pRegions@ at the time this command is executed on a--- 'Vulkan.Core10.Handles.Device'------ - #VUID-vkCmdCopyImage-dstImageLayout-01395# @dstImageLayout@ /must/--- be--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'------ - #VUID-vkCmdCopyImage-srcImage-01548# If the--- 'Vulkan.Core10.Enums.Format.Format' of each of @srcImage@ and--- @dstImage@ is not a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,--- the 'Vulkan.Core10.Enums.Format.Format' of each of @srcImage@ and--- @dstImage@ /must/ be compatible, as defined--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-images-format-compatibility above>------ - #VUID-vkCmdCopyImage-None-01549# In a copy to or from a plane of a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image>,--- the 'Vulkan.Core10.Enums.Format.Format' of the image and plane--- /must/ be compatible according to--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes the description of compatible planes>--- for the plane being copied------ - #VUID-vkCmdCopyImage-srcImage-00136# The sample count of @srcImage@--- and @dstImage@ /must/ match------ - #VUID-vkCmdCopyImage-srcSubresource-01696# The--- @srcSubresource.mipLevel@ member of each element of @pRegions@--- /must/ be less than the @mipLevels@ specified in--- 'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created------ - #VUID-vkCmdCopyImage-dstSubresource-01697# The--- @dstSubresource.mipLevel@ member of each element of @pRegions@--- /must/ be less than the @mipLevels@ specified in--- 'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created------ - #VUID-vkCmdCopyImage-srcSubresource-01698# The--- @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of--- each element of @pRegions@ /must/ be less than or equal to the--- @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'--- when @srcImage@ was created------ - #VUID-vkCmdCopyImage-dstSubresource-01699# The--- @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of--- each element of @pRegions@ /must/ be less than or equal to the--- @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'--- when @dstImage@ was created------ - #VUID-vkCmdCopyImage-srcOffset-01783# The @srcOffset@ and @extent@--- members of each element of @pRegions@ /must/ respect the image--- transfer granularity requirements of @commandBuffer@’s command--- pool’s queue family, as described in--- 'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'------ - #VUID-vkCmdCopyImage-dstOffset-01784# The @dstOffset@ and @extent@--- members of each element of @pRegions@ /must/ respect the image--- transfer granularity requirements of @commandBuffer@’s command--- pool’s queue family, as described in--- 'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'------ - #VUID-vkCmdCopyImage-dstImage-02542# @dstImage@ and @srcImage@--- /must/ not have been created with @flags@ containing--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'------ - #VUID-vkCmdCopyImage-srcImage-01551# If neither @srcImage@ nor--- @dstImage@ has a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>--- then for each element of @pRegions@, @srcSubresource.aspectMask@ and--- @dstSubresource.aspectMask@ /must/ match------ - #VUID-vkCmdCopyImage-srcImage-01552# If @srcImage@ has a--- 'Vulkan.Core10.Enums.Format.Format' with--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion two planes>--- then for each element of @pRegions@, @srcSubresource.aspectMask@--- /must/ be--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'--- or--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'------ - #VUID-vkCmdCopyImage-srcImage-01553# If @srcImage@ has a--- 'Vulkan.Core10.Enums.Format.Format' with--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion three planes>--- then for each element of @pRegions@, @srcSubresource.aspectMask@--- /must/ be--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',--- or--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'------ - #VUID-vkCmdCopyImage-dstImage-01554# If @dstImage@ has a--- 'Vulkan.Core10.Enums.Format.Format' with--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion two planes>--- then for each element of @pRegions@, @dstSubresource.aspectMask@--- /must/ be--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'--- or--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'------ - #VUID-vkCmdCopyImage-dstImage-01555# If @dstImage@ has a--- 'Vulkan.Core10.Enums.Format.Format' with--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion three planes>--- then for each element of @pRegions@, @dstSubresource.aspectMask@--- /must/ be--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',--- or--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'------ - #VUID-vkCmdCopyImage-srcImage-01556# If @srcImage@ has a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>--- and the @dstImage@ does not have a multi-planar image format, then--- for each element of @pRegions@, @dstSubresource.aspectMask@ /must/--- be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'------ - #VUID-vkCmdCopyImage-dstImage-01557# If @dstImage@ has a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>--- and the @srcImage@ does not have a multi-planar image format, then--- for each element of @pRegions@, @srcSubresource.aspectMask@ /must/--- be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'------ - #VUID-vkCmdCopyImage-srcImage-04443# If @srcImage@ is of type--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element--- of @pRegions@, @srcSubresource.baseArrayLayer@ /must/ be @0@ and--- @srcSubresource.layerCount@ /must/ be @1@------ - #VUID-vkCmdCopyImage-dstImage-04444# If @dstImage@ is of type--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element--- of @pRegions@, @dstSubresource.baseArrayLayer@ /must/ be @0@ and--- @dstSubresource.layerCount@ /must/ be @1@------ - #VUID-vkCmdCopyImage-aspectMask-00142# For each element of--- @pRegions@, @srcSubresource.aspectMask@ /must/ specify aspects--- present in @srcImage@------ - #VUID-vkCmdCopyImage-aspectMask-00143# For each element of--- @pRegions@, @dstSubresource.aspectMask@ /must/ specify aspects--- present in @dstImage@------ - #VUID-vkCmdCopyImage-srcOffset-00144# For each element of--- @pRegions@, @srcOffset.x@ and (@extent.width@ + @srcOffset.x@)--- /must/ both be greater than or equal to @0@ and less than or equal--- to the width of the specified @srcSubresource@ of @srcImage@------ - #VUID-vkCmdCopyImage-srcOffset-00145# For each element of--- @pRegions@, @srcOffset.y@ and (@extent.height@ + @srcOffset.y@)--- /must/ both be greater than or equal to @0@ and less than or equal--- to the height of the specified @srcSubresource@ of @srcImage@------ - #VUID-vkCmdCopyImage-srcImage-00146# If @srcImage@ is of type--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element--- of @pRegions@, @srcOffset.y@ /must/ be @0@ and @extent.height@--- /must/ be @1@------ - #VUID-vkCmdCopyImage-srcOffset-00147# For each element of--- @pRegions@, @srcOffset.z@ and (@extent.depth@ + @srcOffset.z@)--- /must/ both be greater than or equal to @0@ and less than or equal--- to the depth of the specified @srcSubresource@ of @srcImage@------ - #VUID-vkCmdCopyImage-srcImage-01785# If @srcImage@ is of type--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element--- of @pRegions@, @srcOffset.z@ /must/ be @0@ and @extent.depth@ /must/--- be @1@------ - #VUID-vkCmdCopyImage-dstImage-01786# If @dstImage@ is of type--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element--- of @pRegions@, @dstOffset.z@ /must/ be @0@ and @extent.depth@ /must/--- be @1@------ - #VUID-vkCmdCopyImage-srcImage-01787# If @srcImage@ is of type--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element--- of @pRegions@, @srcOffset.z@ /must/ be @0@------ - #VUID-vkCmdCopyImage-dstImage-01788# If @dstImage@ is of type--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element--- of @pRegions@, @dstOffset.z@ /must/ be @0@------ - #VUID-vkCmdCopyImage-srcImage-01790# If @srcImage@ and @dstImage@--- are both of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then--- for each element of @pRegions@, @extent.depth@ /must/ be @1@------ - #VUID-vkCmdCopyImage-srcImage-01791# If @srcImage@ is of type--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @dstImage@ is of--- type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each--- element of @pRegions@, @extent.depth@ /must/ equal--- @srcSubresource.layerCount@------ - #VUID-vkCmdCopyImage-dstImage-01792# If @dstImage@ is of type--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @srcImage@ is of--- type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each--- element of @pRegions@, @extent.depth@ /must/ equal--- @dstSubresource.layerCount@------ - #VUID-vkCmdCopyImage-dstOffset-00150# For each element of--- @pRegions@, @dstOffset.x@ and (@extent.width@ + @dstOffset.x@)--- /must/ both be greater than or equal to @0@ and less than or equal--- to the width of the specified @dstSubresource@ of @dstImage@------ - #VUID-vkCmdCopyImage-dstOffset-00151# For each element of--- @pRegions@, @dstOffset.y@ and (@extent.height@ + @dstOffset.y@)--- /must/ both be greater than or equal to @0@ and less than or equal--- to the height of the specified @dstSubresource@ of @dstImage@------ - #VUID-vkCmdCopyImage-dstImage-00152# If @dstImage@ is of type--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element--- of @pRegions@, @dstOffset.y@ /must/ be @0@ and @extent.height@--- /must/ be @1@------ - #VUID-vkCmdCopyImage-dstOffset-00153# For each element of--- @pRegions@, @dstOffset.z@ and (@extent.depth@ + @dstOffset.z@)--- /must/ both be greater than or equal to @0@ and less than or equal--- to the depth of the specified @dstSubresource@ of @dstImage@------ - #VUID-vkCmdCopyImage-srcImage-01727# If @srcImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- then for each element of @pRegions@, all members of @srcOffset@--- /must/ be a multiple of the corresponding dimensions of the--- compressed texel block------ - #VUID-vkCmdCopyImage-srcImage-01728# If @srcImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- then for each element of @pRegions@, @extent.width@ /must/ be a--- multiple of the compressed texel block width or (@extent.width@ +--- @srcOffset.x@) /must/ equal the width of the specified--- @srcSubresource@ of @srcImage@------ - #VUID-vkCmdCopyImage-srcImage-01729# If @srcImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- then for each element of @pRegions@, @extent.height@ /must/ be a--- multiple of the compressed texel block height or (@extent.height@ +--- @srcOffset.y@) /must/ equal the height of the specified--- @srcSubresource@ of @srcImage@------ - #VUID-vkCmdCopyImage-srcImage-01730# If @srcImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- then for each element of @pRegions@, @extent.depth@ /must/ be a--- multiple of the compressed texel block depth or (@extent.depth@ +--- @srcOffset.z@) /must/ equal the depth of the specified--- @srcSubresource@ of @srcImage@------ - #VUID-vkCmdCopyImage-dstImage-01731# If @dstImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- then for each element of @pRegions@, all members of @dstOffset@--- /must/ be a multiple of the corresponding dimensions of the--- compressed texel block------ - #VUID-vkCmdCopyImage-dstImage-01732# If @dstImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- then for each element of @pRegions@, @extent.width@ /must/ be a--- multiple of the compressed texel block width or (@extent.width@ +--- @dstOffset.x@) /must/ equal the width of the specified--- @dstSubresource@ of @dstImage@------ - #VUID-vkCmdCopyImage-dstImage-01733# If @dstImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- then for each element of @pRegions@, @extent.height@ /must/ be a--- multiple of the compressed texel block height or (@extent.height@ +--- @dstOffset.y@) /must/ equal the height of the specified--- @dstSubresource@ of @dstImage@------ - #VUID-vkCmdCopyImage-dstImage-01734# If @dstImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- then for each element of @pRegions@, @extent.depth@ /must/ be a--- multiple of the compressed texel block depth or (@extent.depth@ +--- @dstOffset.z@) /must/ equal the depth of the specified--- @dstSubresource@ of @dstImage@------ == Valid Usage (Implicit)------ - #VUID-vkCmdCopyImage-commandBuffer-parameter# @commandBuffer@ /must/--- be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdCopyImage-srcImage-parameter# @srcImage@ /must/ be a--- valid 'Vulkan.Core10.Handles.Image' handle------ - #VUID-vkCmdCopyImage-srcImageLayout-parameter# @srcImageLayout@--- /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'--- value------ - #VUID-vkCmdCopyImage-dstImage-parameter# @dstImage@ /must/ be a--- valid 'Vulkan.Core10.Handles.Image' handle------ - #VUID-vkCmdCopyImage-dstImageLayout-parameter# @dstImageLayout@--- /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'--- value------ - #VUID-vkCmdCopyImage-pRegions-parameter# @pRegions@ /must/ be a--- valid pointer to an array of @regionCount@ valid 'ImageCopy'--- structures------ - #VUID-vkCmdCopyImage-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-vkCmdCopyImage-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support transfer, graphics, or compute--- operations------ - #VUID-vkCmdCopyImage-renderpass# This command /must/ only be called--- outside of a render pass instance------ - #VUID-vkCmdCopyImage-regionCount-arraylength# @regionCount@ /must/--- be greater than @0@------ - #VUID-vkCmdCopyImage-commonparent# Each of @commandBuffer@,--- @dstImage@, and @srcImage@ /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 | Transfer |--- | Secondary | | Graphics |--- | | | Compute |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',--- 'ImageCopy', 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'-cmdCopyImage :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @srcImage@ is the source image.- ("srcImage" ::: Image)- -> -- | @srcImageLayout@ is the current layout of the source image subresource.- ("srcImageLayout" ::: ImageLayout)- -> -- | @dstImage@ is the destination image.- ("dstImage" ::: Image)- -> -- | @dstImageLayout@ is the current layout of the destination image- -- subresource.- ("dstImageLayout" ::: ImageLayout)- -> -- | @pRegions@ is a pointer to an array of 'ImageCopy' structures specifying- -- the regions to copy.- ("regions" ::: Vector ImageCopy)- -> io ()-cmdCopyImage commandBuffer srcImage srcImageLayout dstImage dstImageLayout regions = liftIO . evalContT $ do- let vkCmdCopyImagePtr = pVkCmdCopyImage (deviceCmds (commandBuffer :: CommandBuffer))- lift $ unless (vkCmdCopyImagePtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyImage is null" Nothing Nothing- let vkCmdCopyImage' = mkVkCmdCopyImage vkCmdCopyImagePtr- pPRegions <- ContT $ allocaBytes @ImageCopy ((Data.Vector.length (regions)) * 68)- lift $ Data.Vector.imapM_ (\i e -> poke (pPRegions `plusPtr` (68 * (i)) :: Ptr ImageCopy) (e)) (regions)- lift $ traceAroundEvent "vkCmdCopyImage" (vkCmdCopyImage' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdBlitImage- :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageBlit -> Filter -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageBlit -> Filter -> IO ()---- | vkCmdBlitImage - Copy regions of an image, potentially performing format--- conversion,------ = Description------ 'cmdBlitImage' /must/ not be used for multisampled source or destination--- images. Use 'cmdResolveImage' for this purpose.------ As the sizes of the source and destination extents /can/ differ in any--- dimension, texels in the source extent are scaled and filtered to the--- destination extent. Scaling occurs via the following operations:------ - For each destination texel, the integer coordinate of that texel is--- converted to an unnormalized texture coordinate, using the effective--- inverse of the equations described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-unnormalized-to-integer unnormalized to integer conversion>:------ - ubase = i + ½------ - vbase = j + ½------ - wbase = k + ½------ - These base coordinates are then offset by the first destination--- offset:------ - uoffset = ubase - xdst0------ - voffset = vbase - ydst0------ - woffset = wbase - zdst0------ - aoffset = a - @baseArrayCount@dst------ - The scale is determined from the source and destination regions, and--- applied to the offset coordinates:------ - scaleu = (xsrc1 - xsrc0) \/ (xdst1 - xdst0)------ - scalev = (ysrc1 - ysrc0) \/ (ydst1 - ydst0)------ - scalew = (zsrc1 - zsrc0) \/ (zdst1 - zdst0)------ - uscaled = uoffset × scaleu------ - vscaled = voffset × scalev------ - wscaled = woffset × scalew------ - Finally the source offset is added to the scaled coordinates, to--- determine the final unnormalized coordinates used to sample from--- @srcImage@:------ - u = uscaled + xsrc0------ - v = vscaled + ysrc0------ - w = wscaled + zsrc0------ - q = @mipLevel@------ - a = aoffset + @baseArrayCount@src------ These coordinates are used to sample from the source image, as described--- in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures Image Operations chapter>,--- with the filter mode equal to that of @filter@, a mipmap mode of--- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_NEAREST' and--- an address mode of--- 'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'.--- Implementations /must/ clamp at the edge of the source image, and /may/--- additionally clamp to the edge of the source region.------ Note------ Due to allowable rounding errors in the generation of the source texture--- coordinates, it is not always possible to guarantee exactly which source--- texels will be sampled for a given blit. As rounding errors are--- implementation-dependent, the exact results of a blitting operation are--- also implementation-dependent.------ Blits are done layer by layer starting with the @baseArrayLayer@ member--- of @srcSubresource@ for the source and @dstSubresource@ for the--- destination. @layerCount@ layers are blitted to the destination image.------ When blitting 3D textures, slices in the destination region bounded by--- @dstOffsets@[0].z and @dstOffsets@[1].z are sampled from slices in the--- source region bounded by @srcOffsets@[0].z and @srcOffsets@[1].z. If the--- @filter@ parameter is 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' then--- the value sampled from the source image is taken by doing linear--- filtering using the interpolated __z__ coordinate represented by __w__--- in the previous equations. If the @filter@ parameter is--- 'Vulkan.Core10.Enums.Filter.FILTER_NEAREST' then the value sampled from--- the source image is taken from the single nearest slice, with an--- implementation-dependent arithmetic rounding mode.------ The following filtering and conversion rules apply:------ - Integer formats /can/ only be converted to other integer formats--- with the same signedness.------ - No format conversion is supported between depth\/stencil images. The--- formats /must/ match.------ - Format conversions on unorm, snorm, unscaled and packed float--- formats of the copied aspect of the image are performed by first--- converting the pixels to float values.------ - For sRGB source formats, nonlinear RGB values are converted to--- linear representation prior to filtering.------ - After filtering, the float values are first clamped and then cast to--- the destination image format. In case of sRGB destination format,--- linear RGB values are converted to nonlinear representation before--- writing the pixel to the image.------ Signed and unsigned integers are converted by first clamping to the--- representable range of the destination format, then casting the value.------ == Valid Usage------ - #VUID-vkCmdBlitImage-commandBuffer-01834# If @commandBuffer@ is an--- unprotected command buffer, then @srcImage@ /must/ not be a--- protected image------ - #VUID-vkCmdBlitImage-commandBuffer-01835# If @commandBuffer@ is an--- unprotected command buffer, then @dstImage@ /must/ not be a--- protected image------ - #VUID-vkCmdBlitImage-commandBuffer-01836# If @commandBuffer@ is a--- protected command buffer, then @dstImage@ /must/ not be an--- unprotected image------ - #VUID-vkCmdBlitImage-pRegions-00215# The source region specified by--- each element of @pRegions@ /must/ be a region that is contained--- within @srcImage@------ - #VUID-vkCmdBlitImage-pRegions-00216# The destination region--- specified by each element of @pRegions@ /must/ be a region that is--- contained within @dstImage@------ - #VUID-vkCmdBlitImage-pRegions-00217# The union of all destination--- regions, specified by the elements of @pRegions@, /must/ not overlap--- in memory with any texel that /may/ be sampled during the blit--- operation------ - #VUID-vkCmdBlitImage-srcImage-01999# The--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>--- of @srcImage@ /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'------ - #VUID-vkCmdBlitImage-srcImage-06421# @srcImage@ /must/ not use a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion format that requires a sampler Y’CBCR conversion>------ - #VUID-vkCmdBlitImage-srcImage-00219# @srcImage@ /must/ have been--- created with--- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'--- usage flag------ - #VUID-vkCmdBlitImage-srcImage-00220# If @srcImage@ is non-sparse--- then it /must/ be bound completely and contiguously to a single--- 'Vulkan.Core10.Handles.DeviceMemory' object------ - #VUID-vkCmdBlitImage-srcImageLayout-00221# @srcImageLayout@ /must/--- specify the layout of the image subresources of @srcImage@ specified--- in @pRegions@ at the time this command is executed on a--- 'Vulkan.Core10.Handles.Device'------ - #VUID-vkCmdBlitImage-srcImageLayout-01398# @srcImageLayout@ /must/--- be--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'--- or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'------ - #VUID-vkCmdBlitImage-dstImage-02000# The--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>--- of @dstImage@ /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_DST_BIT'------ - #VUID-vkCmdBlitImage-dstImage-06422# @dstImage@ /must/ not use a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion format that requires a sampler Y’CBCR conversion>------ - #VUID-vkCmdBlitImage-dstImage-00224# @dstImage@ /must/ have been--- created with--- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'--- usage flag------ - #VUID-vkCmdBlitImage-dstImage-00225# If @dstImage@ is non-sparse--- then it /must/ be bound completely and contiguously to a single--- 'Vulkan.Core10.Handles.DeviceMemory' object------ - #VUID-vkCmdBlitImage-dstImageLayout-00226# @dstImageLayout@ /must/--- specify the layout of the image subresources of @dstImage@ specified--- in @pRegions@ at the time this command is executed on a--- 'Vulkan.Core10.Handles.Device'------ - #VUID-vkCmdBlitImage-dstImageLayout-01399# @dstImageLayout@ /must/--- be--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'--- or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'------ - #VUID-vkCmdBlitImage-srcImage-00229# If either of @srcImage@ or--- @dstImage@ was created with a signed integer--- 'Vulkan.Core10.Enums.Format.Format', the other /must/ also have been--- created with a signed integer 'Vulkan.Core10.Enums.Format.Format'------ - #VUID-vkCmdBlitImage-srcImage-00230# If either of @srcImage@ or--- @dstImage@ was created with an unsigned integer--- 'Vulkan.Core10.Enums.Format.Format', the other /must/ also have been--- created with an unsigned integer 'Vulkan.Core10.Enums.Format.Format'------ - #VUID-vkCmdBlitImage-srcImage-00231# If either of @srcImage@ or--- @dstImage@ was created with a depth\/stencil format, the other--- /must/ have exactly the same format------ - #VUID-vkCmdBlitImage-srcImage-00232# If @srcImage@ was created with--- a depth\/stencil format, @filter@ /must/ be--- 'Vulkan.Core10.Enums.Filter.FILTER_NEAREST'------ - #VUID-vkCmdBlitImage-srcImage-00233# @srcImage@ /must/ have been--- created with a @samples@ value of--- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'------ - #VUID-vkCmdBlitImage-dstImage-00234# @dstImage@ /must/ have been--- created with a @samples@ value of--- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'------ - #VUID-vkCmdBlitImage-filter-02001# If @filter@ is--- 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR', then the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>--- of @srcImage@ /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ - #VUID-vkCmdBlitImage-filter-02002# If @filter@ is--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT', then the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>--- of @srcImage@ /must/ contain--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'------ - #VUID-vkCmdBlitImage-filter-00237# If @filter@ is--- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT', @srcImage@--- /must/ be of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'------ - #VUID-vkCmdBlitImage-srcSubresource-01705# The--- @srcSubresource.mipLevel@ member of each element of @pRegions@--- /must/ be less than the @mipLevels@ specified in--- 'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created------ - #VUID-vkCmdBlitImage-dstSubresource-01706# The--- @dstSubresource.mipLevel@ member of each element of @pRegions@--- /must/ be less than the @mipLevels@ specified in--- 'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created------ - #VUID-vkCmdBlitImage-srcSubresource-01707# The--- @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of--- each element of @pRegions@ /must/ be less than or equal to the--- @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'--- when @srcImage@ was created------ - #VUID-vkCmdBlitImage-dstSubresource-01708# The--- @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of--- each element of @pRegions@ /must/ be less than or equal to the--- @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'--- when @dstImage@ was created------ - #VUID-vkCmdBlitImage-dstImage-02545# @dstImage@ and @srcImage@--- /must/ not have been created with @flags@ containing--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'------ - #VUID-vkCmdBlitImage-srcImage-00240# If either @srcImage@ or--- @dstImage@ is of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D',--- then for each element of @pRegions@, @srcSubresource.baseArrayLayer@--- and @dstSubresource.baseArrayLayer@ /must/ each be @0@, and--- @srcSubresource.layerCount@ and @dstSubresource.layerCount@ /must/--- each be @1@------ - #VUID-vkCmdBlitImage-aspectMask-00241# For each element of--- @pRegions@, @srcSubresource.aspectMask@ /must/ specify aspects--- present in @srcImage@------ - #VUID-vkCmdBlitImage-aspectMask-00242# For each element of--- @pRegions@, @dstSubresource.aspectMask@ /must/ specify aspects--- present in @dstImage@------ - #VUID-vkCmdBlitImage-srcOffset-00243# For each element of--- @pRegions@, @srcOffsets@[0].x and @srcOffsets@[1].x /must/ both be--- greater than or equal to @0@ and less than or equal to the width of--- the specified @srcSubresource@ of @srcImage@------ - #VUID-vkCmdBlitImage-srcOffset-00244# For each element of--- @pRegions@, @srcOffsets@[0].y and @srcOffsets@[1].y /must/ both be--- greater than or equal to @0@ and less than or equal to the height of--- the specified @srcSubresource@ of @srcImage@------ - #VUID-vkCmdBlitImage-srcImage-00245# If @srcImage@ is of type--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element--- of @pRegions@, @srcOffsets@[0].y /must/ be @0@ and @srcOffsets@[1].y--- /must/ be @1@------ - #VUID-vkCmdBlitImage-srcOffset-00246# For each element of--- @pRegions@, @srcOffsets@[0].z and @srcOffsets@[1].z /must/ both be--- greater than or equal to @0@ and less than or equal to the depth of--- the specified @srcSubresource@ of @srcImage@------ - #VUID-vkCmdBlitImage-srcImage-00247# If @srcImage@ is of type--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element--- of @pRegions@, @srcOffsets@[0].z /must/ be @0@ and @srcOffsets@[1].z--- /must/ be @1@------ - #VUID-vkCmdBlitImage-dstOffset-00248# For each element of--- @pRegions@, @dstOffsets@[0].x and @dstOffsets@[1].x /must/ both be--- greater than or equal to @0@ and less than or equal to the width of--- the specified @dstSubresource@ of @dstImage@------ - #VUID-vkCmdBlitImage-dstOffset-00249# For each element of--- @pRegions@, @dstOffsets@[0].y and @dstOffsets@[1].y /must/ both be--- greater than or equal to @0@ and less than or equal to the height of--- the specified @dstSubresource@ of @dstImage@------ - #VUID-vkCmdBlitImage-dstImage-00250# If @dstImage@ is of type--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element--- of @pRegions@, @dstOffsets@[0].y /must/ be @0@ and @dstOffsets@[1].y--- /must/ be @1@------ - #VUID-vkCmdBlitImage-dstOffset-00251# For each element of--- @pRegions@, @dstOffsets@[0].z and @dstOffsets@[1].z /must/ both be--- greater than or equal to @0@ and less than or equal to the depth of--- the specified @dstSubresource@ of @dstImage@------ - #VUID-vkCmdBlitImage-dstImage-00252# If @dstImage@ is of type--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element--- of @pRegions@, @dstOffsets@[0].z /must/ be @0@ and @dstOffsets@[1].z--- /must/ be @1@------ == Valid Usage (Implicit)------ - #VUID-vkCmdBlitImage-commandBuffer-parameter# @commandBuffer@ /must/--- be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdBlitImage-srcImage-parameter# @srcImage@ /must/ be a--- valid 'Vulkan.Core10.Handles.Image' handle------ - #VUID-vkCmdBlitImage-srcImageLayout-parameter# @srcImageLayout@--- /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'--- value------ - #VUID-vkCmdBlitImage-dstImage-parameter# @dstImage@ /must/ be a--- valid 'Vulkan.Core10.Handles.Image' handle------ - #VUID-vkCmdBlitImage-dstImageLayout-parameter# @dstImageLayout@--- /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'--- value------ - #VUID-vkCmdBlitImage-pRegions-parameter# @pRegions@ /must/ be a--- valid pointer to an array of @regionCount@ valid 'ImageBlit'--- structures------ - #VUID-vkCmdBlitImage-filter-parameter# @filter@ /must/ be a valid--- 'Vulkan.Core10.Enums.Filter.Filter' value------ - #VUID-vkCmdBlitImage-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-vkCmdBlitImage-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics operations------ - #VUID-vkCmdBlitImage-renderpass# This command /must/ only be called--- outside of a render pass instance------ - #VUID-vkCmdBlitImage-regionCount-arraylength# @regionCount@ /must/--- be greater than @0@------ - #VUID-vkCmdBlitImage-commonparent# Each of @commandBuffer@,--- @dstImage@, and @srcImage@ /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 | | |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Enums.Filter.Filter', 'Vulkan.Core10.Handles.Image',--- 'ImageBlit', 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'-cmdBlitImage :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @srcImage@ is the source image.- ("srcImage" ::: Image)- -> -- | @srcImageLayout@ is the layout of the source image subresources for the- -- blit.- ("srcImageLayout" ::: ImageLayout)- -> -- | @dstImage@ is the destination image.- ("dstImage" ::: Image)- -> -- | @dstImageLayout@ is the layout of the destination image subresources for- -- the blit.- ("dstImageLayout" ::: ImageLayout)- -> -- | @pRegions@ is a pointer to an array of 'ImageBlit' structures specifying- -- the regions to blit.- ("regions" ::: Vector ImageBlit)- -> -- | @filter@ is a 'Vulkan.Core10.Enums.Filter.Filter' specifying the filter- -- to apply if the blits require scaling.- Filter- -> io ()-cmdBlitImage commandBuffer srcImage srcImageLayout dstImage dstImageLayout regions filter' = liftIO . evalContT $ do- let vkCmdBlitImagePtr = pVkCmdBlitImage (deviceCmds (commandBuffer :: CommandBuffer))- lift $ unless (vkCmdBlitImagePtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBlitImage is null" Nothing Nothing- let vkCmdBlitImage' = mkVkCmdBlitImage vkCmdBlitImagePtr- pPRegions <- ContT $ allocaBytes @ImageBlit ((Data.Vector.length (regions)) * 80)- lift $ Data.Vector.imapM_ (\i e -> poke (pPRegions `plusPtr` (80 * (i)) :: Ptr ImageBlit) (e)) (regions)- lift $ traceAroundEvent "vkCmdBlitImage" (vkCmdBlitImage' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions) (filter'))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdCopyBufferToImage- :: FunPtr (Ptr CommandBuffer_T -> Buffer -> Image -> ImageLayout -> Word32 -> Ptr BufferImageCopy -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> Image -> ImageLayout -> Word32 -> Ptr BufferImageCopy -> IO ()---- | vkCmdCopyBufferToImage - Copy data from a buffer into an image------ = Description------ Each region in @pRegions@ is copied from the specified region of the--- source buffer to the specified region of the destination image.------ If @dstImage@ has a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,--- regions of each plane to be a target of a copy /must/ be specified--- separately using the @pRegions@ member of the 'BufferImageCopy'--- structure. In this case, the @aspectMask@ of @imageSubresource@ /must/--- be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT', or--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'. For--- the purposes of 'cmdCopyBufferToImage', each plane of a multi-planar--- image is treated as having the format listed in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>--- for the plane identified by the @aspectMask@ of the corresponding--- subresource. This applies both to 'Vulkan.Core10.Enums.Format.Format'--- and to coordinates used in the copy, which correspond to texels in the--- /plane/ rather than how these texels map to coordinates in the image as--- a whole.------ == Valid Usage------ - #VUID-vkCmdCopyBufferToImage-commandBuffer-01828# If @commandBuffer@--- is an unprotected command buffer, then @srcBuffer@ /must/ not be a--- protected buffer------ - #VUID-vkCmdCopyBufferToImage-commandBuffer-01829# If @commandBuffer@--- is an unprotected command buffer, then @dstImage@ /must/ not be a--- protected image------ - #VUID-vkCmdCopyBufferToImage-commandBuffer-01830# If @commandBuffer@--- is a protected command buffer, then @dstImage@ /must/ not be an--- unprotected image------ - #VUID-vkCmdCopyBufferToImage-pRegions-06217# The image region--- specified by each element of @pRegions@ /must/ be contained within--- the specified @imageSubresource@ of @dstImage@------ - #VUID-vkCmdCopyBufferToImage-pRegions-00171# @srcBuffer@ /must/ be--- large enough to contain all buffer locations that are accessed--- according to--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-addressing Buffer and Image Addressing>,--- for each element of @pRegions@------ - #VUID-vkCmdCopyBufferToImage-pRegions-00173# The union of all source--- regions, and the union of all destination regions, specified by the--- elements of @pRegions@, /must/ not overlap in memory------ - #VUID-vkCmdCopyBufferToImage-srcBuffer-00174# @srcBuffer@ /must/--- have been created with--- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_SRC_BIT'--- usage flag------ - #VUID-vkCmdCopyBufferToImage-dstImage-01997# The--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>--- of @dstImage@ /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'------ - #VUID-vkCmdCopyBufferToImage-srcBuffer-00176# If @srcBuffer@ is--- non-sparse then it /must/ be bound completely and contiguously to a--- single 'Vulkan.Core10.Handles.DeviceMemory' object------ - #VUID-vkCmdCopyBufferToImage-dstImage-00177# @dstImage@ /must/ have--- been created with--- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'--- usage flag------ - #VUID-vkCmdCopyBufferToImage-dstImage-00178# If @dstImage@ is--- non-sparse then it /must/ be bound completely and contiguously to a--- single 'Vulkan.Core10.Handles.DeviceMemory' object------ - #VUID-vkCmdCopyBufferToImage-dstImage-00179# @dstImage@ /must/ have--- a sample count equal to--- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'------ - #VUID-vkCmdCopyBufferToImage-dstImageLayout-00180# @dstImageLayout@--- /must/ specify the layout of the image subresources of @dstImage@--- specified in @pRegions@ at the time this command is executed on a--- 'Vulkan.Core10.Handles.Device'------ - #VUID-vkCmdCopyBufferToImage-dstImageLayout-01396# @dstImageLayout@--- /must/ be--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'------ - #VUID-vkCmdCopyBufferToImage-imageSubresource-01701# The--- @imageSubresource.mipLevel@ member of each element of @pRegions@--- /must/ be less than the @mipLevels@ specified in--- 'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created------ - #VUID-vkCmdCopyBufferToImage-imageSubresource-01702# The--- @imageSubresource.baseArrayLayer@ + @imageSubresource.layerCount@ of--- each element of @pRegions@ /must/ be less than or equal to the--- @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'--- when @dstImage@ was created------ - #VUID-vkCmdCopyBufferToImage-imageOffset-01793# The @imageOffset@--- and @imageExtent@ members of each element of @pRegions@ /must/--- respect the image transfer granularity requirements of--- @commandBuffer@’s command pool’s queue family, as described in--- 'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'------ - #VUID-vkCmdCopyBufferToImage-dstImage-02543# @dstImage@ /must/ not--- have been created with @flags@ containing--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'------ - #VUID-vkCmdCopyBufferToImage-commandBuffer-04477# If the queue--- family used to create the 'Vulkan.Core10.Handles.CommandPool' which--- @commandBuffer@ was allocated from does not support--- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT', for each--- element of @pRegions@, the @aspectMask@ member of @imageSubresource@--- /must/ not be--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'------ - #VUID-vkCmdCopyBufferToImage-pRegions-06218# For each element of--- @pRegions@, @imageOffset.x@ and (@imageExtent.width@ +--- @imageOffset.x@) /must/ both be greater than or equal to @0@ and--- less than or equal to the width of the specified @imageSubresource@--- of @dstImage@------ - #VUID-vkCmdCopyBufferToImage-pRegions-06219# For each element of--- @pRegions@, @imageOffset.y@ and (@imageExtent.height@ +--- @imageOffset.y@) /must/ both be greater than or equal to @0@ and--- less than or equal to the height of the specified @imageSubresource@--- of @dstImage@------ - #VUID-vkCmdCopyBufferToImage-bufferOffset-01558# If @dstImage@ does--- not have either a depth\/stencil or a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,--- then for each element of @pRegions@, @bufferOffset@ /must/ be a--- multiple of the format’s texel block size------ - #VUID-vkCmdCopyBufferToImage-bufferOffset-01559# If @dstImage@ has a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,--- then for each element of @pRegions@, @bufferOffset@ /must/ be a--- multiple of the element size of the compatible format for the format--- and the @aspectMask@ of the @imageSubresource@ as defined in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes ???>------ - #VUID-vkCmdCopyBufferToImage-srcImage-00199# If @dstImage@ is of--- type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each--- element of @pRegions@, @imageOffset.y@ /must/ be @0@ and--- @imageExtent.height@ /must/ be @1@------ - #VUID-vkCmdCopyBufferToImage-imageOffset-00200# For each element of--- @pRegions@, @imageOffset.z@ and (@imageExtent.depth@ +--- @imageOffset.z@) /must/ both be greater than or equal to @0@ and--- less than or equal to the depth of the specified @imageSubresource@--- of @dstImage@------ - #VUID-vkCmdCopyBufferToImage-srcImage-00201# If @dstImage@ is of--- type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element--- of @pRegions@, @imageOffset.z@ /must/ be @0@ and @imageExtent.depth@--- /must/ be @1@------ - #VUID-vkCmdCopyBufferToImage-bufferRowLength-00203# If @dstImage@ is--- a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- for each element of @pRegions@, @bufferRowLength@ /must/ be a--- multiple of the compressed texel block width------ - #VUID-vkCmdCopyBufferToImage-bufferImageHeight-00204# If @dstImage@--- is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- for each element of @pRegions@, @bufferImageHeight@ /must/ be a--- multiple of the compressed texel block height------ - #VUID-vkCmdCopyBufferToImage-imageOffset-00205# If @dstImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- for each element of @pRegions@, all members of @imageOffset@ /must/--- be a multiple of the corresponding dimensions of the compressed--- texel block------ - #VUID-vkCmdCopyBufferToImage-bufferOffset-00206# If @dstImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- for each element of @pRegions@, @bufferOffset@ /must/ be a multiple--- of the compressed texel block size in bytes------ - #VUID-vkCmdCopyBufferToImage-imageExtent-00207# If @dstImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- for each element of @pRegions@, @imageExtent.width@ /must/ be a--- multiple of the compressed texel block width or (@imageExtent.width@--- + @imageOffset.x@) /must/ equal the width of the specified--- @imageSubresource@ of @dstImage@------ - #VUID-vkCmdCopyBufferToImage-imageExtent-00208# If @dstImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- for each element of @pRegions@, @imageExtent.height@ /must/ be a--- multiple of the compressed texel block height or--- (@imageExtent.height@ + @imageOffset.y@) /must/ equal the height of--- the specified @imageSubresource@ of @dstImage@------ - #VUID-vkCmdCopyBufferToImage-imageExtent-00209# If @dstImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- for each element of @pRegions@, @imageExtent.depth@ /must/ be a--- multiple of the compressed texel block depth or (@imageExtent.depth@--- + @imageOffset.z@) /must/ equal the depth of the specified--- @imageSubresource@ of @dstImage@------ - #VUID-vkCmdCopyBufferToImage-aspectMask-00211# For each element of--- @pRegions@, @imageSubresource.aspectMask@ /must/ specify aspects--- present in @dstImage@------ - #VUID-vkCmdCopyBufferToImage-aspectMask-01560# If @dstImage@ has a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,--- then for each element of @pRegions@, @imageSubresource.aspectMask@--- /must/ be--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',--- or--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'--- (with--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'--- valid only for image formats with three planes)------ - #VUID-vkCmdCopyBufferToImage-baseArrayLayer-00213# If @dstImage@ is--- of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', for each--- element of @pRegions@, @imageSubresource.baseArrayLayer@ /must/ be--- @0@ and @imageSubresource.layerCount@ /must/ be @1@------ - #VUID-vkCmdCopyBufferToImage-pRegions-04725# If @dstImage@ is not a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- for each element of @pRegions@, @bufferRowLength@ multiplied by the--- texel block size of @dstImage@ /must/ be less than or equal to 231-1------ - #VUID-vkCmdCopyBufferToImage-pRegions-04726# If @dstImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- for each element of @pRegions@, @bufferRowLength@ divided by the--- compressed texel block width and then multiplied by the texel block--- size of @dstImage@ /must/ be less than or equal to 231-1------ - #VUID-vkCmdCopyBufferToImage-commandBuffer-04052# If the queue--- family used to create the 'Vulkan.Core10.Handles.CommandPool' which--- @commandBuffer@ was allocated from does not support--- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or--- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the--- @bufferOffset@ member of any element of @pRegions@ /must/ be a--- multiple of @4@------ - #VUID-vkCmdCopyBufferToImage-srcImage-04053# If @dstImage@ has a--- depth\/stencil format, the @bufferOffset@ member of any element of--- @pRegions@ /must/ be a multiple of @4@------ == Valid Usage (Implicit)------ - #VUID-vkCmdCopyBufferToImage-commandBuffer-parameter#--- @commandBuffer@ /must/ be a valid--- 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdCopyBufferToImage-srcBuffer-parameter# @srcBuffer@ /must/--- be a valid 'Vulkan.Core10.Handles.Buffer' handle------ - #VUID-vkCmdCopyBufferToImage-dstImage-parameter# @dstImage@ /must/--- be a valid 'Vulkan.Core10.Handles.Image' handle------ - #VUID-vkCmdCopyBufferToImage-dstImageLayout-parameter#--- @dstImageLayout@ /must/ be a valid--- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value------ - #VUID-vkCmdCopyBufferToImage-pRegions-parameter# @pRegions@ /must/--- be a valid pointer to an array of @regionCount@ valid--- 'BufferImageCopy' structures------ - #VUID-vkCmdCopyBufferToImage-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-vkCmdCopyBufferToImage-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support transfer, graphics, or compute--- operations------ - #VUID-vkCmdCopyBufferToImage-renderpass# This command /must/ only be--- called outside of a render pass instance------ - #VUID-vkCmdCopyBufferToImage-regionCount-arraylength# @regionCount@--- /must/ be greater than @0@------ - #VUID-vkCmdCopyBufferToImage-commonparent# Each of @commandBuffer@,--- @dstImage@, and @srcBuffer@ /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 | Transfer |--- | Secondary | | Graphics |--- | | | Compute |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.Buffer', 'BufferImageCopy',--- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',--- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'-cmdCopyBufferToImage :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @srcBuffer@ is the source buffer.- ("srcBuffer" ::: Buffer)- -> -- | @dstImage@ is the destination image.- ("dstImage" ::: Image)- -> -- | @dstImageLayout@ is the layout of the destination image subresources for- -- the copy.- ("dstImageLayout" ::: ImageLayout)- -> -- | @pRegions@ is a pointer to an array of 'BufferImageCopy' structures- -- specifying the regions to copy.- ("regions" ::: Vector BufferImageCopy)- -> io ()-cmdCopyBufferToImage commandBuffer srcBuffer dstImage dstImageLayout regions = liftIO . evalContT $ do- let vkCmdCopyBufferToImagePtr = pVkCmdCopyBufferToImage (deviceCmds (commandBuffer :: CommandBuffer))- lift $ unless (vkCmdCopyBufferToImagePtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyBufferToImage is null" Nothing Nothing- let vkCmdCopyBufferToImage' = mkVkCmdCopyBufferToImage vkCmdCopyBufferToImagePtr- pPRegions <- ContT $ allocaBytes @BufferImageCopy ((Data.Vector.length (regions)) * 56)- lift $ Data.Vector.imapM_ (\i e -> poke (pPRegions `plusPtr` (56 * (i)) :: Ptr BufferImageCopy) (e)) (regions)- lift $ traceAroundEvent "vkCmdCopyBufferToImage" (vkCmdCopyBufferToImage' (commandBufferHandle (commandBuffer)) (srcBuffer) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdCopyImageToBuffer- :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Buffer -> Word32 -> Ptr BufferImageCopy -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Buffer -> Word32 -> Ptr BufferImageCopy -> IO ()---- | vkCmdCopyImageToBuffer - Copy image data into a buffer------ = Description------ Each region in @pRegions@ is copied from the specified region of the--- source image to the specified region of the destination buffer.------ If @srcImage@ has a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,--- regions of each plane to be a source of a copy /must/ be specified--- separately using the @pRegions@ member of the 'BufferImageCopy'--- structure. In this case, the @aspectMask@ of @imageSubresource@ /must/--- be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT', or--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'. For--- the purposes of 'cmdCopyBufferToImage', each plane of a multi-planar--- image is treated as having the format listed in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>--- for the plane identified by the @aspectMask@ of the corresponding--- subresource. This applies both to 'Vulkan.Core10.Enums.Format.Format'--- and to coordinates used in the copy, which correspond to texels in the--- /plane/ rather than how these texels map to coordinates in the image as--- a whole.------ == Valid Usage------ - #VUID-vkCmdCopyImageToBuffer-commandBuffer-01831# If @commandBuffer@--- is an unprotected command buffer, then @srcImage@ /must/ not be a--- protected image------ - #VUID-vkCmdCopyImageToBuffer-commandBuffer-01832# If @commandBuffer@--- is an unprotected command buffer, then @dstBuffer@ /must/ not be a--- protected buffer------ - #VUID-vkCmdCopyImageToBuffer-commandBuffer-01833# If @commandBuffer@--- is a protected command buffer, then @dstBuffer@ /must/ not be an--- unprotected buffer------ - #VUID-vkCmdCopyImageToBuffer-pRegions-06220# The image region--- specified by each element of @pRegions@ /must/ be contained within--- the specified @imageSubresource@ of @srcImage@------ - #VUID-vkCmdCopyImageToBuffer-pRegions-00183# @dstBuffer@ /must/ be--- large enough to contain all buffer locations that are accessed--- according to--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-addressing Buffer and Image Addressing>,--- for each element of @pRegions@------ - #VUID-vkCmdCopyImageToBuffer-pRegions-00184# The union of all source--- regions, and the union of all destination regions, specified by the--- elements of @pRegions@, /must/ not overlap in memory------ - #VUID-vkCmdCopyImageToBuffer-srcImage-00186# @srcImage@ /must/ have--- been created with--- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'--- usage flag------ - #VUID-vkCmdCopyImageToBuffer-srcImage-01998# The--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>--- of @srcImage@ /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_SRC_BIT'------ - #VUID-vkCmdCopyImageToBuffer-srcImage-00187# If @srcImage@ is--- non-sparse then it /must/ be bound completely and contiguously to a--- single 'Vulkan.Core10.Handles.DeviceMemory' object------ - #VUID-vkCmdCopyImageToBuffer-dstBuffer-00191# @dstBuffer@ /must/--- have been created with--- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'--- usage flag------ - #VUID-vkCmdCopyImageToBuffer-dstBuffer-00192# If @dstBuffer@ is--- non-sparse then it /must/ be bound completely and contiguously to a--- single 'Vulkan.Core10.Handles.DeviceMemory' object------ - #VUID-vkCmdCopyImageToBuffer-srcImage-00188# @srcImage@ /must/ have--- a sample count equal to--- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'------ - #VUID-vkCmdCopyImageToBuffer-srcImageLayout-00189# @srcImageLayout@--- /must/ specify the layout of the image subresources of @srcImage@--- specified in @pRegions@ at the time this command is executed on a--- 'Vulkan.Core10.Handles.Device'------ - #VUID-vkCmdCopyImageToBuffer-srcImageLayout-01397# @srcImageLayout@--- /must/ be--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL',--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'------ - #VUID-vkCmdCopyImageToBuffer-imageSubresource-01703# The--- @imageSubresource.mipLevel@ member of each element of @pRegions@--- /must/ be less than the @mipLevels@ specified in--- 'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created------ - #VUID-vkCmdCopyImageToBuffer-imageSubresource-01704# The--- @imageSubresource.baseArrayLayer@ + @imageSubresource.layerCount@ of--- each element of @pRegions@ /must/ be less than or equal to the--- @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'--- when @srcImage@ was created------ - #VUID-vkCmdCopyImageToBuffer-imageOffset-01794# The @imageOffset@--- and @imageExtent@ members of each element of @pRegions@ /must/--- respect the image transfer granularity requirements of--- @commandBuffer@’s command pool’s queue family, as described in--- 'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'------ - #VUID-vkCmdCopyImageToBuffer-srcImage-02544# @srcImage@ /must/ not--- have been created with @flags@ containing--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'------ - #VUID-vkCmdCopyImageToBuffer-pRegions-06221# For each element of--- @pRegions@, @imageOffset.x@ and (@imageExtent.width@ +--- @imageOffset.x@) /must/ both be greater than or equal to @0@ and--- less than or equal to the width of the specified @imageSubresource@--- of @srcImage@------ - #VUID-vkCmdCopyImageToBuffer-pRegions-06222# For each element of--- @pRegions@, @imageOffset.y@ and (imageExtent.height +--- @imageOffset.y@) /must/ both be greater than or equal to @0@ and--- less than or equal to the height of the specified @imageSubresource@--- of @srcImage@------ - #VUID-vkCmdCopyImageToBuffer-bufferOffset-01558# If @srcImage@ does--- not have either a depth\/stencil or a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,--- then for each element of @pRegions@, @bufferOffset@ /must/ be a--- multiple of the format’s texel block size------ - #VUID-vkCmdCopyImageToBuffer-bufferOffset-01559# If @srcImage@ has a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,--- then for each element of @pRegions@, @bufferOffset@ /must/ be a--- multiple of the element size of the compatible format for the format--- and the @aspectMask@ of the @imageSubresource@ as defined in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes ???>------ - #VUID-vkCmdCopyImageToBuffer-srcImage-00199# If @srcImage@ is of--- type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each--- element of @pRegions@, @imageOffset.y@ /must/ be @0@ and--- @imageExtent.height@ /must/ be @1@------ - #VUID-vkCmdCopyImageToBuffer-imageOffset-00200# For each element of--- @pRegions@, @imageOffset.z@ and (@imageExtent.depth@ +--- @imageOffset.z@) /must/ both be greater than or equal to @0@ and--- less than or equal to the depth of the specified @imageSubresource@--- of @srcImage@------ - #VUID-vkCmdCopyImageToBuffer-srcImage-00201# If @srcImage@ is of--- type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element--- of @pRegions@, @imageOffset.z@ /must/ be @0@ and @imageExtent.depth@--- /must/ be @1@------ - #VUID-vkCmdCopyImageToBuffer-bufferRowLength-00203# If @srcImage@ is--- a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- for each element of @pRegions@, @bufferRowLength@ /must/ be a--- multiple of the compressed texel block width------ - #VUID-vkCmdCopyImageToBuffer-bufferImageHeight-00204# If @srcImage@--- is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- for each element of @pRegions@, @bufferImageHeight@ /must/ be a--- multiple of the compressed texel block height------ - #VUID-vkCmdCopyImageToBuffer-imageOffset-00205# If @srcImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- for each element of @pRegions@, all members of @imageOffset@ /must/--- be a multiple of the corresponding dimensions of the compressed--- texel block------ - #VUID-vkCmdCopyImageToBuffer-bufferOffset-00206# If @srcImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- for each element of @pRegions@, @bufferOffset@ /must/ be a multiple--- of the compressed texel block size in bytes------ - #VUID-vkCmdCopyImageToBuffer-imageExtent-00207# If @srcImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- for each element of @pRegions@, @imageExtent.width@ /must/ be a--- multiple of the compressed texel block width or (@imageExtent.width@--- + @imageOffset.x@) /must/ equal the width of the specified--- @imageSubresource@ of @srcImage@------ - #VUID-vkCmdCopyImageToBuffer-imageExtent-00208# If @srcImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- for each element of @pRegions@, @imageExtent.height@ /must/ be a--- multiple of the compressed texel block height or--- (@imageExtent.height@ + @imageOffset.y@) /must/ equal the height of--- the specified @imageSubresource@ of @srcImage@------ - #VUID-vkCmdCopyImageToBuffer-imageExtent-00209# If @srcImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- for each element of @pRegions@, @imageExtent.depth@ /must/ be a--- multiple of the compressed texel block depth or (@imageExtent.depth@--- + @imageOffset.z@) /must/ equal the depth of the specified--- @imageSubresource@ of @srcImage@------ - #VUID-vkCmdCopyImageToBuffer-aspectMask-00211# For each element of--- @pRegions@, @imageSubresource.aspectMask@ /must/ specify aspects--- present in @srcImage@------ - #VUID-vkCmdCopyImageToBuffer-aspectMask-01560# If @srcImage@ has a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,--- then for each element of @pRegions@, @imageSubresource.aspectMask@--- /must/ be--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',--- or--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'--- (with--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'--- valid only for image formats with three planes)------ - #VUID-vkCmdCopyImageToBuffer-baseArrayLayer-00213# If @srcImage@ is--- of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', for each--- element of @pRegions@, @imageSubresource.baseArrayLayer@ /must/ be--- @0@ and @imageSubresource.layerCount@ /must/ be @1@------ - #VUID-vkCmdCopyImageToBuffer-pRegions-04725# If @srcImage@ is not a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- for each element of @pRegions@, @bufferRowLength@ multiplied by the--- texel block size of @srcImage@ /must/ be less than or equal to 231-1------ - #VUID-vkCmdCopyImageToBuffer-pRegions-04726# If @srcImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,--- for each element of @pRegions@, @bufferRowLength@ divided by the--- compressed texel block width and then multiplied by the texel block--- size of @srcImage@ /must/ be less than or equal to 231-1------ - #VUID-vkCmdCopyImageToBuffer-commandBuffer-04052# If the queue--- family used to create the 'Vulkan.Core10.Handles.CommandPool' which--- @commandBuffer@ was allocated from does not support--- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or--- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the--- @bufferOffset@ member of any element of @pRegions@ /must/ be a--- multiple of @4@------ - #VUID-vkCmdCopyImageToBuffer-srcImage-04053# If @srcImage@ has a--- depth\/stencil format, the @bufferOffset@ member of any element of--- @pRegions@ /must/ be a multiple of @4@------ == Valid Usage (Implicit)------ - #VUID-vkCmdCopyImageToBuffer-commandBuffer-parameter#--- @commandBuffer@ /must/ be a valid--- 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdCopyImageToBuffer-srcImage-parameter# @srcImage@ /must/--- be a valid 'Vulkan.Core10.Handles.Image' handle------ - #VUID-vkCmdCopyImageToBuffer-srcImageLayout-parameter#--- @srcImageLayout@ /must/ be a valid--- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value------ - #VUID-vkCmdCopyImageToBuffer-dstBuffer-parameter# @dstBuffer@ /must/--- be a valid 'Vulkan.Core10.Handles.Buffer' handle------ - #VUID-vkCmdCopyImageToBuffer-pRegions-parameter# @pRegions@ /must/--- be a valid pointer to an array of @regionCount@ valid--- 'BufferImageCopy' structures------ - #VUID-vkCmdCopyImageToBuffer-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-vkCmdCopyImageToBuffer-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support transfer, graphics, or compute--- operations------ - #VUID-vkCmdCopyImageToBuffer-renderpass# This command /must/ only be--- called outside of a render pass instance------ - #VUID-vkCmdCopyImageToBuffer-regionCount-arraylength# @regionCount@--- /must/ be greater than @0@------ - #VUID-vkCmdCopyImageToBuffer-commonparent# Each of @commandBuffer@,--- @dstBuffer@, and @srcImage@ /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 | Transfer |--- | Secondary | | Graphics |--- | | | Compute |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.Buffer', 'BufferImageCopy',--- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',--- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'-cmdCopyImageToBuffer :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @srcImage@ is the source image.- ("srcImage" ::: Image)- -> -- | @srcImageLayout@ is the layout of the source image subresources for the- -- copy.- ("srcImageLayout" ::: ImageLayout)- -> -- | @dstBuffer@ is the destination buffer.- ("dstBuffer" ::: Buffer)- -> -- | @pRegions@ is a pointer to an array of 'BufferImageCopy' structures- -- specifying the regions to copy.- ("regions" ::: Vector BufferImageCopy)- -> io ()-cmdCopyImageToBuffer commandBuffer srcImage srcImageLayout dstBuffer regions = liftIO . evalContT $ do- let vkCmdCopyImageToBufferPtr = pVkCmdCopyImageToBuffer (deviceCmds (commandBuffer :: CommandBuffer))- lift $ unless (vkCmdCopyImageToBufferPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyImageToBuffer is null" Nothing Nothing- let vkCmdCopyImageToBuffer' = mkVkCmdCopyImageToBuffer vkCmdCopyImageToBufferPtr- pPRegions <- ContT $ allocaBytes @BufferImageCopy ((Data.Vector.length (regions)) * 56)- lift $ Data.Vector.imapM_ (\i e -> poke (pPRegions `plusPtr` (56 * (i)) :: Ptr BufferImageCopy) (e)) (regions)- lift $ traceAroundEvent "vkCmdCopyImageToBuffer" (vkCmdCopyImageToBuffer' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstBuffer) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdUpdateBuffer- :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Ptr () -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Ptr () -> IO ()---- | vkCmdUpdateBuffer - Update a buffer’s contents from host memory------ = Description------ @dataSize@ /must/ be less than or equal to 65536 bytes. For larger--- updates, applications /can/ use buffer to buffer--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers copies>.------ Note------ Buffer updates performed with 'cmdUpdateBuffer' first copy the data into--- command buffer memory when the command is recorded (which requires--- additional storage and may incur an additional allocation), and then--- copy the data from the command buffer into @dstBuffer@ when the command--- is executed on a device.------ The additional cost of this functionality compared to--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers buffer to buffer copies>--- means it is only recommended for very small amounts of data, and is why--- it is limited to only 65536 bytes.------ Applications /can/ work around this by issuing multiple--- 'cmdUpdateBuffer' commands to different ranges of the same buffer, but--- it is strongly recommended that they /should/ not.------ The source data is copied from the user pointer to the command buffer--- when the command is called.------ 'cmdUpdateBuffer' is only allowed outside of a render pass. This command--- is treated as “transfer” operation, for the purposes of synchronization--- barriers. The--- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'--- /must/ be specified in @usage@ of--- 'Vulkan.Core10.Buffer.BufferCreateInfo' in order for the buffer to be--- compatible with 'cmdUpdateBuffer'.------ == Valid Usage------ - #VUID-vkCmdUpdateBuffer-dstOffset-00032# @dstOffset@ /must/ be less--- than the size of @dstBuffer@------ - #VUID-vkCmdUpdateBuffer-dataSize-00033# @dataSize@ /must/ be less--- than or equal to the size of @dstBuffer@ minus @dstOffset@------ - #VUID-vkCmdUpdateBuffer-dstBuffer-00034# @dstBuffer@ /must/ have--- been created with--- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'--- usage flag------ - #VUID-vkCmdUpdateBuffer-dstBuffer-00035# If @dstBuffer@ is--- non-sparse then it /must/ be bound completely and contiguously to a--- single 'Vulkan.Core10.Handles.DeviceMemory' object------ - #VUID-vkCmdUpdateBuffer-dstOffset-00036# @dstOffset@ /must/ be a--- multiple of @4@------ - #VUID-vkCmdUpdateBuffer-dataSize-00037# @dataSize@ /must/ be less--- than or equal to @65536@------ - #VUID-vkCmdUpdateBuffer-dataSize-00038# @dataSize@ /must/ be a--- multiple of @4@------ - #VUID-vkCmdUpdateBuffer-commandBuffer-01813# If @commandBuffer@ is--- an unprotected command buffer, then @dstBuffer@ /must/ not be a--- protected buffer------ - #VUID-vkCmdUpdateBuffer-commandBuffer-01814# If @commandBuffer@ is a--- protected command buffer, then @dstBuffer@ /must/ not be an--- unprotected buffer------ == Valid Usage (Implicit)------ - #VUID-vkCmdUpdateBuffer-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdUpdateBuffer-dstBuffer-parameter# @dstBuffer@ /must/ be a--- valid 'Vulkan.Core10.Handles.Buffer' handle------ - #VUID-vkCmdUpdateBuffer-pData-parameter# @pData@ /must/ be a valid--- pointer to an array of @dataSize@ bytes------ - #VUID-vkCmdUpdateBuffer-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-vkCmdUpdateBuffer-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support transfer, graphics, or compute--- operations------ - #VUID-vkCmdUpdateBuffer-renderpass# This command /must/ only be--- called outside of a render pass instance------ - #VUID-vkCmdUpdateBuffer-dataSize-arraylength# @dataSize@ /must/ be--- greater than @0@------ - #VUID-vkCmdUpdateBuffer-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 | Outside | Transfer |--- | Secondary | | Graphics |--- | | | Compute |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize'-cmdUpdateBuffer :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @dstBuffer@ is a handle to the buffer to be updated.- ("dstBuffer" ::: Buffer)- -> -- | @dstOffset@ is the byte offset into the buffer to start updating, and- -- /must/ be a multiple of 4.- ("dstOffset" ::: DeviceSize)- -> -- | @dataSize@ is the number of bytes to update, and /must/ be a multiple of- -- 4.- ("dataSize" ::: DeviceSize)- -> -- | @pData@ is a pointer to the source data for the buffer update, and- -- /must/ be at least @dataSize@ bytes in size.- ("data" ::: Ptr ())- -> io ()-cmdUpdateBuffer commandBuffer dstBuffer dstOffset dataSize data' = liftIO $ do- let vkCmdUpdateBufferPtr = pVkCmdUpdateBuffer (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdUpdateBufferPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdUpdateBuffer is null" Nothing Nothing- let vkCmdUpdateBuffer' = mkVkCmdUpdateBuffer vkCmdUpdateBufferPtr- traceAroundEvent "vkCmdUpdateBuffer" (vkCmdUpdateBuffer' (commandBufferHandle (commandBuffer)) (dstBuffer) (dstOffset) (dataSize) (data'))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdFillBuffer- :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Word32 -> IO ()---- | vkCmdFillBuffer - Fill a region of a buffer with a fixed value------ = Description------ 'cmdFillBuffer' is treated as “transfer” operation for the purposes of--- synchronization barriers. The--- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'--- /must/ be specified in @usage@ of--- 'Vulkan.Core10.Buffer.BufferCreateInfo' in order for the buffer to be--- compatible with 'cmdFillBuffer'.------ == Valid Usage------ - #VUID-vkCmdFillBuffer-dstOffset-00024# @dstOffset@ /must/ be less--- than the size of @dstBuffer@------ - #VUID-vkCmdFillBuffer-dstOffset-00025# @dstOffset@ /must/ be a--- multiple of @4@------ - #VUID-vkCmdFillBuffer-size-00026# If @size@ is not equal to--- 'Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ be greater--- than @0@------ - #VUID-vkCmdFillBuffer-size-00027# If @size@ is not equal to--- 'Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ be less than--- or equal to the size of @dstBuffer@ minus @dstOffset@------ - #VUID-vkCmdFillBuffer-size-00028# If @size@ is not equal to--- 'Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ be a multiple--- of @4@------ - #VUID-vkCmdFillBuffer-dstBuffer-00029# @dstBuffer@ /must/ have been--- created with--- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'--- usage flag------ - #VUID-vkCmdFillBuffer-dstBuffer-00031# If @dstBuffer@ is non-sparse--- then it /must/ be bound completely and contiguously to a single--- 'Vulkan.Core10.Handles.DeviceMemory' object------ - #VUID-vkCmdFillBuffer-commandBuffer-01811# If @commandBuffer@ is an--- unprotected command buffer, then @dstBuffer@ /must/ not be a--- protected buffer------ - #VUID-vkCmdFillBuffer-commandBuffer-01812# If @commandBuffer@ is a--- protected command buffer, then @dstBuffer@ /must/ not be an--- unprotected buffer------ == Valid Usage (Implicit)------ - #VUID-vkCmdFillBuffer-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdFillBuffer-dstBuffer-parameter# @dstBuffer@ /must/ be a--- valid 'Vulkan.Core10.Handles.Buffer' handle------ - #VUID-vkCmdFillBuffer-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-vkCmdFillBuffer-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support transfer, graphics or compute--- operations------ - #VUID-vkCmdFillBuffer-renderpass# This command /must/ only be called--- outside of a render pass instance------ - #VUID-vkCmdFillBuffer-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 | Outside | Transfer |--- | Secondary | | Graphics |--- | | | Compute |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize'-cmdFillBuffer :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @dstBuffer@ is the buffer to be filled.- ("dstBuffer" ::: Buffer)- -> -- | @dstOffset@ is the byte offset into the buffer at which to start- -- filling, and /must/ be a multiple of 4.- ("dstOffset" ::: DeviceSize)- -> -- | @size@ is the number of bytes to fill, and /must/ be either a multiple- -- of 4, or 'Vulkan.Core10.APIConstants.WHOLE_SIZE' to fill the range from- -- @offset@ to the end of the buffer. If- -- 'Vulkan.Core10.APIConstants.WHOLE_SIZE' is used and the remaining size- -- of the buffer is not a multiple of 4, then the nearest smaller multiple- -- is used.- DeviceSize- -> -- | @data@ is the 4-byte word written repeatedly to the buffer to fill- -- @size@ bytes of data. The data word is written to memory according to- -- the host endianness.- ("data" ::: Word32)- -> io ()-cmdFillBuffer commandBuffer dstBuffer dstOffset size data' = liftIO $ do- let vkCmdFillBufferPtr = pVkCmdFillBuffer (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdFillBufferPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdFillBuffer is null" Nothing Nothing- let vkCmdFillBuffer' = mkVkCmdFillBuffer vkCmdFillBufferPtr- traceAroundEvent "vkCmdFillBuffer" (vkCmdFillBuffer' (commandBufferHandle (commandBuffer)) (dstBuffer) (dstOffset) (size) (data'))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdClearColorImage- :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearColorValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearColorValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()---- | vkCmdClearColorImage - Clear regions of a color image------ = Description------ Each specified range in @pRanges@ is cleared to the value specified by--- @pColor@.------ == Valid Usage------ - #VUID-vkCmdClearColorImage-image-01993# The--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>--- of @image@ /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'------ - #VUID-vkCmdClearColorImage-image-00002# @image@ /must/ have been--- created with--- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'--- usage flag------ - #VUID-vkCmdClearColorImage-image-01545# @image@ /must/ not use any--- of the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion formats that require a sampler Y’CBCR conversion>------ - #VUID-vkCmdClearColorImage-image-00003# If @image@ is non-sparse--- then it /must/ be bound completely and contiguously to a single--- 'Vulkan.Core10.Handles.DeviceMemory' object------ - #VUID-vkCmdClearColorImage-imageLayout-00004# @imageLayout@ /must/--- specify the layout of the image subresource ranges of @image@--- specified in @pRanges@ at the time this command is executed on a--- 'Vulkan.Core10.Handles.Device'------ - #VUID-vkCmdClearColorImage-imageLayout-01394# @imageLayout@ /must/--- be--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'------ - #VUID-vkCmdClearColorImage-aspectMask-02498# The--- 'Vulkan.Core10.ImageView.ImageSubresourceRange'::@aspectMask@--- members of the elements of the @pRanges@ array /must/ each only--- include--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'------ - #VUID-vkCmdClearColorImage-baseMipLevel-01470# The--- 'Vulkan.Core10.ImageView.ImageSubresourceRange'::@baseMipLevel@--- members of the elements of the @pRanges@ array /must/ each be less--- than the @mipLevels@ specified in--- 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created------ - #VUID-vkCmdClearColorImage-pRanges-01692# For each--- 'Vulkan.Core10.ImageView.ImageSubresourceRange' element of--- @pRanges@, if the @levelCount@ member is not--- 'Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS', then--- @baseMipLevel@ + @levelCount@ /must/ be less than the @mipLevels@--- specified in 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was--- created------ - #VUID-vkCmdClearColorImage-baseArrayLayer-01472# The--- 'Vulkan.Core10.ImageView.ImageSubresourceRange'::@baseArrayLayer@--- members of the elements of the @pRanges@ array /must/ each be less--- than the @arrayLayers@ specified in--- 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created------ - #VUID-vkCmdClearColorImage-pRanges-01693# For each--- 'Vulkan.Core10.ImageView.ImageSubresourceRange' element of--- @pRanges@, if the @layerCount@ member is not--- 'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', then--- @baseArrayLayer@ + @layerCount@ /must/ be less than the--- @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'--- when @image@ was created------ - #VUID-vkCmdClearColorImage-image-00007# @image@ /must/ not have a--- compressed or depth\/stencil format------ - #VUID-vkCmdClearColorImage-pColor-04961# @pColor@ /must/ be a valid--- pointer to a 'ClearColorValue' union------ - #VUID-vkCmdClearColorImage-commandBuffer-01805# If @commandBuffer@--- is an unprotected command buffer, then @image@ /must/ not be a--- protected image------ - #VUID-vkCmdClearColorImage-commandBuffer-01806# If @commandBuffer@--- is a protected command buffer, then @image@ /must/ not be an--- unprotected image------ == Valid Usage (Implicit)------ - #VUID-vkCmdClearColorImage-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdClearColorImage-image-parameter# @image@ /must/ be a--- valid 'Vulkan.Core10.Handles.Image' handle------ - #VUID-vkCmdClearColorImage-imageLayout-parameter# @imageLayout@--- /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'--- value------ - #VUID-vkCmdClearColorImage-pRanges-parameter# @pRanges@ /must/ be a--- valid pointer to an array of @rangeCount@ valid--- 'Vulkan.Core10.ImageView.ImageSubresourceRange' structures------ - #VUID-vkCmdClearColorImage-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-vkCmdClearColorImage-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics, or compute operations------ - #VUID-vkCmdClearColorImage-renderpass# This command /must/ only be--- called outside of a render pass instance------ - #VUID-vkCmdClearColorImage-rangeCount-arraylength# @rangeCount@--- /must/ be greater than @0@------ - #VUID-vkCmdClearColorImage-commonparent# Both of @commandBuffer@,--- and @image@ /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_VERSION_1_0 VK_VERSION_1_0>,--- 'ClearColorValue', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Handles.Image',--- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',--- 'Vulkan.Core10.ImageView.ImageSubresourceRange'-cmdClearColorImage :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @image@ is the image to be cleared.- Image- -> -- | @imageLayout@ specifies the current layout of the image subresource- -- ranges to be cleared, and /must/ be- -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',- -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL' or- -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'.- ImageLayout- -> -- | @pColor@ is a pointer to a 'ClearColorValue' structure containing the- -- values that the image subresource ranges will be cleared to (see- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears-values>- -- below).- ClearColorValue- -> -- | @pRanges@ is a pointer to an array of- -- 'Vulkan.Core10.ImageView.ImageSubresourceRange' structures describing a- -- range of mipmap levels, array layers, and aspects to be cleared, as- -- described in- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views Image Views>.- ("ranges" ::: Vector ImageSubresourceRange)- -> io ()-cmdClearColorImage commandBuffer image imageLayout color ranges = liftIO . evalContT $ do- let vkCmdClearColorImagePtr = pVkCmdClearColorImage (deviceCmds (commandBuffer :: CommandBuffer))- lift $ unless (vkCmdClearColorImagePtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdClearColorImage is null" Nothing Nothing- let vkCmdClearColorImage' = mkVkCmdClearColorImage vkCmdClearColorImagePtr- pColor <- ContT $ withCStruct (color)- pPRanges <- ContT $ allocaBytes @ImageSubresourceRange ((Data.Vector.length (ranges)) * 20)- lift $ Data.Vector.imapM_ (\i e -> poke (pPRanges `plusPtr` (20 * (i)) :: Ptr ImageSubresourceRange) (e)) (ranges)- lift $ traceAroundEvent "vkCmdClearColorImage" (vkCmdClearColorImage' (commandBufferHandle (commandBuffer)) (image) (imageLayout) pColor ((fromIntegral (Data.Vector.length $ (ranges)) :: Word32)) (pPRanges))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdClearDepthStencilImage- :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearDepthStencilValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearDepthStencilValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()---- | vkCmdClearDepthStencilImage - Fill regions of a combined depth\/stencil--- image------ == Valid Usage------ - #VUID-vkCmdClearDepthStencilImage-image-01994# The--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>--- of @image@ /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'------ - #VUID-vkCmdClearDepthStencilImage-pRanges-02658# If the @aspect@--- member of any element of @pRanges@ includes--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',--- and @image@ was created with--- <VkImageStencilUsageCreateInfo.html separate stencil usage>,--- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'--- /must/ have been included in the--- 'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@--- used to create @image@------ - #VUID-vkCmdClearDepthStencilImage-pRanges-02659# If the @aspect@--- member of any element of @pRanges@ includes--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',--- and @image@ was not created with--- <VkImageStencilUsageCreateInfo.html separate stencil usage>,--- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'--- /must/ have been included in the--- 'Vulkan.Core10.Image.ImageCreateInfo'::@usage@ used to create--- @image@------ - #VUID-vkCmdClearDepthStencilImage-pRanges-02660# If the @aspect@--- member of any element of @pRanges@ includes--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT',--- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'--- /must/ have been included in the--- 'Vulkan.Core10.Image.ImageCreateInfo'::@usage@ used to create--- @image@------ - #VUID-vkCmdClearDepthStencilImage-image-00010# If @image@ is--- non-sparse then it /must/ be bound completely and contiguously to a--- single 'Vulkan.Core10.Handles.DeviceMemory' object------ - #VUID-vkCmdClearDepthStencilImage-imageLayout-00011# @imageLayout@--- /must/ specify the layout of the image subresource ranges of @image@--- specified in @pRanges@ at the time this command is executed on a--- 'Vulkan.Core10.Handles.Device'------ - #VUID-vkCmdClearDepthStencilImage-imageLayout-00012# @imageLayout@--- /must/ be either of--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'--- or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'------ - #VUID-vkCmdClearDepthStencilImage-aspectMask-02824# The--- 'Vulkan.Core10.ImageView.ImageSubresourceRange'::@aspectMask@ member--- of each element of the @pRanges@ array /must/ not include bits other--- than--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'------ - #VUID-vkCmdClearDepthStencilImage-image-02825# If the @image@’s--- format does not have a stencil component, then the--- 'Vulkan.Core10.ImageView.ImageSubresourceRange'::@aspectMask@ member--- of each element of the @pRanges@ array /must/ not include the--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'--- bit------ - #VUID-vkCmdClearDepthStencilImage-image-02826# If the @image@’s--- format does not have a depth component, then the--- 'Vulkan.Core10.ImageView.ImageSubresourceRange'::@aspectMask@ member--- of each element of the @pRanges@ array /must/ not include the--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' bit------ - #VUID-vkCmdClearDepthStencilImage-baseMipLevel-01474# The--- 'Vulkan.Core10.ImageView.ImageSubresourceRange'::@baseMipLevel@--- members of the elements of the @pRanges@ array /must/ each be less--- than the @mipLevels@ specified in--- 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created------ - #VUID-vkCmdClearDepthStencilImage-pRanges-01694# For each--- 'Vulkan.Core10.ImageView.ImageSubresourceRange' element of--- @pRanges@, if the @levelCount@ member is not--- 'Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS', then--- @baseMipLevel@ + @levelCount@ /must/ be less than the @mipLevels@--- specified in 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was--- created------ - #VUID-vkCmdClearDepthStencilImage-baseArrayLayer-01476# The--- 'Vulkan.Core10.ImageView.ImageSubresourceRange'::@baseArrayLayer@--- members of the elements of the @pRanges@ array /must/ each be less--- than the @arrayLayers@ specified in--- 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created------ - #VUID-vkCmdClearDepthStencilImage-pRanges-01695# For each--- 'Vulkan.Core10.ImageView.ImageSubresourceRange' element of--- @pRanges@, if the @layerCount@ member is not--- 'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', then--- @baseArrayLayer@ + @layerCount@ /must/ be less than the--- @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'--- when @image@ was created------ - #VUID-vkCmdClearDepthStencilImage-image-00014# @image@ /must/ have a--- depth\/stencil format------ - #VUID-vkCmdClearDepthStencilImage-commandBuffer-01807# If--- @commandBuffer@ is an unprotected command buffer, then @image@--- /must/ not be a protected image------ - #VUID-vkCmdClearDepthStencilImage-commandBuffer-01808# If--- @commandBuffer@ is a protected command buffer, then @image@ /must/--- not be an unprotected image------ == Valid Usage (Implicit)------ - #VUID-vkCmdClearDepthStencilImage-commandBuffer-parameter#--- @commandBuffer@ /must/ be a valid--- 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdClearDepthStencilImage-image-parameter# @image@ /must/ be--- a valid 'Vulkan.Core10.Handles.Image' handle------ - #VUID-vkCmdClearDepthStencilImage-imageLayout-parameter#--- @imageLayout@ /must/ be a valid--- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value------ - #VUID-vkCmdClearDepthStencilImage-pDepthStencil-parameter#--- @pDepthStencil@ /must/ be a valid pointer to a valid--- 'ClearDepthStencilValue' structure------ - #VUID-vkCmdClearDepthStencilImage-pRanges-parameter# @pRanges@--- /must/ be a valid pointer to an array of @rangeCount@ valid--- 'Vulkan.Core10.ImageView.ImageSubresourceRange' structures------ - #VUID-vkCmdClearDepthStencilImage-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-vkCmdClearDepthStencilImage-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics operations------ - #VUID-vkCmdClearDepthStencilImage-renderpass# This command /must/--- only be called outside of a render pass instance------ - #VUID-vkCmdClearDepthStencilImage-rangeCount-arraylength#--- @rangeCount@ /must/ be greater than @0@------ - #VUID-vkCmdClearDepthStencilImage-commonparent# Both of--- @commandBuffer@, and @image@ /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 | | |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'ClearDepthStencilValue', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Handles.Image',--- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',--- 'Vulkan.Core10.ImageView.ImageSubresourceRange'-cmdClearDepthStencilImage :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @image@ is the image to be cleared.- Image- -> -- | @imageLayout@ specifies the current layout of the image subresource- -- ranges to be cleared, and /must/ be- -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL' or- -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'.- ImageLayout- -> -- | @pDepthStencil@ is a pointer to a 'ClearDepthStencilValue' structure- -- containing the values that the depth and stencil image subresource- -- ranges will be cleared to (see- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears-values>- -- below).- ClearDepthStencilValue- -> -- | @pRanges@ is a pointer to an array of- -- 'Vulkan.Core10.ImageView.ImageSubresourceRange' structures describing a- -- range of mipmap levels, array layers, and aspects to be cleared, as- -- described in- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views Image Views>.- ("ranges" ::: Vector ImageSubresourceRange)- -> io ()-cmdClearDepthStencilImage commandBuffer image imageLayout depthStencil ranges = liftIO . evalContT $ do- let vkCmdClearDepthStencilImagePtr = pVkCmdClearDepthStencilImage (deviceCmds (commandBuffer :: CommandBuffer))- lift $ unless (vkCmdClearDepthStencilImagePtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdClearDepthStencilImage is null" Nothing Nothing- let vkCmdClearDepthStencilImage' = mkVkCmdClearDepthStencilImage vkCmdClearDepthStencilImagePtr- pDepthStencil <- ContT $ withCStruct (depthStencil)- pPRanges <- ContT $ allocaBytes @ImageSubresourceRange ((Data.Vector.length (ranges)) * 20)- lift $ Data.Vector.imapM_ (\i e -> poke (pPRanges `plusPtr` (20 * (i)) :: Ptr ImageSubresourceRange) (e)) (ranges)- lift $ traceAroundEvent "vkCmdClearDepthStencilImage" (vkCmdClearDepthStencilImage' (commandBufferHandle (commandBuffer)) (image) (imageLayout) pDepthStencil ((fromIntegral (Data.Vector.length $ (ranges)) :: Word32)) (pPRanges))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdClearAttachments- :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr ClearAttachment -> Word32 -> Ptr ClearRect -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr ClearAttachment -> Word32 -> Ptr ClearRect -> IO ()---- | vkCmdClearAttachments - Clear regions within bound framebuffer--- attachments------ = Description------ If the render pass has a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-fragmentdensitymapattachment fragment density map attachment>,--- clears follow the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragmentdensitymapops operations of fragment density maps>--- as if each clear region was a primitive which generates fragments. The--- clear color is applied to all pixels inside each fragment’s area--- regardless if the pixels lie outside of the clear region. Clears /may/--- have a different set of supported fragment areas than draws.------ Unlike other--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears clear commands>,--- 'cmdClearAttachments' executes as a drawing command, rather than a--- transfer command, with writes performed by it executing in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-order rasterization order>.--- Clears to color attachments are executed as color attachment writes, by--- the--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'--- stage. Clears to depth\/stencil attachments are executed as--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth depth writes>--- and--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil writes>--- by the--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT'--- and--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT'--- stages.------ 'cmdClearAttachments' is not affected by the bound pipeline state.------ Note------ It’s generally advised that attachments are cleared by using the--- 'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR' load--- operation at the start of rendering, which will be more efficient on--- some implementations.------ == Valid Usage------ - #VUID-vkCmdClearAttachments-aspectMask-02501# If the @aspectMask@--- member of any element of @pAttachments@ contains--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',--- then the @colorAttachment@ member of that element /must/ either--- refer to a color attachment which is--- 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', or /must/ be a valid--- color attachment------ - #VUID-vkCmdClearAttachments-aspectMask-02502# If the @aspectMask@--- member of any element of @pAttachments@ contains--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT',--- then the current subpass\' depth\/stencil attachment /must/ either--- be 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', or /must/ have a--- depth component------ - #VUID-vkCmdClearAttachments-aspectMask-02503# If the @aspectMask@--- member of any element of @pAttachments@ contains--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',--- then the current subpass\' depth\/stencil attachment /must/ either--- be 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', or /must/ have a--- stencil component------ - #VUID-vkCmdClearAttachments-rect-02682# The @rect@ member of each--- element of @pRects@ /must/ have an @extent.width@ greater than @0@------ - #VUID-vkCmdClearAttachments-rect-02683# The @rect@ member of each--- element of @pRects@ /must/ have an @extent.height@ greater than @0@------ - #VUID-vkCmdClearAttachments-pRects-00016# The rectangular region--- specified by each element of @pRects@ /must/ be contained within the--- render area of the current render pass instance------ - #VUID-vkCmdClearAttachments-pRects-00017# The layers specified by--- each element of @pRects@ /must/ be contained within every attachment--- that @pAttachments@ refers to------ - #VUID-vkCmdClearAttachments-layerCount-01934# The @layerCount@--- member of each element of @pRects@ /must/ not be @0@------ - #VUID-vkCmdClearAttachments-commandBuffer-02504# If @commandBuffer@--- is an unprotected command buffer, then each attachment to be cleared--- /must/ not be a protected image------ - #VUID-vkCmdClearAttachments-commandBuffer-02505# If @commandBuffer@--- is a protected command buffer, then each attachment to be cleared--- /must/ not be an unprotected image------ - #VUID-vkCmdClearAttachments-baseArrayLayer-00018# If the render pass--- instance this is recorded in uses multiview, then @baseArrayLayer@--- /must/ be zero and @layerCount@ /must/ be one------ == Valid Usage (Implicit)------ - #VUID-vkCmdClearAttachments-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdClearAttachments-pAttachments-parameter# @pAttachments@--- /must/ be a valid pointer to an array of @attachmentCount@ valid--- 'ClearAttachment' structures------ - #VUID-vkCmdClearAttachments-pRects-parameter# @pRects@ /must/ be a--- valid pointer to an array of @rectCount@ 'ClearRect' structures------ - #VUID-vkCmdClearAttachments-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-vkCmdClearAttachments-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics operations------ - #VUID-vkCmdClearAttachments-renderpass# This command /must/ only be--- called inside of a render pass instance------ - #VUID-vkCmdClearAttachments-attachmentCount-arraylength#--- @attachmentCount@ /must/ be greater than @0@------ - #VUID-vkCmdClearAttachments-rectCount-arraylength# @rectCount@--- /must/ be greater than @0@------ == Host Synchronization------ - Host access to @commandBuffer@ /must/ be externally synchronized------ - Host access to the 'Vulkan.Core10.Handles.CommandPool' that--- @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+--- | Primary | Inside | Graphics |--- | Secondary | | |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'ClearAttachment', 'ClearRect', 'Vulkan.Core10.Handles.CommandBuffer'-cmdClearAttachments :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @pAttachments@ is a pointer to an array of 'ClearAttachment' structures- -- defining the attachments to clear and the clear values to use. If any- -- attachment index to be cleared is not backed by an image view, then the- -- clear has no effect.- ("attachments" ::: Vector ClearAttachment)- -> -- | @pRects@ is a pointer to an array of 'ClearRect' structures defining- -- regions within each selected attachment to clear.- ("rects" ::: Vector ClearRect)- -> io ()-cmdClearAttachments commandBuffer attachments rects = liftIO . evalContT $ do- let vkCmdClearAttachmentsPtr = pVkCmdClearAttachments (deviceCmds (commandBuffer :: CommandBuffer))- lift $ unless (vkCmdClearAttachmentsPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdClearAttachments is null" Nothing Nothing- let vkCmdClearAttachments' = mkVkCmdClearAttachments vkCmdClearAttachmentsPtr- pPAttachments <- ContT $ allocaBytes @ClearAttachment ((Data.Vector.length (attachments)) * 24)- Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachments `plusPtr` (24 * (i)) :: Ptr ClearAttachment) (e) . ($ ())) (attachments)- pPRects <- ContT $ allocaBytes @ClearRect ((Data.Vector.length (rects)) * 24)- lift $ Data.Vector.imapM_ (\i e -> poke (pPRects `plusPtr` (24 * (i)) :: Ptr ClearRect) (e)) (rects)- lift $ traceAroundEvent "vkCmdClearAttachments" (vkCmdClearAttachments' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (attachments)) :: Word32)) (pPAttachments) ((fromIntegral (Data.Vector.length $ (rects)) :: Word32)) (pPRects))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdResolveImage- :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageResolve -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageResolve -> IO ()---- | vkCmdResolveImage - Resolve regions of an image------ = Description------ During the resolve the samples corresponding to each pixel location in--- the source are converted to a single sample before being written to the--- destination. If the source formats are floating-point or normalized--- types, the sample values for each pixel are resolved in an--- implementation-dependent manner. If the source formats are integer--- types, a single sample’s value is selected for each pixel.------ @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets--- in texels of the sub-regions of the source and destination image data.--- @extent@ is the size in texels of the source image to resolve in--- @width@, @height@ and @depth@. Each element of @pRegions@ /must/ be a--- region that is contained within its corresponding image.------ Resolves are done layer by layer starting with @baseArrayLayer@ member--- of @srcSubresource@ for the source and @dstSubresource@ for the--- destination. @layerCount@ layers are resolved to the destination image.------ == Valid Usage------ - #VUID-vkCmdResolveImage-commandBuffer-01837# If @commandBuffer@ is--- an unprotected command buffer, then @srcImage@ /must/ not be a--- protected image------ - #VUID-vkCmdResolveImage-commandBuffer-01838# If @commandBuffer@ is--- an unprotected command buffer, then @dstImage@ /must/ not be a--- protected image------ - #VUID-vkCmdResolveImage-commandBuffer-01839# If @commandBuffer@ is a--- protected command buffer, then @dstImage@ /must/ not be an--- unprotected image------ - #VUID-vkCmdResolveImage-pRegions-00255# The union of all source--- regions, and the union of all destination regions, specified by the--- elements of @pRegions@, /must/ not overlap in memory------ - #VUID-vkCmdResolveImage-srcImage-00256# If @srcImage@ is non-sparse--- then it /must/ be bound completely and contiguously to a single--- 'Vulkan.Core10.Handles.DeviceMemory' object------ - #VUID-vkCmdResolveImage-srcImage-00257# @srcImage@ /must/ have a--- sample count equal to any valid sample count value other than--- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'------ - #VUID-vkCmdResolveImage-dstImage-00258# If @dstImage@ is non-sparse--- then it /must/ be bound completely and contiguously to a single--- 'Vulkan.Core10.Handles.DeviceMemory' object------ - #VUID-vkCmdResolveImage-dstImage-00259# @dstImage@ /must/ have a--- sample count equal to--- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'------ - #VUID-vkCmdResolveImage-srcImageLayout-00260# @srcImageLayout@--- /must/ specify the layout of the image subresources of @srcImage@--- specified in @pRegions@ at the time this command is executed on a--- 'Vulkan.Core10.Handles.Device'------ - #VUID-vkCmdResolveImage-srcImageLayout-01400# @srcImageLayout@--- /must/ be--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'--- or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'------ - #VUID-vkCmdResolveImage-dstImageLayout-00262# @dstImageLayout@--- /must/ specify the layout of the image subresources of @dstImage@--- specified in @pRegions@ at the time this command is executed on a--- 'Vulkan.Core10.Handles.Device'------ - #VUID-vkCmdResolveImage-dstImageLayout-01401# @dstImageLayout@--- /must/ be--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'--- or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'------ - #VUID-vkCmdResolveImage-dstImage-02003# The--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>--- of @dstImage@ /must/ contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'------ - #VUID-vkCmdResolveImage-srcImage-01386# @srcImage@ and @dstImage@--- /must/ have been created with the same image format------ - #VUID-vkCmdResolveImage-srcSubresource-01709# The--- @srcSubresource.mipLevel@ member of each element of @pRegions@--- /must/ be less than the @mipLevels@ specified in--- 'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created------ - #VUID-vkCmdResolveImage-dstSubresource-01710# The--- @dstSubresource.mipLevel@ member of each element of @pRegions@--- /must/ be less than the @mipLevels@ specified in--- 'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created------ - #VUID-vkCmdResolveImage-srcSubresource-01711# The--- @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of--- each element of @pRegions@ /must/ be less than or equal to the--- @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'--- when @srcImage@ was created------ - #VUID-vkCmdResolveImage-dstSubresource-01712# The--- @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of--- each element of @pRegions@ /must/ be less than or equal to the--- @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'--- when @dstImage@ was created------ - #VUID-vkCmdResolveImage-dstImage-02546# @dstImage@ and @srcImage@--- /must/ not have been created with @flags@ containing--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'------ - #VUID-vkCmdResolveImage-srcImage-04446# If either @srcImage@ or--- @dstImage@ are of type--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element--- of @pRegions@, @srcSubresource.baseArrayLayer@ /must/ be @0@ and--- @srcSubresource.layerCount@ /must/ be @1@------ - #VUID-vkCmdResolveImage-srcImage-04447# If either @srcImage@ or--- @dstImage@ are of type--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element--- of @pRegions@, @dstSubresource.baseArrayLayer@ /must/ be @0@ and--- @dstSubresource.layerCount@ /must/ be @1@------ - #VUID-vkCmdResolveImage-srcOffset-00269# For each element of--- @pRegions@, @srcOffset.x@ and (@extent.width@ + @srcOffset.x@)--- /must/ both be greater than or equal to @0@ and less than or equal--- to the width of the specified @srcSubresource@ of @srcImage@------ - #VUID-vkCmdResolveImage-srcOffset-00270# For each element of--- @pRegions@, @srcOffset.y@ and (@extent.height@ + @srcOffset.y@)--- /must/ both be greater than or equal to @0@ and less than or equal--- to the height of the specified @srcSubresource@ of @srcImage@------ - #VUID-vkCmdResolveImage-srcImage-00271# If @srcImage@ is of type--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element--- of @pRegions@, @srcOffset.y@ /must/ be @0@ and @extent.height@--- /must/ be @1@------ - #VUID-vkCmdResolveImage-srcOffset-00272# For each element of--- @pRegions@, @srcOffset.z@ and (@extent.depth@ + @srcOffset.z@)--- /must/ both be greater than or equal to @0@ and less than or equal--- to the depth of the specified @srcSubresource@ of @srcImage@------ - #VUID-vkCmdResolveImage-srcImage-00273# If @srcImage@ is of type--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element--- of @pRegions@, @srcOffset.z@ /must/ be @0@ and @extent.depth@ /must/--- be @1@------ - #VUID-vkCmdResolveImage-dstOffset-00274# For each element of--- @pRegions@, @dstOffset.x@ and (@extent.width@ + @dstOffset.x@)--- /must/ both be greater than or equal to @0@ and less than or equal--- to the width of the specified @dstSubresource@ of @dstImage@------ - #VUID-vkCmdResolveImage-dstOffset-00275# For each element of--- @pRegions@, @dstOffset.y@ and (@extent.height@ + @dstOffset.y@)--- /must/ both be greater than or equal to @0@ and less than or equal--- to the height of the specified @dstSubresource@ of @dstImage@------ - #VUID-vkCmdResolveImage-dstImage-00276# If @dstImage@ is of type--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element--- of @pRegions@, @dstOffset.y@ /must/ be @0@ and @extent.height@--- /must/ be @1@------ - #VUID-vkCmdResolveImage-dstOffset-00277# For each element of--- @pRegions@, @dstOffset.z@ and (@extent.depth@ + @dstOffset.z@)--- /must/ both be greater than or equal to @0@ and less than or equal--- to the depth of the specified @dstSubresource@ of @dstImage@------ - #VUID-vkCmdResolveImage-dstImage-00278# If @dstImage@ is of type--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element--- of @pRegions@, @dstOffset.z@ /must/ be @0@ and @extent.depth@ /must/--- be @1@------ == Valid Usage (Implicit)------ - #VUID-vkCmdResolveImage-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdResolveImage-srcImage-parameter# @srcImage@ /must/ be a--- valid 'Vulkan.Core10.Handles.Image' handle------ - #VUID-vkCmdResolveImage-srcImageLayout-parameter# @srcImageLayout@--- /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'--- value------ - #VUID-vkCmdResolveImage-dstImage-parameter# @dstImage@ /must/ be a--- valid 'Vulkan.Core10.Handles.Image' handle------ - #VUID-vkCmdResolveImage-dstImageLayout-parameter# @dstImageLayout@--- /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'--- value------ - #VUID-vkCmdResolveImage-pRegions-parameter# @pRegions@ /must/ be a--- valid pointer to an array of @regionCount@ valid 'ImageResolve'--- structures------ - #VUID-vkCmdResolveImage-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-vkCmdResolveImage-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics operations------ - #VUID-vkCmdResolveImage-renderpass# This command /must/ only be--- called outside of a render pass instance------ - #VUID-vkCmdResolveImage-regionCount-arraylength# @regionCount@--- /must/ be greater than @0@------ - #VUID-vkCmdResolveImage-commonparent# Each of @commandBuffer@,--- @dstImage@, and @srcImage@ /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 | | |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',--- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout', 'ImageResolve'-cmdResolveImage :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @srcImage@ is the source image.- ("srcImage" ::: Image)- -> -- | @srcImageLayout@ is the layout of the source image subresources for the- -- resolve.- ("srcImageLayout" ::: ImageLayout)- -> -- | @dstImage@ is the destination image.- ("dstImage" ::: Image)- -> -- | @dstImageLayout@ is the layout of the destination image subresources for- -- the resolve.- ("dstImageLayout" ::: ImageLayout)- -> -- | @pRegions@ is a pointer to an array of 'ImageResolve' structures- -- specifying the regions to resolve.- ("regions" ::: Vector ImageResolve)- -> io ()-cmdResolveImage commandBuffer srcImage srcImageLayout dstImage dstImageLayout regions = liftIO . evalContT $ do- let vkCmdResolveImagePtr = pVkCmdResolveImage (deviceCmds (commandBuffer :: CommandBuffer))- lift $ unless (vkCmdResolveImagePtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdResolveImage is null" Nothing Nothing- let vkCmdResolveImage' = mkVkCmdResolveImage vkCmdResolveImagePtr- pPRegions <- ContT $ allocaBytes @ImageResolve ((Data.Vector.length (regions)) * 68)- lift $ Data.Vector.imapM_ (\i e -> poke (pPRegions `plusPtr` (68 * (i)) :: Ptr ImageResolve) (e)) (regions)- lift $ traceAroundEvent "vkCmdResolveImage" (vkCmdResolveImage' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdSetEvent- :: FunPtr (Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()) -> Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()---- | vkCmdSetEvent - Set an event object to signaled state------ = Description------ 'cmdSetEvent' behaves identically to--- 'Vulkan.Extensions.VK_KHR_synchronization2.cmdSetEvent2KHR', except that--- it does not define an access scope, and /must/ only be used with--- 'cmdWaitEvents', not--- 'Vulkan.Extensions.VK_KHR_synchronization2.cmdWaitEvents2KHR'.------ == Valid Usage------ - #VUID-vkCmdSetEvent-stageMask-04090# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'------ - #VUID-vkCmdSetEvent-stageMask-04091# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'--- or--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'------ - #VUID-vkCmdSetEvent-stageMask-04092# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'------ - #VUID-vkCmdSetEvent-stageMask-04093# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'------ - #VUID-vkCmdSetEvent-stageMask-04094# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'------ - #VUID-vkCmdSetEvent-stageMask-04095# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'------ - #VUID-vkCmdSetEvent-stageMask-04096# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'------ - #VUID-vkCmdSetEvent-stageMask-04097# 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--- 'Vulkan.Extensions.VK_NV_shading_rate_image.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'------ - #VUID-vkCmdSetEvent-stageMask-04098# Any pipeline stage included in--- @stageMask@ /must/ be supported by the capabilities of the queue--- family specified by the @queueFamilyIndex@ member of the--- 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that was--- used to create the 'Vulkan.Core10.Handles.CommandPool' that--- @commandBuffer@ was allocated from, as specified in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>------ - #VUID-vkCmdSetEvent-stageMask-03937# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>--- feature is not enabled, @stageMask@ /must/ not be @0@------ - #VUID-vkCmdSetEvent-stageMask-01149# @stageMask@ /must/ not include--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'------ - #VUID-vkCmdSetEvent-commandBuffer-01152# @commandBuffer@’s current--- device mask /must/ include exactly one physical device------ == Valid Usage (Implicit)------ - #VUID-vkCmdSetEvent-commandBuffer-parameter# @commandBuffer@ /must/--- be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdSetEvent-event-parameter# @event@ /must/ be a valid--- 'Vulkan.Core10.Handles.Event' handle------ - #VUID-vkCmdSetEvent-stageMask-parameter# @stageMask@ /must/ be a--- valid combination of--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'--- values------ - #VUID-vkCmdSetEvent-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-vkCmdSetEvent-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics, or compute operations------ - #VUID-vkCmdSetEvent-renderpass# This command /must/ only be called--- outside of a render pass instance------ - #VUID-vkCmdSetEvent-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_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Event',--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'-cmdSetEvent :: 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- -> -- | @stageMask@ specifies the- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>- -- used to determine the first- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>.- ("stageMask" ::: PipelineStageFlags)- -> io ()-cmdSetEvent commandBuffer event stageMask = liftIO $ do- let vkCmdSetEventPtr = pVkCmdSetEvent (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdSetEventPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetEvent is null" Nothing Nothing- let vkCmdSetEvent' = mkVkCmdSetEvent vkCmdSetEventPtr- traceAroundEvent "vkCmdSetEvent" (vkCmdSetEvent' (commandBufferHandle (commandBuffer)) (event) (stageMask))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdResetEvent- :: FunPtr (Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()) -> Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()---- | vkCmdResetEvent - Reset an event object to non-signaled state------ = Description------ 'cmdResetEvent' behaves identically to--- 'Vulkan.Extensions.VK_KHR_synchronization2.cmdResetEvent2KHR'.------ == Valid Usage------ - #VUID-vkCmdResetEvent-stageMask-04090# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'------ - #VUID-vkCmdResetEvent-stageMask-04091# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'--- or--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'------ - #VUID-vkCmdResetEvent-stageMask-04092# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'------ - #VUID-vkCmdResetEvent-stageMask-04093# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'------ - #VUID-vkCmdResetEvent-stageMask-04094# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'------ - #VUID-vkCmdResetEvent-stageMask-04095# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'------ - #VUID-vkCmdResetEvent-stageMask-04096# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'------ - #VUID-vkCmdResetEvent-stageMask-04097# 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--- 'Vulkan.Extensions.VK_NV_shading_rate_image.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'------ - #VUID-vkCmdResetEvent-stageMask-04098# Any pipeline stage included--- in @stageMask@ /must/ be supported by the capabilities of the queue--- family specified by the @queueFamilyIndex@ member of the--- 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that was--- used to create the 'Vulkan.Core10.Handles.CommandPool' that--- @commandBuffer@ was allocated from, as specified in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>------ - #VUID-vkCmdResetEvent-stageMask-03937# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>--- feature is not enabled, @stageMask@ /must/ not be @0@------ - #VUID-vkCmdResetEvent-stageMask-01153# @stageMask@ /must/ not--- include--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'------ - #VUID-vkCmdResetEvent-event-03834# There /must/ be an execution--- dependency between 'cmdResetEvent' and the execution of any--- 'cmdWaitEvents' that includes @event@ in its @pEvents@ parameter------ - #VUID-vkCmdResetEvent-event-03835# There /must/ be an execution--- dependency between 'cmdResetEvent' and the execution of any--- 'Vulkan.Extensions.VK_KHR_synchronization2.cmdWaitEvents2KHR' that--- includes @event@ in its @pEvents@ parameter------ - #VUID-vkCmdResetEvent-commandBuffer-01157# @commandBuffer@’s current--- device mask /must/ include exactly one physical device------ == Valid Usage (Implicit)------ - #VUID-vkCmdResetEvent-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdResetEvent-event-parameter# @event@ /must/ be a valid--- 'Vulkan.Core10.Handles.Event' handle------ - #VUID-vkCmdResetEvent-stageMask-parameter# @stageMask@ /must/ be a--- valid combination of--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'--- values------ - #VUID-vkCmdResetEvent-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-vkCmdResetEvent-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics, or compute operations------ - #VUID-vkCmdResetEvent-renderpass# This command /must/ only be called--- outside of a render pass instance------ - #VUID-vkCmdResetEvent-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_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Event',--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'-cmdResetEvent :: 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 bitmask of- -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'- -- specifying the- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>- -- used to determine when the @event@ is unsignaled.- ("stageMask" ::: PipelineStageFlags)- -> io ()-cmdResetEvent commandBuffer event stageMask = liftIO $ do- let vkCmdResetEventPtr = pVkCmdResetEvent (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdResetEventPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdResetEvent is null" Nothing Nothing- let vkCmdResetEvent' = mkVkCmdResetEvent vkCmdResetEventPtr- traceAroundEvent "vkCmdResetEvent" (vkCmdResetEvent' (commandBufferHandle (commandBuffer)) (event) (stageMask))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdWaitEventsUnsafe- :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()--foreign import ccall- "dynamic" mkVkCmdWaitEventsSafe- :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()---- | cmdWaitEvents with selectable safeness-cmdWaitEventsSafeOrUnsafe :: forall io- . (MonadIO io)- => (FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ())- -> -- | @commandBuffer@ is the command buffer into which the command is- -- recorded.- CommandBuffer- -> -- | @pEvents@ is a pointer to an array of event object handles to wait on.- ("events" ::: Vector Event)- -> -- | @srcStageMask@ is a bitmask of- -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'- -- specifying the- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>.- ("srcStageMask" ::: PipelineStageFlags)- -> -- | @dstStageMask@ is a bitmask of- -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'- -- specifying the- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages destination stage mask>.- ("dstStageMask" ::: PipelineStageFlags)- -> -- | @pMemoryBarriers@ is a pointer to an array of- -- 'Vulkan.Core10.OtherTypes.MemoryBarrier' structures.- ("memoryBarriers" ::: Vector MemoryBarrier)- -> -- | @pBufferMemoryBarriers@ is a pointer to an array of- -- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures.- ("bufferMemoryBarriers" ::: Vector BufferMemoryBarrier)- -> -- | @pImageMemoryBarriers@ is a pointer to an array of- -- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures.- ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier))- -> io ()-cmdWaitEventsSafeOrUnsafe mkVkCmdWaitEvents commandBuffer events srcStageMask dstStageMask memoryBarriers bufferMemoryBarriers imageMemoryBarriers = liftIO . evalContT $ do- let vkCmdWaitEventsPtr = pVkCmdWaitEvents (deviceCmds (commandBuffer :: CommandBuffer))- lift $ unless (vkCmdWaitEventsPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdWaitEvents is null" Nothing Nothing- let vkCmdWaitEvents' = mkVkCmdWaitEvents vkCmdWaitEventsPtr- pPEvents <- ContT $ allocaBytes @Event ((Data.Vector.length (events)) * 8)- lift $ Data.Vector.imapM_ (\i e -> poke (pPEvents `plusPtr` (8 * (i)) :: Ptr Event) (e)) (events)- pPMemoryBarriers <- ContT $ allocaBytes @MemoryBarrier ((Data.Vector.length (memoryBarriers)) * 24)- lift $ Data.Vector.imapM_ (\i e -> poke (pPMemoryBarriers `plusPtr` (24 * (i)) :: Ptr MemoryBarrier) (e)) (memoryBarriers)- pPBufferMemoryBarriers <- ContT $ allocaBytes @BufferMemoryBarrier ((Data.Vector.length (bufferMemoryBarriers)) * 56)- lift $ Data.Vector.imapM_ (\i e -> poke (pPBufferMemoryBarriers `plusPtr` (56 * (i)) :: Ptr BufferMemoryBarrier) (e)) (bufferMemoryBarriers)- pPImageMemoryBarriers <- ContT $ allocaBytes @(ImageMemoryBarrier _) ((Data.Vector.length (imageMemoryBarriers)) * 72)- Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPImageMemoryBarriers `plusPtr` (72 * (i)) :: Ptr (ImageMemoryBarrier _))) (e) . ($ ())) (imageMemoryBarriers)- lift $ traceAroundEvent "vkCmdWaitEvents" (vkCmdWaitEvents' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (events)) :: Word32)) (pPEvents) (srcStageMask) (dstStageMask) ((fromIntegral (Data.Vector.length $ (memoryBarriers)) :: Word32)) (pPMemoryBarriers) ((fromIntegral (Data.Vector.length $ (bufferMemoryBarriers)) :: Word32)) (pPBufferMemoryBarriers) ((fromIntegral (Data.Vector.length $ (imageMemoryBarriers)) :: Word32)) (forgetExtensions (pPImageMemoryBarriers)))- pure $ ()---- | vkCmdWaitEvents - Wait for one or more events and insert a set of memory------ = Description------ 'cmdWaitEvents' is largely similar to--- 'Vulkan.Extensions.VK_KHR_synchronization2.cmdWaitEvents2KHR', but /can/--- only wait on signal operations defined by 'cmdSetEvent'. As--- 'cmdSetEvent' does not define any access scopes, 'cmdWaitEvents' defines--- the first access scope for each event signal operation in addition to--- its own access scopes.------ Note------ Since 'cmdSetEvent' does not have any dependency information beyond a--- stage mask, implementations do not have the same opportunity to perform--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-available-and-visible availability and visibility operations>--- or--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transitions>--- in advance as they do with--- 'Vulkan.Extensions.VK_KHR_synchronization2.cmdSetEvent2KHR' and--- 'Vulkan.Extensions.VK_KHR_synchronization2.cmdWaitEvents2KHR'.------ When 'cmdWaitEvents' is submitted to a queue, it defines a memory--- dependency between prior event signal operations on the same queue or--- the host, and subsequent commands. 'cmdWaitEvents' /must/ not be used to--- wait on event signal operations occurring on other queues.------ The first synchronization scope only includes event signal operations--- that operate on members of @pEvents@, and the operations that--- happened-before the event signal operations. Event signal operations--- performed by 'cmdSetEvent' that occur earlier in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>--- are included in the first synchronization scope, if the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically latest>--- pipeline stage in their @stageMask@ parameter is--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically earlier>--- than or equal to the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically latest>--- pipeline stage in @srcStageMask@. Event signal operations performed by--- 'Vulkan.Core10.Event.setEvent' are only included in the first--- synchronization scope if--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT' is--- included in @srcStageMask@.------ The second--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>--- includes all commands that occur later in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.--- The second synchronization scope is limited to operations on the--- pipeline stages determined by the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>--- specified by @dstStageMask@.------ The first--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>--- is limited to accesses in the pipeline stages determined by the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>--- specified by @srcStageMask@. Within that, the first access scope only--- includes the first access scopes defined by elements of the--- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@--- arrays, which each define a set of--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.--- If no memory barriers are specified, then the first access scope--- includes no accesses.------ The second--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>--- is limited to accesses in the pipeline stages determined by the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>--- specified by @dstStageMask@. Within that, the second access scope only--- includes the second access scopes defined by elements of the--- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@--- arrays, which each define a set of--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.--- If no memory barriers are specified, then the second access scope--- includes no accesses.------ == Valid Usage------ - #VUID-vkCmdWaitEvents-srcStageMask-04090# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'------ - #VUID-vkCmdWaitEvents-srcStageMask-04091# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'--- or--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'------ - #VUID-vkCmdWaitEvents-srcStageMask-04092# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'------ - #VUID-vkCmdWaitEvents-srcStageMask-04093# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'------ - #VUID-vkCmdWaitEvents-srcStageMask-04094# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'------ - #VUID-vkCmdWaitEvents-srcStageMask-04095# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'------ - #VUID-vkCmdWaitEvents-srcStageMask-04096# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'------ - #VUID-vkCmdWaitEvents-srcStageMask-04097# 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--- 'Vulkan.Extensions.VK_NV_shading_rate_image.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'------ - #VUID-vkCmdWaitEvents-srcStageMask-04098# Any pipeline stage--- included in @srcStageMask@ /must/ be supported by the capabilities--- of the queue family specified by the @queueFamilyIndex@ member of--- the 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that--- was used to create the 'Vulkan.Core10.Handles.CommandPool' that--- @commandBuffer@ was allocated from, as specified in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>------ - #VUID-vkCmdWaitEvents-srcStageMask-03937# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>--- feature is not enabled, @srcStageMask@ /must/ not be @0@------ - #VUID-vkCmdWaitEvents-dstStageMask-04090# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'------ - #VUID-vkCmdWaitEvents-dstStageMask-04091# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'--- or--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'------ - #VUID-vkCmdWaitEvents-dstStageMask-04092# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'------ - #VUID-vkCmdWaitEvents-dstStageMask-04093# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'------ - #VUID-vkCmdWaitEvents-dstStageMask-04094# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'------ - #VUID-vkCmdWaitEvents-dstStageMask-04095# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'------ - #VUID-vkCmdWaitEvents-dstStageMask-04096# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'------ - #VUID-vkCmdWaitEvents-dstStageMask-04097# 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--- 'Vulkan.Extensions.VK_NV_shading_rate_image.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'------ - #VUID-vkCmdWaitEvents-dstStageMask-04098# Any pipeline stage--- included in @dstStageMask@ /must/ be supported by the capabilities--- of the queue family specified by the @queueFamilyIndex@ member of--- the 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that--- was used to create the 'Vulkan.Core10.Handles.CommandPool' that--- @commandBuffer@ was allocated from, as specified in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>------ - #VUID-vkCmdWaitEvents-dstStageMask-03937# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>--- feature is not enabled, @dstStageMask@ /must/ not be @0@------ - #VUID-vkCmdWaitEvents-srcAccessMask-02815# The @srcAccessMask@--- member of each element of @pMemoryBarriers@ /must/ only include--- access flags that are supported by one or more of the pipeline--- stages in @srcStageMask@, as specified in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ - #VUID-vkCmdWaitEvents-dstAccessMask-02816# The @dstAccessMask@--- member of each element of @pMemoryBarriers@ /must/ only include--- access flags that are supported by one or more of the pipeline--- stages in @dstStageMask@, as specified in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ - #VUID-vkCmdWaitEvents-pBufferMemoryBarriers-02817# For any element--- of @pBufferMemoryBarriers@, if its @srcQueueFamilyIndex@ and--- @dstQueueFamilyIndex@ members are equal, or if its--- @srcQueueFamilyIndex@ is the queue family index that was used to--- create the command pool that @commandBuffer@ was allocated from,--- then its @srcAccessMask@ member /must/ only contain access flags--- that are supported by one or more of the pipeline stages in--- @srcStageMask@, as specified in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ - #VUID-vkCmdWaitEvents-pBufferMemoryBarriers-02818# For any element--- of @pBufferMemoryBarriers@, if its @srcQueueFamilyIndex@ and--- @dstQueueFamilyIndex@ members are equal, or if its--- @dstQueueFamilyIndex@ is the queue family index that was used to--- create the command pool that @commandBuffer@ was allocated from,--- then its @dstAccessMask@ member /must/ only contain access flags--- that are supported by one or more of the pipeline stages in--- @dstStageMask@, as specified in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ - #VUID-vkCmdWaitEvents-pImageMemoryBarriers-02819# For any element of--- @pImageMemoryBarriers@, if its @srcQueueFamilyIndex@ and--- @dstQueueFamilyIndex@ members are equal, or if its--- @srcQueueFamilyIndex@ is the queue family index that was used to--- create the command pool that @commandBuffer@ was allocated from,--- then its @srcAccessMask@ member /must/ only contain access flags--- that are supported by one or more of the pipeline stages in--- @srcStageMask@, as specified in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ - #VUID-vkCmdWaitEvents-pImageMemoryBarriers-02820# For any element of--- @pImageMemoryBarriers@, if its @srcQueueFamilyIndex@ and--- @dstQueueFamilyIndex@ members are equal, or if its--- @dstQueueFamilyIndex@ is the queue family index that was used to--- create the command pool that @commandBuffer@ was allocated from,--- then its @dstAccessMask@ member /must/ only contain access flags--- that are supported by one or more of the pipeline stages in--- @dstStageMask@, as specified in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ - #VUID-vkCmdWaitEvents-srcStageMask-01158# @srcStageMask@ /must/ be--- the bitwise OR of the @stageMask@ parameter used in previous calls--- to 'cmdSetEvent' with any of the elements of @pEvents@ and--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'--- if any of the elements of @pEvents@ was set using--- 'Vulkan.Core10.Event.setEvent'------ - #VUID-vkCmdWaitEvents-pEvents-01163# 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--- 'cmdWaitEvents' /must/ not be called inside a render pass instance------ - #VUID-vkCmdWaitEvents-srcQueueFamilyIndex-02803# The--- @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members of any--- element of @pBufferMemoryBarriers@ or @pImageMemoryBarriers@ /must/--- be equal------ - #VUID-vkCmdWaitEvents-commandBuffer-01167# @commandBuffer@’s current--- device mask /must/ include exactly one physical device------ - #VUID-vkCmdWaitEvents-pEvents-03847# Elements of @pEvents@ /must/--- not have been signaled by--- 'Vulkan.Extensions.VK_KHR_synchronization2.cmdSetEvent2KHR'------ == Valid Usage (Implicit)------ - #VUID-vkCmdWaitEvents-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdWaitEvents-pEvents-parameter# @pEvents@ /must/ be a valid--- pointer to an array of @eventCount@ valid--- 'Vulkan.Core10.Handles.Event' handles------ - #VUID-vkCmdWaitEvents-srcStageMask-parameter# @srcStageMask@ /must/--- be a valid combination of--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'--- values------ - #VUID-vkCmdWaitEvents-dstStageMask-parameter# @dstStageMask@ /must/--- be a valid combination of--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'--- values------ - #VUID-vkCmdWaitEvents-pMemoryBarriers-parameter# If--- @memoryBarrierCount@ is not @0@, @pMemoryBarriers@ /must/ be a valid--- pointer to an array of @memoryBarrierCount@ valid--- 'Vulkan.Core10.OtherTypes.MemoryBarrier' structures------ - #VUID-vkCmdWaitEvents-pBufferMemoryBarriers-parameter# If--- @bufferMemoryBarrierCount@ is not @0@, @pBufferMemoryBarriers@--- /must/ be a valid pointer to an array of @bufferMemoryBarrierCount@--- valid 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures------ - #VUID-vkCmdWaitEvents-pImageMemoryBarriers-parameter# If--- @imageMemoryBarrierCount@ is not @0@, @pImageMemoryBarriers@ /must/--- be a valid pointer to an array of @imageMemoryBarrierCount@ valid--- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures------ - #VUID-vkCmdWaitEvents-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-vkCmdWaitEvents-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics, or compute operations------ - #VUID-vkCmdWaitEvents-eventCount-arraylength# @eventCount@ /must/ be--- greater than @0@------ - #VUID-vkCmdWaitEvents-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_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier',--- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Event',--- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier',--- 'Vulkan.Core10.OtherTypes.MemoryBarrier',--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'-cmdWaitEvents :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command is- -- recorded.- CommandBuffer- -> -- | @pEvents@ is a pointer to an array of event object handles to wait on.- ("events" ::: Vector Event)- -> -- | @srcStageMask@ is a bitmask of- -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'- -- specifying the- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>.- ("srcStageMask" ::: PipelineStageFlags)- -> -- | @dstStageMask@ is a bitmask of- -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'- -- specifying the- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages destination stage mask>.- ("dstStageMask" ::: PipelineStageFlags)- -> -- | @pMemoryBarriers@ is a pointer to an array of- -- 'Vulkan.Core10.OtherTypes.MemoryBarrier' structures.- ("memoryBarriers" ::: Vector MemoryBarrier)- -> -- | @pBufferMemoryBarriers@ is a pointer to an array of- -- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures.- ("bufferMemoryBarriers" ::: Vector BufferMemoryBarrier)- -> -- | @pImageMemoryBarriers@ is a pointer to an array of- -- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures.- ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier))- -> io ()-cmdWaitEvents = cmdWaitEventsSafeOrUnsafe mkVkCmdWaitEventsUnsafe---- | A variant of 'cmdWaitEvents' which makes a *safe* FFI call-cmdWaitEventsSafe :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command is- -- recorded.- CommandBuffer- -> -- | @pEvents@ is a pointer to an array of event object handles to wait on.- ("events" ::: Vector Event)- -> -- | @srcStageMask@ is a bitmask of- -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'- -- specifying the- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>.- ("srcStageMask" ::: PipelineStageFlags)- -> -- | @dstStageMask@ is a bitmask of- -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'- -- specifying the- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages destination stage mask>.- ("dstStageMask" ::: PipelineStageFlags)- -> -- | @pMemoryBarriers@ is a pointer to an array of- -- 'Vulkan.Core10.OtherTypes.MemoryBarrier' structures.- ("memoryBarriers" ::: Vector MemoryBarrier)- -> -- | @pBufferMemoryBarriers@ is a pointer to an array of- -- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures.- ("bufferMemoryBarriers" ::: Vector BufferMemoryBarrier)- -> -- | @pImageMemoryBarriers@ is a pointer to an array of- -- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures.- ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier))- -> io ()-cmdWaitEventsSafe = cmdWaitEventsSafeOrUnsafe mkVkCmdWaitEventsSafe---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdPipelineBarrier- :: FunPtr (Ptr CommandBuffer_T -> PipelineStageFlags -> PipelineStageFlags -> DependencyFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()) -> Ptr CommandBuffer_T -> PipelineStageFlags -> PipelineStageFlags -> DependencyFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()---- | vkCmdPipelineBarrier - Insert a memory dependency------ = Description------ 'cmdPipelineBarrier' operates almost identically to--- 'Vulkan.Extensions.VK_KHR_synchronization2.cmdPipelineBarrier2KHR',--- except that the scopes and barriers are defined as direct parameters--- rather than being defined by an--- 'Vulkan.Extensions.VK_KHR_synchronization2.DependencyInfoKHR'.------ When 'cmdPipelineBarrier' is submitted to a queue, it defines a memory--- dependency between commands that were submitted before it, and those--- submitted after it.------ If 'cmdPipelineBarrier' was recorded outside a render pass instance, 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>.--- If 'cmdPipelineBarrier' was recorded inside a render pass instance, the--- first synchronization scope includes only commands that occur earlier in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>--- within the same subpass. In either case, the first synchronization scope--- is limited to operations on the pipeline stages determined by the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>--- specified by @srcStageMask@.------ If 'cmdPipelineBarrier' was recorded outside a render pass instance, the--- second--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>--- includes all commands that occur later in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.--- If 'cmdPipelineBarrier' was recorded inside a render pass instance, the--- second synchronization scope includes only commands that occur later in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>--- within the same subpass. In either case, the second synchronization--- scope is limited to operations on the pipeline stages determined by the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>--- specified by @dstStageMask@.------ The first--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>--- is limited to accesses in the pipeline stages determined by the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>--- specified by @srcStageMask@. Within that, the first access scope only--- includes the first access scopes defined by elements of the--- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@--- arrays, which each define a set of--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.--- If no memory barriers are specified, then the first access scope--- includes no accesses.------ The second--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>--- is limited to accesses in the pipeline stages determined by the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>--- specified by @dstStageMask@. Within that, the second access scope only--- includes the second access scopes defined by elements of the--- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@--- arrays, which each define a set of--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.--- If no memory barriers are specified, then the second access scope--- includes no accesses.------ If @dependencyFlags@ includes--- 'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_BY_REGION_BIT', then--- any dependency between--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-space>--- pipeline stages is--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-local>--- - otherwise it is--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-global>.------ == Valid Usage------ - #VUID-vkCmdPipelineBarrier-srcStageMask-04090# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'------ - #VUID-vkCmdPipelineBarrier-srcStageMask-04091# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'--- or--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'------ - #VUID-vkCmdPipelineBarrier-srcStageMask-04092# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'------ - #VUID-vkCmdPipelineBarrier-srcStageMask-04093# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'------ - #VUID-vkCmdPipelineBarrier-srcStageMask-04094# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'------ - #VUID-vkCmdPipelineBarrier-srcStageMask-04095# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'------ - #VUID-vkCmdPipelineBarrier-srcStageMask-04096# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'------ - #VUID-vkCmdPipelineBarrier-srcStageMask-04097# 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--- 'Vulkan.Extensions.VK_NV_shading_rate_image.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'------ - #VUID-vkCmdPipelineBarrier-srcStageMask-04098# Any pipeline stage--- included in @srcStageMask@ /must/ be supported by the capabilities--- of the queue family specified by the @queueFamilyIndex@ member of--- the 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that--- was used to create the 'Vulkan.Core10.Handles.CommandPool' that--- @commandBuffer@ was allocated from, as specified in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>------ - #VUID-vkCmdPipelineBarrier-srcStageMask-03937# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>--- feature is not enabled, @srcStageMask@ /must/ not be @0@------ - #VUID-vkCmdPipelineBarrier-dstStageMask-04090# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'------ - #VUID-vkCmdPipelineBarrier-dstStageMask-04091# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'--- or--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'------ - #VUID-vkCmdPipelineBarrier-dstStageMask-04092# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'------ - #VUID-vkCmdPipelineBarrier-dstStageMask-04093# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'------ - #VUID-vkCmdPipelineBarrier-dstStageMask-04094# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'------ - #VUID-vkCmdPipelineBarrier-dstStageMask-04095# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'------ - #VUID-vkCmdPipelineBarrier-dstStageMask-04096# 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--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'------ - #VUID-vkCmdPipelineBarrier-dstStageMask-04097# 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--- 'Vulkan.Extensions.VK_NV_shading_rate_image.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'------ - #VUID-vkCmdPipelineBarrier-dstStageMask-04098# Any pipeline stage--- included in @dstStageMask@ /must/ be supported by the capabilities--- of the queue family specified by the @queueFamilyIndex@ member of--- the 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that--- was used to create the 'Vulkan.Core10.Handles.CommandPool' that--- @commandBuffer@ was allocated from, as specified in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>------ - #VUID-vkCmdPipelineBarrier-dstStageMask-03937# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>--- feature is not enabled, @dstStageMask@ /must/ not be @0@------ - #VUID-vkCmdPipelineBarrier-srcAccessMask-02815# The @srcAccessMask@--- member of each element of @pMemoryBarriers@ /must/ only include--- access flags that are supported by one or more of the pipeline--- stages in @srcStageMask@, as specified in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ - #VUID-vkCmdPipelineBarrier-dstAccessMask-02816# The @dstAccessMask@--- member of each element of @pMemoryBarriers@ /must/ only include--- access flags that are supported by one or more of the pipeline--- stages in @dstStageMask@, as specified in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ - #VUID-vkCmdPipelineBarrier-pBufferMemoryBarriers-02817# For any--- element of @pBufferMemoryBarriers@, if its @srcQueueFamilyIndex@ and--- @dstQueueFamilyIndex@ members are equal, or if its--- @srcQueueFamilyIndex@ is the queue family index that was used to--- create the command pool that @commandBuffer@ was allocated from,--- then its @srcAccessMask@ member /must/ only contain access flags--- that are supported by one or more of the pipeline stages in--- @srcStageMask@, as specified in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ - #VUID-vkCmdPipelineBarrier-pBufferMemoryBarriers-02818# For any--- element of @pBufferMemoryBarriers@, if its @srcQueueFamilyIndex@ and--- @dstQueueFamilyIndex@ members are equal, or if its--- @dstQueueFamilyIndex@ is the queue family index that was used to--- create the command pool that @commandBuffer@ was allocated from,--- then its @dstAccessMask@ member /must/ only contain access flags--- that are supported by one or more of the pipeline stages in--- @dstStageMask@, as specified in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ - #VUID-vkCmdPipelineBarrier-pImageMemoryBarriers-02819# For any--- element of @pImageMemoryBarriers@, if its @srcQueueFamilyIndex@ and--- @dstQueueFamilyIndex@ members are equal, or if its--- @srcQueueFamilyIndex@ is the queue family index that was used to--- create the command pool that @commandBuffer@ was allocated from,--- then its @srcAccessMask@ member /must/ only contain access flags--- that are supported by one or more of the pipeline stages in--- @srcStageMask@, as specified in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ - #VUID-vkCmdPipelineBarrier-pImageMemoryBarriers-02820# For any--- element of @pImageMemoryBarriers@, if its @srcQueueFamilyIndex@ and--- @dstQueueFamilyIndex@ members are equal, or if its--- @dstQueueFamilyIndex@ is the queue family index that was used to--- create the command pool that @commandBuffer@ was allocated from,--- then its @dstAccessMask@ member /must/ only contain access flags--- that are supported by one or more of the pipeline stages in--- @dstStageMask@, as specified in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ - #VUID-vkCmdPipelineBarrier-pDependencies-02285# If--- 'cmdPipelineBarrier' 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-vkCmdPipelineBarrier-bufferMemoryBarrierCount-01178# If--- 'cmdPipelineBarrier' is called within a render pass instance, it--- /must/ not include any buffer memory barriers------ - #VUID-vkCmdPipelineBarrier-image-04073# If 'cmdPipelineBarrier' 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-vkCmdPipelineBarrier-oldLayout-01181# If 'cmdPipelineBarrier'--- 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-vkCmdPipelineBarrier-srcQueueFamilyIndex-01182# If--- 'cmdPipelineBarrier' 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-vkCmdPipelineBarrier-dependencyFlags-01186# If--- 'cmdPipelineBarrier' is called outside of a render pass instance,--- 'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT'--- /must/ not be included in the dependency flags------ == Valid Usage (Implicit)------ - #VUID-vkCmdPipelineBarrier-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdPipelineBarrier-srcStageMask-parameter# @srcStageMask@--- /must/ be a valid combination of--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'--- values------ - #VUID-vkCmdPipelineBarrier-dstStageMask-parameter# @dstStageMask@--- /must/ be a valid combination of--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'--- values------ - #VUID-vkCmdPipelineBarrier-dependencyFlags-parameter#--- @dependencyFlags@ /must/ be a valid combination of--- 'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits' values------ - #VUID-vkCmdPipelineBarrier-pMemoryBarriers-parameter# If--- @memoryBarrierCount@ is not @0@, @pMemoryBarriers@ /must/ be a valid--- pointer to an array of @memoryBarrierCount@ valid--- 'Vulkan.Core10.OtherTypes.MemoryBarrier' structures------ - #VUID-vkCmdPipelineBarrier-pBufferMemoryBarriers-parameter# If--- @bufferMemoryBarrierCount@ is not @0@, @pBufferMemoryBarriers@--- /must/ be a valid pointer to an array of @bufferMemoryBarrierCount@--- valid 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures------ - #VUID-vkCmdPipelineBarrier-pImageMemoryBarriers-parameter# If--- @imageMemoryBarrierCount@ is not @0@, @pImageMemoryBarriers@ /must/--- be a valid pointer to an array of @imageMemoryBarrierCount@ valid--- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures------ - #VUID-vkCmdPipelineBarrier-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-vkCmdPipelineBarrier-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_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier',--- 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlags',--- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier',--- 'Vulkan.Core10.OtherTypes.MemoryBarrier',--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'-cmdPipelineBarrier :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command is- -- recorded.- CommandBuffer- -> -- | @srcStageMask@ is a bitmask of- -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'- -- specifying the- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stages>.- ("srcStageMask" ::: PipelineStageFlags)- -> -- | @dstStageMask@ is a bitmask of- -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'- -- specifying the- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stages>.- ("dstStageMask" ::: PipelineStageFlags)- -> -- | @dependencyFlags@ is a bitmask of- -- 'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits' specifying- -- how execution and memory dependencies are formed.- DependencyFlags- -> -- | @pMemoryBarriers@ is a pointer to an array of- -- 'Vulkan.Core10.OtherTypes.MemoryBarrier' structures.- ("memoryBarriers" ::: Vector MemoryBarrier)- -> -- | @pBufferMemoryBarriers@ is a pointer to an array of- -- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures.- ("bufferMemoryBarriers" ::: Vector BufferMemoryBarrier)- -> -- | @pImageMemoryBarriers@ is a pointer to an array of- -- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures.- ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier))- -> io ()-cmdPipelineBarrier commandBuffer srcStageMask dstStageMask dependencyFlags memoryBarriers bufferMemoryBarriers imageMemoryBarriers = liftIO . evalContT $ do- let vkCmdPipelineBarrierPtr = pVkCmdPipelineBarrier (deviceCmds (commandBuffer :: CommandBuffer))- lift $ unless (vkCmdPipelineBarrierPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdPipelineBarrier is null" Nothing Nothing- let vkCmdPipelineBarrier' = mkVkCmdPipelineBarrier vkCmdPipelineBarrierPtr- pPMemoryBarriers <- ContT $ allocaBytes @MemoryBarrier ((Data.Vector.length (memoryBarriers)) * 24)- lift $ Data.Vector.imapM_ (\i e -> poke (pPMemoryBarriers `plusPtr` (24 * (i)) :: Ptr MemoryBarrier) (e)) (memoryBarriers)- pPBufferMemoryBarriers <- ContT $ allocaBytes @BufferMemoryBarrier ((Data.Vector.length (bufferMemoryBarriers)) * 56)- lift $ Data.Vector.imapM_ (\i e -> poke (pPBufferMemoryBarriers `plusPtr` (56 * (i)) :: Ptr BufferMemoryBarrier) (e)) (bufferMemoryBarriers)- pPImageMemoryBarriers <- ContT $ allocaBytes @(ImageMemoryBarrier _) ((Data.Vector.length (imageMemoryBarriers)) * 72)- Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPImageMemoryBarriers `plusPtr` (72 * (i)) :: Ptr (ImageMemoryBarrier _))) (e) . ($ ())) (imageMemoryBarriers)- lift $ traceAroundEvent "vkCmdPipelineBarrier" (vkCmdPipelineBarrier' (commandBufferHandle (commandBuffer)) (srcStageMask) (dstStageMask) (dependencyFlags) ((fromIntegral (Data.Vector.length $ (memoryBarriers)) :: Word32)) (pPMemoryBarriers) ((fromIntegral (Data.Vector.length $ (bufferMemoryBarriers)) :: Word32)) (pPBufferMemoryBarriers) ((fromIntegral (Data.Vector.length $ (imageMemoryBarriers)) :: Word32)) (forgetExtensions (pPImageMemoryBarriers)))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdBeginQuery- :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> QueryControlFlags -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> QueryControlFlags -> IO ()---- | vkCmdBeginQuery - Begin a query------ = Description------ If the @queryType@ of the pool is--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' and @flags@--- contains--- 'Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT', an--- implementation /must/ return a result that matches the actual number of--- samples passed. This is described in more detail in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-occlusion Occlusion Queries>.------ Calling 'cmdBeginQuery' is equivalent to calling--- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginQueryIndexedEXT'--- with the @index@ parameter set to zero.------ After beginning a query, that query is considered /active/ within the--- command buffer it was called in until that same query is ended. Queries--- active in a primary command buffer when secondary command buffers are--- executed are considered active for those secondary command buffers.------ == Valid Usage------ - #VUID-vkCmdBeginQuery-None-00807# All queries used by the command--- /must/ be unavailable------ - #VUID-vkCmdBeginQuery-queryType-02804# The @queryType@ used to--- create @queryPool@ /must/ not be--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'------ - #VUID-vkCmdBeginQuery-queryType-04728# The @queryType@ used to--- create @queryPool@ /must/ not be--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'--- or--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'------ - #VUID-vkCmdBeginQuery-queryType-04729# The @queryType@ used to--- create @queryPool@ /must/ not be--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV'------ - #VUID-vkCmdBeginQuery-queryType-00800# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-occlusionQueryPrecise precise occlusion queries>--- feature is not enabled, or the @queryType@ used to create--- @queryPool@ was not--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION', @flags@ /must/--- not contain--- 'Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT'------ - #VUID-vkCmdBeginQuery-query-00802# @query@ /must/ be less than the--- number of queries in @queryPool@------ - #VUID-vkCmdBeginQuery-queryType-00803# If the @queryType@ used to--- create @queryPool@ was--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION', the--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics operations------ - #VUID-vkCmdBeginQuery-queryType-00804# If the @queryType@ used to--- create @queryPool@ was--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS' and--- any of the @pipelineStatistics@ indicate graphics operations, the--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics operations------ - #VUID-vkCmdBeginQuery-queryType-00805# If the @queryType@ used to--- create @queryPool@ was--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS' and--- any of the @pipelineStatistics@ indicate compute operations, the--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support compute operations------ - #VUID-vkCmdBeginQuery-commandBuffer-01885# @commandBuffer@ /must/--- not be a protected command buffer------ - #VUID-vkCmdBeginQuery-query-00808# If 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@------ - #VUID-vkCmdBeginQuery-queryPool-01922# @queryPool@ /must/ have been--- created with a @queryType@ that differs from that of any queries--- that are--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>--- within @commandBuffer@------ - #VUID-vkCmdBeginQuery-queryType-02327# If the @queryType@ used to--- create @queryPool@ was--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'--- the 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics operations------ - #VUID-vkCmdBeginQuery-queryType-02328# If the @queryType@ used to--- create @queryPool@ was--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'--- then--- 'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackPropertiesEXT'::@transformFeedbackQueries@--- /must/ be supported------ - #VUID-vkCmdBeginQuery-queryPool-03223# If @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 before--- 'Vulkan.Core10.CommandBuffer.beginCommandBuffer' was called on--- @commandBuffer@------ - #VUID-vkCmdBeginQuery-queryPool-03224# If @queryPool@ was created--- with a @queryType@ of--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and--- one of the counters used to create @queryPool@ was--- 'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR',--- the query begin /must/ be the first recorded command in--- @commandBuffer@------ - #VUID-vkCmdBeginQuery-queryPool-03225# If @queryPool@ was created--- with a @queryType@ of--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and--- one of the counters used to create @queryPool@ was--- 'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR',--- the begin command /must/ not be recorded within a render pass--- instance------ - #VUID-vkCmdBeginQuery-queryPool-03226# If @queryPool@ was created--- with a @queryType@ of--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and--- another query pool with a @queryType@--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' has--- been used within @commandBuffer@, its parent primary command buffer--- or secondary command buffer recorded within the same parent primary--- command buffer as @commandBuffer@, the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-performanceCounterMultipleQueryPools performanceCounterMultipleQueryPools>--- feature /must/ be enabled------ - #VUID-vkCmdBeginQuery-None-02863# If @queryPool@ was created with a--- @queryType@ of--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',--- this command /must/ not be recorded in a command buffer that, either--- directly or through secondary command buffers, also contains a--- 'cmdResetQueryPool' command affecting the same query------ == Valid Usage (Implicit)------ - #VUID-vkCmdBeginQuery-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdBeginQuery-queryPool-parameter# @queryPool@ /must/ be a--- valid 'Vulkan.Core10.Handles.QueryPool' handle------ - #VUID-vkCmdBeginQuery-flags-parameter# @flags@ /must/ be a valid--- combination of--- 'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlagBits'--- values------ - #VUID-vkCmdBeginQuery-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-vkCmdBeginQuery-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics, or compute operations------ - #VUID-vkCmdBeginQuery-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 | Graphics |--- | Secondary | | Compute |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlags',--- 'Vulkan.Core10.Handles.QueryPool'-cmdBeginQuery :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which this command will be- -- recorded.- CommandBuffer- -> -- | @queryPool@ is the query pool that will manage the results of the query.- QueryPool- -> -- | @query@ is the query index within the query pool that will contain the- -- results.- ("query" ::: Word32)- -> -- | @flags@ is a bitmask of- -- 'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlagBits'- -- specifying constraints on the types of queries that /can/ be performed.- QueryControlFlags- -> io ()-cmdBeginQuery commandBuffer queryPool query flags = liftIO $ do- let vkCmdBeginQueryPtr = pVkCmdBeginQuery (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdBeginQueryPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBeginQuery is null" Nothing Nothing- let vkCmdBeginQuery' = mkVkCmdBeginQuery vkCmdBeginQueryPtr- traceAroundEvent "vkCmdBeginQuery" (vkCmdBeginQuery' (commandBufferHandle (commandBuffer)) (queryPool) (query) (flags))- pure $ ()---- | This function will call the supplied action between calls to--- 'cmdBeginQuery' and 'cmdEndQuery'------ Note that 'cmdEndQuery' is *not* called if an exception is thrown by the--- inner action.-cmdUseQuery :: forall io r . MonadIO io => CommandBuffer -> QueryPool -> Word32 -> QueryControlFlags -> io r -> io r-cmdUseQuery commandBuffer queryPool query flags a =- (cmdBeginQuery commandBuffer queryPool query flags) *> a <* (cmdEndQuery commandBuffer queryPool query)---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdEndQuery- :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> IO ()---- | vkCmdEndQuery - Ends a query------ = Description------ Calling 'cmdEndQuery' is equivalent to calling--- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndQueryIndexedEXT' with--- the @index@ parameter set to zero.------ As queries operate asynchronously, ending a query does not immediately--- set the query’s status to available. A query is considered /finished/--- when the final results of the query are ready to be retrieved by--- 'Vulkan.Core10.Query.getQueryPoolResults' and 'cmdCopyQueryPoolResults',--- and this is when the query’s status is set to available.------ Once a query is ended the query /must/ finish in finite time, unless the--- state of the query is changed using other commands, e.g. by issuing a--- reset of the query.------ == Valid Usage------ - #VUID-vkCmdEndQuery-None-01923# All queries used by the command--- /must/ be--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>------ - #VUID-vkCmdEndQuery-query-00810# @query@ /must/ be less than the--- number of queries in @queryPool@------ - #VUID-vkCmdEndQuery-commandBuffer-01886# @commandBuffer@ /must/ not--- be a protected command buffer------ - #VUID-vkCmdEndQuery-query-00812# If 'cmdEndQuery' 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@------ - #VUID-vkCmdEndQuery-queryPool-03227# If @queryPool@ was created with--- a @queryType@ of--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and--- one or more of the counters used to create @queryPool@ was--- 'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR',--- the 'cmdEndQuery' /must/ be the last recorded command in--- @commandBuffer@------ - #VUID-vkCmdEndQuery-queryPool-03228# If @queryPool@ was created with--- a @queryType@ of--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and--- one or more of the counters used to create @queryPool@ was--- 'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR',--- the 'cmdEndQuery' /must/ not be recorded within a render pass--- instance------ == Valid Usage (Implicit)------ - #VUID-vkCmdEndQuery-commandBuffer-parameter# @commandBuffer@ /must/--- be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdEndQuery-queryPool-parameter# @queryPool@ /must/ be a--- valid 'Vulkan.Core10.Handles.QueryPool' handle------ - #VUID-vkCmdEndQuery-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-vkCmdEndQuery-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics, or compute operations------ - #VUID-vkCmdEndQuery-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 | Graphics |--- | Secondary | | Compute |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.QueryPool'-cmdEndQuery :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which this command will be- -- recorded.- CommandBuffer- -> -- | @queryPool@ is the query pool that is managing the results of the query.- QueryPool- -> -- | @query@ is the query index within the query pool where the result is- -- stored.- ("query" ::: Word32)- -> io ()-cmdEndQuery commandBuffer queryPool query = liftIO $ do- let vkCmdEndQueryPtr = pVkCmdEndQuery (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdEndQueryPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdEndQuery is null" Nothing Nothing- let vkCmdEndQuery' = mkVkCmdEndQuery vkCmdEndQueryPtr- traceAroundEvent "vkCmdEndQuery" (vkCmdEndQuery' (commandBufferHandle (commandBuffer)) (queryPool) (query))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdResetQueryPool- :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> IO ()---- | vkCmdResetQueryPool - Reset queries in a query pool------ = Description------ When executed on a queue, this command sets the status of query indices--- [@firstQuery@, @firstQuery@ + @queryCount@ - 1] to unavailable.------ If the @queryType@ used to create @queryPool@ was--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR', this--- command sets the status of query indices [@firstQuery@, @firstQuery@ +--- @queryCount@ - 1] to unavailable for each pass of @queryPool@, as--- indicated by a call to--- 'Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'.------ Note------ Because 'cmdResetQueryPool' resets all the passes of the indicated--- queries, applications must not record a 'cmdResetQueryPool' command for--- a @queryPool@ created with--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' in a--- command buffer that needs to be submitted multiple times as indicated by--- a call to--- 'Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'.--- Otherwise applications will never be able to complete the recorded--- queries.------ == Valid Usage------ - #VUID-vkCmdResetQueryPool-firstQuery-00796# @firstQuery@ /must/ be--- less than the number of queries in @queryPool@------ - #VUID-vkCmdResetQueryPool-firstQuery-00797# The sum of @firstQuery@--- and @queryCount@ /must/ be less than or equal to the number of--- queries in @queryPool@------ - #VUID-vkCmdResetQueryPool-None-02841# All queries used by the--- command /must/ not be active------ - #VUID-vkCmdResetQueryPool-firstQuery-02862# If @queryPool@ was--- created with--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',--- this command /must/ not be recorded in a command buffer that, either--- directly or through secondary command buffers, also contains begin--- commands for a query from the set of queries [@firstQuery@,--- @firstQuery@ + @queryCount@ - 1]------ == Valid Usage (Implicit)------ - #VUID-vkCmdResetQueryPool-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdResetQueryPool-queryPool-parameter# @queryPool@ /must/ be--- a valid 'Vulkan.Core10.Handles.QueryPool' handle------ - #VUID-vkCmdResetQueryPool-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-vkCmdResetQueryPool-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics, or compute operations------ - #VUID-vkCmdResetQueryPool-renderpass# This command /must/ only be--- called outside of a render pass instance------ - #VUID-vkCmdResetQueryPool-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 | Outside | Graphics |--- | Secondary | | Compute |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.QueryPool'-cmdResetQueryPool :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which this command will be- -- recorded.- CommandBuffer- -> -- | @queryPool@ is the handle of the query pool managing the queries being- -- reset.- QueryPool- -> -- | @firstQuery@ is the initial query index to reset.- ("firstQuery" ::: Word32)- -> -- | @queryCount@ is the number of queries to reset.- ("queryCount" ::: Word32)- -> io ()-cmdResetQueryPool commandBuffer queryPool firstQuery queryCount = liftIO $ do- let vkCmdResetQueryPoolPtr = pVkCmdResetQueryPool (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdResetQueryPoolPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdResetQueryPool is null" Nothing Nothing- let vkCmdResetQueryPool' = mkVkCmdResetQueryPool vkCmdResetQueryPoolPtr- traceAroundEvent "vkCmdResetQueryPool" (vkCmdResetQueryPool' (commandBufferHandle (commandBuffer)) (queryPool) (firstQuery) (queryCount))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdWriteTimestamp- :: FunPtr (Ptr CommandBuffer_T -> PipelineStageFlagBits -> QueryPool -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> PipelineStageFlagBits -> QueryPool -> Word32 -> IO ()---- | vkCmdWriteTimestamp - Write a device timestamp into a query object------ = Description------ 'cmdWriteTimestamp' latches the value of the timer when all previous--- commands have completed executing as far as the specified pipeline--- stage, and writes the timestamp value to memory. 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 'cmdWriteTimestamp' 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-vkCmdWriteTimestamp-pipelineStage-04074# @pipelineStage@--- /must/ be a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported valid stage>--- for the queue family that was used to create the command pool that--- @commandBuffer@ was allocated from------ - #VUID-vkCmdWriteTimestamp-pipelineStage-04075# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>--- feature is not enabled, @pipelineStage@ /must/ not be--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'------ - #VUID-vkCmdWriteTimestamp-pipelineStage-04076# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>--- feature is not enabled, @pipelineStage@ /must/ not be--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'--- or--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'------ - #VUID-vkCmdWriteTimestamp-pipelineStage-04077# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>--- feature is not enabled, @pipelineStage@ /must/ not be--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'------ - #VUID-vkCmdWriteTimestamp-pipelineStage-04078# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>--- feature is not enabled, @pipelineStage@ /must/ not be--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'------ - #VUID-vkCmdWriteTimestamp-pipelineStage-04079# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>--- feature is not enabled, @pipelineStage@ /must/ not be--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'------ - #VUID-vkCmdWriteTimestamp-pipelineStage-04080# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>--- feature is not enabled, @pipelineStage@ /must/ not be--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'--- or--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'------ - #VUID-vkCmdWriteTimestamp-pipelineStage-04081# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>--- feature is not enabled, @pipelineStage@ /must/ not be--- 'Vulkan.Extensions.VK_NV_shading_rate_image.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'------ - #VUID-vkCmdWriteTimestamp-queryPool-01416# @queryPool@ /must/ have--- been created with a @queryType@ of--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'------ - #VUID-vkCmdWriteTimestamp-queryPool-00828# The query identified by--- @queryPool@ and @query@ /must/ be /unavailable/------ - #VUID-vkCmdWriteTimestamp-timestampValidBits-00829# The command--- pool’s queue family /must/ support a non-zero @timestampValidBits@------ - #VUID-vkCmdWriteTimestamp-query-04904# @query@ /must/ be less than--- the number of queries in @queryPool@------ - #VUID-vkCmdWriteTimestamp-None-00830# All queries used by the--- command /must/ be unavailable------ - #VUID-vkCmdWriteTimestamp-query-00831# If 'cmdWriteTimestamp' 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-vkCmdWriteTimestamp-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdWriteTimestamp-pipelineStage-parameter# @pipelineStage@--- /must/ be a valid--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'--- value------ - #VUID-vkCmdWriteTimestamp-queryPool-parameter# @queryPool@ /must/ be--- a valid 'Vulkan.Core10.Handles.QueryPool' handle------ - #VUID-vkCmdWriteTimestamp-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-vkCmdWriteTimestamp-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support transfer, graphics, or compute--- operations------ - #VUID-vkCmdWriteTimestamp-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_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits',--- 'Vulkan.Core10.Handles.QueryPool'-cmdWriteTimestamp :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which the command will be- -- recorded.- CommandBuffer- -> -- | @pipelineStage@ is a- -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits' value,- -- specifying a stage of the pipeline.- PipelineStageFlagBits- -> -- | @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 ()-cmdWriteTimestamp commandBuffer pipelineStage queryPool query = liftIO $ do- let vkCmdWriteTimestampPtr = pVkCmdWriteTimestamp (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdWriteTimestampPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdWriteTimestamp is null" Nothing Nothing- let vkCmdWriteTimestamp' = mkVkCmdWriteTimestamp vkCmdWriteTimestampPtr- traceAroundEvent "vkCmdWriteTimestamp" (vkCmdWriteTimestamp' (commandBufferHandle (commandBuffer)) (pipelineStage) (queryPool) (query))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdCopyQueryPoolResults- :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> Buffer -> DeviceSize -> DeviceSize -> QueryResultFlags -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> Buffer -> DeviceSize -> DeviceSize -> QueryResultFlags -> IO ()---- | vkCmdCopyQueryPoolResults - Copy the results of queries in a query pool--- to a buffer object------ = Description------ 'cmdCopyQueryPoolResults' is guaranteed to see the effect of previous--- uses of 'cmdResetQueryPool' in the same queue, without any additional--- synchronization. Thus, the results will always reflect the most recent--- use of the query.------ @flags@ has the same possible values described above for the @flags@--- parameter of 'Vulkan.Core10.Query.getQueryPoolResults', but the--- different style of execution causes some subtle behavioral differences.--- Because 'cmdCopyQueryPoolResults' executes in order with respect to--- other query commands, there is less ambiguity about which use of a query--- is being requested.------ Results for all requested occlusion queries, pipeline statistics--- queries, transform feedback queries, and timestamp queries are written--- as 64-bit unsigned integer values if--- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is set or--- 32-bit unsigned integer values otherwise. Performance queries store--- results in a tightly packed array whose type is determined by the @unit@--- member of the corresponding--- 'Vulkan.Extensions.VK_KHR_performance_query.PerformanceCounterKHR'.------ If neither of--- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' and--- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT'--- are set, results are only written out for queries in the available--- state.------ If 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' is--- set, the implementation will wait for each query’s status to be in the--- available state before retrieving the numerical results for that query.--- This is guaranteed to reflect the most recent use of the query on the--- same queue, assuming that the query is not being simultaneously used by--- other queues. If the query does not become available in a finite amount--- of time (e.g. due to not issuing a query since the last reset), a--- 'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST' error /may/ occur.------ Similarly, if--- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT'--- is set and--- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' is not--- set, the availability is guaranteed to reflect the most recent use of--- the query on the same queue, assuming that the query is not being--- simultaneously used by other queues. As with--- 'Vulkan.Core10.Query.getQueryPoolResults', implementations /must/--- guarantee that if they return a non-zero availability value, then the--- numerical results are valid.------ If 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT' is--- set, 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' is--- not set, and the query’s status is unavailable, an intermediate result--- value between zero and the final result value is written for that query.------ 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'--- /must/ not be used if the pool’s @queryType@ is--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'.------ 'cmdCopyQueryPoolResults' is considered to be a transfer operation, and--- its writes to buffer memory /must/ be synchronized using--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFER_BIT'--- and 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_TRANSFER_WRITE_BIT'--- before using the results.------ == Valid Usage------ - #VUID-vkCmdCopyQueryPoolResults-dstOffset-00819# @dstOffset@ /must/--- be less than the size of @dstBuffer@------ - #VUID-vkCmdCopyQueryPoolResults-firstQuery-00820# @firstQuery@--- /must/ be less than the number of queries in @queryPool@------ - #VUID-vkCmdCopyQueryPoolResults-firstQuery-00821# The sum of--- @firstQuery@ and @queryCount@ /must/ be less than or equal to the--- number of queries in @queryPool@------ - #VUID-vkCmdCopyQueryPoolResults-flags-00822# If--- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is not--- set in @flags@ then @dstOffset@ and @stride@ /must/ be multiples of--- @4@------ - #VUID-vkCmdCopyQueryPoolResults-flags-00823# If--- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is set--- in @flags@ then @dstOffset@ and @stride@ /must/ be multiples of @8@------ - #VUID-vkCmdCopyQueryPoolResults-dstBuffer-00824# @dstBuffer@ /must/--- have enough storage, from @dstOffset@, to contain the result of each--- query, as described--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-memorylayout here>------ - #VUID-vkCmdCopyQueryPoolResults-dstBuffer-00825# @dstBuffer@ /must/--- have been created with--- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'--- usage flag------ - #VUID-vkCmdCopyQueryPoolResults-dstBuffer-00826# If @dstBuffer@ is--- non-sparse then it /must/ be bound completely and contiguously to a--- single 'Vulkan.Core10.Handles.DeviceMemory' object------ - #VUID-vkCmdCopyQueryPoolResults-queryType-00827# If the @queryType@--- used to create @queryPool@ was--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP', @flags@ /must/--- not contain--- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'------ - #VUID-vkCmdCopyQueryPoolResults-queryType-03232# If the @queryType@--- used to create @queryPool@ was--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',--- 'Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryPropertiesKHR'::@allowCommandBufferQueryCopies@--- /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE'------ - #VUID-vkCmdCopyQueryPoolResults-queryType-03233# If the @queryType@--- used to create @queryPool@ was--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',--- @flags@ /must/ not contain--- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT',--- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'--- or 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT'------ - #VUID-vkCmdCopyQueryPoolResults-queryType-03234# If the @queryType@--- used to create @queryPool@ was--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',--- the @queryPool@ /must/ have been submitted once for each pass as--- retrieved via a call to--- 'Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'------ - #VUID-vkCmdCopyQueryPoolResults-queryType-02734#--- 'cmdCopyQueryPoolResults' /must/ not be called if the @queryType@--- used to create @queryPool@ was--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_INTEL'------ == Valid Usage (Implicit)------ - #VUID-vkCmdCopyQueryPoolResults-commandBuffer-parameter#--- @commandBuffer@ /must/ be a valid--- 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdCopyQueryPoolResults-queryPool-parameter# @queryPool@--- /must/ be a valid 'Vulkan.Core10.Handles.QueryPool' handle------ - #VUID-vkCmdCopyQueryPoolResults-dstBuffer-parameter# @dstBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle------ - #VUID-vkCmdCopyQueryPoolResults-flags-parameter# @flags@ /must/ be a--- valid combination of--- 'Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlagBits' values------ - #VUID-vkCmdCopyQueryPoolResults-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-vkCmdCopyQueryPoolResults-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics, or compute operations------ - #VUID-vkCmdCopyQueryPoolResults-renderpass# This command /must/ only--- be called outside of a render pass instance------ - #VUID-vkCmdCopyQueryPoolResults-commonparent# Each of--- @commandBuffer@, @dstBuffer@, 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 | Outside | Graphics |--- | Secondary | | Compute |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize',--- 'Vulkan.Core10.Handles.QueryPool',--- 'Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlags'-cmdCopyQueryPoolResults :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer into which this command will be- -- recorded.- CommandBuffer- -> -- | @queryPool@ is the query pool managing the queries containing the- -- desired results.- QueryPool- -> -- | @firstQuery@ is the initial query index.- ("firstQuery" ::: Word32)- -> -- | @queryCount@ is the number of queries. @firstQuery@ and @queryCount@- -- together define a range of queries.- ("queryCount" ::: Word32)- -> -- | @dstBuffer@ is a 'Vulkan.Core10.Handles.Buffer' object that will receive- -- the results of the copy command.- ("dstBuffer" ::: Buffer)- -> -- | @dstOffset@ is an offset into @dstBuffer@.- ("dstOffset" ::: DeviceSize)- -> -- | @stride@ is the stride in bytes between results for individual queries- -- within @dstBuffer@. The required size of the backing memory for- -- @dstBuffer@ is determined as described above for- -- 'Vulkan.Core10.Query.getQueryPoolResults'.- ("stride" ::: DeviceSize)- -> -- | @flags@ is a bitmask of- -- 'Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlagBits' specifying- -- how and when results are returned.- QueryResultFlags- -> io ()-cmdCopyQueryPoolResults commandBuffer queryPool firstQuery queryCount dstBuffer dstOffset stride flags = liftIO $ do- let vkCmdCopyQueryPoolResultsPtr = pVkCmdCopyQueryPoolResults (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdCopyQueryPoolResultsPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyQueryPoolResults is null" Nothing Nothing- let vkCmdCopyQueryPoolResults' = mkVkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResultsPtr- traceAroundEvent "vkCmdCopyQueryPoolResults" (vkCmdCopyQueryPoolResults' (commandBufferHandle (commandBuffer)) (queryPool) (firstQuery) (queryCount) (dstBuffer) (dstOffset) (stride) (flags))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdPushConstants- :: FunPtr (Ptr CommandBuffer_T -> PipelineLayout -> ShaderStageFlags -> Word32 -> Word32 -> Ptr () -> IO ()) -> Ptr CommandBuffer_T -> PipelineLayout -> ShaderStageFlags -> Word32 -> Word32 -> Ptr () -> IO ()---- | vkCmdPushConstants - Update the values of push constants------ = Description------ When a command buffer begins recording, all push constant values are--- undefined. Reads of undefined push constant values by the executing--- shader return undefined values.------ Push constant values /can/ be updated incrementally, causing shader--- stages in @stageFlags@ to read the new data from @pValues@ for push--- constants modified by this command, while still reading the previous--- data for push constants not modified by this command. When a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-bindpoint-commands bound pipeline command>--- is issued, the bound pipeline’s layout /must/ be compatible with the--- layouts used to set the values of all push constants in the pipeline--- layout’s push constant ranges, as described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility Pipeline Layout Compatibility>.--- Binding a pipeline with a layout that is not compatible with the push--- constant layout does not disturb the push constant values.------ Note------ As @stageFlags@ needs to include all flags the relevant push constant--- ranges were created with, any flags that are not supported by the queue--- family that the 'Vulkan.Core10.Handles.CommandPool' used to allocate--- @commandBuffer@ was created on are ignored.------ == Valid Usage------ - #VUID-vkCmdPushConstants-offset-01795# For each byte in the range--- specified by @offset@ and @size@ and for each shader stage in--- @stageFlags@, there /must/ be a push constant range in @layout@ that--- includes that byte and that stage------ - #VUID-vkCmdPushConstants-offset-01796# For each byte in the range--- specified by @offset@ and @size@ and for each push constant range--- that overlaps that byte, @stageFlags@ /must/ include all stages in--- that push constant range’s--- 'Vulkan.Core10.PipelineLayout.PushConstantRange'::@stageFlags@------ - #VUID-vkCmdPushConstants-offset-00368# @offset@ /must/ be a multiple--- of @4@------ - #VUID-vkCmdPushConstants-size-00369# @size@ /must/ be a multiple of--- @4@------ - #VUID-vkCmdPushConstants-offset-00370# @offset@ /must/ be less than--- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@------ - #VUID-vkCmdPushConstants-size-00371# @size@ /must/ be less than or--- equal to--- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@--- minus @offset@------ == Valid Usage (Implicit)------ - #VUID-vkCmdPushConstants-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdPushConstants-layout-parameter# @layout@ /must/ be a--- valid 'Vulkan.Core10.Handles.PipelineLayout' handle------ - #VUID-vkCmdPushConstants-stageFlags-parameter# @stageFlags@ /must/--- be a valid combination of--- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' values------ - #VUID-vkCmdPushConstants-stageFlags-requiredbitmask# @stageFlags@--- /must/ not be @0@------ - #VUID-vkCmdPushConstants-pValues-parameter# @pValues@ /must/ be a--- valid pointer to an array of @size@ bytes------ - #VUID-vkCmdPushConstants-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-vkCmdPushConstants-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics, or compute operations------ - #VUID-vkCmdPushConstants-size-arraylength# @size@ /must/ be greater--- than @0@------ - #VUID-vkCmdPushConstants-commonparent# Both of @commandBuffer@, and--- @layout@ /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_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Handles.PipelineLayout',--- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags'-cmdPushConstants :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer in which the push constant update- -- will be recorded.- CommandBuffer- -> -- | @layout@ is the pipeline layout used to program the push constant- -- updates.- PipelineLayout- -> -- | @stageFlags@ is a bitmask of- -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' specifying- -- the shader stages that will use the push constants in the updated range.- ShaderStageFlags- -> -- | @offset@ is the start offset of the push constant range to update, in- -- units of bytes.- ("offset" ::: Word32)- -> -- | @size@ is the size of the push constant range to update, in units of- -- bytes.- ("size" ::: Word32)- -> -- | @pValues@ is a pointer to an array of @size@ bytes containing the new- -- push constant values.- ("values" ::: Ptr ())- -> io ()-cmdPushConstants commandBuffer layout stageFlags offset size values = liftIO $ do- let vkCmdPushConstantsPtr = pVkCmdPushConstants (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdPushConstantsPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdPushConstants is null" Nothing Nothing- let vkCmdPushConstants' = mkVkCmdPushConstants vkCmdPushConstantsPtr- traceAroundEvent "vkCmdPushConstants" (vkCmdPushConstants' (commandBufferHandle (commandBuffer)) (layout) (stageFlags) (offset) (size) (values))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdBeginRenderPass- :: FunPtr (Ptr CommandBuffer_T -> Ptr (SomeStruct RenderPassBeginInfo) -> SubpassContents -> IO ()) -> Ptr CommandBuffer_T -> Ptr (SomeStruct RenderPassBeginInfo) -> SubpassContents -> IO ()---- | vkCmdBeginRenderPass - Begin a new render pass------ = Description------ After beginning a render pass instance, the command buffer is ready to--- record the commands for the first subpass of that render pass.------ == Valid Usage------ - #VUID-vkCmdBeginRenderPass-initialLayout-00895# If any of the--- @initialLayout@ or @finalLayout@ member of the--- 'Vulkan.Core10.Pass.AttachmentDescription' structures or the--- @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'--- structures specified when creating the render pass specified in the--- @renderPass@ member of @pRenderPassBegin@ is--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'--- then the corresponding attachment image view of the framebuffer--- specified in the @framebuffer@ member of @pRenderPassBegin@ /must/--- have been created with a @usage@ value including--- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'------ - #VUID-vkCmdBeginRenderPass-initialLayout-01758# If any of the--- @initialLayout@ or @finalLayout@ member of the--- 'Vulkan.Core10.Pass.AttachmentDescription' structures or the--- @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'--- structures specified when creating the render pass specified in the--- @renderPass@ member of @pRenderPassBegin@ is--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL',--- or--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'--- then the corresponding attachment image view of the framebuffer--- specified in the @framebuffer@ member of @pRenderPassBegin@ /must/--- have been created with a @usage@ value including--- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'------ - #VUID-vkCmdBeginRenderPass-initialLayout-02842# If any of the--- @initialLayout@ or @finalLayout@ member of the--- 'Vulkan.Core10.Pass.AttachmentDescription' structures or the--- @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'--- structures specified when creating the render pass specified in the--- @renderPass@ member of @pRenderPassBegin@ is--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',--- or--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',--- or--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'--- then the corresponding attachment image view of the framebuffer--- specified in the @framebuffer@ member of @pRenderPassBegin@ /must/--- have been created with a @usage@ value including--- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'------ - #VUID-vkCmdBeginRenderPass-stencilInitialLayout-02843# If any of the--- @stencilInitialLayout@ or @stencilFinalLayout@ member of the--- 'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout'--- structures or the @stencilLayout@ member of the--- 'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentReferenceStencilLayout'--- structures specified when creating the render pass specified in the--- @renderPass@ member of @pRenderPassBegin@ is--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',--- or--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'--- then the corresponding attachment image view of the framebuffer--- specified in the @framebuffer@ member of @pRenderPassBegin@ /must/--- have been created with a @usage@ value including--- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'------ - #VUID-vkCmdBeginRenderPass-initialLayout-00897# If any of the--- @initialLayout@ or @finalLayout@ member of the--- 'Vulkan.Core10.Pass.AttachmentDescription' structures or the--- @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'--- structures specified when creating the render pass specified in the--- @renderPass@ member of @pRenderPassBegin@ is--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL'--- then the corresponding attachment image view of the framebuffer--- specified in the @framebuffer@ member of @pRenderPassBegin@ /must/--- have been created with a @usage@ value including--- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT' or--- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'------ - #VUID-vkCmdBeginRenderPass-initialLayout-00898# If any of the--- @initialLayout@ or @finalLayout@ member of the--- 'Vulkan.Core10.Pass.AttachmentDescription' structures or the--- @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'--- structures specified when creating the render pass specified in the--- @renderPass@ member of @pRenderPassBegin@ is--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'--- then the corresponding attachment image view of the framebuffer--- specified in the @framebuffer@ member of @pRenderPassBegin@ /must/--- have been created with a @usage@ value including--- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'------ - #VUID-vkCmdBeginRenderPass-initialLayout-00899# If any of the--- @initialLayout@ or @finalLayout@ member of the--- 'Vulkan.Core10.Pass.AttachmentDescription' structures or the--- @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'--- structures specified when creating the render pass specified in the--- @renderPass@ member of @pRenderPassBegin@ is--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'--- then the corresponding attachment image view of the framebuffer--- specified in the @framebuffer@ member of @pRenderPassBegin@ /must/--- have been created with a @usage@ value including--- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'------ - #VUID-vkCmdBeginRenderPass-initialLayout-00900# If the--- @initialLayout@ member of any of the--- 'Vulkan.Core10.Pass.AttachmentDescription' structures specified when--- creating the render pass specified in the @renderPass@ member of--- @pRenderPassBegin@ is not--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED', then each--- such @initialLayout@ /must/ be equal to the current layout of the--- corresponding attachment image subresource of the framebuffer--- specified in the @framebuffer@ member of @pRenderPassBegin@------ - #VUID-vkCmdBeginRenderPass-srcStageMask-00901# The @srcStageMask@--- and @dstStageMask@ members of any element of the @pDependencies@--- member of 'Vulkan.Core10.Pass.RenderPassCreateInfo' used to create--- @renderPass@ /must/ be supported by the capabilities of the queue--- family identified by the @queueFamilyIndex@ member of the--- 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' used to create the--- command pool which @commandBuffer@ was allocated from------ - #VUID-vkCmdBeginRenderPass-framebuffer-02532# For any attachment in--- @framebuffer@ that is used by @renderPass@ and is bound to memory--- locations that are also bound to another attachment used by--- @renderPass@, and if at least one of those uses causes either--- attachment to be written to, both attachments /must/ have had the--- 'Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT'--- set------ == Valid Usage (Implicit)------ - #VUID-vkCmdBeginRenderPass-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdBeginRenderPass-pRenderPassBegin-parameter#--- @pRenderPassBegin@ /must/ be a valid pointer to a valid--- 'RenderPassBeginInfo' structure------ - #VUID-vkCmdBeginRenderPass-contents-parameter# @contents@ /must/ be--- a valid 'Vulkan.Core10.Enums.SubpassContents.SubpassContents' value------ - #VUID-vkCmdBeginRenderPass-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-vkCmdBeginRenderPass-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics operations------ - #VUID-vkCmdBeginRenderPass-renderpass# This command /must/ only be--- called outside of a render pass instance------ - #VUID-vkCmdBeginRenderPass-bufferlevel# @commandBuffer@ /must/ be a--- primary 'Vulkan.Core10.Handles.CommandBuffer'------ == 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 |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer', 'RenderPassBeginInfo',--- 'Vulkan.Core10.Enums.SubpassContents.SubpassContents'-cmdBeginRenderPass :: forall a io- . (Extendss RenderPassBeginInfo a, PokeChain a, MonadIO io)- => -- | @commandBuffer@ is the command buffer in which to record the command.- CommandBuffer- -> -- | @pRenderPassBegin@ is a pointer to a 'RenderPassBeginInfo' structure- -- specifying the render pass to begin an instance of, and the framebuffer- -- the instance uses.- (RenderPassBeginInfo a)- -> -- | @contents@ is a 'Vulkan.Core10.Enums.SubpassContents.SubpassContents'- -- value specifying how the commands in the first subpass will be provided.- SubpassContents- -> io ()-cmdBeginRenderPass commandBuffer renderPassBegin contents = liftIO . evalContT $ do- let vkCmdBeginRenderPassPtr = pVkCmdBeginRenderPass (deviceCmds (commandBuffer :: CommandBuffer))- lift $ unless (vkCmdBeginRenderPassPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBeginRenderPass is null" Nothing Nothing- let vkCmdBeginRenderPass' = mkVkCmdBeginRenderPass vkCmdBeginRenderPassPtr- pRenderPassBegin <- ContT $ withCStruct (renderPassBegin)- lift $ traceAroundEvent "vkCmdBeginRenderPass" (vkCmdBeginRenderPass' (commandBufferHandle (commandBuffer)) (forgetExtensions pRenderPassBegin) (contents))- pure $ ()---- | This function will call the supplied action between calls to--- 'cmdBeginRenderPass' and 'cmdEndRenderPass'------ Note that 'cmdEndRenderPass' is *not* called if an exception is thrown--- by the inner action.-cmdUseRenderPass :: forall a io r . (Extendss RenderPassBeginInfo a, PokeChain a, MonadIO io) => CommandBuffer -> RenderPassBeginInfo a -> SubpassContents -> io r -> io r-cmdUseRenderPass commandBuffer pRenderPassBegin contents a =- (cmdBeginRenderPass commandBuffer pRenderPassBegin contents) *> a <* (cmdEndRenderPass commandBuffer)---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdNextSubpass- :: FunPtr (Ptr CommandBuffer_T -> SubpassContents -> IO ()) -> Ptr CommandBuffer_T -> SubpassContents -> IO ()---- | vkCmdNextSubpass - Transition to the next subpass of a render pass------ = Description------ The subpass index for a render pass begins at zero when--- 'cmdBeginRenderPass' is recorded, and increments each time--- 'cmdNextSubpass' is recorded.------ Moving to the next subpass automatically performs any multisample--- resolve operations in the subpass being ended. End-of-subpass--- multisample resolves are treated as color attachment writes for the--- purposes of synchronization. This applies to resolve operations for both--- color and depth\/stencil attachments. That is, they are considered to--- execute in the--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'--- pipeline stage and their writes are synchronized with--- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COLOR_ATTACHMENT_WRITE_BIT'.--- Synchronization between rendering within a subpass and any resolve--- operations at the end of the subpass occurs automatically, without need--- for explicit dependencies or pipeline barriers. However, if the resolve--- attachment is also used in a different subpass, an explicit dependency--- is needed.------ After transitioning to the next subpass, the application /can/ record--- the commands for that subpass.------ == Valid Usage------ - #VUID-vkCmdNextSubpass-None-00909# The current subpass index /must/--- be less than the number of subpasses in the render pass minus one------ - #VUID-vkCmdNextSubpass-None-02349# This command /must/ not be--- recorded when transform feedback is active------ == Valid Usage (Implicit)------ - #VUID-vkCmdNextSubpass-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdNextSubpass-contents-parameter# @contents@ /must/ be a--- valid 'Vulkan.Core10.Enums.SubpassContents.SubpassContents' value------ - #VUID-vkCmdNextSubpass-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-vkCmdNextSubpass-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics operations------ - #VUID-vkCmdNextSubpass-renderpass# This command /must/ only be--- called inside of a render pass instance------ - #VUID-vkCmdNextSubpass-bufferlevel# @commandBuffer@ /must/ be a--- primary 'Vulkan.Core10.Handles.CommandBuffer'------ == 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 | Inside | Graphics |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Enums.SubpassContents.SubpassContents'-cmdNextSubpass :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer in which to record the command.- CommandBuffer- -> -- | @contents@ specifies how the commands in the next subpass will be- -- provided, in the same fashion as the corresponding parameter of- -- 'cmdBeginRenderPass'.- SubpassContents- -> io ()-cmdNextSubpass commandBuffer contents = liftIO $ do- let vkCmdNextSubpassPtr = pVkCmdNextSubpass (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdNextSubpassPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdNextSubpass is null" Nothing Nothing- let vkCmdNextSubpass' = mkVkCmdNextSubpass vkCmdNextSubpassPtr- traceAroundEvent "vkCmdNextSubpass" (vkCmdNextSubpass' (commandBufferHandle (commandBuffer)) (contents))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdEndRenderPass- :: FunPtr (Ptr CommandBuffer_T -> IO ()) -> Ptr CommandBuffer_T -> IO ()---- | vkCmdEndRenderPass - End the current render pass------ = Description------ Ending a render pass instance performs any multisample resolve--- operations on the final subpass.------ == Valid Usage------ - #VUID-vkCmdEndRenderPass-None-00910# The current subpass index--- /must/ be equal to the number of subpasses in the render pass minus--- one------ - #VUID-vkCmdEndRenderPass-None-02351# This command /must/ not be--- recorded when transform feedback is active------ == Valid Usage (Implicit)------ - #VUID-vkCmdEndRenderPass-commandBuffer-parameter# @commandBuffer@--- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle------ - #VUID-vkCmdEndRenderPass-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-vkCmdEndRenderPass-commandBuffer-cmdpool# The--- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was--- allocated from /must/ support graphics operations------ - #VUID-vkCmdEndRenderPass-renderpass# This command /must/ only be--- called inside of a render pass instance------ - #VUID-vkCmdEndRenderPass-bufferlevel# @commandBuffer@ /must/ be a--- primary 'Vulkan.Core10.Handles.CommandBuffer'------ == 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 | Inside | Graphics |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+------ = See Also------ <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,--- 'Vulkan.Core10.Handles.CommandBuffer'-cmdEndRenderPass :: forall io- . (MonadIO io)- => -- | @commandBuffer@ is the command buffer in which to end the current render- -- pass instance.- CommandBuffer- -> io ()-cmdEndRenderPass commandBuffer = liftIO $ do- let vkCmdEndRenderPassPtr = pVkCmdEndRenderPass (deviceCmds (commandBuffer :: CommandBuffer))- unless (vkCmdEndRenderPassPtr /= nullFunPtr) $- throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdEndRenderPass is null" Nothing Nothing- let vkCmdEndRenderPass' = mkVkCmdEndRenderPass vkCmdEndRenderPassPtr- traceAroundEvent "vkCmdEndRenderPass" (vkCmdEndRenderPass' (commandBufferHandle (commandBuffer)))- pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)- unsafe-#endif- "dynamic" mkVkCmdExecuteCommands- :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr (Ptr CommandBuffer_T) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr (Ptr CommandBuffer_T) -> IO ()---- | vkCmdExecuteCommands - Execute a secondary command buffer from a primary--- command buffer------ = Description------ If any element of @pCommandBuffers@ was not recorded with the--- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'--- flag, and it was recorded into any other primary command buffer which is--- currently in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle executable or recording state>,--- that primary command buffer becomes--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle invalid>.------ == Valid Usage------ - #VUID-vkCmdExecuteCommands-pCommandBuffers-00088# Each element of--- @pCommandBuffers@ /must/ have been allocated with a @level@ of--- 'Vulkan.Core10.Enums.CommandBufferLevel.COMMAND_BUFFER_LEVEL_SECONDARY'------ - #VUID-vkCmdExecuteCommands-pCommandBuffers-00089# Each element of--- @pCommandBuffers@ /must/ be in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending or executable state>------ - #VUID-vkCmdExecuteCommands-pCommandBuffers-00091# If any element of--- @pCommandBuffers@ was not recorded with the--- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'--- flag, it /must/ not be in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>------ - #VUID-vkCmdExecuteCommands-pCommandBuffers-00092# If any element of--- @pCommandBuffers@ was not recorded with the--- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'--- flag, it /must/ not have already been recorded to @commandBuffer@------ - #VUID-vkCmdExecuteCommands-pCommandBuffers-00093# If any element of--- @pCommandBuffers@ was not recorded with the--- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'--- flag, it /must/ not appear more than once in @pCommandBuffers@------ - #VUID-vkCmdExecuteCommands-pCommandBuffers-00094# Each element of--- @pCommandBuffers@ /must/ have been allocated from a--- 'Vulkan.Core10.Handles.CommandPool' that was created for the same--- queue family as the 'Vulkan.Core10.Handles.CommandPool' from which--- @commandBuffer@ was allocated------ - #VUID-vkCmdExecuteCommands-contents-00095# If 'cmdExecuteCommands'--- is being called within a render pass instance, that render pass--- instance /must/ have been begun with the @contents@ parameter of--- 'cmdBeginRenderPass' set to--- 'Vulkan.Core10.Enums.SubpassContents.SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS'------ - #VUID-vkCmdExecuteCommands-pCommandBuffers-00096# If--- 'cmdExecuteCommands' is being called within a render pass instance,--- each element of @pCommandBuffers@ /must/ have been recorded with the--- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT'------ - #VUID-vkCmdExecuteCommands-pCommandBuffers-00097# If--- 'cmdExecuteCommands' is being called within a render pass instance,--- each element of @pCommandBuffers@ /must/ have been recorded with--- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@subpass@--- set to the index of the subpass which the given command buffer will--- be executed in------ - #VUID-vkCmdExecuteCommands-pInheritanceInfo-00098# If--- 'cmdExecuteCommands' is being called within a render pass instance,--- the render passes specified in the--- @pBeginInfo->pInheritanceInfo->renderPass@ members of the--- 'Vulkan.Core10.CommandBuffer.beginCommandBuffer' commands used to--- begin recording each element of @pCommandBuffers@ /must/ be--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>--- with the current render pass------ - #VUID-vkCmdExecuteCommands-pCommandBuffers-00099# If--- 'cmdExecuteCommands' is being called within a render pass instance,--- and any element of @pCommandBuffers@ was recorded with--- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@framebuffer@--- not equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE', that--- 'Vulkan.Core10.Handles.Framebuffer' /must/ match the--- 'Vulkan.Core10.Handles.Framebuffer' used in the current render pass--- instance------ - #VUID-vkCmdExecuteCommands-pNext-02865# If 'cmdExecuteCommands' is--- being called within a render pass instance that included--- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'--- in the @pNext@ chain of 'RenderPassBeginInfo', then each element of--- @pCommandBuffers@ /must/ have been recorded with--- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM'--- in the @pNext@ chain of--- 'Vulkan.Core10.CommandBuffer.CommandBufferBeginInfo'------ - #VUID-vkCmdExecuteCommands-pNext-02866# If 'cmdExecuteCommands' is--- being called within a render pass instance that included--- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'--- in the @pNext@ chain of 'RenderPassBeginInfo', then each element of--- @pCommandBuffers@ /must/ have been recorded with--- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM'::@transform@--- identical to--- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'::@transform@------ - #VUID-vkCmdExecuteCommands-pNext-02867# If 'cmdExecuteCommands' is--- being called within a render pass instance that included--- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'--- in the @pNext@ chain of 'RenderPassBeginInfo', then each element of--- @pCommandBuffers@ /must/ have been recorded with--- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM'::@renderArea@--- identical to 'RenderPassBeginInfo'::@renderArea@------ - #VUID-vkCmdExecuteCommands-pCommandBuffers-00100# If--- 'cmdExecuteCommands' is not being called within a render pass--- instance, each element of @pCommandBuffers@ /must/ not have been--- recorded with the--- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT'------ - #VUID-vkCmdExecuteCommands-commandBuffer-00101# If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-inheritedQueries inherited queries>--- feature is not enabled, @commandBuffer@ /must/ not have any queries--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>------ - #VUID-vkCmdExecuteCommands-commandBuffer-00102# If @commandBuffer@--- has a 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' query--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>,--- then each element of @pCommandBuffers@ /must/ have been recorded--- with--- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@occlusionQueryEnable@--- set to 'Vulkan.Core10.FundamentalTypes.TRUE'------ - #VUID-vkCmdExecuteCommands-commandBuffer-00103# If @commandBuffer@--- has a 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' query--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>,--- then each element of @pCommandBuffers@ /must/ have been recorded--- with--- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@queryFlags@--- having all bits set that are set for the query------ - #VUID-vkCmdExecuteCommands-commandBuffer-00104# If @commandBuffer@--- has a 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS'--- query--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>,--- then each element of @pCommandBuffers@ /must/ have been recorded--- with--- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@pipelineStatistics@--- having all bits set that are set in the--- 'Vulkan.Core10.Handles.QueryPool' the query uses------ - #VUID-vkCmdExecuteCommands-pCommandBuffers-00105# Each element of--- @pCommandBuffers@ /must/ not begin any query types that are--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>--- in @commandBuffer@------ - #VUID-vkCmdExecuteCommands-commandBuffer-01820# If @commandBuffer@--- is a protected command buffer, then each element of--- @pCommandBuffers@ /must/ be a protected command buffer------ - #VUID-vkCmdExecuteCommands-commandBuffer-01821# If @commandBuffer@--- is an unprotected command buffer, then each element of--- @pCommandBuffers@ /must/ be an unprotected command buffer------ - #VUID-vkCmdExecuteCommands-None-02286# This command /must/ not be--- recorded when transform feedback is active+-- to this bind point within the current render pass instance,+-- including any pipeline already bound when beginning the render pass+-- instance+--+-- - #VUID-vkCmdBindPipeline-pipelineBindPoint-04949# If+-- @pipelineBindPoint@ is+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI',+-- the 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support compute operations+--+-- - #VUID-vkCmdBindPipeline-pipelineBindPoint-04950# If+-- @pipelineBindPoint@ is+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI',+-- @pipeline@ /must/ be a subpass shading pipeline+--+-- - #VUID-vkCmdBindPipeline-pipeline-06195# If @pipeline@ is a graphics+-- pipeline, this command has been called inside a render pass instance+-- started with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- and commands using the previously bound graphics pipeline have been+-- recorded within the render pass instance, then the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@colorAttachmentCount@+-- specified by this pipeline /must/ match that set in the previous+-- pipeline+--+-- - #VUID-vkCmdBindPipeline-pipeline-06196# If @pipeline@ is a graphics+-- pipeline, this command has been called inside a render pass instance+-- started with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- and commands using the previously bound graphics pipeline have been+-- recorded within the render pass instance, then the elements of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@pColorAttachmentFormats@+-- specified by this pipeline /must/ match that set in the previous+-- pipeline+--+-- - #VUID-vkCmdBindPipeline-pipeline-06197# If @pipeline@ is a graphics+-- pipeline, this command has been called inside a render pass instance+-- started with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- and commands using the previously bound graphics pipeline have been+-- recorded within the render pass instance, then the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@depthAttachmentFormat@+-- specified by this pipeline /must/ match that set in the previous+-- pipeline+--+-- - #VUID-vkCmdBindPipeline-pipeline-06194# If @pipeline@ is a graphics+-- pipeline, this command has been called inside a render pass instance+-- started with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- and commands using the previously bound graphics pipeline have been+-- recorded within the render pass instance, then the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@stencilAttachmentFormat@+-- specified by this pipeline /must/ match that set in the previous+-- pipeline+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdBindPipeline-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdBindPipeline-pipelineBindPoint-parameter#+-- @pipelineBindPoint@ /must/ be a valid+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value+--+-- - #VUID-vkCmdBindPipeline-pipeline-parameter# @pipeline@ /must/ be a+-- valid 'Vulkan.Core10.Handles.Pipeline' handle+--+-- - #VUID-vkCmdBindPipeline-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-vkCmdBindPipeline-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics, or compute operations+--+-- - #VUID-vkCmdBindPipeline-commonparent# Both of @commandBuffer@, and+-- @pipeline@ /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_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Pipeline',+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'+cmdBindPipeline :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer that the pipeline will be bound+ -- to.+ CommandBuffer+ -> -- | @pipelineBindPoint@ is a+ -- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value+ -- specifying to which bind point the pipeline is bound. Binding one does+ -- not disturb the others.+ PipelineBindPoint+ -> -- | @pipeline@ is the pipeline to be bound.+ Pipeline+ -> io ()+cmdBindPipeline commandBuffer pipelineBindPoint pipeline = liftIO $ do+ let vkCmdBindPipelinePtr = pVkCmdBindPipeline (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdBindPipelinePtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindPipeline is null" Nothing Nothing+ let vkCmdBindPipeline' = mkVkCmdBindPipeline vkCmdBindPipelinePtr+ traceAroundEvent "vkCmdBindPipeline" (vkCmdBindPipeline' (commandBufferHandle (commandBuffer)) (pipelineBindPoint) (pipeline))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdSetViewport+ :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Viewport -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Viewport -> IO ()++-- | vkCmdSetViewport - Set the viewport dynamically for a command buffer+--+-- = Description+--+-- This command sets the viewport transformation parameters state for+-- subsequent drawing commands when the graphics pipeline is created with+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT' set in+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.+-- Otherwise, this state is specified by the+-- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@pViewports@+-- values used to create the currently active pipeline.+--+-- The viewport parameters taken from element i of @pViewports@ replace the+-- current state for the viewport index @firstViewport@ + i, for i in [0,+-- @viewportCount@).+--+-- == Valid Usage+--+-- - #VUID-vkCmdSetViewport-firstViewport-01223# The sum of+-- @firstViewport@ and @viewportCount@ /must/ be between @1@ and+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,+-- inclusive+--+-- - #VUID-vkCmdSetViewport-firstViewport-01224# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>+-- feature is not enabled, @firstViewport@ /must/ be @0@+--+-- - #VUID-vkCmdSetViewport-viewportCount-01225# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>+-- feature is not enabled, @viewportCount@ /must/ be @1@+--+-- - #VUID-vkCmdSetViewport-commandBuffer-04821# @commandBuffer@ /must/+-- not have+-- 'Vulkan.Extensions.VK_NV_inherited_viewport_scissor.CommandBufferInheritanceViewportScissorInfoNV'::@viewportScissor2D@+-- enabled+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdSetViewport-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdSetViewport-pViewports-parameter# @pViewports@ /must/ be+-- a valid pointer to an array of @viewportCount@ valid+-- 'Vulkan.Core10.Pipeline.Viewport' structures+--+-- - #VUID-vkCmdSetViewport-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-vkCmdSetViewport-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics operations+--+-- - #VUID-vkCmdSetViewport-viewportCount-arraylength# @viewportCount@+-- /must/ be greater than @0@+--+-- == Host Synchronization+--+-- - Host access to @commandBuffer@ /must/ be externally synchronized+--+-- - Host access to the 'Vulkan.Core10.Handles.CommandPool' that+-- @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================++-- | Primary | Both | Graphics |+-- | Secondary | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Pipeline.Viewport'+cmdSetViewport :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @firstViewport@ is the index of the first viewport whose parameters are+ -- updated by the command.+ ("firstViewport" ::: Word32)+ -> -- | @pViewports@ is a pointer to an array of+ -- 'Vulkan.Core10.Pipeline.Viewport' structures specifying viewport+ -- parameters.+ ("viewports" ::: Vector Viewport)+ -> io ()+cmdSetViewport commandBuffer firstViewport viewports = liftIO . evalContT $ do+ let vkCmdSetViewportPtr = pVkCmdSetViewport (deviceCmds (commandBuffer :: CommandBuffer))+ lift $ unless (vkCmdSetViewportPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetViewport is null" Nothing Nothing+ let vkCmdSetViewport' = mkVkCmdSetViewport vkCmdSetViewportPtr+ pPViewports <- ContT $ allocaBytes @Viewport ((Data.Vector.length (viewports)) * 24)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPViewports `plusPtr` (24 * (i)) :: Ptr Viewport) (e)) (viewports)+ lift $ traceAroundEvent "vkCmdSetViewport" (vkCmdSetViewport' (commandBufferHandle (commandBuffer)) (firstViewport) ((fromIntegral (Data.Vector.length $ (viewports)) :: Word32)) (pPViewports))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdSetScissor+ :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Rect2D -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Rect2D -> IO ()++-- | vkCmdSetScissor - Set scissor rectangles dynamically for a command+-- buffer+--+-- = Description+--+-- The scissor rectangles taken from element i of @pScissors@ replace the+-- current state for the scissor index @firstScissor@ + i, for i in [0,+-- @scissorCount@).+--+-- This command sets the scissor rectangles for subsequent drawing commands+-- when the graphics pipeline is created with+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR' set in+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.+-- Otherwise, this state is specified by the+-- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@pScissors@+-- values used to create the currently active pipeline.+--+-- == Valid Usage+--+-- - #VUID-vkCmdSetScissor-firstScissor-00592# The sum of @firstScissor@+-- and @scissorCount@ /must/ be between @1@ and+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,+-- inclusive+--+-- - #VUID-vkCmdSetScissor-firstScissor-00593# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>+-- feature is not enabled, @firstScissor@ /must/ be @0@+--+-- - #VUID-vkCmdSetScissor-scissorCount-00594# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>+-- feature is not enabled, @scissorCount@ /must/ be @1@+--+-- - #VUID-vkCmdSetScissor-x-00595# The @x@ and @y@ members of @offset@+-- member of any element of @pScissors@ /must/ be greater than or equal+-- to @0@+--+-- - #VUID-vkCmdSetScissor-offset-00596# Evaluation of (@offset.x@ ++-- @extent.width@) /must/ not cause a signed integer addition overflow+-- for any element of @pScissors@+--+-- - #VUID-vkCmdSetScissor-offset-00597# Evaluation of (@offset.y@ ++-- @extent.height@) /must/ not cause a signed integer addition overflow+-- for any element of @pScissors@+--+-- - #VUID-vkCmdSetScissor-viewportScissor2D-04789# If this command is+-- recorded in a secondary command buffer with+-- 'Vulkan.Extensions.VK_NV_inherited_viewport_scissor.CommandBufferInheritanceViewportScissorInfoNV'::@viewportScissor2D@+-- enabled, then this function /must/ not be called+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdSetScissor-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdSetScissor-pScissors-parameter# @pScissors@ /must/ be a+-- valid pointer to an array of @scissorCount@+-- 'Vulkan.Core10.FundamentalTypes.Rect2D' structures+--+-- - #VUID-vkCmdSetScissor-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-vkCmdSetScissor-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics operations+--+-- - #VUID-vkCmdSetScissor-scissorCount-arraylength# @scissorCount@+-- /must/ be greater than @0@+--+-- == Host Synchronization+--+-- - Host access to @commandBuffer@ /must/ be externally synchronized+--+-- - Host access to the 'Vulkan.Core10.Handles.CommandPool' that+-- @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================++-- | Primary | Both | Graphics |+-- | Secondary | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.FundamentalTypes.Rect2D'+cmdSetScissor :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @firstScissor@ is the index of the first scissor whose state is updated+ -- by the command.+ ("firstScissor" ::: Word32)+ -> -- | @pScissors@ is a pointer to an array of+ -- 'Vulkan.Core10.FundamentalTypes.Rect2D' structures defining scissor+ -- rectangles.+ ("scissors" ::: Vector Rect2D)+ -> io ()+cmdSetScissor commandBuffer firstScissor scissors = liftIO . evalContT $ do+ let vkCmdSetScissorPtr = pVkCmdSetScissor (deviceCmds (commandBuffer :: CommandBuffer))+ lift $ unless (vkCmdSetScissorPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetScissor is null" Nothing Nothing+ let vkCmdSetScissor' = mkVkCmdSetScissor vkCmdSetScissorPtr+ pPScissors <- ContT $ allocaBytes @Rect2D ((Data.Vector.length (scissors)) * 16)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPScissors `plusPtr` (16 * (i)) :: Ptr Rect2D) (e)) (scissors)+ lift $ traceAroundEvent "vkCmdSetScissor" (vkCmdSetScissor' (commandBufferHandle (commandBuffer)) (firstScissor) ((fromIntegral (Data.Vector.length $ (scissors)) :: Word32)) (pPScissors))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdSetLineWidth+ :: FunPtr (Ptr CommandBuffer_T -> CFloat -> IO ()) -> Ptr CommandBuffer_T -> CFloat -> IO ()++-- | vkCmdSetLineWidth - Set line width dynamically for a command buffer+--+-- = Description+--+-- This command sets the line width for subsequent drawing commands when+-- the graphics pipeline is created with+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_WIDTH' set in+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.+-- Otherwise, this state is specified by the+-- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'::@lineWidth@+-- value used to create the currently active pipeline.+--+-- == Valid Usage+--+-- - #VUID-vkCmdSetLineWidth-lineWidth-00788# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-wideLines wide lines>+-- feature is not enabled, @lineWidth@ /must/ be @1.0@+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdSetLineWidth-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdSetLineWidth-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-vkCmdSetLineWidth-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics 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 | Graphics |+-- | Secondary | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer'+cmdSetLineWidth :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @lineWidth@ is the width of rasterized line segments.+ ("lineWidth" ::: Float)+ -> io ()+cmdSetLineWidth commandBuffer lineWidth = liftIO $ do+ let vkCmdSetLineWidthPtr = pVkCmdSetLineWidth (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdSetLineWidthPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetLineWidth is null" Nothing Nothing+ let vkCmdSetLineWidth' = mkVkCmdSetLineWidth vkCmdSetLineWidthPtr+ traceAroundEvent "vkCmdSetLineWidth" (vkCmdSetLineWidth' (commandBufferHandle (commandBuffer)) (CFloat (lineWidth)))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdSetDepthBias+ :: FunPtr (Ptr CommandBuffer_T -> CFloat -> CFloat -> CFloat -> IO ()) -> Ptr CommandBuffer_T -> CFloat -> CFloat -> CFloat -> IO ()++-- | vkCmdSetDepthBias - Set depth bias factors and clamp dynamically for a+-- command buffer+--+-- = Description+--+-- This command sets the depth bias parameters for subsequent drawing+-- commands when the graphics pipeline is created with+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS' set in+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.+-- Otherwise, this state is specified by the corresponding+-- 'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@depthBiasConstantFactor@,+-- @depthBiasClamp@, and @depthBiasSlopeFactor@ values used to create the+-- currently active pipeline.+--+-- == Valid Usage+--+-- - #VUID-vkCmdSetDepthBias-depthBiasClamp-00790# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-depthBiasClamp depth bias clamping>+-- feature is not enabled, @depthBiasClamp@ /must/ be @0.0@+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdSetDepthBias-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdSetDepthBias-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-vkCmdSetDepthBias-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics 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 | Graphics |+-- | Secondary | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer'+cmdSetDepthBias :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @depthBiasConstantFactor@ is a scalar factor controlling the constant+ -- depth value added to each fragment.+ ("depthBiasConstantFactor" ::: Float)+ -> -- | @depthBiasClamp@ is the maximum (or minimum) depth bias of a fragment.+ ("depthBiasClamp" ::: Float)+ -> -- | @depthBiasSlopeFactor@ is a scalar factor applied to a fragment’s slope+ -- in depth bias calculations.+ ("depthBiasSlopeFactor" ::: Float)+ -> io ()+cmdSetDepthBias commandBuffer depthBiasConstantFactor depthBiasClamp depthBiasSlopeFactor = liftIO $ do+ let vkCmdSetDepthBiasPtr = pVkCmdSetDepthBias (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdSetDepthBiasPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetDepthBias is null" Nothing Nothing+ let vkCmdSetDepthBias' = mkVkCmdSetDepthBias vkCmdSetDepthBiasPtr+ traceAroundEvent "vkCmdSetDepthBias" (vkCmdSetDepthBias' (commandBufferHandle (commandBuffer)) (CFloat (depthBiasConstantFactor)) (CFloat (depthBiasClamp)) (CFloat (depthBiasSlopeFactor)))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdSetBlendConstants+ :: FunPtr (Ptr CommandBuffer_T -> Ptr (FixedArray 4 CFloat) -> IO ()) -> Ptr CommandBuffer_T -> Ptr (FixedArray 4 CFloat) -> IO ()++-- | vkCmdSetBlendConstants - Set the values of blend constants+--+-- = Description+--+-- This command sets blend constants for subsequent drawing commands when+-- the graphics pipeline is created with+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_BLEND_CONSTANTS' set in+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.+-- Otherwise, this state is specified by the+-- 'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'::@blendConstants@+-- values used to create the currently active pipeline.+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdSetBlendConstants-commandBuffer-parameter#+-- @commandBuffer@ /must/ be a valid+-- 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdSetBlendConstants-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-vkCmdSetBlendConstants-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics 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 | Graphics |+-- | Secondary | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer'+cmdSetBlendConstants :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @blendConstants@ is a pointer to an array of four values specifying the+ -- Rc, Gc, Bc, and Ac components of the blend constant color used in+ -- blending, depending on the+ -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blendfactors blend factor>.+ ("blendConstants" ::: (Float, Float, Float, Float))+ -> io ()+cmdSetBlendConstants commandBuffer blendConstants = liftIO . evalContT $ do+ let vkCmdSetBlendConstantsPtr = pVkCmdSetBlendConstants (deviceCmds (commandBuffer :: CommandBuffer))+ lift $ unless (vkCmdSetBlendConstantsPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetBlendConstants is null" Nothing Nothing+ let vkCmdSetBlendConstants' = mkVkCmdSetBlendConstants vkCmdSetBlendConstantsPtr+ pBlendConstants <- ContT $ allocaBytes @(FixedArray 4 CFloat) 16+ let pBlendConstants' = lowerArrayPtr pBlendConstants+ lift $ case (blendConstants) of+ (e0, e1, e2, e3) -> do+ poke (pBlendConstants' :: Ptr CFloat) (CFloat (e0))+ poke (pBlendConstants' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))+ poke (pBlendConstants' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))+ poke (pBlendConstants' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))+ lift $ traceAroundEvent "vkCmdSetBlendConstants" (vkCmdSetBlendConstants' (commandBufferHandle (commandBuffer)) (pBlendConstants))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdSetDepthBounds+ :: FunPtr (Ptr CommandBuffer_T -> CFloat -> CFloat -> IO ()) -> Ptr CommandBuffer_T -> CFloat -> CFloat -> IO ()++-- | vkCmdSetDepthBounds - Set depth bounds range dynamically for a command+-- buffer+--+-- = Description+--+-- This command sets the depth bounds range for subsequent drawing commands+-- when the graphics pipeline is created with+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BOUNDS' set in+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.+-- Otherwise, this state is specified by the+-- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'::@minDepthBounds@+-- and+-- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'::@maxDepthBounds@+-- values used to create the currently active pipeline.+--+-- == Valid Usage+--+-- - #VUID-vkCmdSetDepthBounds-minDepthBounds-00600# Unless the+-- @VK_EXT_depth_range_unrestricted@ extension is enabled+-- @minDepthBounds@ /must/ be between @0.0@ and @1.0@, inclusive+--+-- - #VUID-vkCmdSetDepthBounds-maxDepthBounds-00601# Unless the+-- @VK_EXT_depth_range_unrestricted@ extension is enabled+-- @maxDepthBounds@ /must/ be between @0.0@ and @1.0@, inclusive+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdSetDepthBounds-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdSetDepthBounds-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-vkCmdSetDepthBounds-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics 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 | Graphics |+-- | Secondary | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer'+cmdSetDepthBounds :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @minDepthBounds@ is the minimum depth bound.+ ("minDepthBounds" ::: Float)+ -> -- | @maxDepthBounds@ is the maximum depth bound.+ ("maxDepthBounds" ::: Float)+ -> io ()+cmdSetDepthBounds commandBuffer minDepthBounds maxDepthBounds = liftIO $ do+ let vkCmdSetDepthBoundsPtr = pVkCmdSetDepthBounds (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdSetDepthBoundsPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetDepthBounds is null" Nothing Nothing+ let vkCmdSetDepthBounds' = mkVkCmdSetDepthBounds vkCmdSetDepthBoundsPtr+ traceAroundEvent "vkCmdSetDepthBounds" (vkCmdSetDepthBounds' (commandBufferHandle (commandBuffer)) (CFloat (minDepthBounds)) (CFloat (maxDepthBounds)))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdSetStencilCompareMask+ :: FunPtr (Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()++-- | vkCmdSetStencilCompareMask - Set stencil compare mask dynamically for a+-- command buffer+--+-- = Description+--+-- This command sets the stencil compare mask for subsequent drawing+-- commands when the graphics pipeline is created with+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_COMPARE_MASK'+-- set in+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.+-- Otherwise, this state is specified by the+-- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'::@compareMask@+-- value used to create the currently active pipeline, for both front and+-- back faces.+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdSetStencilCompareMask-commandBuffer-parameter#+-- @commandBuffer@ /must/ be a valid+-- 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdSetStencilCompareMask-faceMask-parameter# @faceMask@+-- /must/ be a valid combination of+-- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' values+--+-- - #VUID-vkCmdSetStencilCompareMask-faceMask-requiredbitmask#+-- @faceMask@ /must/ not be @0@+--+-- - #VUID-vkCmdSetStencilCompareMask-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-vkCmdSetStencilCompareMask-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics 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 | Graphics |+-- | Secondary | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlags'+cmdSetStencilCompareMask :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @faceMask@ is a bitmask of+ -- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' specifying+ -- the set of stencil state for which to update the compare mask.+ ("faceMask" ::: StencilFaceFlags)+ -> -- | @compareMask@ is the new value to use as the stencil compare mask.+ ("compareMask" ::: Word32)+ -> io ()+cmdSetStencilCompareMask commandBuffer faceMask compareMask = liftIO $ do+ let vkCmdSetStencilCompareMaskPtr = pVkCmdSetStencilCompareMask (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdSetStencilCompareMaskPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetStencilCompareMask is null" Nothing Nothing+ let vkCmdSetStencilCompareMask' = mkVkCmdSetStencilCompareMask vkCmdSetStencilCompareMaskPtr+ traceAroundEvent "vkCmdSetStencilCompareMask" (vkCmdSetStencilCompareMask' (commandBufferHandle (commandBuffer)) (faceMask) (compareMask))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdSetStencilWriteMask+ :: FunPtr (Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()++-- | vkCmdSetStencilWriteMask - Set stencil write mask dynamically for a+-- command buffer+--+-- = Description+--+-- This command sets the stencil write mask for subsequent drawing commands+-- when the graphics pipeline is created with+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_WRITE_MASK' set+-- in+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.+-- Otherwise, this state is specified by the+-- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'::@writeMask@+-- value used to create the currently active pipeline, for both front and+-- back faces.+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdSetStencilWriteMask-commandBuffer-parameter#+-- @commandBuffer@ /must/ be a valid+-- 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdSetStencilWriteMask-faceMask-parameter# @faceMask@ /must/+-- be a valid combination of+-- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' values+--+-- - #VUID-vkCmdSetStencilWriteMask-faceMask-requiredbitmask# @faceMask@+-- /must/ not be @0@+--+-- - #VUID-vkCmdSetStencilWriteMask-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-vkCmdSetStencilWriteMask-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics 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 | Graphics |+-- | Secondary | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlags'+cmdSetStencilWriteMask :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @faceMask@ is a bitmask of+ -- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' specifying+ -- the set of stencil state for which to update the write mask, as+ -- described above for 'cmdSetStencilCompareMask'.+ ("faceMask" ::: StencilFaceFlags)+ -> -- | @writeMask@ is the new value to use as the stencil write mask.+ ("writeMask" ::: Word32)+ -> io ()+cmdSetStencilWriteMask commandBuffer faceMask writeMask = liftIO $ do+ let vkCmdSetStencilWriteMaskPtr = pVkCmdSetStencilWriteMask (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdSetStencilWriteMaskPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetStencilWriteMask is null" Nothing Nothing+ let vkCmdSetStencilWriteMask' = mkVkCmdSetStencilWriteMask vkCmdSetStencilWriteMaskPtr+ traceAroundEvent "vkCmdSetStencilWriteMask" (vkCmdSetStencilWriteMask' (commandBufferHandle (commandBuffer)) (faceMask) (writeMask))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdSetStencilReference+ :: FunPtr (Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()++-- | vkCmdSetStencilReference - Set stencil reference value dynamically for a+-- command buffer+--+-- = Description+--+-- This command sets the stencil reference value for subsequent drawing+-- commands when the graphics pipeline is created with+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_REFERENCE' set+-- in+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.+-- Otherwise, this state is specified by the+-- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo'::@reference@+-- value used to create the currently active pipeline, for both front and+-- back faces.+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdSetStencilReference-commandBuffer-parameter#+-- @commandBuffer@ /must/ be a valid+-- 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdSetStencilReference-faceMask-parameter# @faceMask@ /must/+-- be a valid combination of+-- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' values+--+-- - #VUID-vkCmdSetStencilReference-faceMask-requiredbitmask# @faceMask@+-- /must/ not be @0@+--+-- - #VUID-vkCmdSetStencilReference-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-vkCmdSetStencilReference-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics 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 | Graphics |+-- | Secondary | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlags'+cmdSetStencilReference :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @faceMask@ is a bitmask of+ -- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' specifying+ -- the set of stencil state for which to update the reference value, as+ -- described above for 'cmdSetStencilCompareMask'.+ ("faceMask" ::: StencilFaceFlags)+ -> -- | @reference@ is the new value to use as the stencil reference value.+ ("reference" ::: Word32)+ -> io ()+cmdSetStencilReference commandBuffer faceMask reference = liftIO $ do+ let vkCmdSetStencilReferencePtr = pVkCmdSetStencilReference (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdSetStencilReferencePtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetStencilReference is null" Nothing Nothing+ let vkCmdSetStencilReference' = mkVkCmdSetStencilReference vkCmdSetStencilReferencePtr+ traceAroundEvent "vkCmdSetStencilReference" (vkCmdSetStencilReference' (commandBufferHandle (commandBuffer)) (faceMask) (reference))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdBindDescriptorSets+ :: FunPtr (Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> Word32 -> Word32 -> Ptr DescriptorSet -> Word32 -> Ptr Word32 -> IO ()) -> Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> Word32 -> Word32 -> Ptr DescriptorSet -> Word32 -> Ptr Word32 -> IO ()++-- | vkCmdBindDescriptorSets - Binds descriptor sets to a command buffer+--+-- = Description+--+-- 'cmdBindDescriptorSets' causes the sets numbered [@firstSet@..+-- @firstSet@+@descriptorSetCount@-1] to use the bindings stored in+-- @pDescriptorSets@[0..descriptorSetCount-1] for subsequent+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-bindpoint-commands bound pipeline commands>+-- set by @pipelineBindPoint@. Any bindings that were previously applied+-- via these sets are no longer valid.+--+-- Once bound, a descriptor set affects rendering of subsequent commands+-- that interact with the given pipeline type in the command buffer until+-- either a different set is bound to the same set number, or the set is+-- disturbed as described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility Pipeline Layout Compatibility>.+--+-- A compatible descriptor set /must/ be bound for all set numbers that any+-- shaders in a pipeline access, at the time that a drawing or dispatching+-- command is recorded to execute using that pipeline. However, if none of+-- the shaders in a pipeline statically use any bindings with a particular+-- set number, then no descriptor set need be bound for that set number,+-- even if the pipeline layout includes a non-trivial descriptor set layout+-- for that set number.+--+-- If any of the sets being bound include dynamic uniform or storage+-- buffers, then @pDynamicOffsets@ includes one element for each array+-- element in each dynamic descriptor type binding in each set. Values are+-- taken from @pDynamicOffsets@ in an order such that all entries for set N+-- come before set N+1; within a set, entries are ordered by the binding+-- numbers in the descriptor set layouts; and within a binding array,+-- elements are in order. @dynamicOffsetCount@ /must/ equal the total+-- number of dynamic descriptors in the sets being bound.+--+-- The effective offset used for dynamic uniform and storage buffer+-- bindings is the sum of the relative offset taken from @pDynamicOffsets@,+-- and the base address of the buffer plus base offset in the descriptor+-- set. The range of the dynamic uniform and storage buffer bindings is the+-- buffer range as specified in the descriptor set.+--+-- Each of the @pDescriptorSets@ /must/ be compatible with the pipeline+-- layout specified by @layout@. The layout used to program the bindings+-- /must/ also be compatible with the pipeline used in subsequent+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-bindpoint-commands bound pipeline commands>+-- with that pipeline type, as defined in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility Pipeline Layout Compatibility>+-- section.+--+-- The descriptor set contents bound by a call to 'cmdBindDescriptorSets'+-- /may/ be consumed at the following times:+--+-- - For descriptor bindings created with the+-- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'+-- bit set, the contents /may/ be consumed when the command buffer is+-- submitted to a queue, or during shader execution of the resulting+-- draws and dispatches, or any time in between. Otherwise,+--+-- - during host execution of the command, or during shader execution of+-- the resulting draws and dispatches, or any time in between.+--+-- Thus, the contents of a descriptor set binding /must/ not be altered+-- (overwritten by an update command, or freed) between the first point in+-- time that it /may/ be consumed, and when the command completes executing+-- on the queue.+--+-- The contents of @pDynamicOffsets@ are consumed immediately during+-- execution of 'cmdBindDescriptorSets'. Once all pending uses have+-- completed, it is legal to update and reuse a descriptor set.+--+-- == Valid Usage+--+-- - #VUID-vkCmdBindDescriptorSets-pDescriptorSets-00358# Each element of+-- @pDescriptorSets@ /must/ have been allocated with a+-- 'Vulkan.Core10.Handles.DescriptorSetLayout' that matches (is the+-- same as, or identically defined as) the+-- 'Vulkan.Core10.Handles.DescriptorSetLayout' at set /n/ in @layout@,+-- where /n/ is the sum of @firstSet@ and the index into+-- @pDescriptorSets@+--+-- - #VUID-vkCmdBindDescriptorSets-dynamicOffsetCount-00359#+-- @dynamicOffsetCount@ /must/ be equal to the total number of dynamic+-- descriptors in @pDescriptorSets@+--+-- - #VUID-vkCmdBindDescriptorSets-firstSet-00360# The sum of @firstSet@+-- and @descriptorSetCount@ /must/ be less than or equal to+-- 'Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo'::@setLayoutCount@+-- provided when @layout@ was created+--+-- - #VUID-vkCmdBindDescriptorSets-pipelineBindPoint-00361#+-- @pipelineBindPoint@ /must/ be supported by the @commandBuffer@’s+-- parent 'Vulkan.Core10.Handles.CommandPool'’s queue family+--+-- - #VUID-vkCmdBindDescriptorSets-pDynamicOffsets-01971# Each element of+-- @pDynamicOffsets@ which corresponds to a descriptor binding with+-- type+-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'+-- /must/ be a multiple of+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minUniformBufferOffsetAlignment@+--+-- - #VUID-vkCmdBindDescriptorSets-pDynamicOffsets-01972# Each element of+-- @pDynamicOffsets@ which corresponds to a descriptor binding with+-- type+-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'+-- /must/ be a multiple of+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minStorageBufferOffsetAlignment@+--+-- - #VUID-vkCmdBindDescriptorSets-pDescriptorSets-01979# For each+-- dynamic uniform or storage buffer binding in @pDescriptorSets@, the+-- sum of the effective offset, as defined above, and the range of the+-- binding /must/ be less than or equal to the size of the buffer+--+-- - #VUID-vkCmdBindDescriptorSets-pDescriptorSets-04616# Each element of+-- @pDescriptorSets@ /must/ not have been allocated from a+-- 'Vulkan.Core10.Handles.DescriptorPool' with the+-- 'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE'+-- flag set+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdBindDescriptorSets-commandBuffer-parameter#+-- @commandBuffer@ /must/ be a valid+-- 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdBindDescriptorSets-pipelineBindPoint-parameter#+-- @pipelineBindPoint@ /must/ be a valid+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value+--+-- - #VUID-vkCmdBindDescriptorSets-layout-parameter# @layout@ /must/ be a+-- valid 'Vulkan.Core10.Handles.PipelineLayout' handle+--+-- - #VUID-vkCmdBindDescriptorSets-pDescriptorSets-parameter#+-- @pDescriptorSets@ /must/ be a valid pointer to an array of+-- @descriptorSetCount@ valid 'Vulkan.Core10.Handles.DescriptorSet'+-- handles+--+-- - #VUID-vkCmdBindDescriptorSets-pDynamicOffsets-parameter# If+-- @dynamicOffsetCount@ is not @0@, @pDynamicOffsets@ /must/ be a valid+-- pointer to an array of @dynamicOffsetCount@ @uint32_t@ values+--+-- - #VUID-vkCmdBindDescriptorSets-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-vkCmdBindDescriptorSets-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics, or compute operations+--+-- - #VUID-vkCmdBindDescriptorSets-descriptorSetCount-arraylength#+-- @descriptorSetCount@ /must/ be greater than @0@+--+-- - #VUID-vkCmdBindDescriptorSets-commonparent# Each of @commandBuffer@,+-- @layout@, and the elements of @pDescriptorSets@ /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_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Handles.DescriptorSet',+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',+-- 'Vulkan.Core10.Handles.PipelineLayout'+cmdBindDescriptorSets :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer that the descriptor sets will be+ -- bound to.+ CommandBuffer+ -> -- | @pipelineBindPoint@ is a+ -- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' indicating the+ -- type of the pipeline that will use the descriptors. There is a separate+ -- set of bind points for each pipeline type, so binding one does not+ -- disturb the others.+ PipelineBindPoint+ -> -- | @layout@ is a 'Vulkan.Core10.Handles.PipelineLayout' object used to+ -- program the bindings.+ PipelineLayout+ -> -- | @firstSet@ is the set number of the first descriptor set to be bound.+ ("firstSet" ::: Word32)+ -> -- | @pDescriptorSets@ is a pointer to an array of handles to+ -- 'Vulkan.Core10.Handles.DescriptorSet' objects describing the descriptor+ -- sets to bind to.+ ("descriptorSets" ::: Vector DescriptorSet)+ -> -- | @pDynamicOffsets@ is a pointer to an array of @uint32_t@ values+ -- specifying dynamic offsets.+ ("dynamicOffsets" ::: Vector Word32)+ -> io ()+cmdBindDescriptorSets commandBuffer pipelineBindPoint layout firstSet descriptorSets dynamicOffsets = liftIO . evalContT $ do+ let vkCmdBindDescriptorSetsPtr = pVkCmdBindDescriptorSets (deviceCmds (commandBuffer :: CommandBuffer))+ lift $ unless (vkCmdBindDescriptorSetsPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindDescriptorSets is null" Nothing Nothing+ let vkCmdBindDescriptorSets' = mkVkCmdBindDescriptorSets vkCmdBindDescriptorSetsPtr+ pPDescriptorSets <- ContT $ allocaBytes @DescriptorSet ((Data.Vector.length (descriptorSets)) * 8)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPDescriptorSets `plusPtr` (8 * (i)) :: Ptr DescriptorSet) (e)) (descriptorSets)+ pPDynamicOffsets <- ContT $ allocaBytes @Word32 ((Data.Vector.length (dynamicOffsets)) * 4)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPDynamicOffsets `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (dynamicOffsets)+ lift $ traceAroundEvent "vkCmdBindDescriptorSets" (vkCmdBindDescriptorSets' (commandBufferHandle (commandBuffer)) (pipelineBindPoint) (layout) (firstSet) ((fromIntegral (Data.Vector.length $ (descriptorSets)) :: Word32)) (pPDescriptorSets) ((fromIntegral (Data.Vector.length $ (dynamicOffsets)) :: Word32)) (pPDynamicOffsets))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdBindIndexBuffer+ :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IndexType -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IndexType -> IO ()++-- | vkCmdBindIndexBuffer - Bind an index buffer to a command buffer+--+-- == Valid Usage+--+-- - #VUID-vkCmdBindIndexBuffer-offset-00431# @offset@ /must/ be less+-- than the size of @buffer@+--+-- - #VUID-vkCmdBindIndexBuffer-offset-00432# The sum of @offset@ and the+-- address of the range of 'Vulkan.Core10.Handles.DeviceMemory' object+-- that is backing @buffer@, /must/ be a multiple of the type indicated+-- by @indexType@+--+-- - #VUID-vkCmdBindIndexBuffer-buffer-00433# @buffer@ /must/ have been+-- created with the+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDEX_BUFFER_BIT'+-- flag+--+-- - #VUID-vkCmdBindIndexBuffer-buffer-00434# If @buffer@ is non-sparse+-- then it /must/ be bound completely and contiguously to a single+-- 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- - #VUID-vkCmdBindIndexBuffer-indexType-02507# @indexType@ /must/ not+-- be 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR'+--+-- - #VUID-vkCmdBindIndexBuffer-indexType-02765# If @indexType@ is+-- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT8_EXT', the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-indexTypeUint8 indexTypeUint8>+-- feature /must/ be enabled+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdBindIndexBuffer-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdBindIndexBuffer-buffer-parameter# @buffer@ /must/ be a+-- valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- - #VUID-vkCmdBindIndexBuffer-indexType-parameter# @indexType@ /must/+-- be a valid 'Vulkan.Core10.Enums.IndexType.IndexType' value+--+-- - #VUID-vkCmdBindIndexBuffer-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-vkCmdBindIndexBuffer-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics operations+--+-- - #VUID-vkCmdBindIndexBuffer-commonparent# Both of @buffer@, and+-- @commandBuffer@ /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 | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',+-- 'Vulkan.Core10.Enums.IndexType.IndexType'+cmdBindIndexBuffer :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command is+ -- recorded.+ CommandBuffer+ -> -- | @buffer@ is the buffer being bound.+ Buffer+ -> -- | @offset@ is the starting offset in bytes within @buffer@ used in index+ -- buffer address calculations.+ ("offset" ::: DeviceSize)+ -> -- | @indexType@ is a 'Vulkan.Core10.Enums.IndexType.IndexType' value+ -- specifying the size of the indices.+ IndexType+ -> io ()+cmdBindIndexBuffer commandBuffer buffer offset indexType = liftIO $ do+ let vkCmdBindIndexBufferPtr = pVkCmdBindIndexBuffer (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdBindIndexBufferPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindIndexBuffer is null" Nothing Nothing+ let vkCmdBindIndexBuffer' = mkVkCmdBindIndexBuffer vkCmdBindIndexBufferPtr+ traceAroundEvent "vkCmdBindIndexBuffer" (vkCmdBindIndexBuffer' (commandBufferHandle (commandBuffer)) (buffer) (offset) (indexType))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdBindVertexBuffers+ :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> IO ()++-- | vkCmdBindVertexBuffers - Bind vertex buffers to a command buffer+--+-- = Description+--+-- The values taken from elements i of @pBuffers@ and @pOffsets@ replace+-- the current state for the vertex input binding @firstBinding@ + i, for i+-- in [0, @bindingCount@). The vertex input binding is updated to start at+-- the offset indicated by @pOffsets@[i] from the start of the buffer+-- @pBuffers@[i]. All vertex input attributes that use each of these+-- bindings will use these updated addresses in their address calculations+-- for subsequent drawing commands. If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>+-- feature is enabled, elements of @pBuffers@ /can/ be+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and /can/ be used by the+-- vertex shader. If a vertex input attribute is bound to a vertex input+-- binding that is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the values+-- taken from memory are considered to be zero, and missing G, B, or A+-- components are+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input-extraction filled with (0,0,1)>.+--+-- == Valid Usage+--+-- - #VUID-vkCmdBindVertexBuffers-firstBinding-00624# @firstBinding@+-- /must/ be less than+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@+--+-- - #VUID-vkCmdBindVertexBuffers-firstBinding-00625# The sum of+-- @firstBinding@ and @bindingCount@ /must/ be less than or equal to+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@+--+-- - #VUID-vkCmdBindVertexBuffers-pOffsets-00626# All elements of+-- @pOffsets@ /must/ be less than the size of the corresponding element+-- in @pBuffers@+--+-- - #VUID-vkCmdBindVertexBuffers-pBuffers-00627# All elements of+-- @pBuffers@ /must/ have been created with the+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_VERTEX_BUFFER_BIT'+-- flag+--+-- - #VUID-vkCmdBindVertexBuffers-pBuffers-00628# Each element of+-- @pBuffers@ that is non-sparse /must/ be bound completely and+-- contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- - #VUID-vkCmdBindVertexBuffers-pBuffers-04001# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>+-- feature is not enabled, all elements of @pBuffers@ /must/ not be+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- - #VUID-vkCmdBindVertexBuffers-pBuffers-04002# If an element of+-- @pBuffers@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', then the+-- corresponding element of @pOffsets@ /must/ be zero+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdBindVertexBuffers-commandBuffer-parameter#+-- @commandBuffer@ /must/ be a valid+-- 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdBindVertexBuffers-pBuffers-parameter# @pBuffers@ /must/+-- be a valid pointer to an array of @bindingCount@ valid or+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE'+-- 'Vulkan.Core10.Handles.Buffer' handles+--+-- - #VUID-vkCmdBindVertexBuffers-pOffsets-parameter# @pOffsets@ /must/+-- be a valid pointer to an array of @bindingCount@+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize' values+--+-- - #VUID-vkCmdBindVertexBuffers-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-vkCmdBindVertexBuffers-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics operations+--+-- - #VUID-vkCmdBindVertexBuffers-bindingCount-arraylength#+-- @bindingCount@ /must/ be greater than @0@+--+-- - #VUID-vkCmdBindVertexBuffers-commonparent# Both of @commandBuffer@,+-- and the elements of @pBuffers@ 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 @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 | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize'+cmdBindVertexBuffers :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command is+ -- recorded.+ CommandBuffer+ -> -- | @firstBinding@ is the index of the first vertex input binding whose+ -- state is updated by the command.+ ("firstBinding" ::: Word32)+ -> -- | @pBuffers@ is a pointer to an array of buffer handles.+ ("buffers" ::: Vector Buffer)+ -> -- | @pOffsets@ is a pointer to an array of buffer offsets.+ ("offsets" ::: Vector DeviceSize)+ -> io ()+cmdBindVertexBuffers commandBuffer firstBinding buffers offsets = liftIO . evalContT $ do+ let vkCmdBindVertexBuffersPtr = pVkCmdBindVertexBuffers (deviceCmds (commandBuffer :: CommandBuffer))+ lift $ unless (vkCmdBindVertexBuffersPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindVertexBuffers is null" Nothing Nothing+ let vkCmdBindVertexBuffers' = mkVkCmdBindVertexBuffers vkCmdBindVertexBuffersPtr+ let pBuffersLength = Data.Vector.length $ (buffers)+ lift $ unless ((Data.Vector.length $ (offsets)) == pBuffersLength) $+ throwIO $ IOError Nothing InvalidArgument "" "pOffsets and pBuffers must have the same length" Nothing Nothing+ pPBuffers <- ContT $ allocaBytes @Buffer ((Data.Vector.length (buffers)) * 8)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPBuffers `plusPtr` (8 * (i)) :: Ptr Buffer) (e)) (buffers)+ pPOffsets <- ContT $ allocaBytes @DeviceSize ((Data.Vector.length (offsets)) * 8)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPOffsets `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) (offsets)+ lift $ traceAroundEvent "vkCmdBindVertexBuffers" (vkCmdBindVertexBuffers' (commandBufferHandle (commandBuffer)) (firstBinding) ((fromIntegral pBuffersLength :: Word32)) (pPBuffers) (pPOffsets))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdDraw+ :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Word32 -> IO ()++-- | vkCmdDraw - Draw primitives+--+-- = Description+--+-- When the command is executed, primitives are assembled using the current+-- primitive topology and @vertexCount@ consecutive vertex indices with the+-- first @vertexIndex@ value equal to @firstVertex@. The primitives are+-- drawn @instanceCount@ times with @instanceIndex@ starting with+-- @firstInstance@ and increasing sequentially for each instance. The+-- assembled primitives execute the bound graphics pipeline.+--+-- == Valid Usage+--+-- - #VUID-vkCmdDraw-magFilter-04553# If a+-- 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+-- @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and+-- @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is+-- used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of+-- this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- - #VUID-vkCmdDraw-mipmapMode-04770# If a+-- 'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to+-- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'+-- and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE'+-- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of+-- this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- - #VUID-vkCmdDraw-None-02691# If a 'Vulkan.Core10.Handles.ImageView'+-- is accessed using atomic operations as a result of this command,+-- then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'+--+-- - #VUID-vkCmdDraw-None-02692# If a 'Vulkan.Core10.Handles.ImageView'+-- is sampled with+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+-- of this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'+--+-- - #VUID-vkCmdDraw-filterCubic-02694# Any+-- 'Vulkan.Core10.Handles.ImageView' being sampled with+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+-- of this command /must/ have a+-- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+-- supports cubic filtering, as specified by+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@+-- returned by+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- - #VUID-vkCmdDraw-filterCubicMinmax-02695# Any+-- 'Vulkan.Core10.Handles.ImageView' being sampled with+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a+-- reduction mode of either+-- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'+-- or+-- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'+-- as a result of this command /must/ have a+-- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+-- supports cubic filtering together with minmax filtering, as+-- specified by+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@+-- returned by+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- - #VUID-vkCmdDraw-flags-02696# Any 'Vulkan.Core10.Handles.Image'+-- created with a 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@+-- containing+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'+-- sampled as a result of this command /must/ only be sampled using a+-- 'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of+-- 'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'+--+-- - #VUID-vkCmdDraw-OpTypeImage-06423# Any+-- 'Vulkan.Core10.Handles.ImageView' or+-- 'Vulkan.Core10.Handles.BufferView' being written as a storage image+-- or storage texel buffer where the image format field of the+-- @OpTypeImage@ is @Unknown@ /must/ have image format features that+-- support+-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR'+--+-- - #VUID-vkCmdDraw-OpTypeImage-06424# Any+-- 'Vulkan.Core10.Handles.ImageView' or+-- 'Vulkan.Core10.Handles.BufferView' being read as a storage image or+-- storage texel buffer where the image format field of the+-- @OpTypeImage@ is @Unknown@ /must/ have image format features that+-- support+-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR'+--+-- - #VUID-vkCmdDraw-None-02697# For each set /n/ that is statically used+-- by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind+-- point used by this command, a descriptor set /must/ have been bound+-- to /n/ at the same pipeline bind point, with a+-- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set+-- /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create+-- the current 'Vulkan.Core10.Handles.Pipeline', as described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- - #VUID-vkCmdDraw-maintenance4-06425# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-maintenance4 maintenance4>+-- feature is not enabled, then for each push constant that is+-- statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+-- pipeline bind point used by this command, a push constant value+-- /must/ have been set for the same pipeline bind point, with a+-- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push+-- constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to+-- create the current 'Vulkan.Core10.Handles.Pipeline', as described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- - #VUID-vkCmdDraw-None-02699# Descriptors in each bound descriptor+-- set, specified via 'cmdBindDescriptorSets', /must/ be valid if they+-- are statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to+-- the pipeline bind point used by this command+--+-- - #VUID-vkCmdDraw-None-02700# A valid pipeline /must/ be bound to the+-- pipeline bind point used by this command+--+-- - #VUID-vkCmdDraw-commandBuffer-02701# If the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command requires any dynamic state, that state+-- /must/ have been set or inherited (if the+-- @VK_NV_inherited_viewport_scissor@ extension is enabled) for+-- @commandBuffer@, and done so after any previously bound pipeline+-- with the corresponding state not specified as dynamic+--+-- - #VUID-vkCmdDraw-None-02859# There /must/ not have been any calls to+-- dynamic state setting commands for any state not specified as+-- dynamic in the 'Vulkan.Core10.Handles.Pipeline' object bound to the+-- pipeline bind point used by this command, since that pipeline was+-- bound+--+-- - #VUID-vkCmdDraw-None-02702# If the 'Vulkan.Core10.Handles.Pipeline'+-- object bound to the pipeline bind point used by this command+-- accesses a 'Vulkan.Core10.Handles.Sampler' object that uses+-- unnormalized coordinates, that sampler /must/ not be used to sample+-- from any 'Vulkan.Core10.Handles.Image' with a+-- 'Vulkan.Core10.Handles.ImageView' of the type+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in+-- any shader stage+--+-- - #VUID-vkCmdDraw-None-02703# If the 'Vulkan.Core10.Handles.Pipeline'+-- object bound to the pipeline bind point used by this command+-- accesses a 'Vulkan.Core10.Handles.Sampler' object that uses+-- unnormalized coordinates, that sampler /must/ not be used with any+-- of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@+-- instructions with @ImplicitLod@, @Dref@ or @Proj@ in their name, in+-- any shader stage+--+-- - #VUID-vkCmdDraw-None-02704# If the 'Vulkan.Core10.Handles.Pipeline'+-- object bound to the pipeline bind point used by this command+-- accesses a 'Vulkan.Core10.Handles.Sampler' object that uses+-- unnormalized coordinates, that sampler /must/ not be used with any+-- of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@+-- instructions that includes a LOD bias or any offset values, in any+-- shader stage+--+-- - #VUID-vkCmdDraw-None-02705# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+-- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+-- object bound to the pipeline bind point used by this command+-- accesses a uniform buffer, it /must/ not access values outside of+-- the range of the buffer as specified in the descriptor set bound to+-- the same pipeline bind point+--+-- - #VUID-vkCmdDraw-None-02706# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+-- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+-- object bound to the pipeline bind point used by this command+-- accesses a storage buffer, it /must/ not access values outside of+-- the range of the buffer as specified in the descriptor set bound to+-- the same pipeline bind point+--+-- - #VUID-vkCmdDraw-commandBuffer-02707# If @commandBuffer@ is an+-- unprotected command buffer, any resource accessed by the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command /must/ not be a protected resource+--+-- - #VUID-vkCmdDraw-None-04115# If a 'Vulkan.Core10.Handles.ImageView'+-- is accessed using @OpImageWrite@ as a result of this command, then+-- the @Type@ of the @Texel@ operand of that instruction /must/ have at+-- least as many components as the image view’s format+--+-- - #VUID-vkCmdDraw-OpImageWrite-04469# If a+-- 'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+-- as a result of this command, then the @Type@ of the @Texel@ operand+-- of that instruction /must/ have at least as many components as the+-- buffer view’s format+--+-- - #VUID-vkCmdDraw-SampledType-04470# If a+-- 'Vulkan.Core10.Handles.ImageView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component+-- width is accessed as a result of this command, the @SampledType@ of+-- the @OpTypeImage@ operand of that instruction /must/ have a @Width@+-- of 64+--+-- - #VUID-vkCmdDraw-SampledType-04471# If a+-- 'Vulkan.Core10.Handles.ImageView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a component width less+-- than 64-bit is accessed as a result of this command, the+-- @SampledType@ of the @OpTypeImage@ operand of that instruction+-- /must/ have a @Width@ of 32+--+-- - #VUID-vkCmdDraw-SampledType-04472# If a+-- 'Vulkan.Core10.Handles.BufferView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component+-- width is accessed as a result of this command, the @SampledType@ of+-- the @OpTypeImage@ operand of that instruction /must/ have a @Width@+-- of 64+--+-- - #VUID-vkCmdDraw-SampledType-04473# If a+-- 'Vulkan.Core10.Handles.BufferView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a component width less+-- than 64-bit is accessed as a result of this command, the+-- @SampledType@ of the @OpTypeImage@ operand of that instruction+-- /must/ have a @Width@ of 32+--+-- - #VUID-vkCmdDraw-sparseImageInt64Atomics-04474# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+-- feature is not enabled, 'Vulkan.Core10.Handles.Image' objects+-- created with the+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'+-- flag /must/ not be accessed by atomic instructions through an+-- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+-- command+--+-- - #VUID-vkCmdDraw-sparseImageInt64Atomics-04475# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+-- feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects+-- created with the+-- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'+-- flag /must/ not be accessed by atomic instructions through an+-- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+-- command+--+-- - #VUID-vkCmdDraw-renderPass-02684# The current render pass /must/ be+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>+-- with the @renderPass@ member of the+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure+-- specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound+-- to+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'+--+-- - #VUID-vkCmdDraw-subpass-02685# The subpass index of the current+-- render pass /must/ be equal to the @subpass@ member of the+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure+-- specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound+-- to+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'+--+-- - #VUID-vkCmdDraw-None-02686# Every input attachment used by the+-- current subpass /must/ be bound to the pipeline via a descriptor set+--+-- - #VUID-vkCmdDraw-None-04584# Image subresources used as attachments+-- in the current render pass /must/ not be accessed in any way other+-- than as an attachment by this command, except for cases involving+-- read-only access to depth\/stencil attachments as described in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-attachment-nonattachment Render Pass>+-- chapter+--+-- - #VUID-vkCmdDraw-maxMultiviewInstanceIndex-02688# If the draw is+-- recorded in a render pass instance with multiview enabled, the+-- maximum instance index /must/ be less than or equal to+-- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@+--+-- - #VUID-vkCmdDraw-sampleLocationsEnable-02689# If the bound graphics+-- pipeline was created with+-- 'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@+-- set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass+-- has a depth\/stencil attachment, then that attachment /must/ have+-- been created with the+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'+-- bit set+--+-- - #VUID-vkCmdDraw-viewportCount-03417# If the bound graphics pipeline+-- state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled, but not the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+-- dynamic state enabled, then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command, and the @viewportCount@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- /must/ match the+-- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@+-- of the pipeline+--+-- - #VUID-vkCmdDraw-scissorCount-03418# If the bound graphics pipeline+-- state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+-- dynamic state enabled, but not the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled, then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command, and the @scissorCount@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+-- /must/ match the+-- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@+-- of the pipeline+--+-- - #VUID-vkCmdDraw-viewportCount-03419# If the bound graphics pipeline+-- state was created with both the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+-- and+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic states enabled then both+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- and+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command, and the @viewportCount@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- /must/ match the @scissorCount@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+--+-- - #VUID-vkCmdDraw-viewportCount-04137# If the bound graphics pipeline+-- state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled, but not the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'+-- dynamic state enabled, then the bound graphics pipeline /must/ have+-- been created with+-- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@+-- greater or equal to the @viewportCount@ parameter in the last call+-- to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDraw-viewportCount-04138# If the bound graphics pipeline+-- state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- and+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'+-- dynamic states enabled then the @viewportCount@ parameter in the+-- last call to+-- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'+-- /must/ be greater than or equal to the @viewportCount@ parameter in+-- the last call to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDraw-viewportCount-04139# If the bound graphics pipeline+-- state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled, but not the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'+-- dynamic state enabled, then the bound graphics pipeline /must/ have+-- been created with+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'::@viewportCount@+-- greater or equal to the @viewportCount@ parameter in the last call+-- to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDraw-viewportCount-04140# If the bound graphics pipeline+-- state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- and+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'+-- dynamic states enabled then the @viewportCount@ parameter in the+-- last call to+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'+-- /must/ be greater than or equal to the @viewportCount@ parameter in+-- the last call to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDraw-VkPipelineVieportCreateInfo-04141# If the bound+-- graphics pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled and a+-- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with+-- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@+-- greater or equal to the @viewportCount@ parameter in the last call+-- to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDraw-VkPipelineVieportCreateInfo-04142# If the bound+-- graphics pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled and a+-- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with+-- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@+-- greater or equal to the @viewportCount@ parameter in the last call+-- to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDraw-primitiveTopology-03420# If the bound graphics+-- pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command, and the @primitiveTopology@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'+-- /must/ be of the same+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-topology-class topology class>+-- as the pipeline+-- 'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@+-- state+--+-- - #VUID-vkCmdDraw-None-04875# If the bound graphics pipeline state was+-- created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPatchControlPointsEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command+--+-- - #VUID-vkCmdDraw-None-04876# If the bound graphics pipeline state was+-- created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnableEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command+--+-- - #VUID-vkCmdDraw-None-04877# If the bound graphics pipeline state was+-- created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetDepthBiasEnableEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command+--+-- - #VUID-vkCmdDraw-logicOp-04878# If the bound graphics pipeline state+-- was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LOGIC_OP_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetLogicOpEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command and the @logicOp@ /must/ be a valid+-- 'Vulkan.Core10.Enums.LogicOp.LogicOp' value+--+-- - #VUID-vkCmdDraw-None-04879# If the bound graphics pipeline state was+-- created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPrimitiveRestartEnableEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command+--+-- - #VUID-vkCmdDraw-primitiveFragmentShadingRateWithMultipleViewports-04552#+-- If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>+-- limit is not supported, the bound graphics pipeline was created with+-- the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled, and any of the shader stages of the bound+-- graphics pipeline write to the @PrimitiveShadingRateKHR@ built-in,+-- then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command, and the @viewportCount@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- /must/ be @1@+--+-- - #VUID-vkCmdDraw-blendEnable-04727# If rasterization is not disabled+-- in the bound graphics pipeline, then for each color attachment in+-- the subpass, if the corresponding image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- do not contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',+-- then the @blendEnable@ member of the corresponding element of the+-- @pAttachments@ member of @pColorBlendState@ /must/ be+-- 'Vulkan.Core10.FundamentalTypes.FALSE'+--+-- - #VUID-vkCmdDraw-rasterizationSamples-04740# If rasterization is not+-- disabled in the bound graphics pipeline, and neither the+-- @VK_AMD_mixed_attachment_samples@ nor the+-- @VK_NV_framebuffer_mixed_samples@ extensions are enabled, then+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- /must/ be the same as the current subpass color and\/or+-- depth\/stencil attachments+--+-- - #VUID-vkCmdDraw-None-04912# If the bound graphics pipeline was+-- created with both the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'+-- and+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'+-- dynamic states enabled, then+-- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'+-- /must/ have been called in the current command buffer prior to this+-- draw command+--+-- - #VUID-vkCmdDraw-pStrides-04913# If the bound graphics pipeline was+-- created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'+-- dynamic state enabled, but not the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'+-- dynamic state enabled, then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'+-- /must/ have been called in the current command buffer prior to this+-- draw command, and the @pStrides@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'+-- /must/ not be @NULL@+--+-- - #VUID-vkCmdDraw-None-04914# If the bound graphics pipeline state was+-- created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'+-- dynamic state enabled, then+-- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'+-- /must/ have been called in the current command buffer prior to this+-- draw command+--+-- - #VUID-vkCmdDraw-imageView-06172# If the current render pass instance+-- was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDraw-imageView-06173# If the current render pass instance+-- was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDraw-imageView-06174# If the current render pass instance+-- was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDraw-imageView-06175# If the current render pass instance+-- was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDraw-imageView-06176# If the current render pass instance+-- was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDraw-imageView-06177# If the current render pass instance+-- was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDraw-viewMask-06178# If the current render pass instance+-- was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@viewMask@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@viewMask@+--+-- - #VUID-vkCmdDraw-colorAttachmentCount-06179# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@colorAttachmentCount@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+--+-- - #VUID-vkCmdDraw-colorAttachmentCount-06180# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a 'Vulkan.Core10.Enums.Format.Format' equal to the+-- corresponding element of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@pColorAttachmentFormats@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDraw-pDepthAttachment-06181# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@depthAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDraw-pStencilAttachment-06182# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@stencilAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDraw-imageView-06183# If the current render pass instance+-- was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentShadingRateAttachmentInfoKHR'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'+--+-- - #VUID-vkCmdDraw-imageView-06184# If the current render pass instance+-- was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentDensityMapAttachmentInfoEXT'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT'+--+-- - #VUID-vkCmdDraw-colorAttachmentCount-06185# If the currently bound+-- pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the corresponding element of the+-- @pColorAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDraw-pDepthAttachment-06186# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDraw-pStencilAttachment-06187# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDraw-colorAttachmentCount-06188# If the currently bound+-- pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDraw-pDepthAttachment-06189# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDraw-pStencilAttachment-06190# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDraw-renderPass-06198# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline /must/ have been created with a+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@+-- equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- - #VUID-vkCmdDraw-commandBuffer-02712# If @commandBuffer@ is a+-- protected command buffer, any resource written to by the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command /must/ not be an unprotected resource+--+-- - #VUID-vkCmdDraw-commandBuffer-02713# If @commandBuffer@ is a+-- protected command buffer, pipeline stages other than the+-- framebuffer-space and compute stages in the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command /must/ not write to any resource+--+-- - #VUID-vkCmdDraw-commandBuffer-04617# If any of the shader stages of+-- the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind+-- point used by this command uses the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-RayQueryKHR RayQueryKHR>+-- capability, then @commandBuffer@ /must/ not be a protected command+-- buffer+--+-- - #VUID-vkCmdDraw-None-04007# All vertex input bindings accessed via+-- vertex input variables declared in the vertex shader entry point’s+-- interface /must/ have either valid or+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers bound+--+-- - #VUID-vkCmdDraw-None-04008# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>+-- feature is not enabled, all vertex input bindings accessed via+-- vertex input variables declared in the vertex shader entry point’s+-- interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- - #VUID-vkCmdDraw-None-02721# For a given vertex buffer binding, any+-- attribute data fetched /must/ be entirely contained within the+-- corresponding vertex buffer binding, as described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdDraw-commandBuffer-parameter# @commandBuffer@ /must/ be a+-- valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdDraw-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-vkCmdDraw-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics operations+--+-- - #VUID-vkCmdDraw-renderpass# This command /must/ only be called+-- inside of a render pass instance+--+-- == Host Synchronization+--+-- - Host access to @commandBuffer@ /must/ be externally synchronized+--+-- - Host access to the 'Vulkan.Core10.Handles.CommandPool' that+-- @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================++-- | Primary | Inside | Graphics |+-- | Secondary | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer'+cmdDraw :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command is+ -- recorded.+ CommandBuffer+ -> -- | @vertexCount@ is the number of vertices to draw.+ ("vertexCount" ::: Word32)+ -> -- | @instanceCount@ is the number of instances to draw.+ ("instanceCount" ::: Word32)+ -> -- | @firstVertex@ is the index of the first vertex to draw.+ ("firstVertex" ::: Word32)+ -> -- | @firstInstance@ is the instance ID of the first instance to draw.+ ("firstInstance" ::: Word32)+ -> io ()+cmdDraw commandBuffer vertexCount instanceCount firstVertex firstInstance = liftIO $ do+ let vkCmdDrawPtr = pVkCmdDraw (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdDrawPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDraw is null" Nothing Nothing+ let vkCmdDraw' = mkVkCmdDraw vkCmdDrawPtr+ traceAroundEvent "vkCmdDraw" (vkCmdDraw' (commandBufferHandle (commandBuffer)) (vertexCount) (instanceCount) (firstVertex) (firstInstance))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdDrawIndexed+ :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Int32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Int32 -> Word32 -> IO ()++-- | vkCmdDrawIndexed - Draw primitives with indexed vertices+--+-- = Description+--+-- When the command is executed, primitives are assembled using the current+-- primitive topology and @indexCount@ vertices whose indices are retrieved+-- from the index buffer. The index buffer is treated as an array of+-- tightly packed unsigned integers of size defined by the+-- 'cmdBindIndexBuffer'::@indexType@ parameter with which the buffer was+-- bound.+--+-- The first vertex index is at an offset of @firstIndex@ × @indexSize@ ++-- @offset@ within the bound index buffer, where @offset@ is the offset+-- specified by 'cmdBindIndexBuffer' and @indexSize@ is the byte size of+-- the type specified by @indexType@. Subsequent index values are retrieved+-- from consecutive locations in the index buffer. Indices are first+-- compared to the primitive restart value, then zero extended to 32 bits+-- (if the @indexType@ is+-- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT8_EXT' or+-- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16') and have+-- @vertexOffset@ added to them, before being supplied as the @vertexIndex@+-- value.+--+-- The primitives are drawn @instanceCount@ times with @instanceIndex@+-- starting with @firstInstance@ and increasing sequentially for each+-- instance. The assembled primitives execute the bound graphics pipeline.+--+-- == Valid Usage+--+-- - #VUID-vkCmdDrawIndexed-magFilter-04553# If a+-- 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+-- @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and+-- @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is+-- used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of+-- this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- - #VUID-vkCmdDrawIndexed-mipmapMode-04770# If a+-- 'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to+-- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'+-- and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE'+-- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of+-- this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- - #VUID-vkCmdDrawIndexed-None-02691# If a+-- 'Vulkan.Core10.Handles.ImageView' is accessed using atomic+-- operations as a result of this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'+--+-- - #VUID-vkCmdDrawIndexed-None-02692# If a+-- 'Vulkan.Core10.Handles.ImageView' is sampled with+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+-- of this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'+--+-- - #VUID-vkCmdDrawIndexed-filterCubic-02694# Any+-- 'Vulkan.Core10.Handles.ImageView' being sampled with+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+-- of this command /must/ have a+-- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+-- supports cubic filtering, as specified by+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@+-- returned by+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- - #VUID-vkCmdDrawIndexed-filterCubicMinmax-02695# Any+-- 'Vulkan.Core10.Handles.ImageView' being sampled with+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a+-- reduction mode of either+-- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'+-- or+-- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'+-- as a result of this command /must/ have a+-- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+-- supports cubic filtering together with minmax filtering, as+-- specified by+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@+-- returned by+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- - #VUID-vkCmdDrawIndexed-flags-02696# Any+-- 'Vulkan.Core10.Handles.Image' created with a+-- 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'+-- sampled as a result of this command /must/ only be sampled using a+-- 'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of+-- 'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'+--+-- - #VUID-vkCmdDrawIndexed-OpTypeImage-06423# Any+-- 'Vulkan.Core10.Handles.ImageView' or+-- 'Vulkan.Core10.Handles.BufferView' being written as a storage image+-- or storage texel buffer where the image format field of the+-- @OpTypeImage@ is @Unknown@ /must/ have image format features that+-- support+-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR'+--+-- - #VUID-vkCmdDrawIndexed-OpTypeImage-06424# Any+-- 'Vulkan.Core10.Handles.ImageView' or+-- 'Vulkan.Core10.Handles.BufferView' being read as a storage image or+-- storage texel buffer where the image format field of the+-- @OpTypeImage@ is @Unknown@ /must/ have image format features that+-- support+-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR'+--+-- - #VUID-vkCmdDrawIndexed-None-02697# For each set /n/ that is+-- statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+-- pipeline bind point used by this command, a descriptor set /must/+-- have been bound to /n/ at the same pipeline bind point, with a+-- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set+-- /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create+-- the current 'Vulkan.Core10.Handles.Pipeline', as described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- - #VUID-vkCmdDrawIndexed-maintenance4-06425# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-maintenance4 maintenance4>+-- feature is not enabled, then for each push constant that is+-- statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+-- pipeline bind point used by this command, a push constant value+-- /must/ have been set for the same pipeline bind point, with a+-- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push+-- constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to+-- create the current 'Vulkan.Core10.Handles.Pipeline', as described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- - #VUID-vkCmdDrawIndexed-None-02699# Descriptors in each bound+-- descriptor set, specified via 'cmdBindDescriptorSets', /must/ be+-- valid if they are statically used by the+-- 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point+-- used by this command+--+-- - #VUID-vkCmdDrawIndexed-None-02700# A valid pipeline /must/ be bound+-- to the pipeline bind point used by this command+--+-- - #VUID-vkCmdDrawIndexed-commandBuffer-02701# If the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command requires any dynamic state, that state+-- /must/ have been set or inherited (if the+-- @VK_NV_inherited_viewport_scissor@ extension is enabled) for+-- @commandBuffer@, and done so after any previously bound pipeline+-- with the corresponding state not specified as dynamic+--+-- - #VUID-vkCmdDrawIndexed-None-02859# There /must/ not have been any+-- calls to dynamic state setting commands for any state not specified+-- as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object bound to+-- the pipeline bind point used by this command, since that pipeline+-- was bound+--+-- - #VUID-vkCmdDrawIndexed-None-02702# If the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command accesses a+-- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+-- coordinates, that sampler /must/ not be used to sample from any+-- 'Vulkan.Core10.Handles.Image' with a+-- 'Vulkan.Core10.Handles.ImageView' of the type+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in+-- any shader stage+--+-- - #VUID-vkCmdDrawIndexed-None-02703# If the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command accesses a+-- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+-- coordinates, that sampler /must/ not be used with any of the SPIR-V+-- @OpImageSample*@ or @OpImageSparseSample*@ instructions with+-- @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage+--+-- - #VUID-vkCmdDrawIndexed-None-02704# If the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command accesses a+-- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+-- coordinates, that sampler /must/ not be used with any of the SPIR-V+-- @OpImageSample*@ or @OpImageSparseSample*@ instructions that+-- includes a LOD bias or any offset values, in any shader stage+--+-- - #VUID-vkCmdDrawIndexed-None-02705# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+-- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+-- object bound to the pipeline bind point used by this command+-- accesses a uniform buffer, it /must/ not access values outside of+-- the range of the buffer as specified in the descriptor set bound to+-- the same pipeline bind point+--+-- - #VUID-vkCmdDrawIndexed-None-02706# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+-- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+-- object bound to the pipeline bind point used by this command+-- accesses a storage buffer, it /must/ not access values outside of+-- the range of the buffer as specified in the descriptor set bound to+-- the same pipeline bind point+--+-- - #VUID-vkCmdDrawIndexed-commandBuffer-02707# If @commandBuffer@ is an+-- unprotected command buffer, any resource accessed by the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command /must/ not be a protected resource+--+-- - #VUID-vkCmdDrawIndexed-None-04115# If a+-- 'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@+-- as a result of this command, then the @Type@ of the @Texel@ operand+-- of that instruction /must/ have at least as many components as the+-- image view’s format+--+-- - #VUID-vkCmdDrawIndexed-OpImageWrite-04469# If a+-- 'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+-- as a result of this command, then the @Type@ of the @Texel@ operand+-- of that instruction /must/ have at least as many components as the+-- buffer view’s format+--+-- - #VUID-vkCmdDrawIndexed-SampledType-04470# If a+-- 'Vulkan.Core10.Handles.ImageView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component+-- width is accessed as a result of this command, the @SampledType@ of+-- the @OpTypeImage@ operand of that instruction /must/ have a @Width@+-- of 64+--+-- - #VUID-vkCmdDrawIndexed-SampledType-04471# If a+-- 'Vulkan.Core10.Handles.ImageView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a component width less+-- than 64-bit is accessed as a result of this command, the+-- @SampledType@ of the @OpTypeImage@ operand of that instruction+-- /must/ have a @Width@ of 32+--+-- - #VUID-vkCmdDrawIndexed-SampledType-04472# If a+-- 'Vulkan.Core10.Handles.BufferView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component+-- width is accessed as a result of this command, the @SampledType@ of+-- the @OpTypeImage@ operand of that instruction /must/ have a @Width@+-- of 64+--+-- - #VUID-vkCmdDrawIndexed-SampledType-04473# If a+-- 'Vulkan.Core10.Handles.BufferView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a component width less+-- than 64-bit is accessed as a result of this command, the+-- @SampledType@ of the @OpTypeImage@ operand of that instruction+-- /must/ have a @Width@ of 32+--+-- - #VUID-vkCmdDrawIndexed-sparseImageInt64Atomics-04474# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+-- feature is not enabled, 'Vulkan.Core10.Handles.Image' objects+-- created with the+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'+-- flag /must/ not be accessed by atomic instructions through an+-- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+-- command+--+-- - #VUID-vkCmdDrawIndexed-sparseImageInt64Atomics-04475# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+-- feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects+-- created with the+-- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'+-- flag /must/ not be accessed by atomic instructions through an+-- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+-- command+--+-- - #VUID-vkCmdDrawIndexed-renderPass-02684# The current render pass+-- /must/ be+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>+-- with the @renderPass@ member of the+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure+-- specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound+-- to+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'+--+-- - #VUID-vkCmdDrawIndexed-subpass-02685# The subpass index of the+-- current render pass /must/ be equal to the @subpass@ member of the+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure+-- specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound+-- to+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'+--+-- - #VUID-vkCmdDrawIndexed-None-02686# Every input attachment used by+-- the current subpass /must/ be bound to the pipeline via a descriptor+-- set+--+-- - #VUID-vkCmdDrawIndexed-None-04584# Image subresources used as+-- attachments in the current render pass /must/ not be accessed in any+-- way other than as an attachment by this command, except for cases+-- involving read-only access to depth\/stencil attachments as+-- described in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-attachment-nonattachment Render Pass>+-- chapter+--+-- - #VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-02688# If the draw+-- is recorded in a render pass instance with multiview enabled, the+-- maximum instance index /must/ be less than or equal to+-- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@+--+-- - #VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689# If the bound+-- graphics pipeline was created with+-- 'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@+-- set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass+-- has a depth\/stencil attachment, then that attachment /must/ have+-- been created with the+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'+-- bit set+--+-- - #VUID-vkCmdDrawIndexed-viewportCount-03417# If the bound graphics+-- pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled, but not the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+-- dynamic state enabled, then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command, and the @viewportCount@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- /must/ match the+-- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@+-- of the pipeline+--+-- - #VUID-vkCmdDrawIndexed-scissorCount-03418# If the bound graphics+-- pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+-- dynamic state enabled, but not the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled, then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command, and the @scissorCount@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+-- /must/ match the+-- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@+-- of the pipeline+--+-- - #VUID-vkCmdDrawIndexed-viewportCount-03419# If the bound graphics+-- pipeline state was created with both the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+-- and+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic states enabled then both+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- and+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command, and the @viewportCount@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- /must/ match the @scissorCount@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+--+-- - #VUID-vkCmdDrawIndexed-viewportCount-04137# If the bound graphics+-- pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled, but not the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'+-- dynamic state enabled, then the bound graphics pipeline /must/ have+-- been created with+-- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@+-- greater or equal to the @viewportCount@ parameter in the last call+-- to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDrawIndexed-viewportCount-04138# If the bound graphics+-- pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- and+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'+-- dynamic states enabled then the @viewportCount@ parameter in the+-- last call to+-- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'+-- /must/ be greater than or equal to the @viewportCount@ parameter in+-- the last call to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDrawIndexed-viewportCount-04139# If the bound graphics+-- pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled, but not the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'+-- dynamic state enabled, then the bound graphics pipeline /must/ have+-- been created with+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'::@viewportCount@+-- greater or equal to the @viewportCount@ parameter in the last call+-- to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDrawIndexed-viewportCount-04140# If the bound graphics+-- pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- and+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'+-- dynamic states enabled then the @viewportCount@ parameter in the+-- last call to+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'+-- /must/ be greater than or equal to the @viewportCount@ parameter in+-- the last call to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDrawIndexed-VkPipelineVieportCreateInfo-04141# If the+-- bound graphics pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled and a+-- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with+-- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@+-- greater or equal to the @viewportCount@ parameter in the last call+-- to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDrawIndexed-VkPipelineVieportCreateInfo-04142# If the+-- bound graphics pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled and a+-- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with+-- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@+-- greater or equal to the @viewportCount@ parameter in the last call+-- to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDrawIndexed-primitiveTopology-03420# If the bound+-- graphics pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command, and the @primitiveTopology@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'+-- /must/ be of the same+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-topology-class topology class>+-- as the pipeline+-- 'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@+-- state+--+-- - #VUID-vkCmdDrawIndexed-None-04875# If the bound graphics pipeline+-- state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPatchControlPointsEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command+--+-- - #VUID-vkCmdDrawIndexed-None-04876# If the bound graphics pipeline+-- state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnableEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command+--+-- - #VUID-vkCmdDrawIndexed-None-04877# If the bound graphics pipeline+-- state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetDepthBiasEnableEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command+--+-- - #VUID-vkCmdDrawIndexed-logicOp-04878# If the bound graphics pipeline+-- state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LOGIC_OP_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetLogicOpEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command and the @logicOp@ /must/ be a valid+-- 'Vulkan.Core10.Enums.LogicOp.LogicOp' value+--+-- - #VUID-vkCmdDrawIndexed-None-04879# If the bound graphics pipeline+-- state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPrimitiveRestartEnableEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command+--+-- - #VUID-vkCmdDrawIndexed-primitiveFragmentShadingRateWithMultipleViewports-04552#+-- If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>+-- limit is not supported, the bound graphics pipeline was created with+-- the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled, and any of the shader stages of the bound+-- graphics pipeline write to the @PrimitiveShadingRateKHR@ built-in,+-- then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command, and the @viewportCount@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- /must/ be @1@+--+-- - #VUID-vkCmdDrawIndexed-blendEnable-04727# If rasterization is not+-- disabled in the bound graphics pipeline, then for each color+-- attachment in the subpass, if the corresponding image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- do not contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',+-- then the @blendEnable@ member of the corresponding element of the+-- @pAttachments@ member of @pColorBlendState@ /must/ be+-- 'Vulkan.Core10.FundamentalTypes.FALSE'+--+-- - #VUID-vkCmdDrawIndexed-rasterizationSamples-04740# If rasterization+-- is not disabled in the bound graphics pipeline, and neither the+-- @VK_AMD_mixed_attachment_samples@ nor the+-- @VK_NV_framebuffer_mixed_samples@ extensions are enabled, then+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- /must/ be the same as the current subpass color and\/or+-- depth\/stencil attachments+--+-- - #VUID-vkCmdDrawIndexed-None-04912# If the bound graphics pipeline+-- was created with both the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'+-- and+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'+-- dynamic states enabled, then+-- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'+-- /must/ have been called in the current command buffer prior to this+-- draw command+--+-- - #VUID-vkCmdDrawIndexed-pStrides-04913# If the bound graphics+-- pipeline was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'+-- dynamic state enabled, but not the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'+-- dynamic state enabled, then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'+-- /must/ have been called in the current command buffer prior to this+-- draw command, and the @pStrides@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'+-- /must/ not be @NULL@+--+-- - #VUID-vkCmdDrawIndexed-None-04914# If the bound graphics pipeline+-- state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'+-- dynamic state enabled, then+-- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'+-- /must/ have been called in the current command buffer prior to this+-- draw command+--+-- - #VUID-vkCmdDrawIndexed-imageView-06172# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawIndexed-imageView-06173# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawIndexed-imageView-06174# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawIndexed-imageView-06175# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawIndexed-imageView-06176# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawIndexed-imageView-06177# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawIndexed-viewMask-06178# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@viewMask@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@viewMask@+--+-- - #VUID-vkCmdDrawIndexed-colorAttachmentCount-06179# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@colorAttachmentCount@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+--+-- - #VUID-vkCmdDrawIndexed-colorAttachmentCount-06180# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a 'Vulkan.Core10.Enums.Format.Format' equal to the+-- corresponding element of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@pColorAttachmentFormats@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawIndexed-pDepthAttachment-06181# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@depthAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndexed-pStencilAttachment-06182# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@stencilAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndexed-imageView-06183# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentShadingRateAttachmentInfoKHR'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'+--+-- - #VUID-vkCmdDrawIndexed-imageView-06184# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentDensityMapAttachmentInfoEXT'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT'+--+-- - #VUID-vkCmdDrawIndexed-colorAttachmentCount-06185# If the currently+-- bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the corresponding element of the+-- @pColorAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawIndexed-pDepthAttachment-06186# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndexed-pStencilAttachment-06187# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndexed-colorAttachmentCount-06188# If the currently+-- bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawIndexed-pDepthAttachment-06189# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndexed-pStencilAttachment-06190# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndexed-renderPass-06198# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline /must/ have been created with a+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@+-- equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- - #VUID-vkCmdDrawIndexed-commandBuffer-02712# If @commandBuffer@ is a+-- protected command buffer, any resource written to by the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command /must/ not be an unprotected resource+--+-- - #VUID-vkCmdDrawIndexed-commandBuffer-02713# If @commandBuffer@ is a+-- protected command buffer, pipeline stages other than the+-- framebuffer-space and compute stages in the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command /must/ not write to any resource+--+-- - #VUID-vkCmdDrawIndexed-commandBuffer-04617# If any of the shader+-- stages of the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline+-- bind point used by this command uses the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-RayQueryKHR RayQueryKHR>+-- capability, then @commandBuffer@ /must/ not be a protected command+-- buffer+--+-- - #VUID-vkCmdDrawIndexed-None-04007# All vertex input bindings+-- accessed via vertex input variables declared in the vertex shader+-- entry point’s interface /must/ have either valid or+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers bound+--+-- - #VUID-vkCmdDrawIndexed-None-04008# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>+-- feature is not enabled, all vertex input bindings accessed via+-- vertex input variables declared in the vertex shader entry point’s+-- interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- - #VUID-vkCmdDrawIndexed-None-02721# For a given vertex buffer+-- binding, any attribute data fetched /must/ be entirely contained+-- within the corresponding vertex buffer binding, as described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>+--+-- - #VUID-vkCmdDrawIndexed-firstIndex-04932# (@indexSize@ ×+-- (@firstIndex@ + @indexCount@) + @offset@) /must/ be less than or+-- equal to the size of the bound index buffer, with @indexSize@ being+-- based on the type specified by @indexType@, where the index buffer,+-- @indexType@, and @offset@ are specified via 'cmdBindIndexBuffer'+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdDrawIndexed-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdDrawIndexed-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-vkCmdDrawIndexed-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics operations+--+-- - #VUID-vkCmdDrawIndexed-renderpass# This command /must/ only be+-- called inside of a render pass instance+--+-- == Host Synchronization+--+-- - Host access to @commandBuffer@ /must/ be externally synchronized+--+-- - Host access to the 'Vulkan.Core10.Handles.CommandPool' that+-- @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================++-- | Primary | Inside | Graphics |+-- | Secondary | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer'+cmdDrawIndexed :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command is+ -- recorded.+ CommandBuffer+ -> -- | @indexCount@ is the number of vertices to draw.+ ("indexCount" ::: Word32)+ -> -- | @instanceCount@ is the number of instances to draw.+ ("instanceCount" ::: Word32)+ -> -- | @firstIndex@ is the base index within the index buffer.+ ("firstIndex" ::: Word32)+ -> -- | @vertexOffset@ is the value added to the vertex index before indexing+ -- into the vertex buffer.+ ("vertexOffset" ::: Int32)+ -> -- | @firstInstance@ is the instance ID of the first instance to draw.+ ("firstInstance" ::: Word32)+ -> io ()+cmdDrawIndexed commandBuffer indexCount instanceCount firstIndex vertexOffset firstInstance = liftIO $ do+ let vkCmdDrawIndexedPtr = pVkCmdDrawIndexed (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdDrawIndexedPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawIndexed is null" Nothing Nothing+ let vkCmdDrawIndexed' = mkVkCmdDrawIndexed vkCmdDrawIndexedPtr+ traceAroundEvent "vkCmdDrawIndexed" (vkCmdDrawIndexed' (commandBufferHandle (commandBuffer)) (indexCount) (instanceCount) (firstIndex) (vertexOffset) (firstInstance))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdDrawIndirect+ :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()++-- | vkCmdDrawIndirect - Draw primitives with indirect parameters+--+-- = Description+--+-- 'cmdDrawIndirect' behaves similarly to 'cmdDraw' except that the+-- parameters are read by the device from a buffer during execution.+-- @drawCount@ draws are executed by the command, with parameters taken+-- from @buffer@ starting at @offset@ and increasing by @stride@ bytes for+-- each successive draw. The parameters of each draw are encoded in an+-- array of 'Vulkan.Core10.OtherTypes.DrawIndirectCommand' structures. If+-- @drawCount@ is less than or equal to one, @stride@ is ignored.+--+-- == Valid Usage+--+-- - #VUID-vkCmdDrawIndirect-magFilter-04553# If a+-- 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+-- @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and+-- @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is+-- used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of+-- this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- - #VUID-vkCmdDrawIndirect-mipmapMode-04770# If a+-- 'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to+-- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'+-- and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE'+-- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of+-- this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- - #VUID-vkCmdDrawIndirect-None-02691# If a+-- 'Vulkan.Core10.Handles.ImageView' is accessed using atomic+-- operations as a result of this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'+--+-- - #VUID-vkCmdDrawIndirect-None-02692# If a+-- 'Vulkan.Core10.Handles.ImageView' is sampled with+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+-- of this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'+--+-- - #VUID-vkCmdDrawIndirect-filterCubic-02694# Any+-- 'Vulkan.Core10.Handles.ImageView' being sampled with+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+-- of this command /must/ have a+-- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+-- supports cubic filtering, as specified by+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@+-- returned by+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- - #VUID-vkCmdDrawIndirect-filterCubicMinmax-02695# Any+-- 'Vulkan.Core10.Handles.ImageView' being sampled with+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a+-- reduction mode of either+-- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'+-- or+-- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'+-- as a result of this command /must/ have a+-- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+-- supports cubic filtering together with minmax filtering, as+-- specified by+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@+-- returned by+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- - #VUID-vkCmdDrawIndirect-flags-02696# Any+-- 'Vulkan.Core10.Handles.Image' created with a+-- 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'+-- sampled as a result of this command /must/ only be sampled using a+-- 'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of+-- 'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'+--+-- - #VUID-vkCmdDrawIndirect-OpTypeImage-06423# Any+-- 'Vulkan.Core10.Handles.ImageView' or+-- 'Vulkan.Core10.Handles.BufferView' being written as a storage image+-- or storage texel buffer where the image format field of the+-- @OpTypeImage@ is @Unknown@ /must/ have image format features that+-- support+-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR'+--+-- - #VUID-vkCmdDrawIndirect-OpTypeImage-06424# Any+-- 'Vulkan.Core10.Handles.ImageView' or+-- 'Vulkan.Core10.Handles.BufferView' being read as a storage image or+-- storage texel buffer where the image format field of the+-- @OpTypeImage@ is @Unknown@ /must/ have image format features that+-- support+-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR'+--+-- - #VUID-vkCmdDrawIndirect-None-02697# For each set /n/ that is+-- statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+-- pipeline bind point used by this command, a descriptor set /must/+-- have been bound to /n/ at the same pipeline bind point, with a+-- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set+-- /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create+-- the current 'Vulkan.Core10.Handles.Pipeline', as described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- - #VUID-vkCmdDrawIndirect-maintenance4-06425# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-maintenance4 maintenance4>+-- feature is not enabled, then for each push constant that is+-- statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+-- pipeline bind point used by this command, a push constant value+-- /must/ have been set for the same pipeline bind point, with a+-- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push+-- constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to+-- create the current 'Vulkan.Core10.Handles.Pipeline', as described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- - #VUID-vkCmdDrawIndirect-None-02699# Descriptors in each bound+-- descriptor set, specified via 'cmdBindDescriptorSets', /must/ be+-- valid if they are statically used by the+-- 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point+-- used by this command+--+-- - #VUID-vkCmdDrawIndirect-None-02700# A valid pipeline /must/ be bound+-- to the pipeline bind point used by this command+--+-- - #VUID-vkCmdDrawIndirect-commandBuffer-02701# If the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command requires any dynamic state, that state+-- /must/ have been set or inherited (if the+-- @VK_NV_inherited_viewport_scissor@ extension is enabled) for+-- @commandBuffer@, and done so after any previously bound pipeline+-- with the corresponding state not specified as dynamic+--+-- - #VUID-vkCmdDrawIndirect-None-02859# There /must/ not have been any+-- calls to dynamic state setting commands for any state not specified+-- as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object bound to+-- the pipeline bind point used by this command, since that pipeline+-- was bound+--+-- - #VUID-vkCmdDrawIndirect-None-02702# If the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command accesses a+-- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+-- coordinates, that sampler /must/ not be used to sample from any+-- 'Vulkan.Core10.Handles.Image' with a+-- 'Vulkan.Core10.Handles.ImageView' of the type+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in+-- any shader stage+--+-- - #VUID-vkCmdDrawIndirect-None-02703# If the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command accesses a+-- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+-- coordinates, that sampler /must/ not be used with any of the SPIR-V+-- @OpImageSample*@ or @OpImageSparseSample*@ instructions with+-- @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage+--+-- - #VUID-vkCmdDrawIndirect-None-02704# If the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command accesses a+-- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+-- coordinates, that sampler /must/ not be used with any of the SPIR-V+-- @OpImageSample*@ or @OpImageSparseSample*@ instructions that+-- includes a LOD bias or any offset values, in any shader stage+--+-- - #VUID-vkCmdDrawIndirect-None-02705# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+-- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+-- object bound to the pipeline bind point used by this command+-- accesses a uniform buffer, it /must/ not access values outside of+-- the range of the buffer as specified in the descriptor set bound to+-- the same pipeline bind point+--+-- - #VUID-vkCmdDrawIndirect-None-02706# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+-- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+-- object bound to the pipeline bind point used by this command+-- accesses a storage buffer, it /must/ not access values outside of+-- the range of the buffer as specified in the descriptor set bound to+-- the same pipeline bind point+--+-- - #VUID-vkCmdDrawIndirect-commandBuffer-02707# If @commandBuffer@ is+-- an unprotected command buffer, any resource accessed by the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command /must/ not be a protected resource+--+-- - #VUID-vkCmdDrawIndirect-None-04115# If a+-- 'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@+-- as a result of this command, then the @Type@ of the @Texel@ operand+-- of that instruction /must/ have at least as many components as the+-- image view’s format+--+-- - #VUID-vkCmdDrawIndirect-OpImageWrite-04469# If a+-- 'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+-- as a result of this command, then the @Type@ of the @Texel@ operand+-- of that instruction /must/ have at least as many components as the+-- buffer view’s format+--+-- - #VUID-vkCmdDrawIndirect-SampledType-04470# If a+-- 'Vulkan.Core10.Handles.ImageView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component+-- width is accessed as a result of this command, the @SampledType@ of+-- the @OpTypeImage@ operand of that instruction /must/ have a @Width@+-- of 64+--+-- - #VUID-vkCmdDrawIndirect-SampledType-04471# If a+-- 'Vulkan.Core10.Handles.ImageView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a component width less+-- than 64-bit is accessed as a result of this command, the+-- @SampledType@ of the @OpTypeImage@ operand of that instruction+-- /must/ have a @Width@ of 32+--+-- - #VUID-vkCmdDrawIndirect-SampledType-04472# If a+-- 'Vulkan.Core10.Handles.BufferView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component+-- width is accessed as a result of this command, the @SampledType@ of+-- the @OpTypeImage@ operand of that instruction /must/ have a @Width@+-- of 64+--+-- - #VUID-vkCmdDrawIndirect-SampledType-04473# If a+-- 'Vulkan.Core10.Handles.BufferView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a component width less+-- than 64-bit is accessed as a result of this command, the+-- @SampledType@ of the @OpTypeImage@ operand of that instruction+-- /must/ have a @Width@ of 32+--+-- - #VUID-vkCmdDrawIndirect-sparseImageInt64Atomics-04474# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+-- feature is not enabled, 'Vulkan.Core10.Handles.Image' objects+-- created with the+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'+-- flag /must/ not be accessed by atomic instructions through an+-- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+-- command+--+-- - #VUID-vkCmdDrawIndirect-sparseImageInt64Atomics-04475# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+-- feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects+-- created with the+-- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'+-- flag /must/ not be accessed by atomic instructions through an+-- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+-- command+--+-- - #VUID-vkCmdDrawIndirect-renderPass-02684# The current render pass+-- /must/ be+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>+-- with the @renderPass@ member of the+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure+-- specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound+-- to+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'+--+-- - #VUID-vkCmdDrawIndirect-subpass-02685# The subpass index of the+-- current render pass /must/ be equal to the @subpass@ member of the+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure+-- specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound+-- to+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'+--+-- - #VUID-vkCmdDrawIndirect-None-02686# Every input attachment used by+-- the current subpass /must/ be bound to the pipeline via a descriptor+-- set+--+-- - #VUID-vkCmdDrawIndirect-None-04584# Image subresources used as+-- attachments in the current render pass /must/ not be accessed in any+-- way other than as an attachment by this command, except for cases+-- involving read-only access to depth\/stencil attachments as+-- described in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-attachment-nonattachment Render Pass>+-- chapter+--+-- - #VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-02688# If the draw+-- is recorded in a render pass instance with multiview enabled, the+-- maximum instance index /must/ be less than or equal to+-- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@+--+-- - #VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689# If the bound+-- graphics pipeline was created with+-- 'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@+-- set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass+-- has a depth\/stencil attachment, then that attachment /must/ have+-- been created with the+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'+-- bit set+--+-- - #VUID-vkCmdDrawIndirect-viewportCount-03417# If the bound graphics+-- pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled, but not the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+-- dynamic state enabled, then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command, and the @viewportCount@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- /must/ match the+-- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@+-- of the pipeline+--+-- - #VUID-vkCmdDrawIndirect-scissorCount-03418# If the bound graphics+-- pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+-- dynamic state enabled, but not the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled, then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command, and the @scissorCount@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+-- /must/ match the+-- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@+-- of the pipeline+--+-- - #VUID-vkCmdDrawIndirect-viewportCount-03419# If the bound graphics+-- pipeline state was created with both the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+-- and+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic states enabled then both+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- and+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command, and the @viewportCount@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- /must/ match the @scissorCount@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+--+-- - #VUID-vkCmdDrawIndirect-viewportCount-04137# If the bound graphics+-- pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled, but not the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'+-- dynamic state enabled, then the bound graphics pipeline /must/ have+-- been created with+-- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@+-- greater or equal to the @viewportCount@ parameter in the last call+-- to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDrawIndirect-viewportCount-04138# If the bound graphics+-- pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- and+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'+-- dynamic states enabled then the @viewportCount@ parameter in the+-- last call to+-- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'+-- /must/ be greater than or equal to the @viewportCount@ parameter in+-- the last call to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDrawIndirect-viewportCount-04139# If the bound graphics+-- pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled, but not the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'+-- dynamic state enabled, then the bound graphics pipeline /must/ have+-- been created with+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'::@viewportCount@+-- greater or equal to the @viewportCount@ parameter in the last call+-- to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDrawIndirect-viewportCount-04140# If the bound graphics+-- pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- and+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'+-- dynamic states enabled then the @viewportCount@ parameter in the+-- last call to+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'+-- /must/ be greater than or equal to the @viewportCount@ parameter in+-- the last call to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDrawIndirect-VkPipelineVieportCreateInfo-04141# If the+-- bound graphics pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled and a+-- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with+-- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@+-- greater or equal to the @viewportCount@ parameter in the last call+-- to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDrawIndirect-VkPipelineVieportCreateInfo-04142# If the+-- bound graphics pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled and a+-- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with+-- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@+-- greater or equal to the @viewportCount@ parameter in the last call+-- to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDrawIndirect-primitiveTopology-03420# If the bound+-- graphics pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command, and the @primitiveTopology@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'+-- /must/ be of the same+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-topology-class topology class>+-- as the pipeline+-- 'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@+-- state+--+-- - #VUID-vkCmdDrawIndirect-None-04875# If the bound graphics pipeline+-- state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPatchControlPointsEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command+--+-- - #VUID-vkCmdDrawIndirect-None-04876# If the bound graphics pipeline+-- state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnableEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command+--+-- - #VUID-vkCmdDrawIndirect-None-04877# If the bound graphics pipeline+-- state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetDepthBiasEnableEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command+--+-- - #VUID-vkCmdDrawIndirect-logicOp-04878# If the bound graphics+-- pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LOGIC_OP_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetLogicOpEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command and the @logicOp@ /must/ be a valid+-- 'Vulkan.Core10.Enums.LogicOp.LogicOp' value+--+-- - #VUID-vkCmdDrawIndirect-None-04879# If the bound graphics pipeline+-- state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPrimitiveRestartEnableEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command+--+-- - #VUID-vkCmdDrawIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552#+-- If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>+-- limit is not supported, the bound graphics pipeline was created with+-- the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled, and any of the shader stages of the bound+-- graphics pipeline write to the @PrimitiveShadingRateKHR@ built-in,+-- then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command, and the @viewportCount@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- /must/ be @1@+--+-- - #VUID-vkCmdDrawIndirect-blendEnable-04727# If rasterization is not+-- disabled in the bound graphics pipeline, then for each color+-- attachment in the subpass, if the corresponding image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- do not contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',+-- then the @blendEnable@ member of the corresponding element of the+-- @pAttachments@ member of @pColorBlendState@ /must/ be+-- 'Vulkan.Core10.FundamentalTypes.FALSE'+--+-- - #VUID-vkCmdDrawIndirect-rasterizationSamples-04740# If rasterization+-- is not disabled in the bound graphics pipeline, and neither the+-- @VK_AMD_mixed_attachment_samples@ nor the+-- @VK_NV_framebuffer_mixed_samples@ extensions are enabled, then+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- /must/ be the same as the current subpass color and\/or+-- depth\/stencil attachments+--+-- - #VUID-vkCmdDrawIndirect-None-04912# If the bound graphics pipeline+-- was created with both the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'+-- and+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'+-- dynamic states enabled, then+-- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'+-- /must/ have been called in the current command buffer prior to this+-- draw command+--+-- - #VUID-vkCmdDrawIndirect-pStrides-04913# If the bound graphics+-- pipeline was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'+-- dynamic state enabled, but not the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'+-- dynamic state enabled, then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'+-- /must/ have been called in the current command buffer prior to this+-- draw command, and the @pStrides@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'+-- /must/ not be @NULL@+--+-- - #VUID-vkCmdDrawIndirect-None-04914# If the bound graphics pipeline+-- state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'+-- dynamic state enabled, then+-- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'+-- /must/ have been called in the current command buffer prior to this+-- draw command+--+-- - #VUID-vkCmdDrawIndirect-imageView-06172# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawIndirect-imageView-06173# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawIndirect-imageView-06174# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawIndirect-imageView-06175# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawIndirect-imageView-06176# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawIndirect-imageView-06177# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawIndirect-viewMask-06178# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@viewMask@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@viewMask@+--+-- - #VUID-vkCmdDrawIndirect-colorAttachmentCount-06179# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@colorAttachmentCount@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+--+-- - #VUID-vkCmdDrawIndirect-colorAttachmentCount-06180# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a 'Vulkan.Core10.Enums.Format.Format' equal to the+-- corresponding element of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@pColorAttachmentFormats@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawIndirect-pDepthAttachment-06181# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@depthAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndirect-pStencilAttachment-06182# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@stencilAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndirect-imageView-06183# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentShadingRateAttachmentInfoKHR'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'+--+-- - #VUID-vkCmdDrawIndirect-imageView-06184# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentDensityMapAttachmentInfoEXT'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT'+--+-- - #VUID-vkCmdDrawIndirect-colorAttachmentCount-06185# If the currently+-- bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the corresponding element of the+-- @pColorAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawIndirect-pDepthAttachment-06186# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndirect-pStencilAttachment-06187# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndirect-colorAttachmentCount-06188# If the currently+-- bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawIndirect-pDepthAttachment-06189# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndirect-pStencilAttachment-06190# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndirect-renderPass-06198# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline /must/ have been created with a+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@+-- equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- - #VUID-vkCmdDrawIndirect-None-04007# All vertex input bindings+-- accessed via vertex input variables declared in the vertex shader+-- entry point’s interface /must/ have either valid or+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers bound+--+-- - #VUID-vkCmdDrawIndirect-None-04008# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>+-- feature is not enabled, all vertex input bindings accessed via+-- vertex input variables declared in the vertex shader entry point’s+-- interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- - #VUID-vkCmdDrawIndirect-None-02721# For a given vertex buffer+-- binding, any attribute data fetched /must/ be entirely contained+-- within the corresponding vertex buffer binding, as described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>+--+-- - #VUID-vkCmdDrawIndirect-buffer-02708# If @buffer@ is non-sparse then+-- it /must/ be bound completely and contiguously to a single+-- 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- - #VUID-vkCmdDrawIndirect-buffer-02709# @buffer@ /must/ have been+-- created with the+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'+-- bit set+--+-- - #VUID-vkCmdDrawIndirect-offset-02710# @offset@ /must/ be a multiple+-- of @4@+--+-- - #VUID-vkCmdDrawIndirect-commandBuffer-02711# @commandBuffer@ /must/+-- not be a protected command buffer+--+-- - #VUID-vkCmdDrawIndirect-drawCount-02718# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiDrawIndirect multi-draw indirect>+-- feature is not enabled, @drawCount@ /must/ be @0@ or @1@+--+-- - #VUID-vkCmdDrawIndirect-drawCount-02719# @drawCount@ /must/ be less+-- than or equal to+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@+--+-- - #VUID-vkCmdDrawIndirect-firstInstance-00478# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectFirstInstance drawIndirectFirstInstance>+-- feature is not enabled, all the @firstInstance@ members of the+-- 'Vulkan.Core10.OtherTypes.DrawIndirectCommand' structures accessed+-- by this command /must/ be @0@+--+-- - #VUID-vkCmdDrawIndirect-drawCount-00476# If @drawCount@ is greater+-- than @1@, @stride@ /must/ be a multiple of @4@ and /must/ be greater+-- than or equal to+-- @sizeof@('Vulkan.Core10.OtherTypes.DrawIndirectCommand')+--+-- - #VUID-vkCmdDrawIndirect-drawCount-00487# If @drawCount@ is equal to+-- @1@, (@offset@ ++-- @sizeof@('Vulkan.Core10.OtherTypes.DrawIndirectCommand')) /must/ be+-- less than or equal to the size of @buffer@+--+-- - #VUID-vkCmdDrawIndirect-drawCount-00488# If @drawCount@ is greater+-- than @1@, (@stride@ × (@drawCount@ - 1) + @offset@ ++-- @sizeof@('Vulkan.Core10.OtherTypes.DrawIndirectCommand')) /must/ be+-- less than or equal to the size of @buffer@+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdDrawIndirect-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdDrawIndirect-buffer-parameter# @buffer@ /must/ be a valid+-- 'Vulkan.Core10.Handles.Buffer' handle+--+-- - #VUID-vkCmdDrawIndirect-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-vkCmdDrawIndirect-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics operations+--+-- - #VUID-vkCmdDrawIndirect-renderpass# This command /must/ only be+-- called inside of a render pass instance+--+-- - #VUID-vkCmdDrawIndirect-commonparent# Both of @buffer@, and+-- @commandBuffer@ /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 | Inside | Graphics |+-- | Secondary | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize'+cmdDrawIndirect :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command is+ -- recorded.+ CommandBuffer+ -> -- | @buffer@ is the buffer containing draw parameters.+ Buffer+ -> -- | @offset@ is the byte offset into @buffer@ where parameters begin.+ ("offset" ::: DeviceSize)+ -> -- | @drawCount@ is the number of draws to execute, and /can/ be zero.+ ("drawCount" ::: Word32)+ -> -- | @stride@ is the byte stride between successive sets of draw parameters.+ ("stride" ::: Word32)+ -> io ()+cmdDrawIndirect commandBuffer buffer offset drawCount stride = liftIO $ do+ let vkCmdDrawIndirectPtr = pVkCmdDrawIndirect (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdDrawIndirectPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawIndirect is null" Nothing Nothing+ let vkCmdDrawIndirect' = mkVkCmdDrawIndirect vkCmdDrawIndirectPtr+ traceAroundEvent "vkCmdDrawIndirect" (vkCmdDrawIndirect' (commandBufferHandle (commandBuffer)) (buffer) (offset) (drawCount) (stride))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdDrawIndexedIndirect+ :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()++-- | vkCmdDrawIndexedIndirect - Draw primitives with indirect parameters and+-- indexed vertices+--+-- = Description+--+-- 'cmdDrawIndexedIndirect' behaves similarly to 'cmdDrawIndexed' except+-- that the parameters are read by the device from a buffer during+-- execution. @drawCount@ draws are executed by the command, with+-- parameters taken from @buffer@ starting at @offset@ and increasing by+-- @stride@ bytes for each successive draw. The parameters of each draw are+-- encoded in an array of+-- 'Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand' structures. If+-- @drawCount@ is less than or equal to one, @stride@ is ignored.+--+-- == Valid Usage+--+-- - #VUID-vkCmdDrawIndexedIndirect-magFilter-04553# If a+-- 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+-- @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and+-- @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is+-- used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of+-- this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- - #VUID-vkCmdDrawIndexedIndirect-mipmapMode-04770# If a+-- 'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to+-- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'+-- and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE'+-- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of+-- this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-02691# If a+-- 'Vulkan.Core10.Handles.ImageView' is accessed using atomic+-- operations as a result of this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-02692# If a+-- 'Vulkan.Core10.Handles.ImageView' is sampled with+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+-- of this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'+--+-- - #VUID-vkCmdDrawIndexedIndirect-filterCubic-02694# Any+-- 'Vulkan.Core10.Handles.ImageView' being sampled with+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+-- of this command /must/ have a+-- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+-- supports cubic filtering, as specified by+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@+-- returned by+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- - #VUID-vkCmdDrawIndexedIndirect-filterCubicMinmax-02695# Any+-- 'Vulkan.Core10.Handles.ImageView' being sampled with+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a+-- reduction mode of either+-- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'+-- or+-- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'+-- as a result of this command /must/ have a+-- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+-- supports cubic filtering together with minmax filtering, as+-- specified by+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@+-- returned by+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- - #VUID-vkCmdDrawIndexedIndirect-flags-02696# Any+-- 'Vulkan.Core10.Handles.Image' created with a+-- 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'+-- sampled as a result of this command /must/ only be sampled using a+-- 'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of+-- 'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'+--+-- - #VUID-vkCmdDrawIndexedIndirect-OpTypeImage-06423# Any+-- 'Vulkan.Core10.Handles.ImageView' or+-- 'Vulkan.Core10.Handles.BufferView' being written as a storage image+-- or storage texel buffer where the image format field of the+-- @OpTypeImage@ is @Unknown@ /must/ have image format features that+-- support+-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR'+--+-- - #VUID-vkCmdDrawIndexedIndirect-OpTypeImage-06424# Any+-- 'Vulkan.Core10.Handles.ImageView' or+-- 'Vulkan.Core10.Handles.BufferView' being read as a storage image or+-- storage texel buffer where the image format field of the+-- @OpTypeImage@ is @Unknown@ /must/ have image format features that+-- support+-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR'+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-02697# For each set /n/ that is+-- statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+-- pipeline bind point used by this command, a descriptor set /must/+-- have been bound to /n/ at the same pipeline bind point, with a+-- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set+-- /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create+-- the current 'Vulkan.Core10.Handles.Pipeline', as described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- - #VUID-vkCmdDrawIndexedIndirect-maintenance4-06425# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-maintenance4 maintenance4>+-- feature is not enabled, then for each push constant that is+-- statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+-- pipeline bind point used by this command, a push constant value+-- /must/ have been set for the same pipeline bind point, with a+-- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push+-- constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to+-- create the current 'Vulkan.Core10.Handles.Pipeline', as described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-02699# Descriptors in each bound+-- descriptor set, specified via 'cmdBindDescriptorSets', /must/ be+-- valid if they are statically used by the+-- 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point+-- used by this command+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-02700# A valid pipeline /must/+-- be bound to the pipeline bind point used by this command+--+-- - #VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701# If the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command requires any dynamic state, that state+-- /must/ have been set or inherited (if the+-- @VK_NV_inherited_viewport_scissor@ extension is enabled) for+-- @commandBuffer@, and done so after any previously bound pipeline+-- with the corresponding state not specified as dynamic+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-02859# There /must/ not have+-- been any calls to dynamic state setting commands for any state not+-- specified as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object+-- bound to the pipeline bind point used by this command, since that+-- pipeline was bound+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-02702# If the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command accesses a+-- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+-- coordinates, that sampler /must/ not be used to sample from any+-- 'Vulkan.Core10.Handles.Image' with a+-- 'Vulkan.Core10.Handles.ImageView' of the type+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in+-- any shader stage+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-02703# If the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command accesses a+-- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+-- coordinates, that sampler /must/ not be used with any of the SPIR-V+-- @OpImageSample*@ or @OpImageSparseSample*@ instructions with+-- @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-02704# If the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command accesses a+-- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+-- coordinates, that sampler /must/ not be used with any of the SPIR-V+-- @OpImageSample*@ or @OpImageSparseSample*@ instructions that+-- includes a LOD bias or any offset values, in any shader stage+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-02705# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+-- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+-- object bound to the pipeline bind point used by this command+-- accesses a uniform buffer, it /must/ not access values outside of+-- the range of the buffer as specified in the descriptor set bound to+-- the same pipeline bind point+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-02706# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+-- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+-- object bound to the pipeline bind point used by this command+-- accesses a storage buffer, it /must/ not access values outside of+-- the range of the buffer as specified in the descriptor set bound to+-- the same pipeline bind point+--+-- - #VUID-vkCmdDrawIndexedIndirect-commandBuffer-02707# If+-- @commandBuffer@ is an unprotected command buffer, any resource+-- accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the+-- pipeline bind point used by this command /must/ not be a protected+-- resource+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-04115# If a+-- 'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@+-- as a result of this command, then the @Type@ of the @Texel@ operand+-- of that instruction /must/ have at least as many components as the+-- image view’s format+--+-- - #VUID-vkCmdDrawIndexedIndirect-OpImageWrite-04469# If a+-- 'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+-- as a result of this command, then the @Type@ of the @Texel@ operand+-- of that instruction /must/ have at least as many components as the+-- buffer view’s format+--+-- - #VUID-vkCmdDrawIndexedIndirect-SampledType-04470# If a+-- 'Vulkan.Core10.Handles.ImageView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component+-- width is accessed as a result of this command, the @SampledType@ of+-- the @OpTypeImage@ operand of that instruction /must/ have a @Width@+-- of 64+--+-- - #VUID-vkCmdDrawIndexedIndirect-SampledType-04471# If a+-- 'Vulkan.Core10.Handles.ImageView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a component width less+-- than 64-bit is accessed as a result of this command, the+-- @SampledType@ of the @OpTypeImage@ operand of that instruction+-- /must/ have a @Width@ of 32+--+-- - #VUID-vkCmdDrawIndexedIndirect-SampledType-04472# If a+-- 'Vulkan.Core10.Handles.BufferView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component+-- width is accessed as a result of this command, the @SampledType@ of+-- the @OpTypeImage@ operand of that instruction /must/ have a @Width@+-- of 64+--+-- - #VUID-vkCmdDrawIndexedIndirect-SampledType-04473# If a+-- 'Vulkan.Core10.Handles.BufferView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a component width less+-- than 64-bit is accessed as a result of this command, the+-- @SampledType@ of the @OpTypeImage@ operand of that instruction+-- /must/ have a @Width@ of 32+--+-- - #VUID-vkCmdDrawIndexedIndirect-sparseImageInt64Atomics-04474# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+-- feature is not enabled, 'Vulkan.Core10.Handles.Image' objects+-- created with the+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'+-- flag /must/ not be accessed by atomic instructions through an+-- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+-- command+--+-- - #VUID-vkCmdDrawIndexedIndirect-sparseImageInt64Atomics-04475# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+-- feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects+-- created with the+-- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'+-- flag /must/ not be accessed by atomic instructions through an+-- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+-- command+--+-- - #VUID-vkCmdDrawIndexedIndirect-renderPass-02684# The current render+-- pass /must/ be+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>+-- with the @renderPass@ member of the+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure+-- specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound+-- to+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'+--+-- - #VUID-vkCmdDrawIndexedIndirect-subpass-02685# The subpass index of+-- the current render pass /must/ be equal to the @subpass@ member of+-- the 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure+-- specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound+-- to+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-02686# Every input attachment+-- used by the current subpass /must/ be bound to the pipeline via a+-- descriptor set+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-04584# Image subresources used+-- as attachments in the current render pass /must/ not be accessed in+-- any way other than as an attachment by this command, except for+-- cases involving read-only access to depth\/stencil attachments as+-- described in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-attachment-nonattachment Render Pass>+-- chapter+--+-- - #VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-02688# If+-- the draw is recorded in a render pass instance with multiview+-- enabled, the maximum instance index /must/ be less than or equal to+-- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@+--+-- - #VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689# If the+-- bound graphics pipeline was created with+-- 'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@+-- set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass+-- has a depth\/stencil attachment, then that attachment /must/ have+-- been created with the+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'+-- bit set+--+-- - #VUID-vkCmdDrawIndexedIndirect-viewportCount-03417# If the bound+-- graphics pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled, but not the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+-- dynamic state enabled, then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command, and the @viewportCount@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- /must/ match the+-- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@+-- of the pipeline+--+-- - #VUID-vkCmdDrawIndexedIndirect-scissorCount-03418# If the bound+-- graphics pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+-- dynamic state enabled, but not the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled, then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command, and the @scissorCount@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+-- /must/ match the+-- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@+-- of the pipeline+--+-- - #VUID-vkCmdDrawIndexedIndirect-viewportCount-03419# If the bound+-- graphics pipeline state was created with both the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+-- and+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic states enabled then both+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- and+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command, and the @viewportCount@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- /must/ match the @scissorCount@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+--+-- - #VUID-vkCmdDrawIndexedIndirect-viewportCount-04137# If the bound+-- graphics pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled, but not the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'+-- dynamic state enabled, then the bound graphics pipeline /must/ have+-- been created with+-- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@+-- greater or equal to the @viewportCount@ parameter in the last call+-- to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDrawIndexedIndirect-viewportCount-04138# If the bound+-- graphics pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- and+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'+-- dynamic states enabled then the @viewportCount@ parameter in the+-- last call to+-- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'+-- /must/ be greater than or equal to the @viewportCount@ parameter in+-- the last call to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDrawIndexedIndirect-viewportCount-04139# If the bound+-- graphics pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled, but not the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'+-- dynamic state enabled, then the bound graphics pipeline /must/ have+-- been created with+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'::@viewportCount@+-- greater or equal to the @viewportCount@ parameter in the last call+-- to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDrawIndexedIndirect-viewportCount-04140# If the bound+-- graphics pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- and+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'+-- dynamic states enabled then the @viewportCount@ parameter in the+-- last call to+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'+-- /must/ be greater than or equal to the @viewportCount@ parameter in+-- the last call to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDrawIndexedIndirect-VkPipelineVieportCreateInfo-04141# If+-- the bound graphics pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled and a+-- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with+-- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@+-- greater or equal to the @viewportCount@ parameter in the last call+-- to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDrawIndexedIndirect-VkPipelineVieportCreateInfo-04142# If+-- the bound graphics pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled and a+-- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with+-- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@+-- greater or equal to the @viewportCount@ parameter in the last call+-- to+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- - #VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420# If the bound+-- graphics pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command, and the @primitiveTopology@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'+-- /must/ be of the same+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-topology-class topology class>+-- as the pipeline+-- 'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@+-- state+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-04875# If the bound graphics+-- pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPatchControlPointsEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-04876# If the bound graphics+-- pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnableEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-04877# If the bound graphics+-- pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetDepthBiasEnableEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command+--+-- - #VUID-vkCmdDrawIndexedIndirect-logicOp-04878# If the bound graphics+-- pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LOGIC_OP_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetLogicOpEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command and the @logicOp@ /must/ be a valid+-- 'Vulkan.Core10.Enums.LogicOp.LogicOp' value+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-04879# If the bound graphics+-- pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT'+-- dynamic state enabled then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPrimitiveRestartEnableEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command+--+-- - #VUID-vkCmdDrawIndexedIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552#+-- If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>+-- limit is not supported, the bound graphics pipeline was created with+-- the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+-- dynamic state enabled, and any of the shader stages of the bound+-- graphics pipeline write to the @PrimitiveShadingRateKHR@ built-in,+-- then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- /must/ have been called in the current command buffer prior to this+-- drawing command, and the @viewportCount@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+-- /must/ be @1@+--+-- - #VUID-vkCmdDrawIndexedIndirect-blendEnable-04727# If rasterization+-- is not disabled in the bound graphics pipeline, then for each color+-- attachment in the subpass, if the corresponding image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- do not contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',+-- then the @blendEnable@ member of the corresponding element of the+-- @pAttachments@ member of @pColorBlendState@ /must/ be+-- 'Vulkan.Core10.FundamentalTypes.FALSE'+--+-- - #VUID-vkCmdDrawIndexedIndirect-rasterizationSamples-04740# If+-- rasterization is not disabled in the bound graphics pipeline, and+-- neither the @VK_AMD_mixed_attachment_samples@ nor the+-- @VK_NV_framebuffer_mixed_samples@ extensions are enabled, then+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- /must/ be the same as the current subpass color and\/or+-- depth\/stencil attachments+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-04912# If the bound graphics+-- pipeline was created with both the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'+-- and+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'+-- dynamic states enabled, then+-- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'+-- /must/ have been called in the current command buffer prior to this+-- draw command+--+-- - #VUID-vkCmdDrawIndexedIndirect-pStrides-04913# If the bound graphics+-- pipeline was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'+-- dynamic state enabled, but not the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'+-- dynamic state enabled, then+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'+-- /must/ have been called in the current command buffer prior to this+-- draw command, and the @pStrides@ parameter of+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'+-- /must/ not be @NULL@+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-04914# If the bound graphics+-- pipeline state was created with the+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'+-- dynamic state enabled, then+-- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'+-- /must/ have been called in the current command buffer prior to this+-- draw command+--+-- - #VUID-vkCmdDrawIndexedIndirect-imageView-06172# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawIndexedIndirect-imageView-06173# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawIndexedIndirect-imageView-06174# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawIndexedIndirect-imageView-06175# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawIndexedIndirect-imageView-06176# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawIndexedIndirect-imageView-06177# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawIndexedIndirect-viewMask-06178# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@viewMask@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@viewMask@+--+-- - #VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06179# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@colorAttachmentCount@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+--+-- - #VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06180# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a 'Vulkan.Core10.Enums.Format.Format' equal to the+-- corresponding element of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@pColorAttachmentFormats@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawIndexedIndirect-pDepthAttachment-06181# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@depthAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndexedIndirect-pStencilAttachment-06182# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@stencilAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndexedIndirect-imageView-06183# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentShadingRateAttachmentInfoKHR'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'+--+-- - #VUID-vkCmdDrawIndexedIndirect-imageView-06184# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentDensityMapAttachmentInfoEXT'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT'+--+-- - #VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06185# If the+-- currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the corresponding element of the+-- @pColorAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawIndexedIndirect-pDepthAttachment-06186# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndexedIndirect-pStencilAttachment-06187# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06188# If the+-- currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawIndexedIndirect-pDepthAttachment-06189# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndexedIndirect-pStencilAttachment-06190# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndexedIndirect-renderPass-06198# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline /must/ have been created with a+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@+-- equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-04007# All vertex input bindings+-- accessed via vertex input variables declared in the vertex shader+-- entry point’s interface /must/ have either valid or+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers bound+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-04008# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>+-- feature is not enabled, all vertex input bindings accessed via+-- vertex input variables declared in the vertex shader entry point’s+-- interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- - #VUID-vkCmdDrawIndexedIndirect-None-02721# For a given vertex buffer+-- binding, any attribute data fetched /must/ be entirely contained+-- within the corresponding vertex buffer binding, as described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>+--+-- - #VUID-vkCmdDrawIndexedIndirect-buffer-02708# If @buffer@ is+-- non-sparse then it /must/ be bound completely and contiguously to a+-- single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- - #VUID-vkCmdDrawIndexedIndirect-buffer-02709# @buffer@ /must/ have+-- been created with the+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'+-- bit set+--+-- - #VUID-vkCmdDrawIndexedIndirect-offset-02710# @offset@ /must/ be a+-- multiple of @4@+--+-- - #VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711# @commandBuffer@+-- /must/ not be a protected command buffer+--+-- - #VUID-vkCmdDrawIndexedIndirect-drawCount-02718# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiDrawIndirect multi-draw indirect>+-- feature is not enabled, @drawCount@ /must/ be @0@ or @1@+--+-- - #VUID-vkCmdDrawIndexedIndirect-drawCount-02719# @drawCount@ /must/+-- be less than or equal to+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@+--+-- - #VUID-vkCmdDrawIndexedIndirect-drawCount-00528# If @drawCount@ is+-- greater than @1@, @stride@ /must/ be a multiple of @4@ and /must/ be+-- greater than or equal to+-- @sizeof@('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand')+--+-- - #VUID-vkCmdDrawIndexedIndirect-firstInstance-00530# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectFirstInstance drawIndirectFirstInstance>+-- feature is not enabled, all the @firstInstance@ members of the+-- 'Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand' structures+-- accessed by this command /must/ be @0@+--+-- - #VUID-vkCmdDrawIndexedIndirect-drawCount-00539# If @drawCount@ is+-- equal to @1@, (@offset@ ++-- @sizeof@('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'))+-- /must/ be less than or equal to the size of @buffer@+--+-- - #VUID-vkCmdDrawIndexedIndirect-drawCount-00540# If @drawCount@ is+-- greater than @1@, (@stride@ × (@drawCount@ - 1) + @offset@ ++-- @sizeof@('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'))+-- /must/ be less than or equal to the size of @buffer@+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdDrawIndexedIndirect-commandBuffer-parameter#+-- @commandBuffer@ /must/ be a valid+-- 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdDrawIndexedIndirect-buffer-parameter# @buffer@ /must/ be+-- a valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- - #VUID-vkCmdDrawIndexedIndirect-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-vkCmdDrawIndexedIndirect-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics operations+--+-- - #VUID-vkCmdDrawIndexedIndirect-renderpass# This command /must/ only+-- be called inside of a render pass instance+--+-- - #VUID-vkCmdDrawIndexedIndirect-commonparent# Both of @buffer@, and+-- @commandBuffer@ /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 | Inside | Graphics |+-- | Secondary | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize'+cmdDrawIndexedIndirect :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command is+ -- recorded.+ CommandBuffer+ -> -- | @buffer@ is the buffer containing draw parameters.+ Buffer+ -> -- | @offset@ is the byte offset into @buffer@ where parameters begin.+ ("offset" ::: DeviceSize)+ -> -- | @drawCount@ is the number of draws to execute, and /can/ be zero.+ ("drawCount" ::: Word32)+ -> -- | @stride@ is the byte stride between successive sets of draw parameters.+ ("stride" ::: Word32)+ -> io ()+cmdDrawIndexedIndirect commandBuffer buffer offset drawCount stride = liftIO $ do+ let vkCmdDrawIndexedIndirectPtr = pVkCmdDrawIndexedIndirect (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdDrawIndexedIndirectPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawIndexedIndirect is null" Nothing Nothing+ let vkCmdDrawIndexedIndirect' = mkVkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirectPtr+ traceAroundEvent "vkCmdDrawIndexedIndirect" (vkCmdDrawIndexedIndirect' (commandBufferHandle (commandBuffer)) (buffer) (offset) (drawCount) (stride))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdDispatch+ :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> IO ()++-- | vkCmdDispatch - Dispatch compute work items+--+-- = Description+--+-- When the command is executed, a global workgroup consisting of+-- @groupCountX@ × @groupCountY@ × @groupCountZ@ local workgroups is+-- assembled.+--+-- == Valid Usage+--+-- - #VUID-vkCmdDispatch-magFilter-04553# If a+-- 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+-- @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and+-- @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is+-- used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of+-- this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- - #VUID-vkCmdDispatch-mipmapMode-04770# If a+-- 'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to+-- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'+-- and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE'+-- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of+-- this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- - #VUID-vkCmdDispatch-None-02691# If a+-- 'Vulkan.Core10.Handles.ImageView' is accessed using atomic+-- operations as a result of this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'+--+-- - #VUID-vkCmdDispatch-None-02692# If a+-- 'Vulkan.Core10.Handles.ImageView' is sampled with+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+-- of this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'+--+-- - #VUID-vkCmdDispatch-filterCubic-02694# Any+-- 'Vulkan.Core10.Handles.ImageView' being sampled with+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+-- of this command /must/ have a+-- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+-- supports cubic filtering, as specified by+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@+-- returned by+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- - #VUID-vkCmdDispatch-filterCubicMinmax-02695# Any+-- 'Vulkan.Core10.Handles.ImageView' being sampled with+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a+-- reduction mode of either+-- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'+-- or+-- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'+-- as a result of this command /must/ have a+-- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+-- supports cubic filtering together with minmax filtering, as+-- specified by+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@+-- returned by+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- - #VUID-vkCmdDispatch-flags-02696# Any 'Vulkan.Core10.Handles.Image'+-- created with a 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@+-- containing+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'+-- sampled as a result of this command /must/ only be sampled using a+-- 'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of+-- 'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'+--+-- - #VUID-vkCmdDispatch-OpTypeImage-06423# Any+-- 'Vulkan.Core10.Handles.ImageView' or+-- 'Vulkan.Core10.Handles.BufferView' being written as a storage image+-- or storage texel buffer where the image format field of the+-- @OpTypeImage@ is @Unknown@ /must/ have image format features that+-- support+-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR'+--+-- - #VUID-vkCmdDispatch-OpTypeImage-06424# Any+-- 'Vulkan.Core10.Handles.ImageView' or+-- 'Vulkan.Core10.Handles.BufferView' being read as a storage image or+-- storage texel buffer where the image format field of the+-- @OpTypeImage@ is @Unknown@ /must/ have image format features that+-- support+-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR'+--+-- - #VUID-vkCmdDispatch-None-02697# For each set /n/ that is statically+-- used by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline+-- bind point used by this command, a descriptor set /must/ have been+-- bound to /n/ at the same pipeline bind point, with a+-- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set+-- /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create+-- the current 'Vulkan.Core10.Handles.Pipeline', as described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- - #VUID-vkCmdDispatch-maintenance4-06425# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-maintenance4 maintenance4>+-- feature is not enabled, then for each push constant that is+-- statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+-- pipeline bind point used by this command, a push constant value+-- /must/ have been set for the same pipeline bind point, with a+-- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push+-- constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to+-- create the current 'Vulkan.Core10.Handles.Pipeline', as described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- - #VUID-vkCmdDispatch-None-02699# Descriptors in each bound descriptor+-- set, specified via 'cmdBindDescriptorSets', /must/ be valid if they+-- are statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to+-- the pipeline bind point used by this command+--+-- - #VUID-vkCmdDispatch-None-02700# A valid pipeline /must/ be bound to+-- the pipeline bind point used by this command+--+-- - #VUID-vkCmdDispatch-commandBuffer-02701# If the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command requires any dynamic state, that state+-- /must/ have been set or inherited (if the+-- @VK_NV_inherited_viewport_scissor@ extension is enabled) for+-- @commandBuffer@, and done so after any previously bound pipeline+-- with the corresponding state not specified as dynamic+--+-- - #VUID-vkCmdDispatch-None-02859# There /must/ not have been any calls+-- to dynamic state setting commands for any state not specified as+-- dynamic in the 'Vulkan.Core10.Handles.Pipeline' object bound to the+-- pipeline bind point used by this command, since that pipeline was+-- bound+--+-- - #VUID-vkCmdDispatch-None-02702# If the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command accesses a+-- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+-- coordinates, that sampler /must/ not be used to sample from any+-- 'Vulkan.Core10.Handles.Image' with a+-- 'Vulkan.Core10.Handles.ImageView' of the type+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in+-- any shader stage+--+-- - #VUID-vkCmdDispatch-None-02703# If the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command accesses a+-- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+-- coordinates, that sampler /must/ not be used with any of the SPIR-V+-- @OpImageSample*@ or @OpImageSparseSample*@ instructions with+-- @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage+--+-- - #VUID-vkCmdDispatch-None-02704# If the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command accesses a+-- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+-- coordinates, that sampler /must/ not be used with any of the SPIR-V+-- @OpImageSample*@ or @OpImageSparseSample*@ instructions that+-- includes a LOD bias or any offset values, in any shader stage+--+-- - #VUID-vkCmdDispatch-None-02705# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+-- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+-- object bound to the pipeline bind point used by this command+-- accesses a uniform buffer, it /must/ not access values outside of+-- the range of the buffer as specified in the descriptor set bound to+-- the same pipeline bind point+--+-- - #VUID-vkCmdDispatch-None-02706# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+-- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+-- object bound to the pipeline bind point used by this command+-- accesses a storage buffer, it /must/ not access values outside of+-- the range of the buffer as specified in the descriptor set bound to+-- the same pipeline bind point+--+-- - #VUID-vkCmdDispatch-commandBuffer-02707# If @commandBuffer@ is an+-- unprotected command buffer, any resource accessed by the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command /must/ not be a protected resource+--+-- - #VUID-vkCmdDispatch-None-04115# If a+-- 'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@+-- as a result of this command, then the @Type@ of the @Texel@ operand+-- of that instruction /must/ have at least as many components as the+-- image view’s format+--+-- - #VUID-vkCmdDispatch-OpImageWrite-04469# If a+-- 'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+-- as a result of this command, then the @Type@ of the @Texel@ operand+-- of that instruction /must/ have at least as many components as the+-- buffer view’s format+--+-- - #VUID-vkCmdDispatch-SampledType-04470# If a+-- 'Vulkan.Core10.Handles.ImageView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component+-- width is accessed as a result of this command, the @SampledType@ of+-- the @OpTypeImage@ operand of that instruction /must/ have a @Width@+-- of 64+--+-- - #VUID-vkCmdDispatch-SampledType-04471# If a+-- 'Vulkan.Core10.Handles.ImageView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a component width less+-- than 64-bit is accessed as a result of this command, the+-- @SampledType@ of the @OpTypeImage@ operand of that instruction+-- /must/ have a @Width@ of 32+--+-- - #VUID-vkCmdDispatch-SampledType-04472# If a+-- 'Vulkan.Core10.Handles.BufferView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component+-- width is accessed as a result of this command, the @SampledType@ of+-- the @OpTypeImage@ operand of that instruction /must/ have a @Width@+-- of 64+--+-- - #VUID-vkCmdDispatch-SampledType-04473# If a+-- 'Vulkan.Core10.Handles.BufferView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a component width less+-- than 64-bit is accessed as a result of this command, the+-- @SampledType@ of the @OpTypeImage@ operand of that instruction+-- /must/ have a @Width@ of 32+--+-- - #VUID-vkCmdDispatch-sparseImageInt64Atomics-04474# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+-- feature is not enabled, 'Vulkan.Core10.Handles.Image' objects+-- created with the+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'+-- flag /must/ not be accessed by atomic instructions through an+-- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+-- command+--+-- - #VUID-vkCmdDispatch-sparseImageInt64Atomics-04475# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+-- feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects+-- created with the+-- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'+-- flag /must/ not be accessed by atomic instructions through an+-- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+-- command+--+-- - #VUID-vkCmdDispatch-commandBuffer-02712# If @commandBuffer@ is a+-- protected command buffer, any resource written to by the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command /must/ not be an unprotected resource+--+-- - #VUID-vkCmdDispatch-commandBuffer-02713# If @commandBuffer@ is a+-- protected command buffer, pipeline stages other than the+-- framebuffer-space and compute stages in the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command /must/ not write to any resource+--+-- - #VUID-vkCmdDispatch-commandBuffer-04617# If any of the shader stages+-- of the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind+-- point used by this command uses the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-RayQueryKHR RayQueryKHR>+-- capability, then @commandBuffer@ /must/ not be a protected command+-- buffer+--+-- - #VUID-vkCmdDispatch-groupCountX-00386# @groupCountX@ /must/ be less+-- than or equal to+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]+--+-- - #VUID-vkCmdDispatch-groupCountY-00387# @groupCountY@ /must/ be less+-- than or equal to+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]+--+-- - #VUID-vkCmdDispatch-groupCountZ-00388# @groupCountZ@ /must/ be less+-- than or equal to+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdDispatch-commandBuffer-parameter# @commandBuffer@ /must/+-- be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdDispatch-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-vkCmdDispatch-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support compute operations+--+-- - #VUID-vkCmdDispatch-renderpass# This command /must/ only be called+-- outside of a render pass instance+--+-- == Host Synchronization+--+-- - Host access to @commandBuffer@ /must/ be externally synchronized+--+-- - Host access to the 'Vulkan.Core10.Handles.CommandPool' that+-- @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================++-- | Primary | Outside | Compute |+-- | Secondary | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer'+cmdDispatch :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @groupCountX@ is the number of local workgroups to dispatch in the X+ -- dimension.+ ("groupCountX" ::: Word32)+ -> -- | @groupCountY@ is the number of local workgroups to dispatch in the Y+ -- dimension.+ ("groupCountY" ::: Word32)+ -> -- | @groupCountZ@ is the number of local workgroups to dispatch in the Z+ -- dimension.+ ("groupCountZ" ::: Word32)+ -> io ()+cmdDispatch commandBuffer groupCountX groupCountY groupCountZ = liftIO $ do+ let vkCmdDispatchPtr = pVkCmdDispatch (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdDispatchPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDispatch is null" Nothing Nothing+ let vkCmdDispatch' = mkVkCmdDispatch vkCmdDispatchPtr+ traceAroundEvent "vkCmdDispatch" (vkCmdDispatch' (commandBufferHandle (commandBuffer)) (groupCountX) (groupCountY) (groupCountZ))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdDispatchIndirect+ :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IO ()++-- | vkCmdDispatchIndirect - Dispatch compute work items with indirect+-- parameters+--+-- = Description+--+-- 'cmdDispatchIndirect' behaves similarly to 'cmdDispatch' except that the+-- parameters are read by the device from a buffer during execution. The+-- parameters of the dispatch are encoded in a+-- 'Vulkan.Core10.OtherTypes.DispatchIndirectCommand' structure taken from+-- @buffer@ starting at @offset@.+--+-- == Valid Usage+--+-- - #VUID-vkCmdDispatchIndirect-magFilter-04553# If a+-- 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+-- @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and+-- @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is+-- used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of+-- this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- - #VUID-vkCmdDispatchIndirect-mipmapMode-04770# If a+-- 'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to+-- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'+-- and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE'+-- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of+-- this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- - #VUID-vkCmdDispatchIndirect-None-02691# If a+-- 'Vulkan.Core10.Handles.ImageView' is accessed using atomic+-- operations as a result of this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'+--+-- - #VUID-vkCmdDispatchIndirect-None-02692# If a+-- 'Vulkan.Core10.Handles.ImageView' is sampled with+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+-- of this command, then the image view’s+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+-- /must/ contain+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'+--+-- - #VUID-vkCmdDispatchIndirect-filterCubic-02694# Any+-- 'Vulkan.Core10.Handles.ImageView' being sampled with+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+-- of this command /must/ have a+-- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+-- supports cubic filtering, as specified by+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@+-- returned by+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- - #VUID-vkCmdDispatchIndirect-filterCubicMinmax-02695# Any+-- 'Vulkan.Core10.Handles.ImageView' being sampled with+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a+-- reduction mode of either+-- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'+-- or+-- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'+-- as a result of this command /must/ have a+-- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+-- supports cubic filtering together with minmax filtering, as+-- specified by+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@+-- returned by+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- - #VUID-vkCmdDispatchIndirect-flags-02696# Any+-- 'Vulkan.Core10.Handles.Image' created with a+-- 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'+-- sampled as a result of this command /must/ only be sampled using a+-- 'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of+-- 'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'+--+-- - #VUID-vkCmdDispatchIndirect-OpTypeImage-06423# Any+-- 'Vulkan.Core10.Handles.ImageView' or+-- 'Vulkan.Core10.Handles.BufferView' being written as a storage image+-- or storage texel buffer where the image format field of the+-- @OpTypeImage@ is @Unknown@ /must/ have image format features that+-- support+-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR'+--+-- - #VUID-vkCmdDispatchIndirect-OpTypeImage-06424# Any+-- 'Vulkan.Core10.Handles.ImageView' or+-- 'Vulkan.Core10.Handles.BufferView' being read as a storage image or+-- storage texel buffer where the image format field of the+-- @OpTypeImage@ is @Unknown@ /must/ have image format features that+-- support+-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR'+--+-- - #VUID-vkCmdDispatchIndirect-None-02697# For each set /n/ that is+-- statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+-- pipeline bind point used by this command, a descriptor set /must/+-- have been bound to /n/ at the same pipeline bind point, with a+-- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set+-- /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create+-- the current 'Vulkan.Core10.Handles.Pipeline', as described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- - #VUID-vkCmdDispatchIndirect-maintenance4-06425# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-maintenance4 maintenance4>+-- feature is not enabled, then for each push constant that is+-- statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+-- pipeline bind point used by this command, a push constant value+-- /must/ have been set for the same pipeline bind point, with a+-- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push+-- constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to+-- create the current 'Vulkan.Core10.Handles.Pipeline', as described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- - #VUID-vkCmdDispatchIndirect-None-02699# Descriptors in each bound+-- descriptor set, specified via 'cmdBindDescriptorSets', /must/ be+-- valid if they are statically used by the+-- 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point+-- used by this command+--+-- - #VUID-vkCmdDispatchIndirect-None-02700# A valid pipeline /must/ be+-- bound to the pipeline bind point used by this command+--+-- - #VUID-vkCmdDispatchIndirect-commandBuffer-02701# If the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command requires any dynamic state, that state+-- /must/ have been set or inherited (if the+-- @VK_NV_inherited_viewport_scissor@ extension is enabled) for+-- @commandBuffer@, and done so after any previously bound pipeline+-- with the corresponding state not specified as dynamic+--+-- - #VUID-vkCmdDispatchIndirect-None-02859# There /must/ not have been+-- any calls to dynamic state setting commands for any state not+-- specified as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object+-- bound to the pipeline bind point used by this command, since that+-- pipeline was bound+--+-- - #VUID-vkCmdDispatchIndirect-None-02702# If the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command accesses a+-- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+-- coordinates, that sampler /must/ not be used to sample from any+-- 'Vulkan.Core10.Handles.Image' with a+-- 'Vulkan.Core10.Handles.ImageView' of the type+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or+-- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in+-- any shader stage+--+-- - #VUID-vkCmdDispatchIndirect-None-02703# If the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command accesses a+-- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+-- coordinates, that sampler /must/ not be used with any of the SPIR-V+-- @OpImageSample*@ or @OpImageSparseSample*@ instructions with+-- @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage+--+-- - #VUID-vkCmdDispatchIndirect-None-02704# If the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command accesses a+-- 'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+-- coordinates, that sampler /must/ not be used with any of the SPIR-V+-- @OpImageSample*@ or @OpImageSparseSample*@ instructions that+-- includes a LOD bias or any offset values, in any shader stage+--+-- - #VUID-vkCmdDispatchIndirect-None-02705# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+-- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+-- object bound to the pipeline bind point used by this command+-- accesses a uniform buffer, it /must/ not access values outside of+-- the range of the buffer as specified in the descriptor set bound to+-- the same pipeline bind point+--+-- - #VUID-vkCmdDispatchIndirect-None-02706# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+-- feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+-- object bound to the pipeline bind point used by this command+-- accesses a storage buffer, it /must/ not access values outside of+-- the range of the buffer as specified in the descriptor set bound to+-- the same pipeline bind point+--+-- - #VUID-vkCmdDispatchIndirect-commandBuffer-02707# If @commandBuffer@+-- is an unprotected command buffer, any resource accessed by the+-- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+-- point used by this command /must/ not be a protected resource+--+-- - #VUID-vkCmdDispatchIndirect-None-04115# If a+-- 'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@+-- as a result of this command, then the @Type@ of the @Texel@ operand+-- of that instruction /must/ have at least as many components as the+-- image view’s format+--+-- - #VUID-vkCmdDispatchIndirect-OpImageWrite-04469# If a+-- 'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+-- as a result of this command, then the @Type@ of the @Texel@ operand+-- of that instruction /must/ have at least as many components as the+-- buffer view’s format+--+-- - #VUID-vkCmdDispatchIndirect-SampledType-04470# If a+-- 'Vulkan.Core10.Handles.ImageView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component+-- width is accessed as a result of this command, the @SampledType@ of+-- the @OpTypeImage@ operand of that instruction /must/ have a @Width@+-- of 64+--+-- - #VUID-vkCmdDispatchIndirect-SampledType-04471# If a+-- 'Vulkan.Core10.Handles.ImageView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a component width less+-- than 64-bit is accessed as a result of this command, the+-- @SampledType@ of the @OpTypeImage@ operand of that instruction+-- /must/ have a @Width@ of 32+--+-- - #VUID-vkCmdDispatchIndirect-SampledType-04472# If a+-- 'Vulkan.Core10.Handles.BufferView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component+-- width is accessed as a result of this command, the @SampledType@ of+-- the @OpTypeImage@ operand of that instruction /must/ have a @Width@+-- of 64+--+-- - #VUID-vkCmdDispatchIndirect-SampledType-04473# If a+-- 'Vulkan.Core10.Handles.BufferView' with a+-- 'Vulkan.Core10.Enums.Format.Format' that has a component width less+-- than 64-bit is accessed as a result of this command, the+-- @SampledType@ of the @OpTypeImage@ operand of that instruction+-- /must/ have a @Width@ of 32+--+-- - #VUID-vkCmdDispatchIndirect-sparseImageInt64Atomics-04474# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+-- feature is not enabled, 'Vulkan.Core10.Handles.Image' objects+-- created with the+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'+-- flag /must/ not be accessed by atomic instructions through an+-- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+-- command+--+-- - #VUID-vkCmdDispatchIndirect-sparseImageInt64Atomics-04475# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+-- feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects+-- created with the+-- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'+-- flag /must/ not be accessed by atomic instructions through an+-- @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+-- command+--+-- - #VUID-vkCmdDispatchIndirect-buffer-02708# If @buffer@ is non-sparse+-- then it /must/ be bound completely and contiguously to a single+-- 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- - #VUID-vkCmdDispatchIndirect-buffer-02709# @buffer@ /must/ have been+-- created with the+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'+-- bit set+--+-- - #VUID-vkCmdDispatchIndirect-offset-02710# @offset@ /must/ be a+-- multiple of @4@+--+-- - #VUID-vkCmdDispatchIndirect-commandBuffer-02711# @commandBuffer@+-- /must/ not be a protected command buffer+--+-- - #VUID-vkCmdDispatchIndirect-offset-00407# The sum of @offset@ and+-- the size of 'Vulkan.Core10.OtherTypes.DispatchIndirectCommand'+-- /must/ be less than or equal to the size of @buffer@+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdDispatchIndirect-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdDispatchIndirect-buffer-parameter# @buffer@ /must/ be a+-- valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- - #VUID-vkCmdDispatchIndirect-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-vkCmdDispatchIndirect-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support compute operations+--+-- - #VUID-vkCmdDispatchIndirect-renderpass# This command /must/ only be+-- called outside of a render pass instance+--+-- - #VUID-vkCmdDispatchIndirect-commonparent# Both of @buffer@, and+-- @commandBuffer@ /must/ have been created, allocated, or retrieved+-- from the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- - Host access to @commandBuffer@ /must/ be externally synchronized+--+-- - Host access to the 'Vulkan.Core10.Handles.CommandPool' that+-- @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================++-- | Primary | Outside | Compute |+-- | Secondary | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize'+cmdDispatchIndirect :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @buffer@ is the buffer containing dispatch parameters.+ Buffer+ -> -- | @offset@ is the byte offset into @buffer@ where parameters begin.+ ("offset" ::: DeviceSize)+ -> io ()+cmdDispatchIndirect commandBuffer buffer offset = liftIO $ do+ let vkCmdDispatchIndirectPtr = pVkCmdDispatchIndirect (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdDispatchIndirectPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDispatchIndirect is null" Nothing Nothing+ let vkCmdDispatchIndirect' = mkVkCmdDispatchIndirect vkCmdDispatchIndirectPtr+ traceAroundEvent "vkCmdDispatchIndirect" (vkCmdDispatchIndirect' (commandBufferHandle (commandBuffer)) (buffer) (offset))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdCopyBuffer+ :: FunPtr (Ptr CommandBuffer_T -> Buffer -> Buffer -> Word32 -> Ptr BufferCopy -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> Buffer -> Word32 -> Ptr BufferCopy -> IO ()++-- | vkCmdCopyBuffer - Copy data between buffer regions+--+-- = Description+--+-- Each region in @pRegions@ is copied from the source buffer to the same+-- region of the destination buffer. @srcBuffer@ and @dstBuffer@ /can/ be+-- the same buffer or alias the same memory, but the resulting values are+-- undefined if the copy regions overlap in memory.+--+-- == Valid Usage+--+-- - #VUID-vkCmdCopyBuffer-commandBuffer-01822# If @commandBuffer@ is an+-- unprotected command buffer, then @srcBuffer@ /must/ not be a+-- protected buffer+--+-- - #VUID-vkCmdCopyBuffer-commandBuffer-01823# If @commandBuffer@ is an+-- unprotected command buffer, then @dstBuffer@ /must/ not be a+-- protected buffer+--+-- - #VUID-vkCmdCopyBuffer-commandBuffer-01824# If @commandBuffer@ is a+-- protected command buffer, then @dstBuffer@ /must/ not be an+-- unprotected buffer+--+-- - #VUID-vkCmdCopyBuffer-srcOffset-00113# The @srcOffset@ member of+-- each element of @pRegions@ /must/ be less than the size of+-- @srcBuffer@+--+-- - #VUID-vkCmdCopyBuffer-dstOffset-00114# The @dstOffset@ member of+-- each element of @pRegions@ /must/ be less than the size of+-- @dstBuffer@+--+-- - #VUID-vkCmdCopyBuffer-size-00115# The @size@ member of each element+-- of @pRegions@ /must/ be less than or equal to the size of+-- @srcBuffer@ minus @srcOffset@+--+-- - #VUID-vkCmdCopyBuffer-size-00116# The @size@ member of each element+-- of @pRegions@ /must/ be less than or equal to the size of+-- @dstBuffer@ minus @dstOffset@+--+-- - #VUID-vkCmdCopyBuffer-pRegions-00117# The union of the source+-- regions, and the union of the destination regions, specified by the+-- elements of @pRegions@, /must/ not overlap in memory+--+-- - #VUID-vkCmdCopyBuffer-srcBuffer-00118# @srcBuffer@ /must/ have been+-- created with+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_SRC_BIT'+-- usage flag+--+-- - #VUID-vkCmdCopyBuffer-srcBuffer-00119# If @srcBuffer@ is non-sparse+-- then it /must/ be bound completely and contiguously to a single+-- 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- - #VUID-vkCmdCopyBuffer-dstBuffer-00120# @dstBuffer@ /must/ have been+-- created with+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'+-- usage flag+--+-- - #VUID-vkCmdCopyBuffer-dstBuffer-00121# If @dstBuffer@ is non-sparse+-- then it /must/ be bound completely and contiguously to a single+-- 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdCopyBuffer-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdCopyBuffer-srcBuffer-parameter# @srcBuffer@ /must/ be a+-- valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- - #VUID-vkCmdCopyBuffer-dstBuffer-parameter# @dstBuffer@ /must/ be a+-- valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- - #VUID-vkCmdCopyBuffer-pRegions-parameter# @pRegions@ /must/ be a+-- valid pointer to an array of @regionCount@ valid 'BufferCopy'+-- structures+--+-- - #VUID-vkCmdCopyBuffer-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-vkCmdCopyBuffer-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support transfer, graphics, or compute+-- operations+--+-- - #VUID-vkCmdCopyBuffer-renderpass# This command /must/ only be called+-- outside of a render pass instance+--+-- - #VUID-vkCmdCopyBuffer-regionCount-arraylength# @regionCount@ /must/+-- be greater than @0@+--+-- - #VUID-vkCmdCopyBuffer-commonparent# Each of @commandBuffer@,+-- @dstBuffer@, and @srcBuffer@ /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 | Transfer |+-- | Secondary | | Graphics |+-- | | | Compute |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.Buffer', 'BufferCopy',+-- 'Vulkan.Core10.Handles.CommandBuffer'+cmdCopyBuffer :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @srcBuffer@ is the source buffer.+ ("srcBuffer" ::: Buffer)+ -> -- | @dstBuffer@ is the destination buffer.+ ("dstBuffer" ::: Buffer)+ -> -- | @pRegions@ is a pointer to an array of 'BufferCopy' structures+ -- specifying the regions to copy.+ ("regions" ::: Vector BufferCopy)+ -> io ()+cmdCopyBuffer commandBuffer srcBuffer dstBuffer regions = liftIO . evalContT $ do+ let vkCmdCopyBufferPtr = pVkCmdCopyBuffer (deviceCmds (commandBuffer :: CommandBuffer))+ lift $ unless (vkCmdCopyBufferPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyBuffer is null" Nothing Nothing+ let vkCmdCopyBuffer' = mkVkCmdCopyBuffer vkCmdCopyBufferPtr+ pPRegions <- ContT $ allocaBytes @BufferCopy ((Data.Vector.length (regions)) * 24)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPRegions `plusPtr` (24 * (i)) :: Ptr BufferCopy) (e)) (regions)+ lift $ traceAroundEvent "vkCmdCopyBuffer" (vkCmdCopyBuffer' (commandBufferHandle (commandBuffer)) (srcBuffer) (dstBuffer) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdCopyImage+ :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageCopy -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageCopy -> IO ()++-- | vkCmdCopyImage - Copy data between images+--+-- = Description+--+-- Each region in @pRegions@ is copied from the source image to the same+-- region of the destination image. @srcImage@ and @dstImage@ /can/ be the+-- same image or alias the same memory.+--+-- The formats of @srcImage@ and @dstImage@ /must/ be compatible. Formats+-- are compatible if they share the same class, as shown in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatibility Compatible Formats>+-- table. Depth\/stencil formats /must/ match exactly.+--+-- If either @srcImage@ or @dstImage@ has a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+-- regions of each plane to be copied /must/ be specified separately using+-- the @srcSubresource@ and @dstSubresource@ members of the 'ImageCopy'+-- structure. In this case, the @aspectMask@ of the @srcSubresource@ or+-- @dstSubresource@ that refers to the multi-planar image /must/ be+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT', or+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'. For+-- the purposes of 'cmdCopyImage', each plane of a multi-planar image is+-- treated as having the format listed in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>+-- for the plane identified by the @aspectMask@ of the corresponding+-- subresource. This applies both to 'Vulkan.Core10.Enums.Format.Format'+-- and to coordinates used in the copy, which correspond to texels in the+-- /plane/ rather than how these texels map to coordinates in the image as+-- a whole.+--+-- Note+--+-- For example, the+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' plane+-- of a 'Vulkan.Core10.Enums.Format.FORMAT_G8_B8R8_2PLANE_420_UNORM' image+-- is compatible with an image of format+-- 'Vulkan.Core10.Enums.Format.FORMAT_R8G8_UNORM' and (less usefully) with+-- the 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'+-- plane of an image of format+-- 'Vulkan.Core10.Enums.Format.FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16',+-- as each texel is 2 bytes in size.+--+-- 'cmdCopyImage' allows copying between /size-compatible/ compressed and+-- uncompressed internal formats. Formats are size-compatible if the texel+-- block size of the uncompressed format is equal to the texel block size+-- of the compressed format. Such a copy does not perform on-the-fly+-- compression or decompression. When copying from an uncompressed format+-- to a compressed format, each texel of uncompressed data of the source+-- image is copied as a raw value to the corresponding compressed texel+-- block of the destination image. When copying from a compressed format to+-- an uncompressed format, each compressed texel block of the source image+-- is copied as a raw value to the corresponding texel of uncompressed data+-- in the destination image. Thus, for example, it is legal to copy between+-- a 128-bit uncompressed format and a compressed format which has a+-- 128-bit sized compressed texel block representing 4×4 texels (using 8+-- bits per texel), or between a 64-bit uncompressed format and a+-- compressed format which has a 64-bit sized compressed texel block+-- representing 4×4 texels (using 4 bits per texel).+--+-- When copying between compressed and uncompressed formats the @extent@+-- members represent the texel dimensions of the source image and not the+-- destination. When copying from a compressed image to an uncompressed+-- image the image texel dimensions written to the uncompressed image will+-- be source extent divided by the compressed texel block dimensions. When+-- copying from an uncompressed image to a compressed image the image texel+-- dimensions written to the compressed image will be the source extent+-- multiplied by the compressed texel block dimensions. In both cases the+-- number of bytes read and the number of bytes written will be identical.+--+-- Copying to or from block-compressed images is typically done in+-- multiples of the compressed texel block size. For this reason the+-- @extent@ /must/ be a multiple of the compressed texel block dimension.+-- There is one exception to this rule which is /required/ to handle+-- compressed images created with dimensions that are not a multiple of the+-- compressed texel block dimensions: if the @srcImage@ is compressed,+-- then:+--+-- - If @extent.width@ is not a multiple of the compressed texel block+-- width, then (@extent.width@ + @srcOffset.x@) /must/ equal the image+-- subresource width.+--+-- - If @extent.height@ is not a multiple of the compressed texel block+-- height, then (@extent.height@ + @srcOffset.y@) /must/ equal the+-- image subresource height.+--+-- - If @extent.depth@ is not a multiple of the compressed texel block+-- depth, then (@extent.depth@ + @srcOffset.z@) /must/ equal the image+-- subresource depth.+--+-- Similarly, if the @dstImage@ is compressed, then:+--+-- - If @extent.width@ is not a multiple of the compressed texel block+-- width, then (@extent.width@ + @dstOffset.x@) /must/ equal the image+-- subresource width.+--+-- - If @extent.height@ is not a multiple of the compressed texel block+-- height, then (@extent.height@ + @dstOffset.y@) /must/ equal the+-- image subresource height.+--+-- - If @extent.depth@ is not a multiple of the compressed texel block+-- depth, then (@extent.depth@ + @dstOffset.z@) /must/ equal the image+-- subresource depth.+--+-- This allows the last compressed texel block of the image in each+-- non-multiple dimension to be included as a source or destination of the+-- copy.+--+-- “@_422@” image formats that are not+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>+-- are treated as having a 2×1 compressed texel block for the purposes of+-- these rules.+--+-- 'cmdCopyImage' /can/ be used to copy image data between multisample+-- images, but both images /must/ have the same number of samples.+--+-- == Valid Usage+--+-- - #VUID-vkCmdCopyImage-commandBuffer-01825# If @commandBuffer@ is an+-- unprotected command buffer, then @srcImage@ /must/ not be a+-- protected image+--+-- - #VUID-vkCmdCopyImage-commandBuffer-01826# If @commandBuffer@ is an+-- unprotected command buffer, then @dstImage@ /must/ not be a+-- protected image+--+-- - #VUID-vkCmdCopyImage-commandBuffer-01827# If @commandBuffer@ is a+-- protected command buffer, then @dstImage@ /must/ not be an+-- unprotected image+--+-- - #VUID-vkCmdCopyImage-pRegions-00124# The union of all source+-- regions, and the union of all destination regions, specified by the+-- elements of @pRegions@, /must/ not overlap in memory+--+-- - #VUID-vkCmdCopyImage-srcImage-01995# The+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+-- of @srcImage@ /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_SRC_BIT'+--+-- - #VUID-vkCmdCopyImage-srcImage-00126# @srcImage@ /must/ have been+-- created with+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'+-- usage flag+--+-- - #VUID-vkCmdCopyImage-srcImage-01546# If @srcImage@ is non-sparse+-- then the image or /disjoint/ plane to be copied /must/ be bound+-- completely and contiguously to a single+-- 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- - #VUID-vkCmdCopyImage-srcImageLayout-00128# @srcImageLayout@ /must/+-- specify the layout of the image subresources of @srcImage@ specified+-- in @pRegions@ at the time this command is executed on a+-- 'Vulkan.Core10.Handles.Device'+--+-- - #VUID-vkCmdCopyImage-srcImageLayout-01917# @srcImageLayout@ /must/+-- be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'+--+-- - #VUID-vkCmdCopyImage-dstImage-01996# The+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+-- of @dstImage@ /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'+--+-- - #VUID-vkCmdCopyImage-dstImage-00131# @dstImage@ /must/ have been+-- created with+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'+-- usage flag+--+-- - #VUID-vkCmdCopyImage-dstImage-01547# If @dstImage@ is non-sparse+-- then the image or /disjoint/ plane that is the destination of the+-- copy /must/ be bound completely and contiguously to a single+-- 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- - #VUID-vkCmdCopyImage-dstImageLayout-00133# @dstImageLayout@ /must/+-- specify the layout of the image subresources of @dstImage@ specified+-- in @pRegions@ at the time this command is executed on a+-- 'Vulkan.Core10.Handles.Device'+--+-- - #VUID-vkCmdCopyImage-dstImageLayout-01395# @dstImageLayout@ /must/+-- be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'+--+-- - #VUID-vkCmdCopyImage-srcImage-01548# If the+-- 'Vulkan.Core10.Enums.Format.Format' of each of @srcImage@ and+-- @dstImage@ is not a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+-- the 'Vulkan.Core10.Enums.Format.Format' of each of @srcImage@ and+-- @dstImage@ /must/ be compatible, as defined+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-images-format-compatibility above>+--+-- - #VUID-vkCmdCopyImage-None-01549# In a copy to or from a plane of a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image>,+-- the 'Vulkan.Core10.Enums.Format.Format' of the image and plane+-- /must/ be compatible according to+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes the description of compatible planes>+-- for the plane being copied+--+-- - #VUID-vkCmdCopyImage-srcImage-00136# The sample count of @srcImage@+-- and @dstImage@ /must/ match+--+-- - #VUID-vkCmdCopyImage-srcSubresource-01696# The+-- @srcSubresource.mipLevel@ member of each element of @pRegions@+-- /must/ be less than the @mipLevels@ specified in+-- 'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created+--+-- - #VUID-vkCmdCopyImage-dstSubresource-01697# The+-- @dstSubresource.mipLevel@ member of each element of @pRegions@+-- /must/ be less than the @mipLevels@ specified in+-- 'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created+--+-- - #VUID-vkCmdCopyImage-srcSubresource-01698# The+-- @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of+-- each element of @pRegions@ /must/ be less than or equal to the+-- @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+-- when @srcImage@ was created+--+-- - #VUID-vkCmdCopyImage-dstSubresource-01699# The+-- @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of+-- each element of @pRegions@ /must/ be less than or equal to the+-- @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+-- when @dstImage@ was created+--+-- - #VUID-vkCmdCopyImage-srcOffset-01783# The @srcOffset@ and @extent@+-- members of each element of @pRegions@ /must/ respect the image+-- transfer granularity requirements of @commandBuffer@’s command+-- pool’s queue family, as described in+-- 'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'+--+-- - #VUID-vkCmdCopyImage-dstOffset-01784# The @dstOffset@ and @extent@+-- members of each element of @pRegions@ /must/ respect the image+-- transfer granularity requirements of @commandBuffer@’s command+-- pool’s queue family, as described in+-- 'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'+--+-- - #VUID-vkCmdCopyImage-dstImage-02542# @dstImage@ and @srcImage@+-- /must/ not have been created with @flags@ containing+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'+--+-- - #VUID-vkCmdCopyImage-srcImage-01551# If neither @srcImage@ nor+-- @dstImage@ has a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>+-- then for each element of @pRegions@, @srcSubresource.aspectMask@ and+-- @dstSubresource.aspectMask@ /must/ match+--+-- - #VUID-vkCmdCopyImage-srcImage-01552# If @srcImage@ has a+-- 'Vulkan.Core10.Enums.Format.Format' with+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion two planes>+-- then for each element of @pRegions@, @srcSubresource.aspectMask@+-- /must/ be+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'+-- or+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'+--+-- - #VUID-vkCmdCopyImage-srcImage-01553# If @srcImage@ has a+-- 'Vulkan.Core10.Enums.Format.Format' with+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion three planes>+-- then for each element of @pRegions@, @srcSubresource.aspectMask@+-- /must/ be+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',+-- or+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'+--+-- - #VUID-vkCmdCopyImage-dstImage-01554# If @dstImage@ has a+-- 'Vulkan.Core10.Enums.Format.Format' with+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion two planes>+-- then for each element of @pRegions@, @dstSubresource.aspectMask@+-- /must/ be+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'+-- or+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'+--+-- - #VUID-vkCmdCopyImage-dstImage-01555# If @dstImage@ has a+-- 'Vulkan.Core10.Enums.Format.Format' with+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion three planes>+-- then for each element of @pRegions@, @dstSubresource.aspectMask@+-- /must/ be+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',+-- or+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'+--+-- - #VUID-vkCmdCopyImage-srcImage-01556# If @srcImage@ has a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>+-- and the @dstImage@ does not have a multi-planar image format, then+-- for each element of @pRegions@, @dstSubresource.aspectMask@ /must/+-- be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'+--+-- - #VUID-vkCmdCopyImage-dstImage-01557# If @dstImage@ has a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>+-- and the @srcImage@ does not have a multi-planar image format, then+-- for each element of @pRegions@, @srcSubresource.aspectMask@ /must/+-- be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'+--+-- - #VUID-vkCmdCopyImage-srcImage-04443# If @srcImage@ is of type+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element+-- of @pRegions@, @srcSubresource.baseArrayLayer@ /must/ be @0@ and+-- @srcSubresource.layerCount@ /must/ be @1@+--+-- - #VUID-vkCmdCopyImage-dstImage-04444# If @dstImage@ is of type+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element+-- of @pRegions@, @dstSubresource.baseArrayLayer@ /must/ be @0@ and+-- @dstSubresource.layerCount@ /must/ be @1@+--+-- - #VUID-vkCmdCopyImage-aspectMask-00142# For each element of+-- @pRegions@, @srcSubresource.aspectMask@ /must/ specify aspects+-- present in @srcImage@+--+-- - #VUID-vkCmdCopyImage-aspectMask-00143# For each element of+-- @pRegions@, @dstSubresource.aspectMask@ /must/ specify aspects+-- present in @dstImage@+--+-- - #VUID-vkCmdCopyImage-srcOffset-00144# For each element of+-- @pRegions@, @srcOffset.x@ and (@extent.width@ + @srcOffset.x@)+-- /must/ both be greater than or equal to @0@ and less than or equal+-- to the width of the specified @srcSubresource@ of @srcImage@+--+-- - #VUID-vkCmdCopyImage-srcOffset-00145# For each element of+-- @pRegions@, @srcOffset.y@ and (@extent.height@ + @srcOffset.y@)+-- /must/ both be greater than or equal to @0@ and less than or equal+-- to the height of the specified @srcSubresource@ of @srcImage@+--+-- - #VUID-vkCmdCopyImage-srcImage-00146# If @srcImage@ is of type+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+-- of @pRegions@, @srcOffset.y@ /must/ be @0@ and @extent.height@+-- /must/ be @1@+--+-- - #VUID-vkCmdCopyImage-srcOffset-00147# For each element of+-- @pRegions@, @srcOffset.z@ and (@extent.depth@ + @srcOffset.z@)+-- /must/ both be greater than or equal to @0@ and less than or equal+-- to the depth of the specified @srcSubresource@ of @srcImage@+--+-- - #VUID-vkCmdCopyImage-srcImage-01785# If @srcImage@ is of type+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+-- of @pRegions@, @srcOffset.z@ /must/ be @0@ and @extent.depth@ /must/+-- be @1@+--+-- - #VUID-vkCmdCopyImage-dstImage-01786# If @dstImage@ is of type+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+-- of @pRegions@, @dstOffset.z@ /must/ be @0@ and @extent.depth@ /must/+-- be @1@+--+-- - #VUID-vkCmdCopyImage-srcImage-01787# If @srcImage@ is of type+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+-- of @pRegions@, @srcOffset.z@ /must/ be @0@+--+-- - #VUID-vkCmdCopyImage-dstImage-01788# If @dstImage@ is of type+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+-- of @pRegions@, @dstOffset.z@ /must/ be @0@+--+-- - #VUID-vkCmdCopyImage-srcImage-01790# If @srcImage@ and @dstImage@+-- are both of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then+-- for each element of @pRegions@, @extent.depth@ /must/ be @1@+--+-- - #VUID-vkCmdCopyImage-srcImage-01791# If @srcImage@ is of type+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @dstImage@ is of+-- type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each+-- element of @pRegions@, @extent.depth@ /must/ equal+-- @srcSubresource.layerCount@+--+-- - #VUID-vkCmdCopyImage-dstImage-01792# If @dstImage@ is of type+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @srcImage@ is of+-- type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each+-- element of @pRegions@, @extent.depth@ /must/ equal+-- @dstSubresource.layerCount@+--+-- - #VUID-vkCmdCopyImage-dstOffset-00150# For each element of+-- @pRegions@, @dstOffset.x@ and (@extent.width@ + @dstOffset.x@)+-- /must/ both be greater than or equal to @0@ and less than or equal+-- to the width of the specified @dstSubresource@ of @dstImage@+--+-- - #VUID-vkCmdCopyImage-dstOffset-00151# For each element of+-- @pRegions@, @dstOffset.y@ and (@extent.height@ + @dstOffset.y@)+-- /must/ both be greater than or equal to @0@ and less than or equal+-- to the height of the specified @dstSubresource@ of @dstImage@+--+-- - #VUID-vkCmdCopyImage-dstImage-00152# If @dstImage@ is of type+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+-- of @pRegions@, @dstOffset.y@ /must/ be @0@ and @extent.height@+-- /must/ be @1@+--+-- - #VUID-vkCmdCopyImage-dstOffset-00153# For each element of+-- @pRegions@, @dstOffset.z@ and (@extent.depth@ + @dstOffset.z@)+-- /must/ both be greater than or equal to @0@ and less than or equal+-- to the depth of the specified @dstSubresource@ of @dstImage@+--+-- - #VUID-vkCmdCopyImage-srcImage-01727# If @srcImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- then for each element of @pRegions@, all members of @srcOffset@+-- /must/ be a multiple of the corresponding dimensions of the+-- compressed texel block+--+-- - #VUID-vkCmdCopyImage-srcImage-01728# If @srcImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- then for each element of @pRegions@, @extent.width@ /must/ be a+-- multiple of the compressed texel block width or (@extent.width@ ++-- @srcOffset.x@) /must/ equal the width of the specified+-- @srcSubresource@ of @srcImage@+--+-- - #VUID-vkCmdCopyImage-srcImage-01729# If @srcImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- then for each element of @pRegions@, @extent.height@ /must/ be a+-- multiple of the compressed texel block height or (@extent.height@ ++-- @srcOffset.y@) /must/ equal the height of the specified+-- @srcSubresource@ of @srcImage@+--+-- - #VUID-vkCmdCopyImage-srcImage-01730# If @srcImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- then for each element of @pRegions@, @extent.depth@ /must/ be a+-- multiple of the compressed texel block depth or (@extent.depth@ ++-- @srcOffset.z@) /must/ equal the depth of the specified+-- @srcSubresource@ of @srcImage@+--+-- - #VUID-vkCmdCopyImage-dstImage-01731# If @dstImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- then for each element of @pRegions@, all members of @dstOffset@+-- /must/ be a multiple of the corresponding dimensions of the+-- compressed texel block+--+-- - #VUID-vkCmdCopyImage-dstImage-01732# If @dstImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- then for each element of @pRegions@, @extent.width@ /must/ be a+-- multiple of the compressed texel block width or (@extent.width@ ++-- @dstOffset.x@) /must/ equal the width of the specified+-- @dstSubresource@ of @dstImage@+--+-- - #VUID-vkCmdCopyImage-dstImage-01733# If @dstImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- then for each element of @pRegions@, @extent.height@ /must/ be a+-- multiple of the compressed texel block height or (@extent.height@ ++-- @dstOffset.y@) /must/ equal the height of the specified+-- @dstSubresource@ of @dstImage@+--+-- - #VUID-vkCmdCopyImage-dstImage-01734# If @dstImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- then for each element of @pRegions@, @extent.depth@ /must/ be a+-- multiple of the compressed texel block depth or (@extent.depth@ ++-- @dstOffset.z@) /must/ equal the depth of the specified+-- @dstSubresource@ of @dstImage@+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdCopyImage-commandBuffer-parameter# @commandBuffer@ /must/+-- be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdCopyImage-srcImage-parameter# @srcImage@ /must/ be a+-- valid 'Vulkan.Core10.Handles.Image' handle+--+-- - #VUID-vkCmdCopyImage-srcImageLayout-parameter# @srcImageLayout@+-- /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+-- value+--+-- - #VUID-vkCmdCopyImage-dstImage-parameter# @dstImage@ /must/ be a+-- valid 'Vulkan.Core10.Handles.Image' handle+--+-- - #VUID-vkCmdCopyImage-dstImageLayout-parameter# @dstImageLayout@+-- /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+-- value+--+-- - #VUID-vkCmdCopyImage-pRegions-parameter# @pRegions@ /must/ be a+-- valid pointer to an array of @regionCount@ valid 'ImageCopy'+-- structures+--+-- - #VUID-vkCmdCopyImage-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-vkCmdCopyImage-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support transfer, graphics, or compute+-- operations+--+-- - #VUID-vkCmdCopyImage-renderpass# This command /must/ only be called+-- outside of a render pass instance+--+-- - #VUID-vkCmdCopyImage-regionCount-arraylength# @regionCount@ /must/+-- be greater than @0@+--+-- - #VUID-vkCmdCopyImage-commonparent# Each of @commandBuffer@,+-- @dstImage@, and @srcImage@ /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 | Transfer |+-- | Secondary | | Graphics |+-- | | | Compute |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',+-- 'ImageCopy', 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+cmdCopyImage :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @srcImage@ is the source image.+ ("srcImage" ::: Image)+ -> -- | @srcImageLayout@ is the current layout of the source image subresource.+ ("srcImageLayout" ::: ImageLayout)+ -> -- | @dstImage@ is the destination image.+ ("dstImage" ::: Image)+ -> -- | @dstImageLayout@ is the current layout of the destination image+ -- subresource.+ ("dstImageLayout" ::: ImageLayout)+ -> -- | @pRegions@ is a pointer to an array of 'ImageCopy' structures specifying+ -- the regions to copy.+ ("regions" ::: Vector ImageCopy)+ -> io ()+cmdCopyImage commandBuffer srcImage srcImageLayout dstImage dstImageLayout regions = liftIO . evalContT $ do+ let vkCmdCopyImagePtr = pVkCmdCopyImage (deviceCmds (commandBuffer :: CommandBuffer))+ lift $ unless (vkCmdCopyImagePtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyImage is null" Nothing Nothing+ let vkCmdCopyImage' = mkVkCmdCopyImage vkCmdCopyImagePtr+ pPRegions <- ContT $ allocaBytes @ImageCopy ((Data.Vector.length (regions)) * 68)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPRegions `plusPtr` (68 * (i)) :: Ptr ImageCopy) (e)) (regions)+ lift $ traceAroundEvent "vkCmdCopyImage" (vkCmdCopyImage' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdBlitImage+ :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageBlit -> Filter -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageBlit -> Filter -> IO ()++-- | vkCmdBlitImage - Copy regions of an image, potentially performing format+-- conversion,+--+-- = Description+--+-- 'cmdBlitImage' /must/ not be used for multisampled source or destination+-- images. Use 'cmdResolveImage' for this purpose.+--+-- As the sizes of the source and destination extents /can/ differ in any+-- dimension, texels in the source extent are scaled and filtered to the+-- destination extent. Scaling occurs via the following operations:+--+-- - For each destination texel, the integer coordinate of that texel is+-- converted to an unnormalized texture coordinate, using the effective+-- inverse of the equations described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-unnormalized-to-integer unnormalized to integer conversion>:+--+-- - ubase = i + ½+--+-- - vbase = j + ½+--+-- - wbase = k + ½+--+-- - These base coordinates are then offset by the first destination+-- offset:+--+-- - uoffset = ubase - xdst0+--+-- - voffset = vbase - ydst0+--+-- - woffset = wbase - zdst0+--+-- - aoffset = a - @baseArrayCount@dst+--+-- - The scale is determined from the source and destination regions, and+-- applied to the offset coordinates:+--+-- - scaleu = (xsrc1 - xsrc0) \/ (xdst1 - xdst0)+--+-- - scalev = (ysrc1 - ysrc0) \/ (ydst1 - ydst0)+--+-- - scalew = (zsrc1 - zsrc0) \/ (zdst1 - zdst0)+--+-- - uscaled = uoffset × scaleu+--+-- - vscaled = voffset × scalev+--+-- - wscaled = woffset × scalew+--+-- - Finally the source offset is added to the scaled coordinates, to+-- determine the final unnormalized coordinates used to sample from+-- @srcImage@:+--+-- - u = uscaled + xsrc0+--+-- - v = vscaled + ysrc0+--+-- - w = wscaled + zsrc0+--+-- - q = @mipLevel@+--+-- - a = aoffset + @baseArrayCount@src+--+-- These coordinates are used to sample from the source image, as described+-- in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures Image Operations chapter>,+-- with the filter mode equal to that of @filter@, a mipmap mode of+-- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_NEAREST' and+-- an address mode of+-- 'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'.+-- Implementations /must/ clamp at the edge of the source image, and /may/+-- additionally clamp to the edge of the source region.+--+-- Note+--+-- Due to allowable rounding errors in the generation of the source texture+-- coordinates, it is not always possible to guarantee exactly which source+-- texels will be sampled for a given blit. As rounding errors are+-- implementation-dependent, the exact results of a blitting operation are+-- also implementation-dependent.+--+-- Blits are done layer by layer starting with the @baseArrayLayer@ member+-- of @srcSubresource@ for the source and @dstSubresource@ for the+-- destination. @layerCount@ layers are blitted to the destination image.+--+-- When blitting 3D textures, slices in the destination region bounded by+-- @dstOffsets@[0].z and @dstOffsets@[1].z are sampled from slices in the+-- source region bounded by @srcOffsets@[0].z and @srcOffsets@[1].z. If the+-- @filter@ parameter is 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' then+-- the value sampled from the source image is taken by doing linear+-- filtering using the interpolated __z__ coordinate represented by __w__+-- in the previous equations. If the @filter@ parameter is+-- 'Vulkan.Core10.Enums.Filter.FILTER_NEAREST' then the value sampled from+-- the source image is taken from the single nearest slice, with an+-- implementation-dependent arithmetic rounding mode.+--+-- The following filtering and conversion rules apply:+--+-- - Integer formats /can/ only be converted to other integer formats+-- with the same signedness.+--+-- - No format conversion is supported between depth\/stencil images. The+-- formats /must/ match.+--+-- - Format conversions on unorm, snorm, unscaled and packed float+-- formats of the copied aspect of the image are performed by first+-- converting the pixels to float values.+--+-- - For sRGB source formats, nonlinear RGB values are converted to+-- linear representation prior to filtering.+--+-- - After filtering, the float values are first clamped and then cast to+-- the destination image format. In case of sRGB destination format,+-- linear RGB values are converted to nonlinear representation before+-- writing the pixel to the image.+--+-- Signed and unsigned integers are converted by first clamping to the+-- representable range of the destination format, then casting the value.+--+-- == Valid Usage+--+-- - #VUID-vkCmdBlitImage-commandBuffer-01834# If @commandBuffer@ is an+-- unprotected command buffer, then @srcImage@ /must/ not be a+-- protected image+--+-- - #VUID-vkCmdBlitImage-commandBuffer-01835# If @commandBuffer@ is an+-- unprotected command buffer, then @dstImage@ /must/ not be a+-- protected image+--+-- - #VUID-vkCmdBlitImage-commandBuffer-01836# If @commandBuffer@ is a+-- protected command buffer, then @dstImage@ /must/ not be an+-- unprotected image+--+-- - #VUID-vkCmdBlitImage-pRegions-00215# The source region specified by+-- each element of @pRegions@ /must/ be a region that is contained+-- within @srcImage@+--+-- - #VUID-vkCmdBlitImage-pRegions-00216# The destination region+-- specified by each element of @pRegions@ /must/ be a region that is+-- contained within @dstImage@+--+-- - #VUID-vkCmdBlitImage-pRegions-00217# The union of all destination+-- regions, specified by the elements of @pRegions@, /must/ not overlap+-- in memory with any texel that /may/ be sampled during the blit+-- operation+--+-- - #VUID-vkCmdBlitImage-srcImage-01999# The+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+-- of @srcImage@ /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'+--+-- - #VUID-vkCmdBlitImage-srcImage-06421# @srcImage@ /must/ not use a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion format that requires a sampler Y’CBCR conversion>+--+-- - #VUID-vkCmdBlitImage-srcImage-00219# @srcImage@ /must/ have been+-- created with+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'+-- usage flag+--+-- - #VUID-vkCmdBlitImage-srcImage-00220# If @srcImage@ is non-sparse+-- then it /must/ be bound completely and contiguously to a single+-- 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- - #VUID-vkCmdBlitImage-srcImageLayout-00221# @srcImageLayout@ /must/+-- specify the layout of the image subresources of @srcImage@ specified+-- in @pRegions@ at the time this command is executed on a+-- 'Vulkan.Core10.Handles.Device'+--+-- - #VUID-vkCmdBlitImage-srcImageLayout-01398# @srcImageLayout@ /must/+-- be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'+-- or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'+--+-- - #VUID-vkCmdBlitImage-dstImage-02000# The+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+-- of @dstImage@ /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_DST_BIT'+--+-- - #VUID-vkCmdBlitImage-dstImage-06422# @dstImage@ /must/ not use a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion format that requires a sampler Y’CBCR conversion>+--+-- - #VUID-vkCmdBlitImage-dstImage-00224# @dstImage@ /must/ have been+-- created with+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'+-- usage flag+--+-- - #VUID-vkCmdBlitImage-dstImage-00225# If @dstImage@ is non-sparse+-- then it /must/ be bound completely and contiguously to a single+-- 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- - #VUID-vkCmdBlitImage-dstImageLayout-00226# @dstImageLayout@ /must/+-- specify the layout of the image subresources of @dstImage@ specified+-- in @pRegions@ at the time this command is executed on a+-- 'Vulkan.Core10.Handles.Device'+--+-- - #VUID-vkCmdBlitImage-dstImageLayout-01399# @dstImageLayout@ /must/+-- be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'+-- or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'+--+-- - #VUID-vkCmdBlitImage-srcImage-00229# If either of @srcImage@ or+-- @dstImage@ was created with a signed integer+-- 'Vulkan.Core10.Enums.Format.Format', the other /must/ also have been+-- created with a signed integer 'Vulkan.Core10.Enums.Format.Format'+--+-- - #VUID-vkCmdBlitImage-srcImage-00230# If either of @srcImage@ or+-- @dstImage@ was created with an unsigned integer+-- 'Vulkan.Core10.Enums.Format.Format', the other /must/ also have been+-- created with an unsigned integer 'Vulkan.Core10.Enums.Format.Format'+--+-- - #VUID-vkCmdBlitImage-srcImage-00231# If either of @srcImage@ or+-- @dstImage@ was created with a depth\/stencil format, the other+-- /must/ have exactly the same format+--+-- - #VUID-vkCmdBlitImage-srcImage-00232# If @srcImage@ was created with+-- a depth\/stencil format, @filter@ /must/ be+-- 'Vulkan.Core10.Enums.Filter.FILTER_NEAREST'+--+-- - #VUID-vkCmdBlitImage-srcImage-00233# @srcImage@ /must/ have been+-- created with a @samples@ value of+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'+--+-- - #VUID-vkCmdBlitImage-dstImage-00234# @dstImage@ /must/ have been+-- created with a @samples@ value of+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'+--+-- - #VUID-vkCmdBlitImage-filter-02001# If @filter@ is+-- 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR', then the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+-- of @srcImage@ /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- - #VUID-vkCmdBlitImage-filter-02002# If @filter@ is+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT', then the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+-- of @srcImage@ /must/ contain+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'+--+-- - #VUID-vkCmdBlitImage-filter-00237# If @filter@ is+-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT', @srcImage@+-- /must/ be of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'+--+-- - #VUID-vkCmdBlitImage-srcSubresource-01705# The+-- @srcSubresource.mipLevel@ member of each element of @pRegions@+-- /must/ be less than the @mipLevels@ specified in+-- 'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created+--+-- - #VUID-vkCmdBlitImage-dstSubresource-01706# The+-- @dstSubresource.mipLevel@ member of each element of @pRegions@+-- /must/ be less than the @mipLevels@ specified in+-- 'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created+--+-- - #VUID-vkCmdBlitImage-srcSubresource-01707# The+-- @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of+-- each element of @pRegions@ /must/ be less than or equal to the+-- @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+-- when @srcImage@ was created+--+-- - #VUID-vkCmdBlitImage-dstSubresource-01708# The+-- @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of+-- each element of @pRegions@ /must/ be less than or equal to the+-- @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+-- when @dstImage@ was created+--+-- - #VUID-vkCmdBlitImage-dstImage-02545# @dstImage@ and @srcImage@+-- /must/ not have been created with @flags@ containing+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'+--+-- - #VUID-vkCmdBlitImage-srcImage-00240# If either @srcImage@ or+-- @dstImage@ is of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D',+-- then for each element of @pRegions@, @srcSubresource.baseArrayLayer@+-- and @dstSubresource.baseArrayLayer@ /must/ each be @0@, and+-- @srcSubresource.layerCount@ and @dstSubresource.layerCount@ /must/+-- each be @1@+--+-- - #VUID-vkCmdBlitImage-aspectMask-00241# For each element of+-- @pRegions@, @srcSubresource.aspectMask@ /must/ specify aspects+-- present in @srcImage@+--+-- - #VUID-vkCmdBlitImage-aspectMask-00242# For each element of+-- @pRegions@, @dstSubresource.aspectMask@ /must/ specify aspects+-- present in @dstImage@+--+-- - #VUID-vkCmdBlitImage-srcOffset-00243# For each element of+-- @pRegions@, @srcOffsets@[0].x and @srcOffsets@[1].x /must/ both be+-- greater than or equal to @0@ and less than or equal to the width of+-- the specified @srcSubresource@ of @srcImage@+--+-- - #VUID-vkCmdBlitImage-srcOffset-00244# For each element of+-- @pRegions@, @srcOffsets@[0].y and @srcOffsets@[1].y /must/ both be+-- greater than or equal to @0@ and less than or equal to the height of+-- the specified @srcSubresource@ of @srcImage@+--+-- - #VUID-vkCmdBlitImage-srcImage-00245# If @srcImage@ is of type+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+-- of @pRegions@, @srcOffsets@[0].y /must/ be @0@ and @srcOffsets@[1].y+-- /must/ be @1@+--+-- - #VUID-vkCmdBlitImage-srcOffset-00246# For each element of+-- @pRegions@, @srcOffsets@[0].z and @srcOffsets@[1].z /must/ both be+-- greater than or equal to @0@ and less than or equal to the depth of+-- the specified @srcSubresource@ of @srcImage@+--+-- - #VUID-vkCmdBlitImage-srcImage-00247# If @srcImage@ is of type+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+-- of @pRegions@, @srcOffsets@[0].z /must/ be @0@ and @srcOffsets@[1].z+-- /must/ be @1@+--+-- - #VUID-vkCmdBlitImage-dstOffset-00248# For each element of+-- @pRegions@, @dstOffsets@[0].x and @dstOffsets@[1].x /must/ both be+-- greater than or equal to @0@ and less than or equal to the width of+-- the specified @dstSubresource@ of @dstImage@+--+-- - #VUID-vkCmdBlitImage-dstOffset-00249# For each element of+-- @pRegions@, @dstOffsets@[0].y and @dstOffsets@[1].y /must/ both be+-- greater than or equal to @0@ and less than or equal to the height of+-- the specified @dstSubresource@ of @dstImage@+--+-- - #VUID-vkCmdBlitImage-dstImage-00250# If @dstImage@ is of type+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+-- of @pRegions@, @dstOffsets@[0].y /must/ be @0@ and @dstOffsets@[1].y+-- /must/ be @1@+--+-- - #VUID-vkCmdBlitImage-dstOffset-00251# For each element of+-- @pRegions@, @dstOffsets@[0].z and @dstOffsets@[1].z /must/ both be+-- greater than or equal to @0@ and less than or equal to the depth of+-- the specified @dstSubresource@ of @dstImage@+--+-- - #VUID-vkCmdBlitImage-dstImage-00252# If @dstImage@ is of type+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+-- of @pRegions@, @dstOffsets@[0].z /must/ be @0@ and @dstOffsets@[1].z+-- /must/ be @1@+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdBlitImage-commandBuffer-parameter# @commandBuffer@ /must/+-- be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdBlitImage-srcImage-parameter# @srcImage@ /must/ be a+-- valid 'Vulkan.Core10.Handles.Image' handle+--+-- - #VUID-vkCmdBlitImage-srcImageLayout-parameter# @srcImageLayout@+-- /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+-- value+--+-- - #VUID-vkCmdBlitImage-dstImage-parameter# @dstImage@ /must/ be a+-- valid 'Vulkan.Core10.Handles.Image' handle+--+-- - #VUID-vkCmdBlitImage-dstImageLayout-parameter# @dstImageLayout@+-- /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+-- value+--+-- - #VUID-vkCmdBlitImage-pRegions-parameter# @pRegions@ /must/ be a+-- valid pointer to an array of @regionCount@ valid 'ImageBlit'+-- structures+--+-- - #VUID-vkCmdBlitImage-filter-parameter# @filter@ /must/ be a valid+-- 'Vulkan.Core10.Enums.Filter.Filter' value+--+-- - #VUID-vkCmdBlitImage-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-vkCmdBlitImage-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics operations+--+-- - #VUID-vkCmdBlitImage-renderpass# This command /must/ only be called+-- outside of a render pass instance+--+-- - #VUID-vkCmdBlitImage-regionCount-arraylength# @regionCount@ /must/+-- be greater than @0@+--+-- - #VUID-vkCmdBlitImage-commonparent# Each of @commandBuffer@,+-- @dstImage@, and @srcImage@ /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 | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Enums.Filter.Filter', 'Vulkan.Core10.Handles.Image',+-- 'ImageBlit', 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+cmdBlitImage :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @srcImage@ is the source image.+ ("srcImage" ::: Image)+ -> -- | @srcImageLayout@ is the layout of the source image subresources for the+ -- blit.+ ("srcImageLayout" ::: ImageLayout)+ -> -- | @dstImage@ is the destination image.+ ("dstImage" ::: Image)+ -> -- | @dstImageLayout@ is the layout of the destination image subresources for+ -- the blit.+ ("dstImageLayout" ::: ImageLayout)+ -> -- | @pRegions@ is a pointer to an array of 'ImageBlit' structures specifying+ -- the regions to blit.+ ("regions" ::: Vector ImageBlit)+ -> -- | @filter@ is a 'Vulkan.Core10.Enums.Filter.Filter' specifying the filter+ -- to apply if the blits require scaling.+ Filter+ -> io ()+cmdBlitImage commandBuffer srcImage srcImageLayout dstImage dstImageLayout regions filter' = liftIO . evalContT $ do+ let vkCmdBlitImagePtr = pVkCmdBlitImage (deviceCmds (commandBuffer :: CommandBuffer))+ lift $ unless (vkCmdBlitImagePtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBlitImage is null" Nothing Nothing+ let vkCmdBlitImage' = mkVkCmdBlitImage vkCmdBlitImagePtr+ pPRegions <- ContT $ allocaBytes @ImageBlit ((Data.Vector.length (regions)) * 80)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPRegions `plusPtr` (80 * (i)) :: Ptr ImageBlit) (e)) (regions)+ lift $ traceAroundEvent "vkCmdBlitImage" (vkCmdBlitImage' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions) (filter'))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdCopyBufferToImage+ :: FunPtr (Ptr CommandBuffer_T -> Buffer -> Image -> ImageLayout -> Word32 -> Ptr BufferImageCopy -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> Image -> ImageLayout -> Word32 -> Ptr BufferImageCopy -> IO ()++-- | vkCmdCopyBufferToImage - Copy data from a buffer into an image+--+-- = Description+--+-- Each region in @pRegions@ is copied from the specified region of the+-- source buffer to the specified region of the destination image.+--+-- If @dstImage@ has a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+-- regions of each plane to be a target of a copy /must/ be specified+-- separately using the @pRegions@ member of the 'BufferImageCopy'+-- structure. In this case, the @aspectMask@ of @imageSubresource@ /must/+-- be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT', or+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'. For+-- the purposes of 'cmdCopyBufferToImage', each plane of a multi-planar+-- image is treated as having the format listed in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>+-- for the plane identified by the @aspectMask@ of the corresponding+-- subresource. This applies both to 'Vulkan.Core10.Enums.Format.Format'+-- and to coordinates used in the copy, which correspond to texels in the+-- /plane/ rather than how these texels map to coordinates in the image as+-- a whole.+--+-- == Valid Usage+--+-- - #VUID-vkCmdCopyBufferToImage-commandBuffer-01828# If @commandBuffer@+-- is an unprotected command buffer, then @srcBuffer@ /must/ not be a+-- protected buffer+--+-- - #VUID-vkCmdCopyBufferToImage-commandBuffer-01829# If @commandBuffer@+-- is an unprotected command buffer, then @dstImage@ /must/ not be a+-- protected image+--+-- - #VUID-vkCmdCopyBufferToImage-commandBuffer-01830# If @commandBuffer@+-- is a protected command buffer, then @dstImage@ /must/ not be an+-- unprotected image+--+-- - #VUID-vkCmdCopyBufferToImage-pRegions-06217# The image region+-- specified by each element of @pRegions@ /must/ be contained within+-- the specified @imageSubresource@ of @dstImage@+--+-- - #VUID-vkCmdCopyBufferToImage-pRegions-00171# @srcBuffer@ /must/ be+-- large enough to contain all buffer locations that are accessed+-- according to+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-addressing Buffer and Image Addressing>,+-- for each element of @pRegions@+--+-- - #VUID-vkCmdCopyBufferToImage-pRegions-00173# The union of all source+-- regions, and the union of all destination regions, specified by the+-- elements of @pRegions@, /must/ not overlap in memory+--+-- - #VUID-vkCmdCopyBufferToImage-srcBuffer-00174# @srcBuffer@ /must/+-- have been created with+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_SRC_BIT'+-- usage flag+--+-- - #VUID-vkCmdCopyBufferToImage-dstImage-01997# The+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+-- of @dstImage@ /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'+--+-- - #VUID-vkCmdCopyBufferToImage-srcBuffer-00176# If @srcBuffer@ is+-- non-sparse then it /must/ be bound completely and contiguously to a+-- single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- - #VUID-vkCmdCopyBufferToImage-dstImage-00177# @dstImage@ /must/ have+-- been created with+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'+-- usage flag+--+-- - #VUID-vkCmdCopyBufferToImage-dstImage-00178# If @dstImage@ is+-- non-sparse then it /must/ be bound completely and contiguously to a+-- single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- - #VUID-vkCmdCopyBufferToImage-dstImage-00179# @dstImage@ /must/ have+-- a sample count equal to+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'+--+-- - #VUID-vkCmdCopyBufferToImage-dstImageLayout-00180# @dstImageLayout@+-- /must/ specify the layout of the image subresources of @dstImage@+-- specified in @pRegions@ at the time this command is executed on a+-- 'Vulkan.Core10.Handles.Device'+--+-- - #VUID-vkCmdCopyBufferToImage-dstImageLayout-01396# @dstImageLayout@+-- /must/ be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'+--+-- - #VUID-vkCmdCopyBufferToImage-imageSubresource-01701# The+-- @imageSubresource.mipLevel@ member of each element of @pRegions@+-- /must/ be less than the @mipLevels@ specified in+-- 'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created+--+-- - #VUID-vkCmdCopyBufferToImage-imageSubresource-01702# The+-- @imageSubresource.baseArrayLayer@ + @imageSubresource.layerCount@ of+-- each element of @pRegions@ /must/ be less than or equal to the+-- @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+-- when @dstImage@ was created+--+-- - #VUID-vkCmdCopyBufferToImage-imageOffset-01793# The @imageOffset@+-- and @imageExtent@ members of each element of @pRegions@ /must/+-- respect the image transfer granularity requirements of+-- @commandBuffer@’s command pool’s queue family, as described in+-- 'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'+--+-- - #VUID-vkCmdCopyBufferToImage-dstImage-02543# @dstImage@ /must/ not+-- have been created with @flags@ containing+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'+--+-- - #VUID-vkCmdCopyBufferToImage-commandBuffer-04477# If the queue+-- family used to create the 'Vulkan.Core10.Handles.CommandPool' which+-- @commandBuffer@ was allocated from does not support+-- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT', for each+-- element of @pRegions@, the @aspectMask@ member of @imageSubresource@+-- /must/ not be+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'+--+-- - #VUID-vkCmdCopyBufferToImage-pRegions-06218# For each element of+-- @pRegions@, @imageOffset.x@ and (@imageExtent.width@ ++-- @imageOffset.x@) /must/ both be greater than or equal to @0@ and+-- less than or equal to the width of the specified @imageSubresource@+-- of @dstImage@+--+-- - #VUID-vkCmdCopyBufferToImage-pRegions-06219# For each element of+-- @pRegions@, @imageOffset.y@ and (@imageExtent.height@ ++-- @imageOffset.y@) /must/ both be greater than or equal to @0@ and+-- less than or equal to the height of the specified @imageSubresource@+-- of @dstImage@+--+-- - #VUID-vkCmdCopyBufferToImage-bufferOffset-01558# If @dstImage@ does+-- not have either a depth\/stencil or a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+-- then for each element of @pRegions@, @bufferOffset@ /must/ be a+-- multiple of the format’s texel block size+--+-- - #VUID-vkCmdCopyBufferToImage-bufferOffset-01559# If @dstImage@ has a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+-- then for each element of @pRegions@, @bufferOffset@ /must/ be a+-- multiple of the element size of the compatible format for the format+-- and the @aspectMask@ of the @imageSubresource@ as defined in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes ???>+--+-- - #VUID-vkCmdCopyBufferToImage-srcImage-00199# If @dstImage@ is of+-- type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each+-- element of @pRegions@, @imageOffset.y@ /must/ be @0@ and+-- @imageExtent.height@ /must/ be @1@+--+-- - #VUID-vkCmdCopyBufferToImage-imageOffset-00200# For each element of+-- @pRegions@, @imageOffset.z@ and (@imageExtent.depth@ ++-- @imageOffset.z@) /must/ both be greater than or equal to @0@ and+-- less than or equal to the depth of the specified @imageSubresource@+-- of @dstImage@+--+-- - #VUID-vkCmdCopyBufferToImage-srcImage-00201# If @dstImage@ is of+-- type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+-- of @pRegions@, @imageOffset.z@ /must/ be @0@ and @imageExtent.depth@+-- /must/ be @1@+--+-- - #VUID-vkCmdCopyBufferToImage-bufferRowLength-00203# If @dstImage@ is+-- a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- for each element of @pRegions@, @bufferRowLength@ /must/ be a+-- multiple of the compressed texel block width+--+-- - #VUID-vkCmdCopyBufferToImage-bufferImageHeight-00204# If @dstImage@+-- is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- for each element of @pRegions@, @bufferImageHeight@ /must/ be a+-- multiple of the compressed texel block height+--+-- - #VUID-vkCmdCopyBufferToImage-imageOffset-00205# If @dstImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- for each element of @pRegions@, all members of @imageOffset@ /must/+-- be a multiple of the corresponding dimensions of the compressed+-- texel block+--+-- - #VUID-vkCmdCopyBufferToImage-bufferOffset-00206# If @dstImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- for each element of @pRegions@, @bufferOffset@ /must/ be a multiple+-- of the compressed texel block size in bytes+--+-- - #VUID-vkCmdCopyBufferToImage-imageExtent-00207# If @dstImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- for each element of @pRegions@, @imageExtent.width@ /must/ be a+-- multiple of the compressed texel block width or (@imageExtent.width@+-- + @imageOffset.x@) /must/ equal the width of the specified+-- @imageSubresource@ of @dstImage@+--+-- - #VUID-vkCmdCopyBufferToImage-imageExtent-00208# If @dstImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- for each element of @pRegions@, @imageExtent.height@ /must/ be a+-- multiple of the compressed texel block height or+-- (@imageExtent.height@ + @imageOffset.y@) /must/ equal the height of+-- the specified @imageSubresource@ of @dstImage@+--+-- - #VUID-vkCmdCopyBufferToImage-imageExtent-00209# If @dstImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- for each element of @pRegions@, @imageExtent.depth@ /must/ be a+-- multiple of the compressed texel block depth or (@imageExtent.depth@+-- + @imageOffset.z@) /must/ equal the depth of the specified+-- @imageSubresource@ of @dstImage@+--+-- - #VUID-vkCmdCopyBufferToImage-aspectMask-00211# For each element of+-- @pRegions@, @imageSubresource.aspectMask@ /must/ specify aspects+-- present in @dstImage@+--+-- - #VUID-vkCmdCopyBufferToImage-aspectMask-01560# If @dstImage@ has a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+-- then for each element of @pRegions@, @imageSubresource.aspectMask@+-- /must/ be+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',+-- or+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'+-- (with+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'+-- valid only for image formats with three planes)+--+-- - #VUID-vkCmdCopyBufferToImage-baseArrayLayer-00213# If @dstImage@ is+-- of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', for each+-- element of @pRegions@, @imageSubresource.baseArrayLayer@ /must/ be+-- @0@ and @imageSubresource.layerCount@ /must/ be @1@+--+-- - #VUID-vkCmdCopyBufferToImage-pRegions-04725# If @dstImage@ is not a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- for each element of @pRegions@, @bufferRowLength@ multiplied by the+-- texel block size of @dstImage@ /must/ be less than or equal to 231-1+--+-- - #VUID-vkCmdCopyBufferToImage-pRegions-04726# If @dstImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- for each element of @pRegions@, @bufferRowLength@ divided by the+-- compressed texel block width and then multiplied by the texel block+-- size of @dstImage@ /must/ be less than or equal to 231-1+--+-- - #VUID-vkCmdCopyBufferToImage-commandBuffer-04052# If the queue+-- family used to create the 'Vulkan.Core10.Handles.CommandPool' which+-- @commandBuffer@ was allocated from does not support+-- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or+-- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the+-- @bufferOffset@ member of any element of @pRegions@ /must/ be a+-- multiple of @4@+--+-- - #VUID-vkCmdCopyBufferToImage-srcImage-04053# If @dstImage@ has a+-- depth\/stencil format, the @bufferOffset@ member of any element of+-- @pRegions@ /must/ be a multiple of @4@+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdCopyBufferToImage-commandBuffer-parameter#+-- @commandBuffer@ /must/ be a valid+-- 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdCopyBufferToImage-srcBuffer-parameter# @srcBuffer@ /must/+-- be a valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- - #VUID-vkCmdCopyBufferToImage-dstImage-parameter# @dstImage@ /must/+-- be a valid 'Vulkan.Core10.Handles.Image' handle+--+-- - #VUID-vkCmdCopyBufferToImage-dstImageLayout-parameter#+-- @dstImageLayout@ /must/ be a valid+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value+--+-- - #VUID-vkCmdCopyBufferToImage-pRegions-parameter# @pRegions@ /must/+-- be a valid pointer to an array of @regionCount@ valid+-- 'BufferImageCopy' structures+--+-- - #VUID-vkCmdCopyBufferToImage-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-vkCmdCopyBufferToImage-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support transfer, graphics, or compute+-- operations+--+-- - #VUID-vkCmdCopyBufferToImage-renderpass# This command /must/ only be+-- called outside of a render pass instance+--+-- - #VUID-vkCmdCopyBufferToImage-regionCount-arraylength# @regionCount@+-- /must/ be greater than @0@+--+-- - #VUID-vkCmdCopyBufferToImage-commonparent# Each of @commandBuffer@,+-- @dstImage@, and @srcBuffer@ /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 | Transfer |+-- | Secondary | | Graphics |+-- | | | Compute |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.Buffer', 'BufferImageCopy',+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+cmdCopyBufferToImage :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @srcBuffer@ is the source buffer.+ ("srcBuffer" ::: Buffer)+ -> -- | @dstImage@ is the destination image.+ ("dstImage" ::: Image)+ -> -- | @dstImageLayout@ is the layout of the destination image subresources for+ -- the copy.+ ("dstImageLayout" ::: ImageLayout)+ -> -- | @pRegions@ is a pointer to an array of 'BufferImageCopy' structures+ -- specifying the regions to copy.+ ("regions" ::: Vector BufferImageCopy)+ -> io ()+cmdCopyBufferToImage commandBuffer srcBuffer dstImage dstImageLayout regions = liftIO . evalContT $ do+ let vkCmdCopyBufferToImagePtr = pVkCmdCopyBufferToImage (deviceCmds (commandBuffer :: CommandBuffer))+ lift $ unless (vkCmdCopyBufferToImagePtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyBufferToImage is null" Nothing Nothing+ let vkCmdCopyBufferToImage' = mkVkCmdCopyBufferToImage vkCmdCopyBufferToImagePtr+ pPRegions <- ContT $ allocaBytes @BufferImageCopy ((Data.Vector.length (regions)) * 56)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPRegions `plusPtr` (56 * (i)) :: Ptr BufferImageCopy) (e)) (regions)+ lift $ traceAroundEvent "vkCmdCopyBufferToImage" (vkCmdCopyBufferToImage' (commandBufferHandle (commandBuffer)) (srcBuffer) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdCopyImageToBuffer+ :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Buffer -> Word32 -> Ptr BufferImageCopy -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Buffer -> Word32 -> Ptr BufferImageCopy -> IO ()++-- | vkCmdCopyImageToBuffer - Copy image data into a buffer+--+-- = Description+--+-- Each region in @pRegions@ is copied from the specified region of the+-- source image to the specified region of the destination buffer.+--+-- If @srcImage@ has a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+-- regions of each plane to be a source of a copy /must/ be specified+-- separately using the @pRegions@ member of the 'BufferImageCopy'+-- structure. In this case, the @aspectMask@ of @imageSubresource@ /must/+-- be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT', or+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'. For+-- the purposes of 'cmdCopyBufferToImage', each plane of a multi-planar+-- image is treated as having the format listed in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>+-- for the plane identified by the @aspectMask@ of the corresponding+-- subresource. This applies both to 'Vulkan.Core10.Enums.Format.Format'+-- and to coordinates used in the copy, which correspond to texels in the+-- /plane/ rather than how these texels map to coordinates in the image as+-- a whole.+--+-- == Valid Usage+--+-- - #VUID-vkCmdCopyImageToBuffer-commandBuffer-01831# If @commandBuffer@+-- is an unprotected command buffer, then @srcImage@ /must/ not be a+-- protected image+--+-- - #VUID-vkCmdCopyImageToBuffer-commandBuffer-01832# If @commandBuffer@+-- is an unprotected command buffer, then @dstBuffer@ /must/ not be a+-- protected buffer+--+-- - #VUID-vkCmdCopyImageToBuffer-commandBuffer-01833# If @commandBuffer@+-- is a protected command buffer, then @dstBuffer@ /must/ not be an+-- unprotected buffer+--+-- - #VUID-vkCmdCopyImageToBuffer-pRegions-06220# The image region+-- specified by each element of @pRegions@ /must/ be contained within+-- the specified @imageSubresource@ of @srcImage@+--+-- - #VUID-vkCmdCopyImageToBuffer-pRegions-00183# @dstBuffer@ /must/ be+-- large enough to contain all buffer locations that are accessed+-- according to+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-addressing Buffer and Image Addressing>,+-- for each element of @pRegions@+--+-- - #VUID-vkCmdCopyImageToBuffer-pRegions-00184# The union of all source+-- regions, and the union of all destination regions, specified by the+-- elements of @pRegions@, /must/ not overlap in memory+--+-- - #VUID-vkCmdCopyImageToBuffer-srcImage-00186# @srcImage@ /must/ have+-- been created with+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'+-- usage flag+--+-- - #VUID-vkCmdCopyImageToBuffer-srcImage-01998# The+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+-- of @srcImage@ /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_SRC_BIT'+--+-- - #VUID-vkCmdCopyImageToBuffer-srcImage-00187# If @srcImage@ is+-- non-sparse then it /must/ be bound completely and contiguously to a+-- single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- - #VUID-vkCmdCopyImageToBuffer-dstBuffer-00191# @dstBuffer@ /must/+-- have been created with+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'+-- usage flag+--+-- - #VUID-vkCmdCopyImageToBuffer-dstBuffer-00192# If @dstBuffer@ is+-- non-sparse then it /must/ be bound completely and contiguously to a+-- single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- - #VUID-vkCmdCopyImageToBuffer-srcImage-00188# @srcImage@ /must/ have+-- a sample count equal to+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'+--+-- - #VUID-vkCmdCopyImageToBuffer-srcImageLayout-00189# @srcImageLayout@+-- /must/ specify the layout of the image subresources of @srcImage@+-- specified in @pRegions@ at the time this command is executed on a+-- 'Vulkan.Core10.Handles.Device'+--+-- - #VUID-vkCmdCopyImageToBuffer-srcImageLayout-01397# @srcImageLayout@+-- /must/ be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'+--+-- - #VUID-vkCmdCopyImageToBuffer-imageSubresource-01703# The+-- @imageSubresource.mipLevel@ member of each element of @pRegions@+-- /must/ be less than the @mipLevels@ specified in+-- 'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created+--+-- - #VUID-vkCmdCopyImageToBuffer-imageSubresource-01704# The+-- @imageSubresource.baseArrayLayer@ + @imageSubresource.layerCount@ of+-- each element of @pRegions@ /must/ be less than or equal to the+-- @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+-- when @srcImage@ was created+--+-- - #VUID-vkCmdCopyImageToBuffer-imageOffset-01794# The @imageOffset@+-- and @imageExtent@ members of each element of @pRegions@ /must/+-- respect the image transfer granularity requirements of+-- @commandBuffer@’s command pool’s queue family, as described in+-- 'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'+--+-- - #VUID-vkCmdCopyImageToBuffer-srcImage-02544# @srcImage@ /must/ not+-- have been created with @flags@ containing+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'+--+-- - #VUID-vkCmdCopyImageToBuffer-pRegions-06221# For each element of+-- @pRegions@, @imageOffset.x@ and (@imageExtent.width@ ++-- @imageOffset.x@) /must/ both be greater than or equal to @0@ and+-- less than or equal to the width of the specified @imageSubresource@+-- of @srcImage@+--+-- - #VUID-vkCmdCopyImageToBuffer-pRegions-06222# For each element of+-- @pRegions@, @imageOffset.y@ and (imageExtent.height ++-- @imageOffset.y@) /must/ both be greater than or equal to @0@ and+-- less than or equal to the height of the specified @imageSubresource@+-- of @srcImage@+--+-- - #VUID-vkCmdCopyImageToBuffer-bufferOffset-01558# If @srcImage@ does+-- not have either a depth\/stencil or a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+-- then for each element of @pRegions@, @bufferOffset@ /must/ be a+-- multiple of the format’s texel block size+--+-- - #VUID-vkCmdCopyImageToBuffer-bufferOffset-01559# If @srcImage@ has a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+-- then for each element of @pRegions@, @bufferOffset@ /must/ be a+-- multiple of the element size of the compatible format for the format+-- and the @aspectMask@ of the @imageSubresource@ as defined in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes ???>+--+-- - #VUID-vkCmdCopyImageToBuffer-srcImage-00199# If @srcImage@ is of+-- type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each+-- element of @pRegions@, @imageOffset.y@ /must/ be @0@ and+-- @imageExtent.height@ /must/ be @1@+--+-- - #VUID-vkCmdCopyImageToBuffer-imageOffset-00200# For each element of+-- @pRegions@, @imageOffset.z@ and (@imageExtent.depth@ ++-- @imageOffset.z@) /must/ both be greater than or equal to @0@ and+-- less than or equal to the depth of the specified @imageSubresource@+-- of @srcImage@+--+-- - #VUID-vkCmdCopyImageToBuffer-srcImage-00201# If @srcImage@ is of+-- type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+-- of @pRegions@, @imageOffset.z@ /must/ be @0@ and @imageExtent.depth@+-- /must/ be @1@+--+-- - #VUID-vkCmdCopyImageToBuffer-bufferRowLength-00203# If @srcImage@ is+-- a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- for each element of @pRegions@, @bufferRowLength@ /must/ be a+-- multiple of the compressed texel block width+--+-- - #VUID-vkCmdCopyImageToBuffer-bufferImageHeight-00204# If @srcImage@+-- is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- for each element of @pRegions@, @bufferImageHeight@ /must/ be a+-- multiple of the compressed texel block height+--+-- - #VUID-vkCmdCopyImageToBuffer-imageOffset-00205# If @srcImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- for each element of @pRegions@, all members of @imageOffset@ /must/+-- be a multiple of the corresponding dimensions of the compressed+-- texel block+--+-- - #VUID-vkCmdCopyImageToBuffer-bufferOffset-00206# If @srcImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- for each element of @pRegions@, @bufferOffset@ /must/ be a multiple+-- of the compressed texel block size in bytes+--+-- - #VUID-vkCmdCopyImageToBuffer-imageExtent-00207# If @srcImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- for each element of @pRegions@, @imageExtent.width@ /must/ be a+-- multiple of the compressed texel block width or (@imageExtent.width@+-- + @imageOffset.x@) /must/ equal the width of the specified+-- @imageSubresource@ of @srcImage@+--+-- - #VUID-vkCmdCopyImageToBuffer-imageExtent-00208# If @srcImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- for each element of @pRegions@, @imageExtent.height@ /must/ be a+-- multiple of the compressed texel block height or+-- (@imageExtent.height@ + @imageOffset.y@) /must/ equal the height of+-- the specified @imageSubresource@ of @srcImage@+--+-- - #VUID-vkCmdCopyImageToBuffer-imageExtent-00209# If @srcImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- for each element of @pRegions@, @imageExtent.depth@ /must/ be a+-- multiple of the compressed texel block depth or (@imageExtent.depth@+-- + @imageOffset.z@) /must/ equal the depth of the specified+-- @imageSubresource@ of @srcImage@+--+-- - #VUID-vkCmdCopyImageToBuffer-aspectMask-00211# For each element of+-- @pRegions@, @imageSubresource.aspectMask@ /must/ specify aspects+-- present in @srcImage@+--+-- - #VUID-vkCmdCopyImageToBuffer-aspectMask-01560# If @srcImage@ has a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+-- then for each element of @pRegions@, @imageSubresource.aspectMask@+-- /must/ be+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',+-- or+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'+-- (with+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'+-- valid only for image formats with three planes)+--+-- - #VUID-vkCmdCopyImageToBuffer-baseArrayLayer-00213# If @srcImage@ is+-- of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', for each+-- element of @pRegions@, @imageSubresource.baseArrayLayer@ /must/ be+-- @0@ and @imageSubresource.layerCount@ /must/ be @1@+--+-- - #VUID-vkCmdCopyImageToBuffer-pRegions-04725# If @srcImage@ is not a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- for each element of @pRegions@, @bufferRowLength@ multiplied by the+-- texel block size of @srcImage@ /must/ be less than or equal to 231-1+--+-- - #VUID-vkCmdCopyImageToBuffer-pRegions-04726# If @srcImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+-- for each element of @pRegions@, @bufferRowLength@ divided by the+-- compressed texel block width and then multiplied by the texel block+-- size of @srcImage@ /must/ be less than or equal to 231-1+--+-- - #VUID-vkCmdCopyImageToBuffer-commandBuffer-04052# If the queue+-- family used to create the 'Vulkan.Core10.Handles.CommandPool' which+-- @commandBuffer@ was allocated from does not support+-- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or+-- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the+-- @bufferOffset@ member of any element of @pRegions@ /must/ be a+-- multiple of @4@+--+-- - #VUID-vkCmdCopyImageToBuffer-srcImage-04053# If @srcImage@ has a+-- depth\/stencil format, the @bufferOffset@ member of any element of+-- @pRegions@ /must/ be a multiple of @4@+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdCopyImageToBuffer-commandBuffer-parameter#+-- @commandBuffer@ /must/ be a valid+-- 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdCopyImageToBuffer-srcImage-parameter# @srcImage@ /must/+-- be a valid 'Vulkan.Core10.Handles.Image' handle+--+-- - #VUID-vkCmdCopyImageToBuffer-srcImageLayout-parameter#+-- @srcImageLayout@ /must/ be a valid+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value+--+-- - #VUID-vkCmdCopyImageToBuffer-dstBuffer-parameter# @dstBuffer@ /must/+-- be a valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- - #VUID-vkCmdCopyImageToBuffer-pRegions-parameter# @pRegions@ /must/+-- be a valid pointer to an array of @regionCount@ valid+-- 'BufferImageCopy' structures+--+-- - #VUID-vkCmdCopyImageToBuffer-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-vkCmdCopyImageToBuffer-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support transfer, graphics, or compute+-- operations+--+-- - #VUID-vkCmdCopyImageToBuffer-renderpass# This command /must/ only be+-- called outside of a render pass instance+--+-- - #VUID-vkCmdCopyImageToBuffer-regionCount-arraylength# @regionCount@+-- /must/ be greater than @0@+--+-- - #VUID-vkCmdCopyImageToBuffer-commonparent# Each of @commandBuffer@,+-- @dstBuffer@, and @srcImage@ /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 | Transfer |+-- | Secondary | | Graphics |+-- | | | Compute |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.Buffer', 'BufferImageCopy',+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+cmdCopyImageToBuffer :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @srcImage@ is the source image.+ ("srcImage" ::: Image)+ -> -- | @srcImageLayout@ is the layout of the source image subresources for the+ -- copy.+ ("srcImageLayout" ::: ImageLayout)+ -> -- | @dstBuffer@ is the destination buffer.+ ("dstBuffer" ::: Buffer)+ -> -- | @pRegions@ is a pointer to an array of 'BufferImageCopy' structures+ -- specifying the regions to copy.+ ("regions" ::: Vector BufferImageCopy)+ -> io ()+cmdCopyImageToBuffer commandBuffer srcImage srcImageLayout dstBuffer regions = liftIO . evalContT $ do+ let vkCmdCopyImageToBufferPtr = pVkCmdCopyImageToBuffer (deviceCmds (commandBuffer :: CommandBuffer))+ lift $ unless (vkCmdCopyImageToBufferPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyImageToBuffer is null" Nothing Nothing+ let vkCmdCopyImageToBuffer' = mkVkCmdCopyImageToBuffer vkCmdCopyImageToBufferPtr+ pPRegions <- ContT $ allocaBytes @BufferImageCopy ((Data.Vector.length (regions)) * 56)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPRegions `plusPtr` (56 * (i)) :: Ptr BufferImageCopy) (e)) (regions)+ lift $ traceAroundEvent "vkCmdCopyImageToBuffer" (vkCmdCopyImageToBuffer' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstBuffer) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdUpdateBuffer+ :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Ptr () -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Ptr () -> IO ()++-- | vkCmdUpdateBuffer - Update a buffer’s contents from host memory+--+-- = Description+--+-- @dataSize@ /must/ be less than or equal to 65536 bytes. For larger+-- updates, applications /can/ use buffer to buffer+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers copies>.+--+-- Note+--+-- Buffer updates performed with 'cmdUpdateBuffer' first copy the data into+-- command buffer memory when the command is recorded (which requires+-- additional storage and may incur an additional allocation), and then+-- copy the data from the command buffer into @dstBuffer@ when the command+-- is executed on a device.+--+-- The additional cost of this functionality compared to+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers buffer to buffer copies>+-- means it is only recommended for very small amounts of data, and is why+-- it is limited to only 65536 bytes.+--+-- Applications /can/ work around this by issuing multiple+-- 'cmdUpdateBuffer' commands to different ranges of the same buffer, but+-- it is strongly recommended that they /should/ not.+--+-- The source data is copied from the user pointer to the command buffer+-- when the command is called.+--+-- 'cmdUpdateBuffer' is only allowed outside of a render pass. This command+-- is treated as “transfer” operation, for the purposes of synchronization+-- barriers. The+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'+-- /must/ be specified in @usage@ of+-- 'Vulkan.Core10.Buffer.BufferCreateInfo' in order for the buffer to be+-- compatible with 'cmdUpdateBuffer'.+--+-- == Valid Usage+--+-- - #VUID-vkCmdUpdateBuffer-dstOffset-00032# @dstOffset@ /must/ be less+-- than the size of @dstBuffer@+--+-- - #VUID-vkCmdUpdateBuffer-dataSize-00033# @dataSize@ /must/ be less+-- than or equal to the size of @dstBuffer@ minus @dstOffset@+--+-- - #VUID-vkCmdUpdateBuffer-dstBuffer-00034# @dstBuffer@ /must/ have+-- been created with+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'+-- usage flag+--+-- - #VUID-vkCmdUpdateBuffer-dstBuffer-00035# If @dstBuffer@ is+-- non-sparse then it /must/ be bound completely and contiguously to a+-- single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- - #VUID-vkCmdUpdateBuffer-dstOffset-00036# @dstOffset@ /must/ be a+-- multiple of @4@+--+-- - #VUID-vkCmdUpdateBuffer-dataSize-00037# @dataSize@ /must/ be less+-- than or equal to @65536@+--+-- - #VUID-vkCmdUpdateBuffer-dataSize-00038# @dataSize@ /must/ be a+-- multiple of @4@+--+-- - #VUID-vkCmdUpdateBuffer-commandBuffer-01813# If @commandBuffer@ is+-- an unprotected command buffer, then @dstBuffer@ /must/ not be a+-- protected buffer+--+-- - #VUID-vkCmdUpdateBuffer-commandBuffer-01814# If @commandBuffer@ is a+-- protected command buffer, then @dstBuffer@ /must/ not be an+-- unprotected buffer+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdUpdateBuffer-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdUpdateBuffer-dstBuffer-parameter# @dstBuffer@ /must/ be a+-- valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- - #VUID-vkCmdUpdateBuffer-pData-parameter# @pData@ /must/ be a valid+-- pointer to an array of @dataSize@ bytes+--+-- - #VUID-vkCmdUpdateBuffer-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-vkCmdUpdateBuffer-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support transfer, graphics, or compute+-- operations+--+-- - #VUID-vkCmdUpdateBuffer-renderpass# This command /must/ only be+-- called outside of a render pass instance+--+-- - #VUID-vkCmdUpdateBuffer-dataSize-arraylength# @dataSize@ /must/ be+-- greater than @0@+--+-- - #VUID-vkCmdUpdateBuffer-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 | Outside | Transfer |+-- | Secondary | | Graphics |+-- | | | Compute |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize'+cmdUpdateBuffer :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @dstBuffer@ is a handle to the buffer to be updated.+ ("dstBuffer" ::: Buffer)+ -> -- | @dstOffset@ is the byte offset into the buffer to start updating, and+ -- /must/ be a multiple of 4.+ ("dstOffset" ::: DeviceSize)+ -> -- | @dataSize@ is the number of bytes to update, and /must/ be a multiple of+ -- 4.+ ("dataSize" ::: DeviceSize)+ -> -- | @pData@ is a pointer to the source data for the buffer update, and+ -- /must/ be at least @dataSize@ bytes in size.+ ("data" ::: Ptr ())+ -> io ()+cmdUpdateBuffer commandBuffer dstBuffer dstOffset dataSize data' = liftIO $ do+ let vkCmdUpdateBufferPtr = pVkCmdUpdateBuffer (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdUpdateBufferPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdUpdateBuffer is null" Nothing Nothing+ let vkCmdUpdateBuffer' = mkVkCmdUpdateBuffer vkCmdUpdateBufferPtr+ traceAroundEvent "vkCmdUpdateBuffer" (vkCmdUpdateBuffer' (commandBufferHandle (commandBuffer)) (dstBuffer) (dstOffset) (dataSize) (data'))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdFillBuffer+ :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Word32 -> IO ()++-- | vkCmdFillBuffer - Fill a region of a buffer with a fixed value+--+-- = Description+--+-- 'cmdFillBuffer' is treated as “transfer” operation for the purposes of+-- synchronization barriers. The+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'+-- /must/ be specified in @usage@ of+-- 'Vulkan.Core10.Buffer.BufferCreateInfo' in order for the buffer to be+-- compatible with 'cmdFillBuffer'.+--+-- == Valid Usage+--+-- - #VUID-vkCmdFillBuffer-dstOffset-00024# @dstOffset@ /must/ be less+-- than the size of @dstBuffer@+--+-- - #VUID-vkCmdFillBuffer-dstOffset-00025# @dstOffset@ /must/ be a+-- multiple of @4@+--+-- - #VUID-vkCmdFillBuffer-size-00026# If @size@ is not equal to+-- 'Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ be greater+-- than @0@+--+-- - #VUID-vkCmdFillBuffer-size-00027# If @size@ is not equal to+-- 'Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ be less than+-- or equal to the size of @dstBuffer@ minus @dstOffset@+--+-- - #VUID-vkCmdFillBuffer-size-00028# If @size@ is not equal to+-- 'Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ be a multiple+-- of @4@+--+-- - #VUID-vkCmdFillBuffer-dstBuffer-00029# @dstBuffer@ /must/ have been+-- created with+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'+-- usage flag+--+-- - #VUID-vkCmdFillBuffer-dstBuffer-00031# If @dstBuffer@ is non-sparse+-- then it /must/ be bound completely and contiguously to a single+-- 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- - #VUID-vkCmdFillBuffer-commandBuffer-01811# If @commandBuffer@ is an+-- unprotected command buffer, then @dstBuffer@ /must/ not be a+-- protected buffer+--+-- - #VUID-vkCmdFillBuffer-commandBuffer-01812# If @commandBuffer@ is a+-- protected command buffer, then @dstBuffer@ /must/ not be an+-- unprotected buffer+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdFillBuffer-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdFillBuffer-dstBuffer-parameter# @dstBuffer@ /must/ be a+-- valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- - #VUID-vkCmdFillBuffer-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-vkCmdFillBuffer-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support transfer, graphics or compute+-- operations+--+-- - #VUID-vkCmdFillBuffer-renderpass# This command /must/ only be called+-- outside of a render pass instance+--+-- - #VUID-vkCmdFillBuffer-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 | Outside | Transfer |+-- | Secondary | | Graphics |+-- | | | Compute |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize'+cmdFillBuffer :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @dstBuffer@ is the buffer to be filled.+ ("dstBuffer" ::: Buffer)+ -> -- | @dstOffset@ is the byte offset into the buffer at which to start+ -- filling, and /must/ be a multiple of 4.+ ("dstOffset" ::: DeviceSize)+ -> -- | @size@ is the number of bytes to fill, and /must/ be either a multiple+ -- of 4, or 'Vulkan.Core10.APIConstants.WHOLE_SIZE' to fill the range from+ -- @offset@ to the end of the buffer. If+ -- 'Vulkan.Core10.APIConstants.WHOLE_SIZE' is used and the remaining size+ -- of the buffer is not a multiple of 4, then the nearest smaller multiple+ -- is used.+ DeviceSize+ -> -- | @data@ is the 4-byte word written repeatedly to the buffer to fill+ -- @size@ bytes of data. The data word is written to memory according to+ -- the host endianness.+ ("data" ::: Word32)+ -> io ()+cmdFillBuffer commandBuffer dstBuffer dstOffset size data' = liftIO $ do+ let vkCmdFillBufferPtr = pVkCmdFillBuffer (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdFillBufferPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdFillBuffer is null" Nothing Nothing+ let vkCmdFillBuffer' = mkVkCmdFillBuffer vkCmdFillBufferPtr+ traceAroundEvent "vkCmdFillBuffer" (vkCmdFillBuffer' (commandBufferHandle (commandBuffer)) (dstBuffer) (dstOffset) (size) (data'))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdClearColorImage+ :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearColorValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearColorValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()++-- | vkCmdClearColorImage - Clear regions of a color image+--+-- = Description+--+-- Each specified range in @pRanges@ is cleared to the value specified by+-- @pColor@.+--+-- == Valid Usage+--+-- - #VUID-vkCmdClearColorImage-image-01993# The+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+-- of @image@ /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'+--+-- - #VUID-vkCmdClearColorImage-image-00002# @image@ /must/ have been+-- created with+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'+-- usage flag+--+-- - #VUID-vkCmdClearColorImage-image-01545# @image@ /must/ not use any+-- of the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion formats that require a sampler Y’CBCR conversion>+--+-- - #VUID-vkCmdClearColorImage-image-00003# If @image@ is non-sparse+-- then it /must/ be bound completely and contiguously to a single+-- 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- - #VUID-vkCmdClearColorImage-imageLayout-00004# @imageLayout@ /must/+-- specify the layout of the image subresource ranges of @image@+-- specified in @pRanges@ at the time this command is executed on a+-- 'Vulkan.Core10.Handles.Device'+--+-- - #VUID-vkCmdClearColorImage-imageLayout-01394# @imageLayout@ /must/+-- be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'+--+-- - #VUID-vkCmdClearColorImage-aspectMask-02498# The+-- 'Vulkan.Core10.ImageView.ImageSubresourceRange'::@aspectMask@+-- members of the elements of the @pRanges@ array /must/ each only+-- include+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'+--+-- - #VUID-vkCmdClearColorImage-baseMipLevel-01470# The+-- 'Vulkan.Core10.ImageView.ImageSubresourceRange'::@baseMipLevel@+-- members of the elements of the @pRanges@ array /must/ each be less+-- than the @mipLevels@ specified in+-- 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created+--+-- - #VUID-vkCmdClearColorImage-pRanges-01692# For each+-- 'Vulkan.Core10.ImageView.ImageSubresourceRange' element of+-- @pRanges@, if the @levelCount@ member is not+-- 'Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS', then+-- @baseMipLevel@ + @levelCount@ /must/ be less than the @mipLevels@+-- specified in 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was+-- created+--+-- - #VUID-vkCmdClearColorImage-baseArrayLayer-01472# The+-- 'Vulkan.Core10.ImageView.ImageSubresourceRange'::@baseArrayLayer@+-- members of the elements of the @pRanges@ array /must/ each be less+-- than the @arrayLayers@ specified in+-- 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created+--+-- - #VUID-vkCmdClearColorImage-pRanges-01693# For each+-- 'Vulkan.Core10.ImageView.ImageSubresourceRange' element of+-- @pRanges@, if the @layerCount@ member is not+-- 'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', then+-- @baseArrayLayer@ + @layerCount@ /must/ be less than the+-- @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+-- when @image@ was created+--+-- - #VUID-vkCmdClearColorImage-image-00007# @image@ /must/ not have a+-- compressed or depth\/stencil format+--+-- - #VUID-vkCmdClearColorImage-pColor-04961# @pColor@ /must/ be a valid+-- pointer to a 'ClearColorValue' union+--+-- - #VUID-vkCmdClearColorImage-commandBuffer-01805# If @commandBuffer@+-- is an unprotected command buffer, then @image@ /must/ not be a+-- protected image+--+-- - #VUID-vkCmdClearColorImage-commandBuffer-01806# If @commandBuffer@+-- is a protected command buffer, then @image@ /must/ not be an+-- unprotected image+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdClearColorImage-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdClearColorImage-image-parameter# @image@ /must/ be a+-- valid 'Vulkan.Core10.Handles.Image' handle+--+-- - #VUID-vkCmdClearColorImage-imageLayout-parameter# @imageLayout@+-- /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+-- value+--+-- - #VUID-vkCmdClearColorImage-pRanges-parameter# @pRanges@ /must/ be a+-- valid pointer to an array of @rangeCount@ valid+-- 'Vulkan.Core10.ImageView.ImageSubresourceRange' structures+--+-- - #VUID-vkCmdClearColorImage-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-vkCmdClearColorImage-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics, or compute operations+--+-- - #VUID-vkCmdClearColorImage-renderpass# This command /must/ only be+-- called outside of a render pass instance+--+-- - #VUID-vkCmdClearColorImage-rangeCount-arraylength# @rangeCount@+-- /must/ be greater than @0@+--+-- - #VUID-vkCmdClearColorImage-commonparent# Both of @commandBuffer@,+-- and @image@ /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_VERSION_1_0 VK_VERSION_1_0>,+-- 'ClearColorValue', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Handles.Image',+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',+-- 'Vulkan.Core10.ImageView.ImageSubresourceRange'+cmdClearColorImage :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @image@ is the image to be cleared.+ Image+ -> -- | @imageLayout@ specifies the current layout of the image subresource+ -- ranges to be cleared, and /must/ be+ -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',+ -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL' or+ -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'.+ ImageLayout+ -> -- | @pColor@ is a pointer to a 'ClearColorValue' structure containing the+ -- values that the image subresource ranges will be cleared to (see+ -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears-values>+ -- below).+ ClearColorValue+ -> -- | @pRanges@ is a pointer to an array of+ -- 'Vulkan.Core10.ImageView.ImageSubresourceRange' structures describing a+ -- range of mipmap levels, array layers, and aspects to be cleared, as+ -- described in+ -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views Image Views>.+ ("ranges" ::: Vector ImageSubresourceRange)+ -> io ()+cmdClearColorImage commandBuffer image imageLayout color ranges = liftIO . evalContT $ do+ let vkCmdClearColorImagePtr = pVkCmdClearColorImage (deviceCmds (commandBuffer :: CommandBuffer))+ lift $ unless (vkCmdClearColorImagePtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdClearColorImage is null" Nothing Nothing+ let vkCmdClearColorImage' = mkVkCmdClearColorImage vkCmdClearColorImagePtr+ pColor <- ContT $ withCStruct (color)+ pPRanges <- ContT $ allocaBytes @ImageSubresourceRange ((Data.Vector.length (ranges)) * 20)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPRanges `plusPtr` (20 * (i)) :: Ptr ImageSubresourceRange) (e)) (ranges)+ lift $ traceAroundEvent "vkCmdClearColorImage" (vkCmdClearColorImage' (commandBufferHandle (commandBuffer)) (image) (imageLayout) pColor ((fromIntegral (Data.Vector.length $ (ranges)) :: Word32)) (pPRanges))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdClearDepthStencilImage+ :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearDepthStencilValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearDepthStencilValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()++-- | vkCmdClearDepthStencilImage - Fill regions of a combined depth\/stencil+-- image+--+-- == Valid Usage+--+-- - #VUID-vkCmdClearDepthStencilImage-image-01994# The+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+-- of @image@ /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'+--+-- - #VUID-vkCmdClearDepthStencilImage-pRanges-02658# If the @aspect@+-- member of any element of @pRanges@ includes+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',+-- and @image@ was created with+-- <VkImageStencilUsageCreateInfo.html separate stencil usage>,+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'+-- /must/ have been included in the+-- 'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@+-- used to create @image@+--+-- - #VUID-vkCmdClearDepthStencilImage-pRanges-02659# If the @aspect@+-- member of any element of @pRanges@ includes+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',+-- and @image@ was not created with+-- <VkImageStencilUsageCreateInfo.html separate stencil usage>,+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'+-- /must/ have been included in the+-- 'Vulkan.Core10.Image.ImageCreateInfo'::@usage@ used to create+-- @image@+--+-- - #VUID-vkCmdClearDepthStencilImage-pRanges-02660# If the @aspect@+-- member of any element of @pRanges@ includes+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT',+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'+-- /must/ have been included in the+-- 'Vulkan.Core10.Image.ImageCreateInfo'::@usage@ used to create+-- @image@+--+-- - #VUID-vkCmdClearDepthStencilImage-image-00010# If @image@ is+-- non-sparse then it /must/ be bound completely and contiguously to a+-- single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- - #VUID-vkCmdClearDepthStencilImage-imageLayout-00011# @imageLayout@+-- /must/ specify the layout of the image subresource ranges of @image@+-- specified in @pRanges@ at the time this command is executed on a+-- 'Vulkan.Core10.Handles.Device'+--+-- - #VUID-vkCmdClearDepthStencilImage-imageLayout-00012# @imageLayout@+-- /must/ be either of+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'+-- or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'+--+-- - #VUID-vkCmdClearDepthStencilImage-aspectMask-02824# The+-- 'Vulkan.Core10.ImageView.ImageSubresourceRange'::@aspectMask@ member+-- of each element of the @pRanges@ array /must/ not include bits other+-- than+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'+--+-- - #VUID-vkCmdClearDepthStencilImage-image-02825# If the @image@’s+-- format does not have a stencil component, then the+-- 'Vulkan.Core10.ImageView.ImageSubresourceRange'::@aspectMask@ member+-- of each element of the @pRanges@ array /must/ not include the+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'+-- bit+--+-- - #VUID-vkCmdClearDepthStencilImage-image-02826# If the @image@’s+-- format does not have a depth component, then the+-- 'Vulkan.Core10.ImageView.ImageSubresourceRange'::@aspectMask@ member+-- of each element of the @pRanges@ array /must/ not include the+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' bit+--+-- - #VUID-vkCmdClearDepthStencilImage-baseMipLevel-01474# The+-- 'Vulkan.Core10.ImageView.ImageSubresourceRange'::@baseMipLevel@+-- members of the elements of the @pRanges@ array /must/ each be less+-- than the @mipLevels@ specified in+-- 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created+--+-- - #VUID-vkCmdClearDepthStencilImage-pRanges-01694# For each+-- 'Vulkan.Core10.ImageView.ImageSubresourceRange' element of+-- @pRanges@, if the @levelCount@ member is not+-- 'Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS', then+-- @baseMipLevel@ + @levelCount@ /must/ be less than the @mipLevels@+-- specified in 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was+-- created+--+-- - #VUID-vkCmdClearDepthStencilImage-baseArrayLayer-01476# The+-- 'Vulkan.Core10.ImageView.ImageSubresourceRange'::@baseArrayLayer@+-- members of the elements of the @pRanges@ array /must/ each be less+-- than the @arrayLayers@ specified in+-- 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created+--+-- - #VUID-vkCmdClearDepthStencilImage-pRanges-01695# For each+-- 'Vulkan.Core10.ImageView.ImageSubresourceRange' element of+-- @pRanges@, if the @layerCount@ member is not+-- 'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', then+-- @baseArrayLayer@ + @layerCount@ /must/ be less than the+-- @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+-- when @image@ was created+--+-- - #VUID-vkCmdClearDepthStencilImage-image-00014# @image@ /must/ have a+-- depth\/stencil format+--+-- - #VUID-vkCmdClearDepthStencilImage-commandBuffer-01807# If+-- @commandBuffer@ is an unprotected command buffer, then @image@+-- /must/ not be a protected image+--+-- - #VUID-vkCmdClearDepthStencilImage-commandBuffer-01808# If+-- @commandBuffer@ is a protected command buffer, then @image@ /must/+-- not be an unprotected image+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdClearDepthStencilImage-commandBuffer-parameter#+-- @commandBuffer@ /must/ be a valid+-- 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdClearDepthStencilImage-image-parameter# @image@ /must/ be+-- a valid 'Vulkan.Core10.Handles.Image' handle+--+-- - #VUID-vkCmdClearDepthStencilImage-imageLayout-parameter#+-- @imageLayout@ /must/ be a valid+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value+--+-- - #VUID-vkCmdClearDepthStencilImage-pDepthStencil-parameter#+-- @pDepthStencil@ /must/ be a valid pointer to a valid+-- 'ClearDepthStencilValue' structure+--+-- - #VUID-vkCmdClearDepthStencilImage-pRanges-parameter# @pRanges@+-- /must/ be a valid pointer to an array of @rangeCount@ valid+-- 'Vulkan.Core10.ImageView.ImageSubresourceRange' structures+--+-- - #VUID-vkCmdClearDepthStencilImage-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-vkCmdClearDepthStencilImage-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics operations+--+-- - #VUID-vkCmdClearDepthStencilImage-renderpass# This command /must/+-- only be called outside of a render pass instance+--+-- - #VUID-vkCmdClearDepthStencilImage-rangeCount-arraylength#+-- @rangeCount@ /must/ be greater than @0@+--+-- - #VUID-vkCmdClearDepthStencilImage-commonparent# Both of+-- @commandBuffer@, and @image@ /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 | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'ClearDepthStencilValue', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Handles.Image',+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',+-- 'Vulkan.Core10.ImageView.ImageSubresourceRange'+cmdClearDepthStencilImage :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @image@ is the image to be cleared.+ Image+ -> -- | @imageLayout@ specifies the current layout of the image subresource+ -- ranges to be cleared, and /must/ be+ -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL' or+ -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'.+ ImageLayout+ -> -- | @pDepthStencil@ is a pointer to a 'ClearDepthStencilValue' structure+ -- containing the values that the depth and stencil image subresource+ -- ranges will be cleared to (see+ -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears-values>+ -- below).+ ClearDepthStencilValue+ -> -- | @pRanges@ is a pointer to an array of+ -- 'Vulkan.Core10.ImageView.ImageSubresourceRange' structures describing a+ -- range of mipmap levels, array layers, and aspects to be cleared, as+ -- described in+ -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views Image Views>.+ ("ranges" ::: Vector ImageSubresourceRange)+ -> io ()+cmdClearDepthStencilImage commandBuffer image imageLayout depthStencil ranges = liftIO . evalContT $ do+ let vkCmdClearDepthStencilImagePtr = pVkCmdClearDepthStencilImage (deviceCmds (commandBuffer :: CommandBuffer))+ lift $ unless (vkCmdClearDepthStencilImagePtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdClearDepthStencilImage is null" Nothing Nothing+ let vkCmdClearDepthStencilImage' = mkVkCmdClearDepthStencilImage vkCmdClearDepthStencilImagePtr+ pDepthStencil <- ContT $ withCStruct (depthStencil)+ pPRanges <- ContT $ allocaBytes @ImageSubresourceRange ((Data.Vector.length (ranges)) * 20)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPRanges `plusPtr` (20 * (i)) :: Ptr ImageSubresourceRange) (e)) (ranges)+ lift $ traceAroundEvent "vkCmdClearDepthStencilImage" (vkCmdClearDepthStencilImage' (commandBufferHandle (commandBuffer)) (image) (imageLayout) pDepthStencil ((fromIntegral (Data.Vector.length $ (ranges)) :: Word32)) (pPRanges))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdClearAttachments+ :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr ClearAttachment -> Word32 -> Ptr ClearRect -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr ClearAttachment -> Word32 -> Ptr ClearRect -> IO ()++-- | vkCmdClearAttachments - Clear regions within bound framebuffer+-- attachments+--+-- = Description+--+-- If the render pass has a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-fragmentdensitymapattachment fragment density map attachment>,+-- clears follow the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragmentdensitymapops operations of fragment density maps>+-- as if each clear region was a primitive which generates fragments. The+-- clear color is applied to all pixels inside each fragment’s area+-- regardless if the pixels lie outside of the clear region. Clears /may/+-- have a different set of supported fragment areas than draws.+--+-- Unlike other+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears clear commands>,+-- 'cmdClearAttachments' executes as a drawing command, rather than a+-- transfer command, with writes performed by it executing in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-order rasterization order>.+-- Clears to color attachments are executed as color attachment writes, by+-- the+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'+-- stage. Clears to depth\/stencil attachments are executed as+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth depth writes>+-- and+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil writes>+-- by the+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT'+-- and+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT'+-- stages.+--+-- 'cmdClearAttachments' is not affected by the bound pipeline state.+--+-- Note+--+-- It’s generally advised that attachments are cleared by using the+-- 'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR' load+-- operation at the start of rendering, which will be more efficient on+-- some implementations.+--+-- == Valid Usage+--+-- - #VUID-vkCmdClearAttachments-aspectMask-02501# If the @aspectMask@+-- member of any element of @pAttachments@ contains+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',+-- then the @colorAttachment@ member of that element /must/ either+-- refer to a color attachment which is+-- 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', or /must/ be a valid+-- color attachment+--+-- - #VUID-vkCmdClearAttachments-aspectMask-02502# If the @aspectMask@+-- member of any element of @pAttachments@ contains+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT',+-- then the current subpass\' depth\/stencil attachment /must/ either+-- be 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', or /must/ have a+-- depth component+--+-- - #VUID-vkCmdClearAttachments-aspectMask-02503# If the @aspectMask@+-- member of any element of @pAttachments@ contains+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',+-- then the current subpass\' depth\/stencil attachment /must/ either+-- be 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', or /must/ have a+-- stencil component+--+-- - #VUID-vkCmdClearAttachments-rect-02682# The @rect@ member of each+-- element of @pRects@ /must/ have an @extent.width@ greater than @0@+--+-- - #VUID-vkCmdClearAttachments-rect-02683# The @rect@ member of each+-- element of @pRects@ /must/ have an @extent.height@ greater than @0@+--+-- - #VUID-vkCmdClearAttachments-pRects-00016# The rectangular region+-- specified by each element of @pRects@ /must/ be contained within the+-- render area of the current render pass instance+--+-- - #VUID-vkCmdClearAttachments-pRects-00017# The layers specified by+-- each element of @pRects@ /must/ be contained within every attachment+-- that @pAttachments@ refers to+--+-- - #VUID-vkCmdClearAttachments-layerCount-01934# The @layerCount@+-- member of each element of @pRects@ /must/ not be @0@+--+-- - #VUID-vkCmdClearAttachments-commandBuffer-02504# If @commandBuffer@+-- is an unprotected command buffer, then each attachment to be cleared+-- /must/ not be a protected image+--+-- - #VUID-vkCmdClearAttachments-commandBuffer-02505# If @commandBuffer@+-- is a protected command buffer, then each attachment to be cleared+-- /must/ not be an unprotected image+--+-- - #VUID-vkCmdClearAttachments-baseArrayLayer-00018# If the render pass+-- instance this is recorded in uses multiview, then @baseArrayLayer@+-- /must/ be zero and @layerCount@ /must/ be one+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdClearAttachments-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdClearAttachments-pAttachments-parameter# @pAttachments@+-- /must/ be a valid pointer to an array of @attachmentCount@ valid+-- 'ClearAttachment' structures+--+-- - #VUID-vkCmdClearAttachments-pRects-parameter# @pRects@ /must/ be a+-- valid pointer to an array of @rectCount@ 'ClearRect' structures+--+-- - #VUID-vkCmdClearAttachments-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-vkCmdClearAttachments-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics operations+--+-- - #VUID-vkCmdClearAttachments-renderpass# This command /must/ only be+-- called inside of a render pass instance+--+-- - #VUID-vkCmdClearAttachments-attachmentCount-arraylength#+-- @attachmentCount@ /must/ be greater than @0@+--+-- - #VUID-vkCmdClearAttachments-rectCount-arraylength# @rectCount@+-- /must/ be greater than @0@+--+-- == Host Synchronization+--+-- - Host access to @commandBuffer@ /must/ be externally synchronized+--+-- - Host access to the 'Vulkan.Core10.Handles.CommandPool' that+-- @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================++-- | Primary | Inside | Graphics |+-- | Secondary | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'ClearAttachment', 'ClearRect', 'Vulkan.Core10.Handles.CommandBuffer'+cmdClearAttachments :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @pAttachments@ is a pointer to an array of 'ClearAttachment' structures+ -- defining the attachments to clear and the clear values to use. If any+ -- attachment index to be cleared is not backed by an image view, then the+ -- clear has no effect.+ ("attachments" ::: Vector ClearAttachment)+ -> -- | @pRects@ is a pointer to an array of 'ClearRect' structures defining+ -- regions within each selected attachment to clear.+ ("rects" ::: Vector ClearRect)+ -> io ()+cmdClearAttachments commandBuffer attachments rects = liftIO . evalContT $ do+ let vkCmdClearAttachmentsPtr = pVkCmdClearAttachments (deviceCmds (commandBuffer :: CommandBuffer))+ lift $ unless (vkCmdClearAttachmentsPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdClearAttachments is null" Nothing Nothing+ let vkCmdClearAttachments' = mkVkCmdClearAttachments vkCmdClearAttachmentsPtr+ pPAttachments <- ContT $ allocaBytes @ClearAttachment ((Data.Vector.length (attachments)) * 24)+ Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachments `plusPtr` (24 * (i)) :: Ptr ClearAttachment) (e) . ($ ())) (attachments)+ pPRects <- ContT $ allocaBytes @ClearRect ((Data.Vector.length (rects)) * 24)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPRects `plusPtr` (24 * (i)) :: Ptr ClearRect) (e)) (rects)+ lift $ traceAroundEvent "vkCmdClearAttachments" (vkCmdClearAttachments' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (attachments)) :: Word32)) (pPAttachments) ((fromIntegral (Data.Vector.length $ (rects)) :: Word32)) (pPRects))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdResolveImage+ :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageResolve -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageResolve -> IO ()++-- | vkCmdResolveImage - Resolve regions of an image+--+-- = Description+--+-- During the resolve the samples corresponding to each pixel location in+-- the source are converted to a single sample before being written to the+-- destination. If the source formats are floating-point or normalized+-- types, the sample values for each pixel are resolved in an+-- implementation-dependent manner. If the source formats are integer+-- types, a single sample’s value is selected for each pixel.+--+-- @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets+-- in texels of the sub-regions of the source and destination image data.+-- @extent@ is the size in texels of the source image to resolve in+-- @width@, @height@ and @depth@. Each element of @pRegions@ /must/ be a+-- region that is contained within its corresponding image.+--+-- Resolves are done layer by layer starting with @baseArrayLayer@ member+-- of @srcSubresource@ for the source and @dstSubresource@ for the+-- destination. @layerCount@ layers are resolved to the destination image.+--+-- == Valid Usage+--+-- - #VUID-vkCmdResolveImage-commandBuffer-01837# If @commandBuffer@ is+-- an unprotected command buffer, then @srcImage@ /must/ not be a+-- protected image+--+-- - #VUID-vkCmdResolveImage-commandBuffer-01838# If @commandBuffer@ is+-- an unprotected command buffer, then @dstImage@ /must/ not be a+-- protected image+--+-- - #VUID-vkCmdResolveImage-commandBuffer-01839# If @commandBuffer@ is a+-- protected command buffer, then @dstImage@ /must/ not be an+-- unprotected image+--+-- - #VUID-vkCmdResolveImage-pRegions-00255# The union of all source+-- regions, and the union of all destination regions, specified by the+-- elements of @pRegions@, /must/ not overlap in memory+--+-- - #VUID-vkCmdResolveImage-srcImage-00256# If @srcImage@ is non-sparse+-- then it /must/ be bound completely and contiguously to a single+-- 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- - #VUID-vkCmdResolveImage-srcImage-00257# @srcImage@ /must/ have a+-- sample count equal to any valid sample count value other than+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'+--+-- - #VUID-vkCmdResolveImage-dstImage-00258# If @dstImage@ is non-sparse+-- then it /must/ be bound completely and contiguously to a single+-- 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- - #VUID-vkCmdResolveImage-dstImage-00259# @dstImage@ /must/ have a+-- sample count equal to+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'+--+-- - #VUID-vkCmdResolveImage-srcImageLayout-00260# @srcImageLayout@+-- /must/ specify the layout of the image subresources of @srcImage@+-- specified in @pRegions@ at the time this command is executed on a+-- 'Vulkan.Core10.Handles.Device'+--+-- - #VUID-vkCmdResolveImage-srcImageLayout-01400# @srcImageLayout@+-- /must/ be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'+-- or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'+--+-- - #VUID-vkCmdResolveImage-dstImageLayout-00262# @dstImageLayout@+-- /must/ specify the layout of the image subresources of @dstImage@+-- specified in @pRegions@ at the time this command is executed on a+-- 'Vulkan.Core10.Handles.Device'+--+-- - #VUID-vkCmdResolveImage-dstImageLayout-01401# @dstImageLayout@+-- /must/ be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'+-- or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'+--+-- - #VUID-vkCmdResolveImage-dstImage-02003# The+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+-- of @dstImage@ /must/ contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'+--+-- - #VUID-vkCmdResolveImage-srcImage-01386# @srcImage@ and @dstImage@+-- /must/ have been created with the same image format+--+-- - #VUID-vkCmdResolveImage-srcSubresource-01709# The+-- @srcSubresource.mipLevel@ member of each element of @pRegions@+-- /must/ be less than the @mipLevels@ specified in+-- 'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created+--+-- - #VUID-vkCmdResolveImage-dstSubresource-01710# The+-- @dstSubresource.mipLevel@ member of each element of @pRegions@+-- /must/ be less than the @mipLevels@ specified in+-- 'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created+--+-- - #VUID-vkCmdResolveImage-srcSubresource-01711# The+-- @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of+-- each element of @pRegions@ /must/ be less than or equal to the+-- @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+-- when @srcImage@ was created+--+-- - #VUID-vkCmdResolveImage-dstSubresource-01712# The+-- @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of+-- each element of @pRegions@ /must/ be less than or equal to the+-- @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+-- when @dstImage@ was created+--+-- - #VUID-vkCmdResolveImage-dstImage-02546# @dstImage@ and @srcImage@+-- /must/ not have been created with @flags@ containing+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'+--+-- - #VUID-vkCmdResolveImage-srcImage-04446# If either @srcImage@ or+-- @dstImage@ are of type+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element+-- of @pRegions@, @srcSubresource.baseArrayLayer@ /must/ be @0@ and+-- @srcSubresource.layerCount@ /must/ be @1@+--+-- - #VUID-vkCmdResolveImage-srcImage-04447# If either @srcImage@ or+-- @dstImage@ are of type+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element+-- of @pRegions@, @dstSubresource.baseArrayLayer@ /must/ be @0@ and+-- @dstSubresource.layerCount@ /must/ be @1@+--+-- - #VUID-vkCmdResolveImage-srcOffset-00269# For each element of+-- @pRegions@, @srcOffset.x@ and (@extent.width@ + @srcOffset.x@)+-- /must/ both be greater than or equal to @0@ and less than or equal+-- to the width of the specified @srcSubresource@ of @srcImage@+--+-- - #VUID-vkCmdResolveImage-srcOffset-00270# For each element of+-- @pRegions@, @srcOffset.y@ and (@extent.height@ + @srcOffset.y@)+-- /must/ both be greater than or equal to @0@ and less than or equal+-- to the height of the specified @srcSubresource@ of @srcImage@+--+-- - #VUID-vkCmdResolveImage-srcImage-00271# If @srcImage@ is of type+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+-- of @pRegions@, @srcOffset.y@ /must/ be @0@ and @extent.height@+-- /must/ be @1@+--+-- - #VUID-vkCmdResolveImage-srcOffset-00272# For each element of+-- @pRegions@, @srcOffset.z@ and (@extent.depth@ + @srcOffset.z@)+-- /must/ both be greater than or equal to @0@ and less than or equal+-- to the depth of the specified @srcSubresource@ of @srcImage@+--+-- - #VUID-vkCmdResolveImage-srcImage-00273# If @srcImage@ is of type+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+-- of @pRegions@, @srcOffset.z@ /must/ be @0@ and @extent.depth@ /must/+-- be @1@+--+-- - #VUID-vkCmdResolveImage-dstOffset-00274# For each element of+-- @pRegions@, @dstOffset.x@ and (@extent.width@ + @dstOffset.x@)+-- /must/ both be greater than or equal to @0@ and less than or equal+-- to the width of the specified @dstSubresource@ of @dstImage@+--+-- - #VUID-vkCmdResolveImage-dstOffset-00275# For each element of+-- @pRegions@, @dstOffset.y@ and (@extent.height@ + @dstOffset.y@)+-- /must/ both be greater than or equal to @0@ and less than or equal+-- to the height of the specified @dstSubresource@ of @dstImage@+--+-- - #VUID-vkCmdResolveImage-dstImage-00276# If @dstImage@ is of type+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+-- of @pRegions@, @dstOffset.y@ /must/ be @0@ and @extent.height@+-- /must/ be @1@+--+-- - #VUID-vkCmdResolveImage-dstOffset-00277# For each element of+-- @pRegions@, @dstOffset.z@ and (@extent.depth@ + @dstOffset.z@)+-- /must/ both be greater than or equal to @0@ and less than or equal+-- to the depth of the specified @dstSubresource@ of @dstImage@+--+-- - #VUID-vkCmdResolveImage-dstImage-00278# If @dstImage@ is of type+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+-- of @pRegions@, @dstOffset.z@ /must/ be @0@ and @extent.depth@ /must/+-- be @1@+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdResolveImage-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdResolveImage-srcImage-parameter# @srcImage@ /must/ be a+-- valid 'Vulkan.Core10.Handles.Image' handle+--+-- - #VUID-vkCmdResolveImage-srcImageLayout-parameter# @srcImageLayout@+-- /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+-- value+--+-- - #VUID-vkCmdResolveImage-dstImage-parameter# @dstImage@ /must/ be a+-- valid 'Vulkan.Core10.Handles.Image' handle+--+-- - #VUID-vkCmdResolveImage-dstImageLayout-parameter# @dstImageLayout@+-- /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+-- value+--+-- - #VUID-vkCmdResolveImage-pRegions-parameter# @pRegions@ /must/ be a+-- valid pointer to an array of @regionCount@ valid 'ImageResolve'+-- structures+--+-- - #VUID-vkCmdResolveImage-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-vkCmdResolveImage-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics operations+--+-- - #VUID-vkCmdResolveImage-renderpass# This command /must/ only be+-- called outside of a render pass instance+--+-- - #VUID-vkCmdResolveImage-regionCount-arraylength# @regionCount@+-- /must/ be greater than @0@+--+-- - #VUID-vkCmdResolveImage-commonparent# Each of @commandBuffer@,+-- @dstImage@, and @srcImage@ /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 | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout', 'ImageResolve'+cmdResolveImage :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @srcImage@ is the source image.+ ("srcImage" ::: Image)+ -> -- | @srcImageLayout@ is the layout of the source image subresources for the+ -- resolve.+ ("srcImageLayout" ::: ImageLayout)+ -> -- | @dstImage@ is the destination image.+ ("dstImage" ::: Image)+ -> -- | @dstImageLayout@ is the layout of the destination image subresources for+ -- the resolve.+ ("dstImageLayout" ::: ImageLayout)+ -> -- | @pRegions@ is a pointer to an array of 'ImageResolve' structures+ -- specifying the regions to resolve.+ ("regions" ::: Vector ImageResolve)+ -> io ()+cmdResolveImage commandBuffer srcImage srcImageLayout dstImage dstImageLayout regions = liftIO . evalContT $ do+ let vkCmdResolveImagePtr = pVkCmdResolveImage (deviceCmds (commandBuffer :: CommandBuffer))+ lift $ unless (vkCmdResolveImagePtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdResolveImage is null" Nothing Nothing+ let vkCmdResolveImage' = mkVkCmdResolveImage vkCmdResolveImagePtr+ pPRegions <- ContT $ allocaBytes @ImageResolve ((Data.Vector.length (regions)) * 68)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPRegions `plusPtr` (68 * (i)) :: Ptr ImageResolve) (e)) (regions)+ lift $ traceAroundEvent "vkCmdResolveImage" (vkCmdResolveImage' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdSetEvent+ :: FunPtr (Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()) -> Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()++-- | vkCmdSetEvent - Set an event object to signaled state+--+-- = Description+--+-- 'cmdSetEvent' behaves identically to+-- 'Vulkan.Extensions.VK_KHR_synchronization2.cmdSetEvent2KHR', except that+-- it does not define an access scope, and /must/ only be used with+-- 'cmdWaitEvents', not+-- 'Vulkan.Extensions.VK_KHR_synchronization2.cmdWaitEvents2KHR'.+--+-- == Valid Usage+--+-- - #VUID-vkCmdSetEvent-stageMask-04090# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'+--+-- - #VUID-vkCmdSetEvent-stageMask-04091# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'+-- or+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'+--+-- - #VUID-vkCmdSetEvent-stageMask-04092# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'+--+-- - #VUID-vkCmdSetEvent-stageMask-04093# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'+--+-- - #VUID-vkCmdSetEvent-stageMask-04094# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'+--+-- - #VUID-vkCmdSetEvent-stageMask-04095# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'+--+-- - #VUID-vkCmdSetEvent-stageMask-04096# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'+--+-- - #VUID-vkCmdSetEvent-stageMask-04097# 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+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'+--+-- - #VUID-vkCmdSetEvent-stageMask-04098# Any pipeline stage included in+-- @stageMask@ /must/ be supported by the capabilities of the queue+-- family specified by the @queueFamilyIndex@ member of the+-- 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that was+-- used to create the 'Vulkan.Core10.Handles.CommandPool' that+-- @commandBuffer@ was allocated from, as specified in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>+--+-- - #VUID-vkCmdSetEvent-stageMask-03937# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>+-- feature is not enabled, @stageMask@ /must/ not be @0@+--+-- - #VUID-vkCmdSetEvent-stageMask-01149# @stageMask@ /must/ not include+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'+--+-- - #VUID-vkCmdSetEvent-commandBuffer-01152# @commandBuffer@’s current+-- device mask /must/ include exactly one physical device+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdSetEvent-commandBuffer-parameter# @commandBuffer@ /must/+-- be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdSetEvent-event-parameter# @event@ /must/ be a valid+-- 'Vulkan.Core10.Handles.Event' handle+--+-- - #VUID-vkCmdSetEvent-stageMask-parameter# @stageMask@ /must/ be a+-- valid combination of+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+-- values+--+-- - #VUID-vkCmdSetEvent-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-vkCmdSetEvent-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics, or compute operations+--+-- - #VUID-vkCmdSetEvent-renderpass# This command /must/ only be called+-- outside of a render pass instance+--+-- - #VUID-vkCmdSetEvent-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_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Event',+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'+cmdSetEvent :: 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+ -> -- | @stageMask@ specifies the+ -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>+ -- used to determine the first+ -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>.+ ("stageMask" ::: PipelineStageFlags)+ -> io ()+cmdSetEvent commandBuffer event stageMask = liftIO $ do+ let vkCmdSetEventPtr = pVkCmdSetEvent (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdSetEventPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetEvent is null" Nothing Nothing+ let vkCmdSetEvent' = mkVkCmdSetEvent vkCmdSetEventPtr+ traceAroundEvent "vkCmdSetEvent" (vkCmdSetEvent' (commandBufferHandle (commandBuffer)) (event) (stageMask))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdResetEvent+ :: FunPtr (Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()) -> Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()++-- | vkCmdResetEvent - Reset an event object to non-signaled state+--+-- = Description+--+-- 'cmdResetEvent' behaves identically to+-- 'Vulkan.Extensions.VK_KHR_synchronization2.cmdResetEvent2KHR'.+--+-- == Valid Usage+--+-- - #VUID-vkCmdResetEvent-stageMask-04090# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'+--+-- - #VUID-vkCmdResetEvent-stageMask-04091# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'+-- or+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'+--+-- - #VUID-vkCmdResetEvent-stageMask-04092# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'+--+-- - #VUID-vkCmdResetEvent-stageMask-04093# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'+--+-- - #VUID-vkCmdResetEvent-stageMask-04094# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'+--+-- - #VUID-vkCmdResetEvent-stageMask-04095# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'+--+-- - #VUID-vkCmdResetEvent-stageMask-04096# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'+--+-- - #VUID-vkCmdResetEvent-stageMask-04097# 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+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'+--+-- - #VUID-vkCmdResetEvent-stageMask-04098# Any pipeline stage included+-- in @stageMask@ /must/ be supported by the capabilities of the queue+-- family specified by the @queueFamilyIndex@ member of the+-- 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that was+-- used to create the 'Vulkan.Core10.Handles.CommandPool' that+-- @commandBuffer@ was allocated from, as specified in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>+--+-- - #VUID-vkCmdResetEvent-stageMask-03937# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>+-- feature is not enabled, @stageMask@ /must/ not be @0@+--+-- - #VUID-vkCmdResetEvent-stageMask-01153# @stageMask@ /must/ not+-- include+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'+--+-- - #VUID-vkCmdResetEvent-event-03834# There /must/ be an execution+-- dependency between 'cmdResetEvent' and the execution of any+-- 'cmdWaitEvents' that includes @event@ in its @pEvents@ parameter+--+-- - #VUID-vkCmdResetEvent-event-03835# There /must/ be an execution+-- dependency between 'cmdResetEvent' and the execution of any+-- 'Vulkan.Extensions.VK_KHR_synchronization2.cmdWaitEvents2KHR' that+-- includes @event@ in its @pEvents@ parameter+--+-- - #VUID-vkCmdResetEvent-commandBuffer-01157# @commandBuffer@’s current+-- device mask /must/ include exactly one physical device+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdResetEvent-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdResetEvent-event-parameter# @event@ /must/ be a valid+-- 'Vulkan.Core10.Handles.Event' handle+--+-- - #VUID-vkCmdResetEvent-stageMask-parameter# @stageMask@ /must/ be a+-- valid combination of+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+-- values+--+-- - #VUID-vkCmdResetEvent-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-vkCmdResetEvent-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics, or compute operations+--+-- - #VUID-vkCmdResetEvent-renderpass# This command /must/ only be called+-- outside of a render pass instance+--+-- - #VUID-vkCmdResetEvent-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_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Event',+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'+cmdResetEvent :: 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 bitmask of+ -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+ -- specifying the+ -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>+ -- used to determine when the @event@ is unsignaled.+ ("stageMask" ::: PipelineStageFlags)+ -> io ()+cmdResetEvent commandBuffer event stageMask = liftIO $ do+ let vkCmdResetEventPtr = pVkCmdResetEvent (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdResetEventPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdResetEvent is null" Nothing Nothing+ let vkCmdResetEvent' = mkVkCmdResetEvent vkCmdResetEventPtr+ traceAroundEvent "vkCmdResetEvent" (vkCmdResetEvent' (commandBufferHandle (commandBuffer)) (event) (stageMask))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdWaitEventsUnsafe+ :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()++foreign import ccall+ "dynamic" mkVkCmdWaitEventsSafe+ :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()++-- | cmdWaitEvents with selectable safeness+cmdWaitEventsSafeOrUnsafe :: forall io+ . (MonadIO io)+ => (FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ())+ -> -- | @commandBuffer@ is the command buffer into which the command is+ -- recorded.+ CommandBuffer+ -> -- | @pEvents@ is a pointer to an array of event object handles to wait on.+ ("events" ::: Vector Event)+ -> -- | @srcStageMask@ is a bitmask of+ -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+ -- specifying the+ -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>.+ ("srcStageMask" ::: PipelineStageFlags)+ -> -- | @dstStageMask@ is a bitmask of+ -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+ -- specifying the+ -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages destination stage mask>.+ ("dstStageMask" ::: PipelineStageFlags)+ -> -- | @pMemoryBarriers@ is a pointer to an array of+ -- 'Vulkan.Core10.OtherTypes.MemoryBarrier' structures.+ ("memoryBarriers" ::: Vector MemoryBarrier)+ -> -- | @pBufferMemoryBarriers@ is a pointer to an array of+ -- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures.+ ("bufferMemoryBarriers" ::: Vector BufferMemoryBarrier)+ -> -- | @pImageMemoryBarriers@ is a pointer to an array of+ -- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures.+ ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier))+ -> io ()+cmdWaitEventsSafeOrUnsafe mkVkCmdWaitEvents commandBuffer events srcStageMask dstStageMask memoryBarriers bufferMemoryBarriers imageMemoryBarriers = liftIO . evalContT $ do+ let vkCmdWaitEventsPtr = pVkCmdWaitEvents (deviceCmds (commandBuffer :: CommandBuffer))+ lift $ unless (vkCmdWaitEventsPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdWaitEvents is null" Nothing Nothing+ let vkCmdWaitEvents' = mkVkCmdWaitEvents vkCmdWaitEventsPtr+ pPEvents <- ContT $ allocaBytes @Event ((Data.Vector.length (events)) * 8)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPEvents `plusPtr` (8 * (i)) :: Ptr Event) (e)) (events)+ pPMemoryBarriers <- ContT $ allocaBytes @MemoryBarrier ((Data.Vector.length (memoryBarriers)) * 24)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPMemoryBarriers `plusPtr` (24 * (i)) :: Ptr MemoryBarrier) (e)) (memoryBarriers)+ pPBufferMemoryBarriers <- ContT $ allocaBytes @BufferMemoryBarrier ((Data.Vector.length (bufferMemoryBarriers)) * 56)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPBufferMemoryBarriers `plusPtr` (56 * (i)) :: Ptr BufferMemoryBarrier) (e)) (bufferMemoryBarriers)+ pPImageMemoryBarriers <- ContT $ allocaBytes @(ImageMemoryBarrier _) ((Data.Vector.length (imageMemoryBarriers)) * 72)+ Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPImageMemoryBarriers `plusPtr` (72 * (i)) :: Ptr (ImageMemoryBarrier _))) (e) . ($ ())) (imageMemoryBarriers)+ lift $ traceAroundEvent "vkCmdWaitEvents" (vkCmdWaitEvents' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (events)) :: Word32)) (pPEvents) (srcStageMask) (dstStageMask) ((fromIntegral (Data.Vector.length $ (memoryBarriers)) :: Word32)) (pPMemoryBarriers) ((fromIntegral (Data.Vector.length $ (bufferMemoryBarriers)) :: Word32)) (pPBufferMemoryBarriers) ((fromIntegral (Data.Vector.length $ (imageMemoryBarriers)) :: Word32)) (forgetExtensions (pPImageMemoryBarriers)))+ pure $ ()++-- | vkCmdWaitEvents - Wait for one or more events and insert a set of memory+--+-- = Description+--+-- 'cmdWaitEvents' is largely similar to+-- 'Vulkan.Extensions.VK_KHR_synchronization2.cmdWaitEvents2KHR', but /can/+-- only wait on signal operations defined by 'cmdSetEvent'. As+-- 'cmdSetEvent' does not define any access scopes, 'cmdWaitEvents' defines+-- the first access scope for each event signal operation in addition to+-- its own access scopes.+--+-- Note+--+-- Since 'cmdSetEvent' does not have any dependency information beyond a+-- stage mask, implementations do not have the same opportunity to perform+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-available-and-visible availability and visibility operations>+-- or+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transitions>+-- in advance as they do with+-- 'Vulkan.Extensions.VK_KHR_synchronization2.cmdSetEvent2KHR' and+-- 'Vulkan.Extensions.VK_KHR_synchronization2.cmdWaitEvents2KHR'.+--+-- When 'cmdWaitEvents' is submitted to a queue, it defines a memory+-- dependency between prior event signal operations on the same queue or+-- the host, and subsequent commands. 'cmdWaitEvents' /must/ not be used to+-- wait on event signal operations occurring on other queues.+--+-- The first synchronization scope only includes event signal operations+-- that operate on members of @pEvents@, and the operations that+-- happened-before the event signal operations. Event signal operations+-- performed by 'cmdSetEvent' that occur earlier in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>+-- are included in the first synchronization scope, if the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically latest>+-- pipeline stage in their @stageMask@ parameter is+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically earlier>+-- than or equal to the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically latest>+-- pipeline stage in @srcStageMask@. Event signal operations performed by+-- 'Vulkan.Core10.Event.setEvent' are only included in the first+-- synchronization scope if+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT' is+-- included in @srcStageMask@.+--+-- The second+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>+-- includes all commands that occur later in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.+-- The second synchronization scope is limited to operations on the+-- pipeline stages determined by the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>+-- specified by @dstStageMask@.+--+-- The first+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>+-- is limited to accesses in the pipeline stages determined by the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>+-- specified by @srcStageMask@. Within that, the first access scope only+-- includes the first access scopes defined by elements of the+-- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@+-- arrays, which each define a set of+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.+-- If no memory barriers are specified, then the first access scope+-- includes no accesses.+--+-- The second+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>+-- is limited to accesses in the pipeline stages determined by the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>+-- specified by @dstStageMask@. Within that, the second access scope only+-- includes the second access scopes defined by elements of the+-- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@+-- arrays, which each define a set of+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.+-- If no memory barriers are specified, then the second access scope+-- includes no accesses.+--+-- == Valid Usage+--+-- - #VUID-vkCmdWaitEvents-srcStageMask-04090# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'+--+-- - #VUID-vkCmdWaitEvents-srcStageMask-04091# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'+-- or+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'+--+-- - #VUID-vkCmdWaitEvents-srcStageMask-04092# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'+--+-- - #VUID-vkCmdWaitEvents-srcStageMask-04093# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'+--+-- - #VUID-vkCmdWaitEvents-srcStageMask-04094# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'+--+-- - #VUID-vkCmdWaitEvents-srcStageMask-04095# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'+--+-- - #VUID-vkCmdWaitEvents-srcStageMask-04096# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'+--+-- - #VUID-vkCmdWaitEvents-srcStageMask-04097# 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+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'+--+-- - #VUID-vkCmdWaitEvents-srcStageMask-04098# Any pipeline stage+-- included in @srcStageMask@ /must/ be supported by the capabilities+-- of the queue family specified by the @queueFamilyIndex@ member of+-- the 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that+-- was used to create the 'Vulkan.Core10.Handles.CommandPool' that+-- @commandBuffer@ was allocated from, as specified in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>+--+-- - #VUID-vkCmdWaitEvents-srcStageMask-03937# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>+-- feature is not enabled, @srcStageMask@ /must/ not be @0@+--+-- - #VUID-vkCmdWaitEvents-dstStageMask-04090# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'+--+-- - #VUID-vkCmdWaitEvents-dstStageMask-04091# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'+-- or+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'+--+-- - #VUID-vkCmdWaitEvents-dstStageMask-04092# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'+--+-- - #VUID-vkCmdWaitEvents-dstStageMask-04093# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'+--+-- - #VUID-vkCmdWaitEvents-dstStageMask-04094# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'+--+-- - #VUID-vkCmdWaitEvents-dstStageMask-04095# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'+--+-- - #VUID-vkCmdWaitEvents-dstStageMask-04096# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'+--+-- - #VUID-vkCmdWaitEvents-dstStageMask-04097# 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+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'+--+-- - #VUID-vkCmdWaitEvents-dstStageMask-04098# Any pipeline stage+-- included in @dstStageMask@ /must/ be supported by the capabilities+-- of the queue family specified by the @queueFamilyIndex@ member of+-- the 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that+-- was used to create the 'Vulkan.Core10.Handles.CommandPool' that+-- @commandBuffer@ was allocated from, as specified in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>+--+-- - #VUID-vkCmdWaitEvents-dstStageMask-03937# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>+-- feature is not enabled, @dstStageMask@ /must/ not be @0@+--+-- - #VUID-vkCmdWaitEvents-srcAccessMask-02815# The @srcAccessMask@+-- member of each element of @pMemoryBarriers@ /must/ only include+-- access flags that are supported by one or more of the pipeline+-- stages in @srcStageMask@, as specified in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- - #VUID-vkCmdWaitEvents-dstAccessMask-02816# The @dstAccessMask@+-- member of each element of @pMemoryBarriers@ /must/ only include+-- access flags that are supported by one or more of the pipeline+-- stages in @dstStageMask@, as specified in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- - #VUID-vkCmdWaitEvents-pBufferMemoryBarriers-02817# For any element+-- of @pBufferMemoryBarriers@, if its @srcQueueFamilyIndex@ and+-- @dstQueueFamilyIndex@ members are equal, or if its+-- @srcQueueFamilyIndex@ is the queue family index that was used to+-- create the command pool that @commandBuffer@ was allocated from,+-- then its @srcAccessMask@ member /must/ only contain access flags+-- that are supported by one or more of the pipeline stages in+-- @srcStageMask@, as specified in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- - #VUID-vkCmdWaitEvents-pBufferMemoryBarriers-02818# For any element+-- of @pBufferMemoryBarriers@, if its @srcQueueFamilyIndex@ and+-- @dstQueueFamilyIndex@ members are equal, or if its+-- @dstQueueFamilyIndex@ is the queue family index that was used to+-- create the command pool that @commandBuffer@ was allocated from,+-- then its @dstAccessMask@ member /must/ only contain access flags+-- that are supported by one or more of the pipeline stages in+-- @dstStageMask@, as specified in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- - #VUID-vkCmdWaitEvents-pImageMemoryBarriers-02819# For any element of+-- @pImageMemoryBarriers@, if its @srcQueueFamilyIndex@ and+-- @dstQueueFamilyIndex@ members are equal, or if its+-- @srcQueueFamilyIndex@ is the queue family index that was used to+-- create the command pool that @commandBuffer@ was allocated from,+-- then its @srcAccessMask@ member /must/ only contain access flags+-- that are supported by one or more of the pipeline stages in+-- @srcStageMask@, as specified in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- - #VUID-vkCmdWaitEvents-pImageMemoryBarriers-02820# For any element of+-- @pImageMemoryBarriers@, if its @srcQueueFamilyIndex@ and+-- @dstQueueFamilyIndex@ members are equal, or if its+-- @dstQueueFamilyIndex@ is the queue family index that was used to+-- create the command pool that @commandBuffer@ was allocated from,+-- then its @dstAccessMask@ member /must/ only contain access flags+-- that are supported by one or more of the pipeline stages in+-- @dstStageMask@, as specified in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- - #VUID-vkCmdWaitEvents-srcStageMask-01158# @srcStageMask@ /must/ be+-- the bitwise OR of the @stageMask@ parameter used in previous calls+-- to 'cmdSetEvent' with any of the elements of @pEvents@ and+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'+-- if any of the elements of @pEvents@ was set using+-- 'Vulkan.Core10.Event.setEvent'+--+-- - #VUID-vkCmdWaitEvents-pEvents-01163# 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+-- 'cmdWaitEvents' /must/ not be called inside a render pass instance+--+-- - #VUID-vkCmdWaitEvents-srcQueueFamilyIndex-02803# The+-- @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members of any+-- element of @pBufferMemoryBarriers@ or @pImageMemoryBarriers@ /must/+-- be equal+--+-- - #VUID-vkCmdWaitEvents-commandBuffer-01167# @commandBuffer@’s current+-- device mask /must/ include exactly one physical device+--+-- - #VUID-vkCmdWaitEvents-pEvents-03847# Elements of @pEvents@ /must/+-- not have been signaled by+-- 'Vulkan.Extensions.VK_KHR_synchronization2.cmdSetEvent2KHR'+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdWaitEvents-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdWaitEvents-pEvents-parameter# @pEvents@ /must/ be a valid+-- pointer to an array of @eventCount@ valid+-- 'Vulkan.Core10.Handles.Event' handles+--+-- - #VUID-vkCmdWaitEvents-srcStageMask-parameter# @srcStageMask@ /must/+-- be a valid combination of+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+-- values+--+-- - #VUID-vkCmdWaitEvents-dstStageMask-parameter# @dstStageMask@ /must/+-- be a valid combination of+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+-- values+--+-- - #VUID-vkCmdWaitEvents-pMemoryBarriers-parameter# If+-- @memoryBarrierCount@ is not @0@, @pMemoryBarriers@ /must/ be a valid+-- pointer to an array of @memoryBarrierCount@ valid+-- 'Vulkan.Core10.OtherTypes.MemoryBarrier' structures+--+-- - #VUID-vkCmdWaitEvents-pBufferMemoryBarriers-parameter# If+-- @bufferMemoryBarrierCount@ is not @0@, @pBufferMemoryBarriers@+-- /must/ be a valid pointer to an array of @bufferMemoryBarrierCount@+-- valid 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures+--+-- - #VUID-vkCmdWaitEvents-pImageMemoryBarriers-parameter# If+-- @imageMemoryBarrierCount@ is not @0@, @pImageMemoryBarriers@ /must/+-- be a valid pointer to an array of @imageMemoryBarrierCount@ valid+-- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures+--+-- - #VUID-vkCmdWaitEvents-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-vkCmdWaitEvents-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics, or compute operations+--+-- - #VUID-vkCmdWaitEvents-eventCount-arraylength# @eventCount@ /must/ be+-- greater than @0@+--+-- - #VUID-vkCmdWaitEvents-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_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier',+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Event',+-- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier',+-- 'Vulkan.Core10.OtherTypes.MemoryBarrier',+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'+cmdWaitEvents :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command is+ -- recorded.+ CommandBuffer+ -> -- | @pEvents@ is a pointer to an array of event object handles to wait on.+ ("events" ::: Vector Event)+ -> -- | @srcStageMask@ is a bitmask of+ -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+ -- specifying the+ -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>.+ ("srcStageMask" ::: PipelineStageFlags)+ -> -- | @dstStageMask@ is a bitmask of+ -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+ -- specifying the+ -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages destination stage mask>.+ ("dstStageMask" ::: PipelineStageFlags)+ -> -- | @pMemoryBarriers@ is a pointer to an array of+ -- 'Vulkan.Core10.OtherTypes.MemoryBarrier' structures.+ ("memoryBarriers" ::: Vector MemoryBarrier)+ -> -- | @pBufferMemoryBarriers@ is a pointer to an array of+ -- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures.+ ("bufferMemoryBarriers" ::: Vector BufferMemoryBarrier)+ -> -- | @pImageMemoryBarriers@ is a pointer to an array of+ -- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures.+ ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier))+ -> io ()+cmdWaitEvents = cmdWaitEventsSafeOrUnsafe mkVkCmdWaitEventsUnsafe++-- | A variant of 'cmdWaitEvents' which makes a *safe* FFI call+cmdWaitEventsSafe :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command is+ -- recorded.+ CommandBuffer+ -> -- | @pEvents@ is a pointer to an array of event object handles to wait on.+ ("events" ::: Vector Event)+ -> -- | @srcStageMask@ is a bitmask of+ -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+ -- specifying the+ -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>.+ ("srcStageMask" ::: PipelineStageFlags)+ -> -- | @dstStageMask@ is a bitmask of+ -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+ -- specifying the+ -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages destination stage mask>.+ ("dstStageMask" ::: PipelineStageFlags)+ -> -- | @pMemoryBarriers@ is a pointer to an array of+ -- 'Vulkan.Core10.OtherTypes.MemoryBarrier' structures.+ ("memoryBarriers" ::: Vector MemoryBarrier)+ -> -- | @pBufferMemoryBarriers@ is a pointer to an array of+ -- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures.+ ("bufferMemoryBarriers" ::: Vector BufferMemoryBarrier)+ -> -- | @pImageMemoryBarriers@ is a pointer to an array of+ -- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures.+ ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier))+ -> io ()+cmdWaitEventsSafe = cmdWaitEventsSafeOrUnsafe mkVkCmdWaitEventsSafe+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdPipelineBarrier+ :: FunPtr (Ptr CommandBuffer_T -> PipelineStageFlags -> PipelineStageFlags -> DependencyFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()) -> Ptr CommandBuffer_T -> PipelineStageFlags -> PipelineStageFlags -> DependencyFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()++-- | vkCmdPipelineBarrier - Insert a memory dependency+--+-- = Description+--+-- 'cmdPipelineBarrier' operates almost identically to+-- 'Vulkan.Extensions.VK_KHR_synchronization2.cmdPipelineBarrier2KHR',+-- except that the scopes and barriers are defined as direct parameters+-- rather than being defined by an+-- 'Vulkan.Extensions.VK_KHR_synchronization2.DependencyInfoKHR'.+--+-- When 'cmdPipelineBarrier' is submitted to a queue, it defines a memory+-- dependency between commands that were submitted before it, and those+-- submitted after it.+--+-- If 'cmdPipelineBarrier' was recorded outside a render pass instance, 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>.+-- If 'cmdPipelineBarrier' was recorded inside a render pass instance, the+-- first synchronization scope includes only commands that occur earlier in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>+-- within the same subpass. In either case, the first synchronization scope+-- is limited to operations on the pipeline stages determined by the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>+-- specified by @srcStageMask@.+--+-- If 'cmdPipelineBarrier' was recorded outside a render pass instance, the+-- second+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>+-- includes all commands that occur later in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.+-- If 'cmdPipelineBarrier' was recorded inside a render pass instance, the+-- second synchronization scope includes only commands that occur later in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>+-- within the same subpass. In either case, the second synchronization+-- scope is limited to operations on the pipeline stages determined by the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>+-- specified by @dstStageMask@.+--+-- The first+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>+-- is limited to accesses in the pipeline stages determined by the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>+-- specified by @srcStageMask@. Within that, the first access scope only+-- includes the first access scopes defined by elements of the+-- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@+-- arrays, which each define a set of+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.+-- If no memory barriers are specified, then the first access scope+-- includes no accesses.+--+-- The second+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>+-- is limited to accesses in the pipeline stages determined by the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>+-- specified by @dstStageMask@. Within that, the second access scope only+-- includes the second access scopes defined by elements of the+-- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@+-- arrays, which each define a set of+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.+-- If no memory barriers are specified, then the second access scope+-- includes no accesses.+--+-- If @dependencyFlags@ includes+-- 'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_BY_REGION_BIT', then+-- any dependency between+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-space>+-- pipeline stages is+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-local>+-- - otherwise it is+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-global>.+--+-- == Valid Usage+--+-- - #VUID-vkCmdPipelineBarrier-srcStageMask-04090# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'+--+-- - #VUID-vkCmdPipelineBarrier-srcStageMask-04091# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'+-- or+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'+--+-- - #VUID-vkCmdPipelineBarrier-srcStageMask-04092# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'+--+-- - #VUID-vkCmdPipelineBarrier-srcStageMask-04093# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'+--+-- - #VUID-vkCmdPipelineBarrier-srcStageMask-04094# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'+--+-- - #VUID-vkCmdPipelineBarrier-srcStageMask-04095# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'+--+-- - #VUID-vkCmdPipelineBarrier-srcStageMask-04096# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'+--+-- - #VUID-vkCmdPipelineBarrier-srcStageMask-04097# 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+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'+--+-- - #VUID-vkCmdPipelineBarrier-srcStageMask-04098# Any pipeline stage+-- included in @srcStageMask@ /must/ be supported by the capabilities+-- of the queue family specified by the @queueFamilyIndex@ member of+-- the 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that+-- was used to create the 'Vulkan.Core10.Handles.CommandPool' that+-- @commandBuffer@ was allocated from, as specified in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>+--+-- - #VUID-vkCmdPipelineBarrier-srcStageMask-03937# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>+-- feature is not enabled, @srcStageMask@ /must/ not be @0@+--+-- - #VUID-vkCmdPipelineBarrier-dstStageMask-04090# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'+--+-- - #VUID-vkCmdPipelineBarrier-dstStageMask-04091# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'+-- or+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'+--+-- - #VUID-vkCmdPipelineBarrier-dstStageMask-04092# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'+--+-- - #VUID-vkCmdPipelineBarrier-dstStageMask-04093# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'+--+-- - #VUID-vkCmdPipelineBarrier-dstStageMask-04094# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'+--+-- - #VUID-vkCmdPipelineBarrier-dstStageMask-04095# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'+--+-- - #VUID-vkCmdPipelineBarrier-dstStageMask-04096# 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+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'+--+-- - #VUID-vkCmdPipelineBarrier-dstStageMask-04097# 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+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'+--+-- - #VUID-vkCmdPipelineBarrier-dstStageMask-04098# Any pipeline stage+-- included in @dstStageMask@ /must/ be supported by the capabilities+-- of the queue family specified by the @queueFamilyIndex@ member of+-- the 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that+-- was used to create the 'Vulkan.Core10.Handles.CommandPool' that+-- @commandBuffer@ was allocated from, as specified in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>+--+-- - #VUID-vkCmdPipelineBarrier-dstStageMask-03937# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-synchronization2 synchronization2>+-- feature is not enabled, @dstStageMask@ /must/ not be @0@+--+-- - #VUID-vkCmdPipelineBarrier-srcAccessMask-02815# The @srcAccessMask@+-- member of each element of @pMemoryBarriers@ /must/ only include+-- access flags that are supported by one or more of the pipeline+-- stages in @srcStageMask@, as specified in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- - #VUID-vkCmdPipelineBarrier-dstAccessMask-02816# The @dstAccessMask@+-- member of each element of @pMemoryBarriers@ /must/ only include+-- access flags that are supported by one or more of the pipeline+-- stages in @dstStageMask@, as specified in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- - #VUID-vkCmdPipelineBarrier-pBufferMemoryBarriers-02817# For any+-- element of @pBufferMemoryBarriers@, if its @srcQueueFamilyIndex@ and+-- @dstQueueFamilyIndex@ members are equal, or if its+-- @srcQueueFamilyIndex@ is the queue family index that was used to+-- create the command pool that @commandBuffer@ was allocated from,+-- then its @srcAccessMask@ member /must/ only contain access flags+-- that are supported by one or more of the pipeline stages in+-- @srcStageMask@, as specified in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- - #VUID-vkCmdPipelineBarrier-pBufferMemoryBarriers-02818# For any+-- element of @pBufferMemoryBarriers@, if its @srcQueueFamilyIndex@ and+-- @dstQueueFamilyIndex@ members are equal, or if its+-- @dstQueueFamilyIndex@ is the queue family index that was used to+-- create the command pool that @commandBuffer@ was allocated from,+-- then its @dstAccessMask@ member /must/ only contain access flags+-- that are supported by one or more of the pipeline stages in+-- @dstStageMask@, as specified in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- - #VUID-vkCmdPipelineBarrier-pImageMemoryBarriers-02819# For any+-- element of @pImageMemoryBarriers@, if its @srcQueueFamilyIndex@ and+-- @dstQueueFamilyIndex@ members are equal, or if its+-- @srcQueueFamilyIndex@ is the queue family index that was used to+-- create the command pool that @commandBuffer@ was allocated from,+-- then its @srcAccessMask@ member /must/ only contain access flags+-- that are supported by one or more of the pipeline stages in+-- @srcStageMask@, as specified in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- - #VUID-vkCmdPipelineBarrier-pImageMemoryBarriers-02820# For any+-- element of @pImageMemoryBarriers@, if its @srcQueueFamilyIndex@ and+-- @dstQueueFamilyIndex@ members are equal, or if its+-- @dstQueueFamilyIndex@ is the queue family index that was used to+-- create the command pool that @commandBuffer@ was allocated from,+-- then its @dstAccessMask@ member /must/ only contain access flags+-- that are supported by one or more of the pipeline stages in+-- @dstStageMask@, as specified in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- - #VUID-vkCmdPipelineBarrier-pDependencies-02285# If+-- 'cmdPipelineBarrier' 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-vkCmdPipelineBarrier-bufferMemoryBarrierCount-01178# If+-- 'cmdPipelineBarrier' is called within a render pass instance, it+-- /must/ not include any buffer memory barriers+--+-- - #VUID-vkCmdPipelineBarrier-image-04073# If 'cmdPipelineBarrier' 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-vkCmdPipelineBarrier-oldLayout-01181# If 'cmdPipelineBarrier'+-- 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-vkCmdPipelineBarrier-srcQueueFamilyIndex-01182# If+-- 'cmdPipelineBarrier' 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-vkCmdPipelineBarrier-dependencyFlags-01186# If+-- 'cmdPipelineBarrier' 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-vkCmdPipelineBarrier-None-06191# If 'cmdPipelineBarrier' is+-- called within a render pass instance, the render pass /must/ not+-- have been started with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdPipelineBarrier-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdPipelineBarrier-srcStageMask-parameter# @srcStageMask@+-- /must/ be a valid combination of+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+-- values+--+-- - #VUID-vkCmdPipelineBarrier-dstStageMask-parameter# @dstStageMask@+-- /must/ be a valid combination of+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+-- values+--+-- - #VUID-vkCmdPipelineBarrier-dependencyFlags-parameter#+-- @dependencyFlags@ /must/ be a valid combination of+-- 'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits' values+--+-- - #VUID-vkCmdPipelineBarrier-pMemoryBarriers-parameter# If+-- @memoryBarrierCount@ is not @0@, @pMemoryBarriers@ /must/ be a valid+-- pointer to an array of @memoryBarrierCount@ valid+-- 'Vulkan.Core10.OtherTypes.MemoryBarrier' structures+--+-- - #VUID-vkCmdPipelineBarrier-pBufferMemoryBarriers-parameter# If+-- @bufferMemoryBarrierCount@ is not @0@, @pBufferMemoryBarriers@+-- /must/ be a valid pointer to an array of @bufferMemoryBarrierCount@+-- valid 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures+--+-- - #VUID-vkCmdPipelineBarrier-pImageMemoryBarriers-parameter# If+-- @imageMemoryBarrierCount@ is not @0@, @pImageMemoryBarriers@ /must/+-- be a valid pointer to an array of @imageMemoryBarrierCount@ valid+-- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures+--+-- - #VUID-vkCmdPipelineBarrier-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-vkCmdPipelineBarrier-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_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier',+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlags',+-- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier',+-- 'Vulkan.Core10.OtherTypes.MemoryBarrier',+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'+cmdPipelineBarrier :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command is+ -- recorded.+ CommandBuffer+ -> -- | @srcStageMask@ is a bitmask of+ -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+ -- specifying the+ -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stages>.+ ("srcStageMask" ::: PipelineStageFlags)+ -> -- | @dstStageMask@ is a bitmask of+ -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+ -- specifying the+ -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stages>.+ ("dstStageMask" ::: PipelineStageFlags)+ -> -- | @dependencyFlags@ is a bitmask of+ -- 'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits' specifying+ -- how execution and memory dependencies are formed.+ DependencyFlags+ -> -- | @pMemoryBarriers@ is a pointer to an array of+ -- 'Vulkan.Core10.OtherTypes.MemoryBarrier' structures.+ ("memoryBarriers" ::: Vector MemoryBarrier)+ -> -- | @pBufferMemoryBarriers@ is a pointer to an array of+ -- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures.+ ("bufferMemoryBarriers" ::: Vector BufferMemoryBarrier)+ -> -- | @pImageMemoryBarriers@ is a pointer to an array of+ -- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures.+ ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier))+ -> io ()+cmdPipelineBarrier commandBuffer srcStageMask dstStageMask dependencyFlags memoryBarriers bufferMemoryBarriers imageMemoryBarriers = liftIO . evalContT $ do+ let vkCmdPipelineBarrierPtr = pVkCmdPipelineBarrier (deviceCmds (commandBuffer :: CommandBuffer))+ lift $ unless (vkCmdPipelineBarrierPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdPipelineBarrier is null" Nothing Nothing+ let vkCmdPipelineBarrier' = mkVkCmdPipelineBarrier vkCmdPipelineBarrierPtr+ pPMemoryBarriers <- ContT $ allocaBytes @MemoryBarrier ((Data.Vector.length (memoryBarriers)) * 24)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPMemoryBarriers `plusPtr` (24 * (i)) :: Ptr MemoryBarrier) (e)) (memoryBarriers)+ pPBufferMemoryBarriers <- ContT $ allocaBytes @BufferMemoryBarrier ((Data.Vector.length (bufferMemoryBarriers)) * 56)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPBufferMemoryBarriers `plusPtr` (56 * (i)) :: Ptr BufferMemoryBarrier) (e)) (bufferMemoryBarriers)+ pPImageMemoryBarriers <- ContT $ allocaBytes @(ImageMemoryBarrier _) ((Data.Vector.length (imageMemoryBarriers)) * 72)+ Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPImageMemoryBarriers `plusPtr` (72 * (i)) :: Ptr (ImageMemoryBarrier _))) (e) . ($ ())) (imageMemoryBarriers)+ lift $ traceAroundEvent "vkCmdPipelineBarrier" (vkCmdPipelineBarrier' (commandBufferHandle (commandBuffer)) (srcStageMask) (dstStageMask) (dependencyFlags) ((fromIntegral (Data.Vector.length $ (memoryBarriers)) :: Word32)) (pPMemoryBarriers) ((fromIntegral (Data.Vector.length $ (bufferMemoryBarriers)) :: Word32)) (pPBufferMemoryBarriers) ((fromIntegral (Data.Vector.length $ (imageMemoryBarriers)) :: Word32)) (forgetExtensions (pPImageMemoryBarriers)))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdBeginQuery+ :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> QueryControlFlags -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> QueryControlFlags -> IO ()++-- | vkCmdBeginQuery - Begin a query+--+-- = Description+--+-- If the @queryType@ of the pool is+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' and @flags@+-- contains+-- 'Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT', an+-- implementation /must/ return a result that matches the actual number of+-- samples passed. This is described in more detail in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-occlusion Occlusion Queries>.+--+-- Calling 'cmdBeginQuery' is equivalent to calling+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginQueryIndexedEXT'+-- with the @index@ parameter set to zero.+--+-- After beginning a query, that query is considered /active/ within the+-- command buffer it was called in until that same query is ended. Queries+-- active in a primary command buffer when secondary command buffers are+-- executed are considered active for those secondary command buffers.+--+-- == Valid Usage+--+-- - #VUID-vkCmdBeginQuery-None-00807# All queries used by the command+-- /must/ be unavailable+--+-- - #VUID-vkCmdBeginQuery-queryType-02804# The @queryType@ used to+-- create @queryPool@ /must/ not be+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'+--+-- - #VUID-vkCmdBeginQuery-queryType-04728# The @queryType@ used to+-- create @queryPool@ /must/ not be+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'+-- or+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'+--+-- - #VUID-vkCmdBeginQuery-queryType-04729# The @queryType@ used to+-- create @queryPool@ /must/ not be+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV'+--+-- - #VUID-vkCmdBeginQuery-queryType-00800# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-occlusionQueryPrecise precise occlusion queries>+-- feature is not enabled, or the @queryType@ used to create+-- @queryPool@ was not+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION', @flags@ /must/+-- not contain+-- 'Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT'+--+-- - #VUID-vkCmdBeginQuery-query-00802# @query@ /must/ be less than the+-- number of queries in @queryPool@+--+-- - #VUID-vkCmdBeginQuery-queryType-00803# If the @queryType@ used to+-- create @queryPool@ was+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION', the+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics operations+--+-- - #VUID-vkCmdBeginQuery-queryType-00804# If the @queryType@ used to+-- create @queryPool@ was+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS' and+-- any of the @pipelineStatistics@ indicate graphics operations, the+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics operations+--+-- - #VUID-vkCmdBeginQuery-queryType-00805# If the @queryType@ used to+-- create @queryPool@ was+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS' and+-- any of the @pipelineStatistics@ indicate compute operations, the+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support compute operations+--+-- - #VUID-vkCmdBeginQuery-commandBuffer-01885# @commandBuffer@ /must/+-- not be a protected command buffer+--+-- - #VUID-vkCmdBeginQuery-query-00808# If 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@+--+-- - #VUID-vkCmdBeginQuery-queryPool-01922# @queryPool@ /must/ have been+-- created with a @queryType@ that differs from that of any queries+-- that are+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>+-- within @commandBuffer@+--+-- - #VUID-vkCmdBeginQuery-queryType-02327# If the @queryType@ used to+-- create @queryPool@ was+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'+-- the 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics operations+--+-- - #VUID-vkCmdBeginQuery-queryType-02328# If the @queryType@ used to+-- create @queryPool@ was+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'+-- then+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackPropertiesEXT'::@transformFeedbackQueries@+-- /must/ be supported+--+-- - #VUID-vkCmdBeginQuery-queryPool-03223# If @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 before+-- 'Vulkan.Core10.CommandBuffer.beginCommandBuffer' was called on+-- @commandBuffer@+--+-- - #VUID-vkCmdBeginQuery-queryPool-03224# If @queryPool@ was created+-- with a @queryType@ of+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and+-- one of the counters used to create @queryPool@ was+-- 'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR',+-- the query begin /must/ be the first recorded command in+-- @commandBuffer@+--+-- - #VUID-vkCmdBeginQuery-queryPool-03225# If @queryPool@ was created+-- with a @queryType@ of+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and+-- one of the counters used to create @queryPool@ was+-- 'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR',+-- the begin command /must/ not be recorded within a render pass+-- instance+--+-- - #VUID-vkCmdBeginQuery-queryPool-03226# If @queryPool@ was created+-- with a @queryType@ of+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and+-- another query pool with a @queryType@+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' has+-- been used within @commandBuffer@, its parent primary command buffer+-- or secondary command buffer recorded within the same parent primary+-- command buffer as @commandBuffer@, the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-performanceCounterMultipleQueryPools performanceCounterMultipleQueryPools>+-- feature /must/ be enabled+--+-- - #VUID-vkCmdBeginQuery-None-02863# If @queryPool@ was created with a+-- @queryType@ of+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',+-- this command /must/ not be recorded in a command buffer that, either+-- directly or through secondary command buffers, also contains a+-- 'cmdResetQueryPool' command affecting the same query+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdBeginQuery-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdBeginQuery-queryPool-parameter# @queryPool@ /must/ be a+-- valid 'Vulkan.Core10.Handles.QueryPool' handle+--+-- - #VUID-vkCmdBeginQuery-flags-parameter# @flags@ /must/ be a valid+-- combination of+-- 'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlagBits'+-- values+--+-- - #VUID-vkCmdBeginQuery-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-vkCmdBeginQuery-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics, or compute operations+--+-- - #VUID-vkCmdBeginQuery-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 | Graphics |+-- | Secondary | | Compute |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlags',+-- 'Vulkan.Core10.Handles.QueryPool'+cmdBeginQuery :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which this command will be+ -- recorded.+ CommandBuffer+ -> -- | @queryPool@ is the query pool that will manage the results of the query.+ QueryPool+ -> -- | @query@ is the query index within the query pool that will contain the+ -- results.+ ("query" ::: Word32)+ -> -- | @flags@ is a bitmask of+ -- 'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlagBits'+ -- specifying constraints on the types of queries that /can/ be performed.+ QueryControlFlags+ -> io ()+cmdBeginQuery commandBuffer queryPool query flags = liftIO $ do+ let vkCmdBeginQueryPtr = pVkCmdBeginQuery (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdBeginQueryPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBeginQuery is null" Nothing Nothing+ let vkCmdBeginQuery' = mkVkCmdBeginQuery vkCmdBeginQueryPtr+ traceAroundEvent "vkCmdBeginQuery" (vkCmdBeginQuery' (commandBufferHandle (commandBuffer)) (queryPool) (query) (flags))+ pure $ ()++-- | This function will call the supplied action between calls to+-- 'cmdBeginQuery' and 'cmdEndQuery'+--+-- Note that 'cmdEndQuery' is *not* called if an exception is thrown by the+-- inner action.+cmdUseQuery :: forall io r . MonadIO io => CommandBuffer -> QueryPool -> Word32 -> QueryControlFlags -> io r -> io r+cmdUseQuery commandBuffer queryPool query flags a =+ (cmdBeginQuery commandBuffer queryPool query flags) *> a <* (cmdEndQuery commandBuffer queryPool query)+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdEndQuery+ :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> IO ()++-- | vkCmdEndQuery - Ends a query+--+-- = Description+--+-- Calling 'cmdEndQuery' is equivalent to calling+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndQueryIndexedEXT' with+-- the @index@ parameter set to zero.+--+-- As queries operate asynchronously, ending a query does not immediately+-- set the query’s status to available. A query is considered /finished/+-- when the final results of the query are ready to be retrieved by+-- 'Vulkan.Core10.Query.getQueryPoolResults' and 'cmdCopyQueryPoolResults',+-- and this is when the query’s status is set to available.+--+-- Once a query is ended the query /must/ finish in finite time, unless the+-- state of the query is changed using other commands, e.g. by issuing a+-- reset of the query.+--+-- == Valid Usage+--+-- - #VUID-vkCmdEndQuery-None-01923# All queries used by the command+-- /must/ be+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>+--+-- - #VUID-vkCmdEndQuery-query-00810# @query@ /must/ be less than the+-- number of queries in @queryPool@+--+-- - #VUID-vkCmdEndQuery-commandBuffer-01886# @commandBuffer@ /must/ not+-- be a protected command buffer+--+-- - #VUID-vkCmdEndQuery-query-00812# If 'cmdEndQuery' 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@+--+-- - #VUID-vkCmdEndQuery-queryPool-03227# If @queryPool@ was created with+-- a @queryType@ of+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and+-- one or more of the counters used to create @queryPool@ was+-- 'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR',+-- the 'cmdEndQuery' /must/ be the last recorded command in+-- @commandBuffer@+--+-- - #VUID-vkCmdEndQuery-queryPool-03228# If @queryPool@ was created with+-- a @queryType@ of+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and+-- one or more of the counters used to create @queryPool@ was+-- 'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR',+-- the 'cmdEndQuery' /must/ not be recorded within a render pass+-- instance+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdEndQuery-commandBuffer-parameter# @commandBuffer@ /must/+-- be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdEndQuery-queryPool-parameter# @queryPool@ /must/ be a+-- valid 'Vulkan.Core10.Handles.QueryPool' handle+--+-- - #VUID-vkCmdEndQuery-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-vkCmdEndQuery-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics, or compute operations+--+-- - #VUID-vkCmdEndQuery-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 | Graphics |+-- | Secondary | | Compute |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.QueryPool'+cmdEndQuery :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which this command will be+ -- recorded.+ CommandBuffer+ -> -- | @queryPool@ is the query pool that is managing the results of the query.+ QueryPool+ -> -- | @query@ is the query index within the query pool where the result is+ -- stored.+ ("query" ::: Word32)+ -> io ()+cmdEndQuery commandBuffer queryPool query = liftIO $ do+ let vkCmdEndQueryPtr = pVkCmdEndQuery (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdEndQueryPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdEndQuery is null" Nothing Nothing+ let vkCmdEndQuery' = mkVkCmdEndQuery vkCmdEndQueryPtr+ traceAroundEvent "vkCmdEndQuery" (vkCmdEndQuery' (commandBufferHandle (commandBuffer)) (queryPool) (query))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdResetQueryPool+ :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> IO ()++-- | vkCmdResetQueryPool - Reset queries in a query pool+--+-- = Description+--+-- When executed on a queue, this command sets the status of query indices+-- [@firstQuery@, @firstQuery@ + @queryCount@ - 1] to unavailable.+--+-- If the @queryType@ used to create @queryPool@ was+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR', this+-- command sets the status of query indices [@firstQuery@, @firstQuery@ ++-- @queryCount@ - 1] to unavailable for each pass of @queryPool@, as+-- indicated by a call to+-- 'Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'.+--+-- Note+--+-- Because 'cmdResetQueryPool' resets all the passes of the indicated+-- queries, applications must not record a 'cmdResetQueryPool' command for+-- a @queryPool@ created with+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' in a+-- command buffer that needs to be submitted multiple times as indicated by+-- a call to+-- 'Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'.+-- Otherwise applications will never be able to complete the recorded+-- queries.+--+-- == Valid Usage+--+-- - #VUID-vkCmdResetQueryPool-firstQuery-00796# @firstQuery@ /must/ be+-- less than the number of queries in @queryPool@+--+-- - #VUID-vkCmdResetQueryPool-firstQuery-00797# The sum of @firstQuery@+-- and @queryCount@ /must/ be less than or equal to the number of+-- queries in @queryPool@+--+-- - #VUID-vkCmdResetQueryPool-None-02841# All queries used by the+-- command /must/ not be active+--+-- - #VUID-vkCmdResetQueryPool-firstQuery-02862# If @queryPool@ was+-- created with+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',+-- this command /must/ not be recorded in a command buffer that, either+-- directly or through secondary command buffers, also contains begin+-- commands for a query from the set of queries [@firstQuery@,+-- @firstQuery@ + @queryCount@ - 1]+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdResetQueryPool-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdResetQueryPool-queryPool-parameter# @queryPool@ /must/ be+-- a valid 'Vulkan.Core10.Handles.QueryPool' handle+--+-- - #VUID-vkCmdResetQueryPool-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-vkCmdResetQueryPool-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics, or compute operations+--+-- - #VUID-vkCmdResetQueryPool-renderpass# This command /must/ only be+-- called outside of a render pass instance+--+-- - #VUID-vkCmdResetQueryPool-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 | Outside | Graphics |+-- | Secondary | | Compute |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.QueryPool'+cmdResetQueryPool :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which this command will be+ -- recorded.+ CommandBuffer+ -> -- | @queryPool@ is the handle of the query pool managing the queries being+ -- reset.+ QueryPool+ -> -- | @firstQuery@ is the initial query index to reset.+ ("firstQuery" ::: Word32)+ -> -- | @queryCount@ is the number of queries to reset.+ ("queryCount" ::: Word32)+ -> io ()+cmdResetQueryPool commandBuffer queryPool firstQuery queryCount = liftIO $ do+ let vkCmdResetQueryPoolPtr = pVkCmdResetQueryPool (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdResetQueryPoolPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdResetQueryPool is null" Nothing Nothing+ let vkCmdResetQueryPool' = mkVkCmdResetQueryPool vkCmdResetQueryPoolPtr+ traceAroundEvent "vkCmdResetQueryPool" (vkCmdResetQueryPool' (commandBufferHandle (commandBuffer)) (queryPool) (firstQuery) (queryCount))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdWriteTimestamp+ :: FunPtr (Ptr CommandBuffer_T -> PipelineStageFlagBits -> QueryPool -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> PipelineStageFlagBits -> QueryPool -> Word32 -> IO ()++-- | vkCmdWriteTimestamp - Write a device timestamp into a query object+--+-- = Description+--+-- 'cmdWriteTimestamp' latches the value of the timer when all previous+-- commands have completed executing as far as the specified pipeline+-- stage, and writes the timestamp value to memory. 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 'cmdWriteTimestamp' 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-vkCmdWriteTimestamp-pipelineStage-04074# @pipelineStage@+-- /must/ be a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported valid stage>+-- for the queue family that was used to create the command pool that+-- @commandBuffer@ was allocated from+--+-- - #VUID-vkCmdWriteTimestamp-pipelineStage-04075# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>+-- feature is not enabled, @pipelineStage@ /must/ not be+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'+--+-- - #VUID-vkCmdWriteTimestamp-pipelineStage-04076# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>+-- feature is not enabled, @pipelineStage@ /must/ not be+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'+-- or+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'+--+-- - #VUID-vkCmdWriteTimestamp-pipelineStage-04077# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>+-- feature is not enabled, @pipelineStage@ /must/ not be+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'+--+-- - #VUID-vkCmdWriteTimestamp-pipelineStage-04078# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>+-- feature is not enabled, @pipelineStage@ /must/ not be+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'+--+-- - #VUID-vkCmdWriteTimestamp-pipelineStage-04079# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>+-- feature is not enabled, @pipelineStage@ /must/ not be+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'+--+-- - #VUID-vkCmdWriteTimestamp-pipelineStage-04080# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>+-- feature is not enabled, @pipelineStage@ /must/ not be+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'+-- or+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'+--+-- - #VUID-vkCmdWriteTimestamp-pipelineStage-04081# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>+-- feature is not enabled, @pipelineStage@ /must/ not be+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'+--+-- - #VUID-vkCmdWriteTimestamp-queryPool-01416# @queryPool@ /must/ have+-- been created with a @queryType@ of+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'+--+-- - #VUID-vkCmdWriteTimestamp-queryPool-00828# The query identified by+-- @queryPool@ and @query@ /must/ be /unavailable/+--+-- - #VUID-vkCmdWriteTimestamp-timestampValidBits-00829# The command+-- pool’s queue family /must/ support a non-zero @timestampValidBits@+--+-- - #VUID-vkCmdWriteTimestamp-query-04904# @query@ /must/ be less than+-- the number of queries in @queryPool@+--+-- - #VUID-vkCmdWriteTimestamp-None-00830# All queries used by the+-- command /must/ be unavailable+--+-- - #VUID-vkCmdWriteTimestamp-query-00831# If 'cmdWriteTimestamp' 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-vkCmdWriteTimestamp-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdWriteTimestamp-pipelineStage-parameter# @pipelineStage@+-- /must/ be a valid+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+-- value+--+-- - #VUID-vkCmdWriteTimestamp-queryPool-parameter# @queryPool@ /must/ be+-- a valid 'Vulkan.Core10.Handles.QueryPool' handle+--+-- - #VUID-vkCmdWriteTimestamp-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-vkCmdWriteTimestamp-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support transfer, graphics, or compute+-- operations+--+-- - #VUID-vkCmdWriteTimestamp-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_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits',+-- 'Vulkan.Core10.Handles.QueryPool'+cmdWriteTimestamp :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which the command will be+ -- recorded.+ CommandBuffer+ -> -- | @pipelineStage@ is a+ -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits' value,+ -- specifying a stage of the pipeline.+ PipelineStageFlagBits+ -> -- | @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 ()+cmdWriteTimestamp commandBuffer pipelineStage queryPool query = liftIO $ do+ let vkCmdWriteTimestampPtr = pVkCmdWriteTimestamp (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdWriteTimestampPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdWriteTimestamp is null" Nothing Nothing+ let vkCmdWriteTimestamp' = mkVkCmdWriteTimestamp vkCmdWriteTimestampPtr+ traceAroundEvent "vkCmdWriteTimestamp" (vkCmdWriteTimestamp' (commandBufferHandle (commandBuffer)) (pipelineStage) (queryPool) (query))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdCopyQueryPoolResults+ :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> Buffer -> DeviceSize -> DeviceSize -> QueryResultFlags -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> Buffer -> DeviceSize -> DeviceSize -> QueryResultFlags -> IO ()++-- | vkCmdCopyQueryPoolResults - Copy the results of queries in a query pool+-- to a buffer object+--+-- = Description+--+-- 'cmdCopyQueryPoolResults' is guaranteed to see the effect of previous+-- uses of 'cmdResetQueryPool' in the same queue, without any additional+-- synchronization. Thus, the results will always reflect the most recent+-- use of the query.+--+-- @flags@ has the same possible values described above for the @flags@+-- parameter of 'Vulkan.Core10.Query.getQueryPoolResults', but the+-- different style of execution causes some subtle behavioral differences.+-- Because 'cmdCopyQueryPoolResults' executes in order with respect to+-- other query commands, there is less ambiguity about which use of a query+-- is being requested.+--+-- Results for all requested occlusion queries, pipeline statistics+-- queries, transform feedback queries, and timestamp queries are written+-- as 64-bit unsigned integer values if+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is set or+-- 32-bit unsigned integer values otherwise. Performance queries store+-- results in a tightly packed array whose type is determined by the @unit@+-- member of the corresponding+-- 'Vulkan.Extensions.VK_KHR_performance_query.PerformanceCounterKHR'.+--+-- If neither of+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' and+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT'+-- are set, results are only written out for queries in the available+-- state.+--+-- If 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' is+-- set, the implementation will wait for each query’s status to be in the+-- available state before retrieving the numerical results for that query.+-- This is guaranteed to reflect the most recent use of the query on the+-- same queue, assuming that the query is not being simultaneously used by+-- other queues. If the query does not become available in a finite amount+-- of time (e.g. due to not issuing a query since the last reset), a+-- 'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST' error /may/ occur.+--+-- Similarly, if+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT'+-- is set and+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' is not+-- set, the availability is guaranteed to reflect the most recent use of+-- the query on the same queue, assuming that the query is not being+-- simultaneously used by other queues. As with+-- 'Vulkan.Core10.Query.getQueryPoolResults', implementations /must/+-- guarantee that if they return a non-zero availability value, then the+-- numerical results are valid.+--+-- If 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT' is+-- set, 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' is+-- not set, and the query’s status is unavailable, an intermediate result+-- value between zero and the final result value is written for that query.+--+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'+-- /must/ not be used if the pool’s @queryType@ is+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'.+--+-- 'cmdCopyQueryPoolResults' is considered to be a transfer operation, and+-- its writes to buffer memory /must/ be synchronized using+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFER_BIT'+-- and 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_TRANSFER_WRITE_BIT'+-- before using the results.+--+-- == Valid Usage+--+-- - #VUID-vkCmdCopyQueryPoolResults-dstOffset-00819# @dstOffset@ /must/+-- be less than the size of @dstBuffer@+--+-- - #VUID-vkCmdCopyQueryPoolResults-firstQuery-00820# @firstQuery@+-- /must/ be less than the number of queries in @queryPool@+--+-- - #VUID-vkCmdCopyQueryPoolResults-firstQuery-00821# The sum of+-- @firstQuery@ and @queryCount@ /must/ be less than or equal to the+-- number of queries in @queryPool@+--+-- - #VUID-vkCmdCopyQueryPoolResults-flags-00822# If+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is not+-- set in @flags@ then @dstOffset@ and @stride@ /must/ be multiples of+-- @4@+--+-- - #VUID-vkCmdCopyQueryPoolResults-flags-00823# If+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is set+-- in @flags@ then @dstOffset@ and @stride@ /must/ be multiples of @8@+--+-- - #VUID-vkCmdCopyQueryPoolResults-dstBuffer-00824# @dstBuffer@ /must/+-- have enough storage, from @dstOffset@, to contain the result of each+-- query, as described+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-memorylayout here>+--+-- - #VUID-vkCmdCopyQueryPoolResults-dstBuffer-00825# @dstBuffer@ /must/+-- have been created with+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'+-- usage flag+--+-- - #VUID-vkCmdCopyQueryPoolResults-dstBuffer-00826# If @dstBuffer@ is+-- non-sparse then it /must/ be bound completely and contiguously to a+-- single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- - #VUID-vkCmdCopyQueryPoolResults-queryType-00827# If the @queryType@+-- used to create @queryPool@ was+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP', @flags@ /must/+-- not contain+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'+--+-- - #VUID-vkCmdCopyQueryPoolResults-queryType-03232# If the @queryType@+-- used to create @queryPool@ was+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',+-- 'Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryPropertiesKHR'::@allowCommandBufferQueryCopies@+-- /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE'+--+-- - #VUID-vkCmdCopyQueryPoolResults-queryType-03233# If the @queryType@+-- used to create @queryPool@ was+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',+-- @flags@ /must/ not contain+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT',+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'+-- or 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT'+--+-- - #VUID-vkCmdCopyQueryPoolResults-queryType-03234# If the @queryType@+-- used to create @queryPool@ was+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',+-- the @queryPool@ /must/ have been submitted once for each pass as+-- retrieved via a call to+-- 'Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'+--+-- - #VUID-vkCmdCopyQueryPoolResults-queryType-02734#+-- 'cmdCopyQueryPoolResults' /must/ not be called if the @queryType@+-- used to create @queryPool@ was+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_INTEL'+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdCopyQueryPoolResults-commandBuffer-parameter#+-- @commandBuffer@ /must/ be a valid+-- 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdCopyQueryPoolResults-queryPool-parameter# @queryPool@+-- /must/ be a valid 'Vulkan.Core10.Handles.QueryPool' handle+--+-- - #VUID-vkCmdCopyQueryPoolResults-dstBuffer-parameter# @dstBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- - #VUID-vkCmdCopyQueryPoolResults-flags-parameter# @flags@ /must/ be a+-- valid combination of+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlagBits' values+--+-- - #VUID-vkCmdCopyQueryPoolResults-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-vkCmdCopyQueryPoolResults-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics, or compute operations+--+-- - #VUID-vkCmdCopyQueryPoolResults-renderpass# This command /must/ only+-- be called outside of a render pass instance+--+-- - #VUID-vkCmdCopyQueryPoolResults-commonparent# Each of+-- @commandBuffer@, @dstBuffer@, 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 | Outside | Graphics |+-- | Secondary | | Compute |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',+-- 'Vulkan.Core10.Handles.QueryPool',+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlags'+cmdCopyQueryPoolResults :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer into which this command will be+ -- recorded.+ CommandBuffer+ -> -- | @queryPool@ is the query pool managing the queries containing the+ -- desired results.+ QueryPool+ -> -- | @firstQuery@ is the initial query index.+ ("firstQuery" ::: Word32)+ -> -- | @queryCount@ is the number of queries. @firstQuery@ and @queryCount@+ -- together define a range of queries.+ ("queryCount" ::: Word32)+ -> -- | @dstBuffer@ is a 'Vulkan.Core10.Handles.Buffer' object that will receive+ -- the results of the copy command.+ ("dstBuffer" ::: Buffer)+ -> -- | @dstOffset@ is an offset into @dstBuffer@.+ ("dstOffset" ::: DeviceSize)+ -> -- | @stride@ is the stride in bytes between results for individual queries+ -- within @dstBuffer@. The required size of the backing memory for+ -- @dstBuffer@ is determined as described above for+ -- 'Vulkan.Core10.Query.getQueryPoolResults'.+ ("stride" ::: DeviceSize)+ -> -- | @flags@ is a bitmask of+ -- 'Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlagBits' specifying+ -- how and when results are returned.+ QueryResultFlags+ -> io ()+cmdCopyQueryPoolResults commandBuffer queryPool firstQuery queryCount dstBuffer dstOffset stride flags = liftIO $ do+ let vkCmdCopyQueryPoolResultsPtr = pVkCmdCopyQueryPoolResults (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdCopyQueryPoolResultsPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyQueryPoolResults is null" Nothing Nothing+ let vkCmdCopyQueryPoolResults' = mkVkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResultsPtr+ traceAroundEvent "vkCmdCopyQueryPoolResults" (vkCmdCopyQueryPoolResults' (commandBufferHandle (commandBuffer)) (queryPool) (firstQuery) (queryCount) (dstBuffer) (dstOffset) (stride) (flags))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdPushConstants+ :: FunPtr (Ptr CommandBuffer_T -> PipelineLayout -> ShaderStageFlags -> Word32 -> Word32 -> Ptr () -> IO ()) -> Ptr CommandBuffer_T -> PipelineLayout -> ShaderStageFlags -> Word32 -> Word32 -> Ptr () -> IO ()++-- | vkCmdPushConstants - Update the values of push constants+--+-- = Description+--+-- When a command buffer begins recording, all push constant values are+-- undefined. Reads of undefined push constant values by the executing+-- shader return undefined values.+--+-- Push constant values /can/ be updated incrementally, causing shader+-- stages in @stageFlags@ to read the new data from @pValues@ for push+-- constants modified by this command, while still reading the previous+-- data for push constants not modified by this command. When a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-bindpoint-commands bound pipeline command>+-- is issued, the bound pipeline’s layout /must/ be compatible with the+-- layouts used to set the values of all push constants in the pipeline+-- layout’s push constant ranges, as described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility Pipeline Layout Compatibility>.+-- Binding a pipeline with a layout that is not compatible with the push+-- constant layout does not disturb the push constant values.+--+-- Note+--+-- As @stageFlags@ needs to include all flags the relevant push constant+-- ranges were created with, any flags that are not supported by the queue+-- family that the 'Vulkan.Core10.Handles.CommandPool' used to allocate+-- @commandBuffer@ was created on are ignored.+--+-- == Valid Usage+--+-- - #VUID-vkCmdPushConstants-offset-01795# For each byte in the range+-- specified by @offset@ and @size@ and for each shader stage in+-- @stageFlags@, there /must/ be a push constant range in @layout@ that+-- includes that byte and that stage+--+-- - #VUID-vkCmdPushConstants-offset-01796# For each byte in the range+-- specified by @offset@ and @size@ and for each push constant range+-- that overlaps that byte, @stageFlags@ /must/ include all stages in+-- that push constant range’s+-- 'Vulkan.Core10.PipelineLayout.PushConstantRange'::@stageFlags@+--+-- - #VUID-vkCmdPushConstants-offset-00368# @offset@ /must/ be a multiple+-- of @4@+--+-- - #VUID-vkCmdPushConstants-size-00369# @size@ /must/ be a multiple of+-- @4@+--+-- - #VUID-vkCmdPushConstants-offset-00370# @offset@ /must/ be less than+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@+--+-- - #VUID-vkCmdPushConstants-size-00371# @size@ /must/ be less than or+-- equal to+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@+-- minus @offset@+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdPushConstants-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdPushConstants-layout-parameter# @layout@ /must/ be a+-- valid 'Vulkan.Core10.Handles.PipelineLayout' handle+--+-- - #VUID-vkCmdPushConstants-stageFlags-parameter# @stageFlags@ /must/+-- be a valid combination of+-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' values+--+-- - #VUID-vkCmdPushConstants-stageFlags-requiredbitmask# @stageFlags@+-- /must/ not be @0@+--+-- - #VUID-vkCmdPushConstants-pValues-parameter# @pValues@ /must/ be a+-- valid pointer to an array of @size@ bytes+--+-- - #VUID-vkCmdPushConstants-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-vkCmdPushConstants-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics, or compute operations+--+-- - #VUID-vkCmdPushConstants-size-arraylength# @size@ /must/ be greater+-- than @0@+--+-- - #VUID-vkCmdPushConstants-commonparent# Both of @commandBuffer@, and+-- @layout@ /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_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Handles.PipelineLayout',+-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags'+cmdPushConstants :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer in which the push constant update+ -- will be recorded.+ CommandBuffer+ -> -- | @layout@ is the pipeline layout used to program the push constant+ -- updates.+ PipelineLayout+ -> -- | @stageFlags@ is a bitmask of+ -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' specifying+ -- the shader stages that will use the push constants in the updated range.+ ShaderStageFlags+ -> -- | @offset@ is the start offset of the push constant range to update, in+ -- units of bytes.+ ("offset" ::: Word32)+ -> -- | @size@ is the size of the push constant range to update, in units of+ -- bytes.+ ("size" ::: Word32)+ -> -- | @pValues@ is a pointer to an array of @size@ bytes containing the new+ -- push constant values.+ ("values" ::: Ptr ())+ -> io ()+cmdPushConstants commandBuffer layout stageFlags offset size values = liftIO $ do+ let vkCmdPushConstantsPtr = pVkCmdPushConstants (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdPushConstantsPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdPushConstants is null" Nothing Nothing+ let vkCmdPushConstants' = mkVkCmdPushConstants vkCmdPushConstantsPtr+ traceAroundEvent "vkCmdPushConstants" (vkCmdPushConstants' (commandBufferHandle (commandBuffer)) (layout) (stageFlags) (offset) (size) (values))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdBeginRenderPass+ :: FunPtr (Ptr CommandBuffer_T -> Ptr (SomeStruct RenderPassBeginInfo) -> SubpassContents -> IO ()) -> Ptr CommandBuffer_T -> Ptr (SomeStruct RenderPassBeginInfo) -> SubpassContents -> IO ()++-- | vkCmdBeginRenderPass - Begin a new render pass+--+-- = Description+--+-- After beginning a render pass instance, the command buffer is ready to+-- record the commands for the first subpass of that render pass.+--+-- == Valid Usage+--+-- - #VUID-vkCmdBeginRenderPass-initialLayout-00895# If any of the+-- @initialLayout@ or @finalLayout@ member of the+-- 'Vulkan.Core10.Pass.AttachmentDescription' structures or the+-- @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'+-- structures specified when creating the render pass specified in the+-- @renderPass@ member of @pRenderPassBegin@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'+-- then the corresponding attachment image view of the framebuffer+-- specified in the @framebuffer@ member of @pRenderPassBegin@ /must/+-- have been created with a @usage@ value including+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'+--+-- - #VUID-vkCmdBeginRenderPass-initialLayout-01758# If any of the+-- @initialLayout@ or @finalLayout@ member of the+-- 'Vulkan.Core10.Pass.AttachmentDescription' structures or the+-- @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'+-- structures specified when creating the render pass specified in the+-- @renderPass@ member of @pRenderPassBegin@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL',+-- or+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'+-- then the corresponding attachment image view of the framebuffer+-- specified in the @framebuffer@ member of @pRenderPassBegin@ /must/+-- have been created with a @usage@ value including+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'+--+-- - #VUID-vkCmdBeginRenderPass-initialLayout-02842# If any of the+-- @initialLayout@ or @finalLayout@ member of the+-- 'Vulkan.Core10.Pass.AttachmentDescription' structures or the+-- @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'+-- structures specified when creating the render pass specified in the+-- @renderPass@ member of @pRenderPassBegin@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',+-- or+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',+-- or+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'+-- then the corresponding attachment image view of the framebuffer+-- specified in the @framebuffer@ member of @pRenderPassBegin@ /must/+-- have been created with a @usage@ value including+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'+--+-- - #VUID-vkCmdBeginRenderPass-stencilInitialLayout-02843# If any of the+-- @stencilInitialLayout@ or @stencilFinalLayout@ member of the+-- 'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout'+-- structures or the @stencilLayout@ member of the+-- 'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentReferenceStencilLayout'+-- structures specified when creating the render pass specified in the+-- @renderPass@ member of @pRenderPassBegin@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',+-- or+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'+-- then the corresponding attachment image view of the framebuffer+-- specified in the @framebuffer@ member of @pRenderPassBegin@ /must/+-- have been created with a @usage@ value including+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'+--+-- - #VUID-vkCmdBeginRenderPass-initialLayout-00897# If any of the+-- @initialLayout@ or @finalLayout@ member of the+-- 'Vulkan.Core10.Pass.AttachmentDescription' structures or the+-- @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'+-- structures specified when creating the render pass specified in the+-- @renderPass@ member of @pRenderPassBegin@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL'+-- then the corresponding attachment image view of the framebuffer+-- specified in the @framebuffer@ member of @pRenderPassBegin@ /must/+-- have been created with a @usage@ value including+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT' or+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'+--+-- - #VUID-vkCmdBeginRenderPass-initialLayout-00898# If any of the+-- @initialLayout@ or @finalLayout@ member of the+-- 'Vulkan.Core10.Pass.AttachmentDescription' structures or the+-- @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'+-- structures specified when creating the render pass specified in the+-- @renderPass@ member of @pRenderPassBegin@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'+-- then the corresponding attachment image view of the framebuffer+-- specified in the @framebuffer@ member of @pRenderPassBegin@ /must/+-- have been created with a @usage@ value including+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'+--+-- - #VUID-vkCmdBeginRenderPass-initialLayout-00899# If any of the+-- @initialLayout@ or @finalLayout@ member of the+-- 'Vulkan.Core10.Pass.AttachmentDescription' structures or the+-- @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'+-- structures specified when creating the render pass specified in the+-- @renderPass@ member of @pRenderPassBegin@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'+-- then the corresponding attachment image view of the framebuffer+-- specified in the @framebuffer@ member of @pRenderPassBegin@ /must/+-- have been created with a @usage@ value including+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'+--+-- - #VUID-vkCmdBeginRenderPass-initialLayout-00900# If the+-- @initialLayout@ member of any of the+-- 'Vulkan.Core10.Pass.AttachmentDescription' structures specified when+-- creating the render pass specified in the @renderPass@ member of+-- @pRenderPassBegin@ is not+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED', then each+-- such @initialLayout@ /must/ be equal to the current layout of the+-- corresponding attachment image subresource of the framebuffer+-- specified in the @framebuffer@ member of @pRenderPassBegin@+--+-- - #VUID-vkCmdBeginRenderPass-srcStageMask-00901# The @srcStageMask@+-- and @dstStageMask@ members of any element of the @pDependencies@+-- member of 'Vulkan.Core10.Pass.RenderPassCreateInfo' used to create+-- @renderPass@ /must/ be supported by the capabilities of the queue+-- family identified by the @queueFamilyIndex@ member of the+-- 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' used to create the+-- command pool which @commandBuffer@ was allocated from+--+-- - #VUID-vkCmdBeginRenderPass-framebuffer-02532# For any attachment in+-- @framebuffer@ that is used by @renderPass@ and is bound to memory+-- locations that are also bound to another attachment used by+-- @renderPass@, and if at least one of those uses causes either+-- attachment to be written to, both attachments /must/ have had the+-- 'Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT'+-- set+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdBeginRenderPass-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdBeginRenderPass-pRenderPassBegin-parameter#+-- @pRenderPassBegin@ /must/ be a valid pointer to a valid+-- 'RenderPassBeginInfo' structure+--+-- - #VUID-vkCmdBeginRenderPass-contents-parameter# @contents@ /must/ be+-- a valid 'Vulkan.Core10.Enums.SubpassContents.SubpassContents' value+--+-- - #VUID-vkCmdBeginRenderPass-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-vkCmdBeginRenderPass-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics operations+--+-- - #VUID-vkCmdBeginRenderPass-renderpass# This command /must/ only be+-- called outside of a render pass instance+--+-- - #VUID-vkCmdBeginRenderPass-bufferlevel# @commandBuffer@ /must/ be a+-- primary 'Vulkan.Core10.Handles.CommandBuffer'+--+-- == 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 |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer', 'RenderPassBeginInfo',+-- 'Vulkan.Core10.Enums.SubpassContents.SubpassContents'+cmdBeginRenderPass :: forall a io+ . (Extendss RenderPassBeginInfo a, PokeChain a, MonadIO io)+ => -- | @commandBuffer@ is the command buffer in which to record the command.+ CommandBuffer+ -> -- | @pRenderPassBegin@ is a pointer to a 'RenderPassBeginInfo' structure+ -- specifying the render pass to begin an instance of, and the framebuffer+ -- the instance uses.+ (RenderPassBeginInfo a)+ -> -- | @contents@ is a 'Vulkan.Core10.Enums.SubpassContents.SubpassContents'+ -- value specifying how the commands in the first subpass will be provided.+ SubpassContents+ -> io ()+cmdBeginRenderPass commandBuffer renderPassBegin contents = liftIO . evalContT $ do+ let vkCmdBeginRenderPassPtr = pVkCmdBeginRenderPass (deviceCmds (commandBuffer :: CommandBuffer))+ lift $ unless (vkCmdBeginRenderPassPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBeginRenderPass is null" Nothing Nothing+ let vkCmdBeginRenderPass' = mkVkCmdBeginRenderPass vkCmdBeginRenderPassPtr+ pRenderPassBegin <- ContT $ withCStruct (renderPassBegin)+ lift $ traceAroundEvent "vkCmdBeginRenderPass" (vkCmdBeginRenderPass' (commandBufferHandle (commandBuffer)) (forgetExtensions pRenderPassBegin) (contents))+ pure $ ()++-- | This function will call the supplied action between calls to+-- 'cmdBeginRenderPass' and 'cmdEndRenderPass'+--+-- Note that 'cmdEndRenderPass' is *not* called if an exception is thrown+-- by the inner action.+cmdUseRenderPass :: forall a io r . (Extendss RenderPassBeginInfo a, PokeChain a, MonadIO io) => CommandBuffer -> RenderPassBeginInfo a -> SubpassContents -> io r -> io r+cmdUseRenderPass commandBuffer pRenderPassBegin contents a =+ (cmdBeginRenderPass commandBuffer pRenderPassBegin contents) *> a <* (cmdEndRenderPass commandBuffer)+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdNextSubpass+ :: FunPtr (Ptr CommandBuffer_T -> SubpassContents -> IO ()) -> Ptr CommandBuffer_T -> SubpassContents -> IO ()++-- | vkCmdNextSubpass - Transition to the next subpass of a render pass+--+-- = Description+--+-- The subpass index for a render pass begins at zero when+-- 'cmdBeginRenderPass' is recorded, and increments each time+-- 'cmdNextSubpass' is recorded.+--+-- Moving to the next subpass automatically performs any multisample+-- resolve operations in the subpass being ended. End-of-subpass+-- multisample resolves are treated as color attachment writes for the+-- purposes of synchronization. This applies to resolve operations for both+-- color and depth\/stencil attachments. That is, they are considered to+-- execute in the+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'+-- pipeline stage and their writes are synchronized with+-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COLOR_ATTACHMENT_WRITE_BIT'.+-- Synchronization between rendering within a subpass and any resolve+-- operations at the end of the subpass occurs automatically, without need+-- for explicit dependencies or pipeline barriers. However, if the resolve+-- attachment is also used in a different subpass, an explicit dependency+-- is needed.+--+-- After transitioning to the next subpass, the application /can/ record+-- the commands for that subpass.+--+-- == Valid Usage+--+-- - #VUID-vkCmdNextSubpass-None-00909# The current subpass index /must/+-- be less than the number of subpasses in the render pass minus one+--+-- - #VUID-vkCmdNextSubpass-None-02349# This command /must/ not be+-- recorded when transform feedback is active+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdNextSubpass-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdNextSubpass-contents-parameter# @contents@ /must/ be a+-- valid 'Vulkan.Core10.Enums.SubpassContents.SubpassContents' value+--+-- - #VUID-vkCmdNextSubpass-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-vkCmdNextSubpass-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics operations+--+-- - #VUID-vkCmdNextSubpass-renderpass# This command /must/ only be+-- called inside of a render pass instance+--+-- - #VUID-vkCmdNextSubpass-bufferlevel# @commandBuffer@ /must/ be a+-- primary 'Vulkan.Core10.Handles.CommandBuffer'+--+-- == 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 | Inside | Graphics |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Enums.SubpassContents.SubpassContents'+cmdNextSubpass :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer in which to record the command.+ CommandBuffer+ -> -- | @contents@ specifies how the commands in the next subpass will be+ -- provided, in the same fashion as the corresponding parameter of+ -- 'cmdBeginRenderPass'.+ SubpassContents+ -> io ()+cmdNextSubpass commandBuffer contents = liftIO $ do+ let vkCmdNextSubpassPtr = pVkCmdNextSubpass (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdNextSubpassPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdNextSubpass is null" Nothing Nothing+ let vkCmdNextSubpass' = mkVkCmdNextSubpass vkCmdNextSubpassPtr+ traceAroundEvent "vkCmdNextSubpass" (vkCmdNextSubpass' (commandBufferHandle (commandBuffer)) (contents))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdEndRenderPass+ :: FunPtr (Ptr CommandBuffer_T -> IO ()) -> Ptr CommandBuffer_T -> IO ()++-- | vkCmdEndRenderPass - End the current render pass+--+-- = Description+--+-- Ending a render pass instance performs any multisample resolve+-- operations on the final subpass.+--+-- == Valid Usage+--+-- - #VUID-vkCmdEndRenderPass-None-00910# The current subpass index+-- /must/ be equal to the number of subpasses in the render pass minus+-- one+--+-- - #VUID-vkCmdEndRenderPass-None-02351# This command /must/ not be+-- recorded when transform feedback is active+--+-- - #VUID-vkCmdEndRenderPass-None-06170# The current render pass+-- instance /must/ not have been begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdEndRenderPass-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdEndRenderPass-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-vkCmdEndRenderPass-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics operations+--+-- - #VUID-vkCmdEndRenderPass-renderpass# This command /must/ only be+-- called inside of a render pass instance+--+-- - #VUID-vkCmdEndRenderPass-bufferlevel# @commandBuffer@ /must/ be a+-- primary 'Vulkan.Core10.Handles.CommandBuffer'+--+-- == 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 | Inside | Graphics |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,+-- 'Vulkan.Core10.Handles.CommandBuffer'+cmdEndRenderPass :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer in which to end the current render+ -- pass instance.+ CommandBuffer+ -> io ()+cmdEndRenderPass commandBuffer = liftIO $ do+ let vkCmdEndRenderPassPtr = pVkCmdEndRenderPass (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdEndRenderPassPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdEndRenderPass is null" Nothing Nothing+ let vkCmdEndRenderPass' = mkVkCmdEndRenderPass vkCmdEndRenderPassPtr+ traceAroundEvent "vkCmdEndRenderPass" (vkCmdEndRenderPass' (commandBufferHandle (commandBuffer)))+ pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdExecuteCommands+ :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr (Ptr CommandBuffer_T) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr (Ptr CommandBuffer_T) -> IO ()++-- | vkCmdExecuteCommands - Execute a secondary command buffer from a primary+-- command buffer+--+-- = Description+--+-- If any element of @pCommandBuffers@ was not recorded with the+-- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'+-- flag, and it was recorded into any other primary command buffer which is+-- currently in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle executable or recording state>,+-- that primary command buffer becomes+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle invalid>.+--+-- == Valid Usage+--+-- - #VUID-vkCmdExecuteCommands-pCommandBuffers-00088# Each element of+-- @pCommandBuffers@ /must/ have been allocated with a @level@ of+-- 'Vulkan.Core10.Enums.CommandBufferLevel.COMMAND_BUFFER_LEVEL_SECONDARY'+--+-- - #VUID-vkCmdExecuteCommands-pCommandBuffers-00089# Each element of+-- @pCommandBuffers@ /must/ be in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending or executable state>+--+-- - #VUID-vkCmdExecuteCommands-pCommandBuffers-00091# If any element of+-- @pCommandBuffers@ was not recorded with the+-- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'+-- flag, it /must/ not be in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>+--+-- - #VUID-vkCmdExecuteCommands-pCommandBuffers-00092# If any element of+-- @pCommandBuffers@ was not recorded with the+-- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'+-- flag, it /must/ not have already been recorded to @commandBuffer@+--+-- - #VUID-vkCmdExecuteCommands-pCommandBuffers-00093# If any element of+-- @pCommandBuffers@ was not recorded with the+-- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'+-- flag, it /must/ not appear more than once in @pCommandBuffers@+--+-- - #VUID-vkCmdExecuteCommands-pCommandBuffers-00094# Each element of+-- @pCommandBuffers@ /must/ have been allocated from a+-- 'Vulkan.Core10.Handles.CommandPool' that was created for the same+-- queue family as the 'Vulkan.Core10.Handles.CommandPool' from which+-- @commandBuffer@ was allocated+--+-- - #VUID-vkCmdExecuteCommands-pCommandBuffers-00096# If+-- 'cmdExecuteCommands' is being called within a render pass instance,+-- each element of @pCommandBuffers@ /must/ have been recorded with the+-- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT'+--+-- - #VUID-vkCmdExecuteCommands-pCommandBuffers-00099# If+-- 'cmdExecuteCommands' is being called within a render pass instance,+-- and any element of @pCommandBuffers@ was recorded with+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@framebuffer@+-- not equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE', that+-- 'Vulkan.Core10.Handles.Framebuffer' /must/ match the+-- 'Vulkan.Core10.Handles.Framebuffer' used in the current render pass+-- instance+--+-- - #VUID-vkCmdExecuteCommands-contents-06018# If 'cmdExecuteCommands'+-- is being called within a render pass instance begun with+-- 'cmdBeginRenderPass', its @contents@ parameter /must/ have been set+-- to+-- 'Vulkan.Core10.Enums.SubpassContents.SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS'+--+-- - #VUID-vkCmdExecuteCommands-pCommandBuffers-06019# If+-- 'cmdExecuteCommands' is being called within a render pass instance+-- begun with 'cmdBeginRenderPass', each element of @pCommandBuffers@+-- /must/ have been recorded with+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@subpass@+-- set to the index of the subpass which the given command buffer will+-- be executed in+--+-- - #VUID-vkCmdExecuteCommands-pBeginInfo-06020# If 'cmdExecuteCommands'+-- is being called within a render pass instance begun with+-- 'cmdBeginRenderPass', the render passes specified in the+-- @pBeginInfo->pInheritanceInfo->renderPass@ members of the+-- 'Vulkan.Core10.CommandBuffer.beginCommandBuffer' commands used to+-- begin recording each element of @pCommandBuffers@ /must/ be+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>+-- with the current render pass+--+-- - #VUID-vkCmdExecuteCommands-pNext-02865# If 'cmdExecuteCommands' is+-- being called within a render pass instance that included+-- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'+-- in the @pNext@ chain of 'RenderPassBeginInfo', then each element of+-- @pCommandBuffers@ /must/ have been recorded with+-- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM'+-- in the @pNext@ chain of+-- 'Vulkan.Core10.CommandBuffer.CommandBufferBeginInfo'+--+-- - #VUID-vkCmdExecuteCommands-pNext-02866# If 'cmdExecuteCommands' is+-- being called within a render pass instance that included+-- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'+-- in the @pNext@ chain of 'RenderPassBeginInfo', then each element of+-- @pCommandBuffers@ /must/ have been recorded with+-- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM'::@transform@+-- identical to+-- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'::@transform@+--+-- - #VUID-vkCmdExecuteCommands-pNext-02867# If 'cmdExecuteCommands' is+-- being called within a render pass instance that included+-- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'+-- in the @pNext@ chain of 'RenderPassBeginInfo', then each element of+-- @pCommandBuffers@ /must/ have been recorded with+-- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM'::@renderArea@+-- identical to 'RenderPassBeginInfo'::@renderArea@+--+-- - #VUID-vkCmdExecuteCommands-pCommandBuffers-00100# If+-- 'cmdExecuteCommands' is not being called within a render pass+-- instance, each element of @pCommandBuffers@ /must/ not have been+-- recorded with the+-- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT'+--+-- - #VUID-vkCmdExecuteCommands-commandBuffer-00101# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-inheritedQueries inherited queries>+-- feature is not enabled, @commandBuffer@ /must/ not have any queries+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>+--+-- - #VUID-vkCmdExecuteCommands-commandBuffer-00102# If @commandBuffer@+-- has a 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' query+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>,+-- then each element of @pCommandBuffers@ /must/ have been recorded+-- with+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@occlusionQueryEnable@+-- set to 'Vulkan.Core10.FundamentalTypes.TRUE'+--+-- - #VUID-vkCmdExecuteCommands-commandBuffer-00103# If @commandBuffer@+-- has a 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' query+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>,+-- then each element of @pCommandBuffers@ /must/ have been recorded+-- with+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@queryFlags@+-- having all bits set that are set for the query+--+-- - #VUID-vkCmdExecuteCommands-commandBuffer-00104# If @commandBuffer@+-- has a 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS'+-- query+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>,+-- then each element of @pCommandBuffers@ /must/ have been recorded+-- with+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@pipelineStatistics@+-- having all bits set that are set in the+-- 'Vulkan.Core10.Handles.QueryPool' the query uses+--+-- - #VUID-vkCmdExecuteCommands-pCommandBuffers-00105# Each element of+-- @pCommandBuffers@ /must/ not begin any query types that are+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>+-- in @commandBuffer@+--+-- - #VUID-vkCmdExecuteCommands-commandBuffer-01820# If @commandBuffer@+-- is a protected command buffer, then each element of+-- @pCommandBuffers@ /must/ be a protected command buffer+--+-- - #VUID-vkCmdExecuteCommands-commandBuffer-01821# If @commandBuffer@+-- is an unprotected command buffer, then each element of+-- @pCommandBuffers@ /must/ be an unprotected command buffer+--+-- - #VUID-vkCmdExecuteCommands-None-02286# This command /must/ not be+-- recorded when transform feedback is active+--+-- - #VUID-vkCmdExecuteCommands-pCommandBuffers-06021# If+-- @pCommandBuffers@ 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 any render pass instance that resumes it+--+-- - #VUID-vkCmdExecuteCommands-pCommandBuffers-06022# If+-- @pCommandBuffers@ 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 any render pass instance that resumes it+--+-- - #VUID-vkCmdExecuteCommands-variableSampleLocations-06023# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-variableSampleLocations variableSampleLocations>+-- limit is not supported, and any element of @pCommandBuffers@+-- 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+--+-- - #VUID-vkCmdExecuteCommands-flags-06024# If 'cmdExecuteCommands' is+-- being called within a render pass instance begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- its+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@flags@+-- parameter /must/ have included+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR'+--+-- - #VUID-vkCmdExecuteCommands-pBeginInfo-06025# If 'cmdExecuteCommands'+-- is being called within a render pass instance begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the render passes specified in the+-- @pBeginInfo->pInheritanceInfo->renderPass@ members of the+-- 'Vulkan.Core10.CommandBuffer.beginCommandBuffer' commands used to+-- begin recording each element of @pCommandBuffers@ /must/ be+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- - #VUID-vkCmdExecuteCommands-flags-06026# If 'cmdExecuteCommands' is+-- being called within a render pass instance begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @flags@ member of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.CommandBufferInheritanceRenderingInfoKHR'+-- structure included in the @pNext@ chain of+-- 'Vulkan.Core10.CommandBuffer.CommandBufferBeginInfo'::@pInheritanceInfo@+-- used to begin recording each element of @pCommandBuffers@ /must/ be+-- equal to the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@flags@+-- parameter to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- excluding+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR'+--+-- - #VUID-vkCmdExecuteCommands-colorAttachmentCount-06027# If+-- 'cmdExecuteCommands' is being called within a render pass instance+-- begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @colorAttachmentCount@ member of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.CommandBufferInheritanceRenderingInfoKHR'+-- structure included in the @pNext@ chain of+-- 'Vulkan.Core10.CommandBuffer.CommandBufferBeginInfo'::@pInheritanceInfo@+-- used to begin recording each element of @pCommandBuffers@ /must/ be+-- equal to the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+--+-- - #VUID-vkCmdExecuteCommands-imageView-06028# If 'cmdExecuteCommands'+-- is being called within a render pass instance begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- if the @imageView@ member of an element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- parameter to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR' is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the corresponding+-- element of the @pColorAttachmentFormats@ member of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.CommandBufferInheritanceRenderingInfoKHR'+-- structure included in the @pNext@ chain of+-- 'Vulkan.Core10.CommandBuffer.CommandBufferBeginInfo'::@pInheritanceInfo@+-- used to begin recording each element of @pCommandBuffers@ /must/ be+-- equal to the format used to create that image view+--+-- - #VUID-vkCmdExecuteCommands-pDepthAttachment-06029# If+-- 'cmdExecuteCommands' is being called within a render pass instance+-- begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- if the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->imageView@+-- parameter to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR' is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthAttachmentFormat@ member of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.CommandBufferInheritanceRenderingInfoKHR'+-- structure included in the @pNext@ chain of+-- 'Vulkan.Core10.CommandBuffer.CommandBufferBeginInfo'::@pInheritanceInfo@+-- used to begin recording each element of @pCommandBuffers@ /must/ be+-- equal to the format used to create that image view+--+-- - #VUID-vkCmdExecuteCommands-pStencilAttachment-06030# If+-- 'cmdExecuteCommands' is being called within a render pass instance+-- begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- if the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->imageView@+-- parameter to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR' is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @stencilAttachmentFormat@ member of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.CommandBufferInheritanceRenderingInfoKHR'+-- structure included in the @pNext@ chain of+-- 'Vulkan.Core10.CommandBuffer.CommandBufferBeginInfo'::@pInheritanceInfo@+-- used to begin recording each element of @pCommandBuffers@ /must/ be+-- equal to the format used to create that image view+--+-- - #VUID-vkCmdExecuteCommands-viewMask-06031# If 'cmdExecuteCommands'+-- is being called within a render pass instance begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @viewMask@ member of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.CommandBufferInheritanceRenderingInfoKHR'+-- structure included in the @pNext@ chain of+-- 'Vulkan.Core10.CommandBuffer.CommandBufferBeginInfo'::@pInheritanceInfo@+-- used to begin recording each element of @pCommandBuffers@ /must/ be+-- equal to the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@viewMask@+-- parameter to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+--+-- - #VUID-vkCmdExecuteCommands-pNext-06032# If 'cmdExecuteCommands' is+-- being called within a render pass instance begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and the @pNext@ chain of+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo' includes+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, if the @imageView@ member of an element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- parameter to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR' is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the corresponding+-- element of the @pColorAttachmentSamples@ member of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure included in the @pNext@ chain of+-- 'Vulkan.Core10.CommandBuffer.CommandBufferBeginInfo'::@pInheritanceInfo@+-- used to begin recording each element of @pCommandBuffers@ /must/ be+-- equal to the sample count used to create that image view+--+-- - #VUID-vkCmdExecuteCommands-pNext-06033# If 'cmdExecuteCommands' is+-- being called within a render pass instance begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and the @pNext@ chain of+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo' includes+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, if the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->imageView@+-- parameter to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR' is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure included in the @pNext@ chain of+-- 'Vulkan.Core10.CommandBuffer.CommandBufferBeginInfo'::@pInheritanceInfo@+-- used to begin recording each element of @pCommandBuffers@ /must/ be+-- equal to the sample count used to create that image view+--+-- - #VUID-vkCmdExecuteCommands-pNext-06034# If 'cmdExecuteCommands' is+-- being called within a render pass instance begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and the @pNext@ chain of+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo' includes+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, if the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->imageView@+-- parameter to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR' is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure included in the @pNext@ chain of+-- 'Vulkan.Core10.CommandBuffer.CommandBufferBeginInfo'::@pInheritanceInfo@+-- used to begin recording each element of @pCommandBuffers@ /must/ be+-- equal to the sample count used to create that image view+--+-- - #VUID-vkCmdExecuteCommands-pNext-06035# If 'cmdExecuteCommands' is+-- being called within a render pass instance begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and the @pNext@ chain of+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo' does not+-- include a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, if the @imageView@ member of an element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- parameter to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR' is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.CommandBufferInheritanceRenderingInfoKHR'::@rasterizationSamples@+-- /must/ be equal to the sample count used to create that image view+--+-- - #VUID-vkCmdExecuteCommands-pNext-06036# If 'cmdExecuteCommands' is+-- being called within a render pass instance begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and the @pNext@ chain of+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo' does not+-- include a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, if the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->imageView@+-- parameter to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR' is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.CommandBufferInheritanceRenderingInfoKHR'::@rasterizationSamples@+-- /must/ be equal to the sample count used to create that image view+--+-- - #VUID-vkCmdExecuteCommands-pNext-06037# If 'cmdExecuteCommands' is+-- being called within a render pass instance begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and the @pNext@ chain of+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo' does not+-- include a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, if the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->imageView@+-- parameter to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR' is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.CommandBufferInheritanceRenderingInfoKHR'::@rasterizationSamples@+-- /must/ be equal to the sample count used to create that image view -- -- == Valid Usage (Implicit) --
src/Vulkan/Core10/Device.hs view
@@ -110,6 +110,7 @@ import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsFeaturesNV) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_device_memory_report (PhysicalDeviceDeviceMemoryReportFeaturesEXT) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostics_config (PhysicalDeviceDiagnosticsConfigFeaturesNV)+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (PhysicalDeviceDynamicRenderingFeaturesKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_scissor_exclusive (PhysicalDeviceExclusiveScissorFeaturesNV) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_extended_dynamic_state2 (PhysicalDeviceExtendedDynamicState2FeaturesEXT) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_extended_dynamic_state (PhysicalDeviceExtendedDynamicStateFeaturesEXT)@@ -758,6 +759,7 @@ -- 'Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsFeaturesNV', -- 'Vulkan.Extensions.VK_EXT_device_memory_report.PhysicalDeviceDeviceMemoryReportFeaturesEXT', -- 'Vulkan.Extensions.VK_NV_device_diagnostics_config.PhysicalDeviceDiagnosticsConfigFeaturesNV',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PhysicalDeviceDynamicRenderingFeaturesKHR', -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PhysicalDeviceExclusiveScissorFeaturesNV', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.PhysicalDeviceExtendedDynamicState2FeaturesEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.PhysicalDeviceExtendedDynamicStateFeaturesEXT',@@ -919,6 +921,7 @@ getNext DeviceCreateInfo{..} = next extends :: forall e b proxy. Typeable e => proxy e -> (Extends DeviceCreateInfo e => b) -> Maybe b extends _ f+ | Just Refl <- eqT @e @PhysicalDeviceDynamicRenderingFeaturesKHR = Just f | Just Refl <- eqT @e @PhysicalDeviceRGBA10X6FormatsFeaturesEXT = Just f | Just Refl <- eqT @e @PhysicalDeviceRayTracingMotionBlurFeaturesNV = Just f | Just Refl <- eqT @e @PhysicalDeviceShaderIntegerDotProductFeaturesKHR = Just f
src/Vulkan/Core10/DeviceInitialization.hs view
@@ -1292,7 +1292,7 @@ -- -- Implicit layers /must/ be disabled if they do not support a version at -- least as high as @apiVersion@. See the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#LoaderAndLayerInterface Vulkan Loader Specification and Architecture Overview>+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#LoaderInterfaceArchitecture “Architecture of the Vulkan Loader Interfaces”> -- document for additional information. -- -- Note
src/Vulkan/Core10/Enums/AttachmentLoadOp.hs view
@@ -23,7 +23,8 @@ -- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>, -- 'Vulkan.Core10.Pass.AttachmentDescription',--- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentDescription2'+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentDescription2',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingAttachmentInfoKHR' newtype AttachmentLoadOp = AttachmentLoadOp Int32 deriving newtype (Eq, Ord, Storable, Zero)
src/Vulkan/Core10/Enums/AttachmentStoreOp.hs view
@@ -2,7 +2,7 @@ -- No documentation found for Chapter "AttachmentStoreOp" module Vulkan.Core10.Enums.AttachmentStoreOp (AttachmentStoreOp( ATTACHMENT_STORE_OP_STORE , ATTACHMENT_STORE_OP_DONT_CARE- , ATTACHMENT_STORE_OP_NONE_EXT+ , ATTACHMENT_STORE_OP_NONE_KHR , .. )) where @@ -30,7 +30,8 @@ -- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>, -- 'Vulkan.Core10.Pass.AttachmentDescription',--- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentDescription2'+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentDescription2',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingAttachmentInfoKHR' newtype AttachmentStoreOp = AttachmentStoreOp Int32 deriving newtype (Eq, Ord, Storable, Zero) @@ -49,14 +50,14 @@ -- For attachments with a color format, this uses the access type -- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COLOR_ATTACHMENT_WRITE_BIT'. pattern ATTACHMENT_STORE_OP_DONT_CARE = AttachmentStoreOp 1--- | 'ATTACHMENT_STORE_OP_NONE_EXT' specifies the contents within the render--- area are not modified after rendering. However, if the attachment was--- written to during the render pass, the contents of the attachment will--- be undefined inside the render area.-pattern ATTACHMENT_STORE_OP_NONE_EXT = AttachmentStoreOp 1000301000+-- | 'ATTACHMENT_STORE_OP_NONE_KHR' specifies the contents within the render+-- area are not accessed by the store operation. However, if the attachment+-- was written to during the render pass, the contents of the attachment+-- will be undefined inside the render area.+pattern ATTACHMENT_STORE_OP_NONE_KHR = AttachmentStoreOp 1000301000 {-# complete ATTACHMENT_STORE_OP_STORE, ATTACHMENT_STORE_OP_DONT_CARE,- ATTACHMENT_STORE_OP_NONE_EXT :: AttachmentStoreOp #-}+ ATTACHMENT_STORE_OP_NONE_KHR :: AttachmentStoreOp #-} conNameAttachmentStoreOp :: String conNameAttachmentStoreOp = "AttachmentStoreOp"@@ -68,7 +69,7 @@ showTableAttachmentStoreOp = [ (ATTACHMENT_STORE_OP_STORE , "STORE") , (ATTACHMENT_STORE_OP_DONT_CARE, "DONT_CARE")- , (ATTACHMENT_STORE_OP_NONE_EXT , "NONE_EXT")+ , (ATTACHMENT_STORE_OP_NONE_KHR , "NONE_KHR") ] instance Show AttachmentStoreOp where
src/Vulkan/Core10/Enums/Format.hs view
@@ -270,6 +270,7 @@ -- 'Vulkan.Core10.Pass.AttachmentDescription', -- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentDescription2', -- 'Vulkan.Core10.BufferView.BufferViewCreateInfo',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.CommandBufferInheritanceRenderingInfoKHR', -- 'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentImageInfo', -- 'Vulkan.Extensions.VK_NV_ray_tracing.GeometryTrianglesNV', -- 'Vulkan.Core10.Image.ImageCreateInfo',@@ -278,6 +279,7 @@ -- 'Vulkan.Core10.ImageView.ImageViewCreateInfo', -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2', -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceSparseImageFormatInfo2',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR', -- 'Vulkan.Extensions.VK_EXT_custom_border_color.SamplerCustomBorderColorCreateInfoEXT', -- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionCreateInfo', -- 'Vulkan.Extensions.VK_KHR_surface.SurfaceFormatKHR',
src/Vulkan/Core10/Enums/ImageLayout.hs view
@@ -73,6 +73,9 @@ -- 'Vulkan.Core10.Image.ImageCreateInfo', -- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier', -- 'Vulkan.Extensions.VK_KHR_synchronization2.ImageMemoryBarrier2KHR',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingAttachmentInfoKHR',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentDensityMapAttachmentInfoEXT',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentShadingRateAttachmentInfoKHR', -- 'Vulkan.Extensions.VK_KHR_copy_commands2.ResolveImageInfo2KHR', -- 'Vulkan.Extensions.VK_HUAWEI_invocation_mask.cmdBindInvocationMaskHUAWEI', -- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdBindShadingRateImageNV',
src/Vulkan/Core10/Enums/PipelineCreateFlagBits.hs view
@@ -19,6 +19,8 @@ , PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR , PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR , PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR+ , PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT+ , PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR , PIPELINE_CREATE_DISPATCH_BASE_BIT , PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT , ..@@ -151,6 +153,14 @@ -- - 'PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV' specifies that the -- pipeline is allowed to use @OpTraceRayMotionNV@. --+-- - 'PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'+-- specifies that the pipeline will be used with a fragment shading+-- rate attachment.+--+-- - 'PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT'+-- specifies that the pipeline will be used with a fragment density map+-- attachment.+-- -- It is valid to set both 'PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT' and -- 'PIPELINE_CREATE_DERIVATIVE_BIT'. This allows a pipeline to be both a -- parent and possibly a child in a pipeline hierarchy. See@@ -200,43 +210,56 @@ pattern PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR = PipelineCreateFlagBits 0x00008000 -- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR" pattern PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR = PipelineCreateFlagBits 0x00004000+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT"+pattern PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = PipelineCreateFlagBits 0x00400000+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"+pattern PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR =+ PipelineCreateFlagBits 0x00200000 -- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_DISPATCH_BASE_BIT"-pattern PIPELINE_CREATE_DISPATCH_BASE_BIT = PipelineCreateFlagBits 0x00000010+pattern PIPELINE_CREATE_DISPATCH_BASE_BIT = PipelineCreateFlagBits 0x00000010 -- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"-pattern PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = PipelineCreateFlagBits 0x00000008+pattern PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = PipelineCreateFlagBits 0x00000008 conNamePipelineCreateFlagBits :: String conNamePipelineCreateFlagBits = "PipelineCreateFlagBits" enumPrefixPipelineCreateFlagBits :: String-enumPrefixPipelineCreateFlagBits = "PIPELINE_CREATE_"+enumPrefixPipelineCreateFlagBits = "PIPELINE_" showTablePipelineCreateFlagBits :: [(PipelineCreateFlagBits, String)] showTablePipelineCreateFlagBits =- [ (PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT , "DISABLE_OPTIMIZATION_BIT")- , (PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT , "ALLOW_DERIVATIVES_BIT")- , (PIPELINE_CREATE_DERIVATIVE_BIT , "DERIVATIVE_BIT")- , (PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV , "RAY_TRACING_ALLOW_MOTION_BIT_NV")- , (PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT , "EARLY_RETURN_ON_FAILURE_BIT_EXT")- , (PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT, "FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT")- , (PIPELINE_CREATE_LIBRARY_BIT_KHR , "LIBRARY_BIT_KHR")- , (PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV , "INDIRECT_BINDABLE_BIT_NV")- , (PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR , "CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR")- , (PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR , "CAPTURE_STATISTICS_BIT_KHR")- , (PIPELINE_CREATE_DEFER_COMPILE_BIT_NV , "DEFER_COMPILE_BIT_NV")+ [ (PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT , "CREATE_DISABLE_OPTIMIZATION_BIT")+ , (PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT , "CREATE_ALLOW_DERIVATIVES_BIT")+ , (PIPELINE_CREATE_DERIVATIVE_BIT , "CREATE_DERIVATIVE_BIT")+ , (PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV , "CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV")+ , (PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT , "CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT")+ , (PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT, "CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT")+ , (PIPELINE_CREATE_LIBRARY_BIT_KHR , "CREATE_LIBRARY_BIT_KHR")+ , (PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV , "CREATE_INDIRECT_BINDABLE_BIT_NV")+ , (PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR , "CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR")+ , (PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR , "CREATE_CAPTURE_STATISTICS_BIT_KHR")+ , (PIPELINE_CREATE_DEFER_COMPILE_BIT_NV , "CREATE_DEFER_COMPILE_BIT_NV") , ( PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR- , "RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR"+ , "CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR" )- , (PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR , "RAY_TRACING_SKIP_AABBS_BIT_KHR")- , (PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR, "RAY_TRACING_SKIP_TRIANGLES_BIT_KHR")+ , (PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR , "CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR")+ , (PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR, "CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR") , ( PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR- , "RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR"+ , "CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR" )- , (PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR , "RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR")- , (PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR")- , (PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR , "RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR")- , (PIPELINE_CREATE_DISPATCH_BASE_BIT , "DISPATCH_BASE_BIT")- , (PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT , "VIEW_INDEX_FROM_DEVICE_INDEX_BIT")+ , (PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR, "CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR")+ , ( PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR+ , "CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR"+ )+ , (PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR")+ , ( PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT+ , "RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT"+ )+ , ( PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR+ , "RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"+ )+ , (PIPELINE_CREATE_DISPATCH_BASE_BIT , "CREATE_DISPATCH_BASE_BIT")+ , (PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT, "CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT") ] instance Show PipelineCreateFlagBits where
src/Vulkan/Core10/Enums/PipelineStageFlagBits.hs view
@@ -191,7 +191,7 @@ -- 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-attachment shading rate image>+-- <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 PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = PipelineStageFlagBits 0x00400000
src/Vulkan/Core10/Enums/RenderPassCreateFlagBits.hs view
@@ -20,7 +20,7 @@ type RenderPassCreateFlags = RenderPassCreateFlagBits -- | VkRenderPassCreateFlagBits - Bitmask specifying additional properties of--- a renderpass+-- a render pass -- -- = See Also --@@ -30,7 +30,7 @@ deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits) -- | 'RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM' specifies that the created--- renderpass is compatible with+-- render pass is compatible with -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-renderpass-transform render pass transform>. pattern RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM = RenderPassCreateFlagBits 0x00000002
src/Vulkan/Core10/Enums/SampleCountFlagBits.hs view
@@ -33,6 +33,8 @@ -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>, -- 'Vulkan.Core10.Pass.AttachmentDescription', -- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentDescription2',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.CommandBufferInheritanceRenderingInfoKHR', -- 'Vulkan.Extensions.VK_NV_coverage_reduction_mode.FramebufferMixedSamplesCombinationNV', -- 'Vulkan.Core10.Image.ImageCreateInfo', -- 'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PhysicalDeviceFragmentShadingRateEnumsPropertiesNV',
src/Vulkan/Core10/Enums/StructureType.hs view
@@ -407,6 +407,15 @@ , STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV , STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV , STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP+ , STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX+ , STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD+ , STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT+ , STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR+ , STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR+ , STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR+ , STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR+ , STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR+ , STRUCTURE_TYPE_RENDERING_INFO_KHR , STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD , STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX , STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX@@ -592,6 +601,7 @@ -- 'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout', -- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentReference2', -- 'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentReferenceStencilLayout',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD', -- 'Vulkan.CStruct.Extends.BaseInStructure', -- 'Vulkan.CStruct.Extends.BaseOutStructure', -- 'Vulkan.Extensions.VK_NV_ray_tracing.BindAccelerationStructureMemoryInfoNV',@@ -627,6 +637,7 @@ -- 'Vulkan.Extensions.VK_EXT_conditional_rendering.CommandBufferInheritanceConditionalRenderingInfoEXT', -- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo', -- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.CommandBufferInheritanceRenderingInfoKHR', -- 'Vulkan.Extensions.VK_NV_inherited_viewport_scissor.CommandBufferInheritanceViewportScissorInfoNV', -- 'Vulkan.Extensions.VK_KHR_synchronization2.CommandBufferSubmitInfoKHR', -- 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo',@@ -804,6 +815,7 @@ -- 'Vulkan.Extensions.VK_FUCHSIA_external_memory.MemoryZirconHandlePropertiesFUCHSIA', -- 'Vulkan.Extensions.VK_EXT_metal_surface.MetalSurfaceCreateInfoEXT', -- 'Vulkan.Extensions.VK_EXT_sample_locations.MultisamplePropertiesEXT',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.MultiviewPerViewAttributesInfoNVX', -- 'Vulkan.Extensions.VK_VALVE_mutable_descriptor_type.MutableDescriptorTypeCreateInfoVALVE', -- 'Vulkan.Extensions.VK_INTEL_performance_query.PerformanceConfigurationAcquireInfoINTEL', -- 'Vulkan.Extensions.VK_KHR_performance_query.PerformanceCounterDescriptionKHR',@@ -846,6 +858,7 @@ -- 'Vulkan.Extensions.VK_EXT_discard_rectangles.PhysicalDeviceDiscardRectanglePropertiesEXT', -- 'Vulkan.Core12.Promoted_From_VK_KHR_driver_properties.PhysicalDeviceDriverProperties', -- 'Vulkan.Extensions.VK_EXT_physical_device_drm.PhysicalDeviceDrmPropertiesEXT',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PhysicalDeviceDynamicRenderingFeaturesKHR', -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PhysicalDeviceExclusiveScissorFeaturesNV', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.PhysicalDeviceExtendedDynamicState2FeaturesEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.PhysicalDeviceExtendedDynamicStateFeaturesEXT',@@ -1013,6 +1026,7 @@ -- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo', -- 'Vulkan.Extensions.VK_AMD_rasterization_order.PipelineRasterizationStateRasterizationOrderAMD', -- 'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR', -- 'Vulkan.Extensions.VK_NV_representative_fragment_test.PipelineRepresentativeFragmentTestStateCreateInfoNV', -- 'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT', -- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo',@@ -1055,6 +1069,10 @@ -- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo', -- 'Vulkan.Extensions.VK_EXT_sample_locations.RenderPassSampleLocationsBeginInfoEXT', -- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingAttachmentInfoKHR',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentDensityMapAttachmentInfoEXT',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentShadingRateAttachmentInfoKHR',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR', -- 'Vulkan.Extensions.VK_KHR_copy_commands2.ResolveImageInfo2KHR', -- 'Vulkan.Extensions.VK_EXT_sample_locations.SampleLocationsInfoEXT', -- 'Vulkan.Extensions.VK_EXT_border_color_swizzle.SamplerBorderColorComponentMappingCreateInfoEXT',@@ -1985,6 +2003,24 @@ pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV = StructureType 1000050000 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP" pattern STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP = StructureType 1000049000+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX"+pattern STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX = StructureType 1000044009+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD"+pattern STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD = StructureType 1000044008+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT"+pattern STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT = StructureType 1000044007+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR"+pattern STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR = StructureType 1000044006+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR"+pattern STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR = StructureType 1000044004+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR"+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR = StructureType 1000044003+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR"+pattern STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR = StructureType 1000044002+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR"+pattern STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR = StructureType 1000044001+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDERING_INFO_KHR"+pattern STRUCTURE_TYPE_RENDERING_INFO_KHR = StructureType 1000044000 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD" pattern STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD = StructureType 1000041000 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX"@@ -2676,6 +2712,15 @@ STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV, STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV, STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP,+ STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX,+ STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD,+ STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT,+ STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR,+ STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR,+ STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR,+ STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR,+ STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR,+ STRUCTURE_TYPE_RENDERING_INFO_KHR, STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD, STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX, STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX,@@ -3448,12 +3493,25 @@ , "PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV" ) , (STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP, "STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP")- , (STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD , "TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD")- , (STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX , "IMAGE_VIEW_ADDRESS_PROPERTIES_NVX")- , (STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX , "IMAGE_VIEW_HANDLE_INFO_NVX")- , (STRUCTURE_TYPE_CU_LAUNCH_INFO_NVX , "CU_LAUNCH_INFO_NVX")- , (STRUCTURE_TYPE_CU_FUNCTION_CREATE_INFO_NVX , "CU_FUNCTION_CREATE_INFO_NVX")- , (STRUCTURE_TYPE_CU_MODULE_CREATE_INFO_NVX , "CU_MODULE_CREATE_INFO_NVX")+ , (STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX , "MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX")+ , (STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD , "ATTACHMENT_SAMPLE_COUNT_INFO_AMD")+ , ( STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT+ , "RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT"+ )+ , ( STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR+ , "RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR"+ )+ , (STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR , "COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR")+ , (STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR, "PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR")+ , (STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR , "PIPELINE_RENDERING_CREATE_INFO_KHR")+ , (STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR , "RENDERING_ATTACHMENT_INFO_KHR")+ , (STRUCTURE_TYPE_RENDERING_INFO_KHR , "RENDERING_INFO_KHR")+ , (STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD , "TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD")+ , (STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX , "IMAGE_VIEW_ADDRESS_PROPERTIES_NVX")+ , (STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX , "IMAGE_VIEW_HANDLE_INFO_NVX")+ , (STRUCTURE_TYPE_CU_LAUNCH_INFO_NVX , "CU_LAUNCH_INFO_NVX")+ , (STRUCTURE_TYPE_CU_FUNCTION_CREATE_INFO_NVX , "CU_FUNCTION_CREATE_INFO_NVX")+ , (STRUCTURE_TYPE_CU_MODULE_CREATE_INFO_NVX , "CU_MODULE_CREATE_INFO_NVX") , ( STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT , "PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT" )
src/Vulkan/Core10/FundamentalTypes.hs view
@@ -192,6 +192,7 @@ -- 'Vulkan.Extensions.VK_NV_shading_rate_image.PhysicalDeviceShadingRateImagePropertiesNV', -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR', -- 'Rect2D', 'Vulkan.Extensions.VK_KHR_incremental_present.RectLayerKHR',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentShadingRateAttachmentInfoKHR', -- 'Vulkan.Extensions.VK_EXT_sample_locations.SampleLocationsInfoEXT', -- 'Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCapabilities2EXT', -- 'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR',@@ -332,6 +333,7 @@ -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV', -- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo', -- 'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR', -- 'Vulkan.Extensions.VK_EXT_discard_rectangles.cmdSetDiscardRectangleEXT', -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.cmdSetExclusiveScissorNV', -- 'Vulkan.Core10.CommandBufferBuilding.cmdSetScissor',@@ -411,6 +413,7 @@ -- 'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT', -- 'Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsLayoutTokenNV', -- 'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.MultiviewPerViewAttributesInfoNVX', -- 'Vulkan.Extensions.VK_INTEL_performance_query.PerformanceOverrideInfoINTEL', -- 'Vulkan.Extensions.VK_INTEL_performance_query.PerformanceValueDataINTEL', -- 'Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage.PhysicalDevice16BitStorageFeatures',@@ -441,6 +444,7 @@ -- 'Vulkan.Extensions.VK_EXT_device_memory_report.PhysicalDeviceDeviceMemoryReportFeaturesEXT', -- 'Vulkan.Extensions.VK_NV_device_diagnostics_config.PhysicalDeviceDiagnosticsConfigFeaturesNV', -- 'Vulkan.Extensions.VK_EXT_physical_device_drm.PhysicalDeviceDrmPropertiesEXT',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PhysicalDeviceDynamicRenderingFeaturesKHR', -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PhysicalDeviceExclusiveScissorFeaturesNV', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.PhysicalDeviceExtendedDynamicState2FeaturesEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.PhysicalDeviceExtendedDynamicStateFeaturesEXT',
src/Vulkan/Core10/Handles.hs view
@@ -514,6 +514,7 @@ -- 'Vulkan.Core10.CommandBufferBuilding.cmdBeginRenderPass', -- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.cmdBeginRenderPass2', -- 'Vulkan.Extensions.VK_KHR_create_renderpass2.cmdBeginRenderPass2KHR',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR', -- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginTransformFeedbackEXT', -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginVideoCodingKHR vkCmdBeginVideoCodingKHR>, -- 'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets',@@ -580,6 +581,7 @@ -- 'Vulkan.Core10.CommandBufferBuilding.cmdEndRenderPass', -- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.cmdEndRenderPass2', -- 'Vulkan.Extensions.VK_KHR_create_renderpass2.cmdEndRenderPass2KHR',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdEndRenderingKHR', -- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndTransformFeedbackEXT', -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdEndVideoCodingKHR vkCmdEndVideoCodingKHR>, -- 'Vulkan.Core10.CommandBufferBuilding.cmdExecuteCommands',@@ -868,6 +870,9 @@ -- 'Vulkan.Core10.Pass.FramebufferCreateInfo', -- 'Vulkan.Extensions.VK_NVX_image_view_handle.ImageViewHandleInfoNVX', -- 'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingAttachmentInfoKHR',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentDensityMapAttachmentInfoEXT',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentShadingRateAttachmentInfoKHR', -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoPictureResourceKHR VkVideoPictureResourceKHR>, -- 'Vulkan.Extensions.VK_HUAWEI_invocation_mask.cmdBindInvocationMaskHUAWEI', -- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdBindShadingRateImageNV',
src/Vulkan/Core10/Image.hs view
@@ -1373,6 +1373,10 @@ -- 'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo', -- 'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo', -- 'Vulkan.Extensions.VK_KHR_swapchain.ImageSwapchainCreateInfoKHR',+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH264ProfileEXT VkVideoDecodeH264ProfileEXT>,+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH265ProfileEXT VkVideoDecodeH265ProfileEXT>,+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264ProfileEXT VkVideoEncodeH264ProfileEXT>,+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH265ProfileEXT VkVideoEncodeH265ProfileEXT>, -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoProfileKHR VkVideoProfileKHR>, -- or -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoProfilesKHR VkVideoProfilesKHR>
src/Vulkan/Core10/ImageView.hs view
@@ -1031,7 +1031,7 @@ -- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT', -- the @usage@ member of the -- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo'--- instance /must/ not include any bits that were not set in the+-- structure /must/ not include any bits that were not set in the -- @usage@ member of the -- 'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo' -- structure used to create @image@@@ -1118,6 +1118,10 @@ -- 'Vulkan.Extensions.VK_EXT_astc_decode_mode.ImageViewASTCDecodeModeEXT', -- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo', -- 'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo',+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH264ProfileEXT VkVideoDecodeH264ProfileEXT>,+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH265ProfileEXT VkVideoDecodeH265ProfileEXT>,+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264ProfileEXT VkVideoEncodeH264ProfileEXT>,+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH265ProfileEXT VkVideoEncodeH265ProfileEXT>, -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoProfileKHR VkVideoProfileKHR>, -- or -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoProfilesKHR VkVideoProfilesKHR>
src/Vulkan/Core10/Pass.hs view
@@ -1020,8 +1020,8 @@ -- not read from the corresponding input attachment index. Fragment shaders -- /can/ use subpass input variables to access the contents of an input -- attachment at the fragment’s (x, y, layer) framebuffer coordinates.--- Input attachments /must/ not be used by any subpasses within a--- renderpass that enables+-- Input attachments /must/ not be used by any subpasses within a render+-- pass that enables -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-renderpass-transform render pass transform>. -- -- Each element of the @pColorAttachments@ array corresponds to an output@@ -2008,7 +2008,7 @@ -- -- Other than the exceptions listed below, applications /must/ ensure that -- all accesses to memory that backs image subresources used as attachments--- in a given renderpass instance either happen-before the+-- in a given render pass instance either happen-before the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops load operations> -- for those attachments, or happen-after the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops store operations>@@ -2058,79 +2058,88 @@ -- -- == Valid Usage ----- - #VUID-VkFramebufferCreateInfo-attachmentCount-00876#--- @attachmentCount@ /must/ be equal to the attachment count specified--- in @renderPass@+-- - #VUID-VkFramebufferCreateInfo-attachmentCount-00876# If @renderpass@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @attachmentCount@+-- /must/ be equal to the attachment count specified in @renderPass@ ----- - #VUID-VkFramebufferCreateInfo-flags-02778# If @flags@ does not--- include+-- - #VUID-VkFramebufferCreateInfo-flags-02778# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', @flags@ does not include -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- and @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid -- pointer to an array of @attachmentCount@ valid -- 'Vulkan.Core10.Handles.ImageView' handles ----- - #VUID-VkFramebufferCreateInfo-pAttachments-00877# If @flags@ does--- not include+-- - #VUID-VkFramebufferCreateInfo-pAttachments-00877# If @renderpass@ is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not+-- include -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- each element of @pAttachments@ that is used as a color attachment or -- resolve attachment by @renderPass@ /must/ have been created with a -- @usage@ value including -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT' ----- - #VUID-VkFramebufferCreateInfo-pAttachments-02633# If @flags@ does--- not include+-- - #VUID-VkFramebufferCreateInfo-pAttachments-02633# If @renderpass@ is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not+-- include -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- each element of @pAttachments@ that is used as a depth\/stencil -- attachment by @renderPass@ /must/ have been created with a @usage@ -- value including -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT' ----- - #VUID-VkFramebufferCreateInfo-pAttachments-02634# If @flags@ does--- not include+-- - #VUID-VkFramebufferCreateInfo-pAttachments-02634# If @renderpass@ is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not+-- include -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- each element of @pAttachments@ that is used as a depth\/stencil -- resolve attachment by @renderPass@ /must/ have been created with a -- @usage@ value including -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT' ----- - #VUID-VkFramebufferCreateInfo-pAttachments-00879# If @flags@ does--- not include+-- - #VUID-VkFramebufferCreateInfo-pAttachments-00879# If @renderpass@ is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', @flags@ does not include -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- each element of @pAttachments@ that is used as an input attachment -- by @renderPass@ /must/ have been created with a @usage@ value -- including -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT' ----- - #VUID-VkFramebufferCreateInfo-pAttachments-02552# Each element of+-- - #VUID-VkFramebufferCreateInfo-pAttachments-02552# If @renderpass@ is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE', each element of -- @pAttachments@ that is used as a fragment density map attachment by -- @renderPass@ /must/ not have been created with a @flags@ value -- including -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT' ----- - #VUID-VkFramebufferCreateInfo-renderPass-02553# If @renderPass@ has--- a fragment density map attachment and+-- - #VUID-VkFramebufferCreateInfo-renderPass-02553# If @renderpass@ is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @renderPass@ has a+-- fragment density map attachment, and -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMapNonSubsampledImages non-subsample image feature> -- is not enabled, each element of @pAttachments@ /must/ have been -- created with a @flags@ value including -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT' -- unless that element is the fragment density map attachment ----- - #VUID-VkFramebufferCreateInfo-pAttachments-00880# If @flags@ does--- not include+-- - #VUID-VkFramebufferCreateInfo-pAttachments-00880# If @renderpass@ is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not+-- include -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- each element of @pAttachments@ /must/ have been created with a -- 'Vulkan.Core10.Enums.Format.Format' value that matches the -- 'Vulkan.Core10.Enums.Format.Format' specified by the corresponding -- 'AttachmentDescription' in @renderPass@ ----- - #VUID-VkFramebufferCreateInfo-pAttachments-00881# If @flags@ does--- not include+-- - #VUID-VkFramebufferCreateInfo-pAttachments-00881# If @renderpass@ is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not+-- include -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- each element of @pAttachments@ /must/ have been created with a -- @samples@ value that matches the @samples@ value specified by the -- corresponding 'AttachmentDescription' in @renderPass@ ----- - #VUID-VkFramebufferCreateInfo-flags-04533# If @flags@ does not+-- - #VUID-VkFramebufferCreateInfo-flags-04533# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not -- include -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- each element of @pAttachments@ that is used as an input, color,@@ -2138,7 +2147,8 @@ -- been created with a 'Vulkan.Core10.Image.ImageCreateInfo'::@width@ -- greater than or equal to @width@ ----- - #VUID-VkFramebufferCreateInfo-flags-04534# If @flags@ does not+-- - #VUID-VkFramebufferCreateInfo-flags-04534# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not -- include -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- each element of @pAttachments@ that is used as an input, color,@@ -2146,7 +2156,8 @@ -- been created with a 'Vulkan.Core10.Image.ImageCreateInfo'::@height@ -- greater than or equal to @height@ ----- - #VUID-VkFramebufferCreateInfo-flags-04535# If @flags@ does not+-- - #VUID-VkFramebufferCreateInfo-flags-04535# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not -- include -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- each element of @pAttachments@ that is used as an input, color,@@ -2155,40 +2166,46 @@ -- 'Vulkan.Core10.ImageView.ImageViewCreateInfo'::@subresourceRange.layerCount@ -- greater than or equal to @layers@ ----- - #VUID-VkFramebufferCreateInfo-renderPass-04536# If @renderPass@ was+-- - #VUID-VkFramebufferCreateInfo-renderPass-04536# If @renderpass@ is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @renderPass@ was -- specified with non-zero view masks, each element of @pAttachments@ -- that is used as an input, color, resolve, or depth\/stencil -- attachment by @renderPass@ /must/ have a @layerCount@ greater than -- the index of the most significant bit set in any of those view masks ----- - #VUID-VkFramebufferCreateInfo-renderPass-02746# If @renderPass@ was+-- - #VUID-VkFramebufferCreateInfo-renderPass-02746# If @renderpass@ is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @renderPass@ was -- specified with non-zero view masks, each element of @pAttachments@ -- that is referenced by @fragmentDensityMapAttachment@ /must/ have a -- @layerCount@ equal to @1@ or greater than the index of the most -- significant bit set in any of those view masks ----- - #VUID-VkFramebufferCreateInfo-renderPass-02747# If @renderPass@ was+-- - #VUID-VkFramebufferCreateInfo-renderPass-02747# If @renderpass@ is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @renderPass@ was -- not specified with non-zero view masks, each element of -- @pAttachments@ that is referenced by @fragmentDensityMapAttachment@ -- /must/ have a @layerCount@ equal to @1@ ----- - #VUID-VkFramebufferCreateInfo-pAttachments-02555# If @flags@ does--- not include+-- - #VUID-VkFramebufferCreateInfo-pAttachments-02555# If @renderpass@ is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not+-- include -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- an element of @pAttachments@ that is referenced by -- @fragmentDensityMapAttachment@ /must/ have a width at least as large -- as -- \(\left\lceil{\frac{width}{maxFragmentDensityTexelSize_{width}}}\right\rceil\) ----- - #VUID-VkFramebufferCreateInfo-pAttachments-02556# If @flags@ does--- not include+-- - #VUID-VkFramebufferCreateInfo-pAttachments-02556# If @renderpass@ is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not+-- include -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- an element of @pAttachments@ that is referenced by -- @fragmentDensityMapAttachment@ /must/ have a height at least as -- large as -- \(\left\lceil{\frac{height}{maxFragmentDensityTexelSize_{height}}}\right\rceil\) ----- - #VUID-VkFramebufferCreateInfo-flags-04537# If @flags@ does not+-- - #VUID-VkFramebufferCreateInfo-flags-04537# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not -- include -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- and @renderPass@ was specified with non-zero view masks, each@@ -2198,7 +2215,8 @@ -- greater than the index of the most significant bit set in any of -- those view masks ----- - #VUID-VkFramebufferCreateInfo-flags-04538# If @flags@ does not+-- - #VUID-VkFramebufferCreateInfo-flags-04538# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not -- include -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- and @renderPass@ was not specified with non-zero view masks, each@@ -2207,7 +2225,8 @@ -- by @renderPass@ /must/ have a @layerCount@ that is either @1@, or -- greater than @layers@ ----- - #VUID-VkFramebufferCreateInfo-flags-04539# If @flags@ does not+-- - #VUID-VkFramebufferCreateInfo-flags-04539# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not -- include -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- an element of @pAttachments@ that is used as a@@ -2218,7 +2237,8 @@ -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateAttachmentInfoKHR' -- which references that attachment ----- - #VUID-VkFramebufferCreateInfo-flags-04540# If @flags@ does not+-- - #VUID-VkFramebufferCreateInfo-flags-04540# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not -- include -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- an element of @pAttachments@ that is used as a@@ -2246,23 +2266,24 @@ -- -- - #VUID-VkFramebufferCreateInfo-width-00886# @width@ /must/ be less -- than or equal to--- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferWidth@+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxFramebufferWidth maxFramebufferWidth> -- -- - #VUID-VkFramebufferCreateInfo-height-00887# @height@ /must/ be -- greater than @0@ -- -- - #VUID-VkFramebufferCreateInfo-height-00888# @height@ /must/ be less -- than or equal to--- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferHeight@+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxFramebufferHeight maxFramebufferHeight> -- -- - #VUID-VkFramebufferCreateInfo-layers-00889# @layers@ /must/ be -- greater than @0@ -- -- - #VUID-VkFramebufferCreateInfo-layers-00890# @layers@ /must/ be less -- than or equal to--- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferLayers@+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxFramebufferLayers maxFramebufferLayers> ----- - #VUID-VkFramebufferCreateInfo-renderPass-02531# If @renderPass@ was+-- - #VUID-VkFramebufferCreateInfo-renderPass-02531# If @renderpass@ is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @renderPass@ was -- specified with non-zero view masks, @layers@ /must/ be @1@ -- -- - #VUID-VkFramebufferCreateInfo-pAttachments-00891# If @flags@ does@@ -2278,45 +2299,50 @@ -- -- - #VUID-VkFramebufferCreateInfo-flags-03190# If @flags@ includes -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',--- the @pNext@ chain /must/ include an instance of+-- the @pNext@ chain /must/ include a -- 'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'+-- structure -- -- - #VUID-VkFramebufferCreateInfo-flags-03191# If @flags@ includes -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',--- the @attachmentImageInfoCount@ member of an instance of+-- the @attachmentImageInfoCount@ member of a -- 'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'--- in the @pNext@ chain /must/ be equal to either zero or+-- structure in the @pNext@ chain /must/ be equal to either zero or -- @attachmentCount@ ----- - #VUID-VkFramebufferCreateInfo-flags-04541# If @flags@ includes+-- - #VUID-VkFramebufferCreateInfo-flags-04541# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- the @width@ member of any element of the @pAttachmentImageInfos@--- member of an instance of+-- member of a -- 'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'--- in the @pNext@ chain that is used as an input, color, resolve or--- depth\/stencil attachment in @renderPass@ /must/ be greater than or--- equal to @width@+-- structure in the @pNext@ chain that is used as an input, color,+-- resolve or depth\/stencil attachment in @renderPass@ /must/ be+-- greater than or equal to @width@ ----- - #VUID-VkFramebufferCreateInfo-flags-04542# If @flags@ includes+-- - #VUID-VkFramebufferCreateInfo-flags-04542# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- the @height@ member of any element of the @pAttachmentImageInfos@--- member of an instance of+-- member of a -- 'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'--- in the @pNext@ chain that is used as an input, color, resolve or--- depth\/stencil attachment in @renderPass@ /must/ be greater than or--- equal to @height@+-- structure in the @pNext@ chain that is used as an input, color,+-- resolve or depth\/stencil attachment in @renderPass@ /must/ be+-- greater than or equal to @height@ ----- - #VUID-VkFramebufferCreateInfo-flags-03196# If @flags@ includes+-- - #VUID-VkFramebufferCreateInfo-flags-03196# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- the @width@ member of any element of the @pAttachmentImageInfos@--- member of an instance of+-- member of a -- 'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'--- in the @pNext@ chain that is referenced by+-- structure in the @pNext@ chain that is referenced by -- 'Vulkan.Extensions.VK_EXT_fragment_density_map.RenderPassFragmentDensityMapCreateInfoEXT'::@fragmentDensityMapAttachment@ -- in @renderPass@ /must/ be greater than or equal to -- \(\left\lceil{\frac{width}{maxFragmentDensityTexelSize_{width}}}\right\rceil\) ----- - #VUID-VkFramebufferCreateInfo-flags-03197# If @flags@ includes+-- - #VUID-VkFramebufferCreateInfo-flags-03197# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- the @height@ member of any element of the @pAttachmentImageInfos@ -- member of a@@ -2326,12 +2352,13 @@ -- in @renderPass@ /must/ be greater than or equal to -- \(\left\lceil{\frac{height}{maxFragmentDensityTexelSize_{height}}}\right\rceil\) ----- - #VUID-VkFramebufferCreateInfo-flags-04543# If @flags@ includes+-- - #VUID-VkFramebufferCreateInfo-flags-04543# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- the @width@ member of any element of the @pAttachmentImageInfos@--- member of an instance of+-- member of a -- 'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'--- in the @pNext@ chain that is used as a+-- structure in the @pNext@ chain that is used as a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-attachment fragment shading rate attachment> -- /must/ be greater than or equal to ⌈@width@ \/ @texelWidth@⌉, where -- @texelWidth@ is the largest value of@@ -2339,12 +2366,13 @@ -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateAttachmentInfoKHR' -- which references that attachment ----- - #VUID-VkFramebufferCreateInfo-flags-04544# If @flags@ includes+-- - #VUID-VkFramebufferCreateInfo-flags-04544# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- the @height@ member of any element of the @pAttachmentImageInfos@--- member of an instance of+-- member of a -- 'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'--- in the @pNext@ chain that is used as a+-- structure in the @pNext@ chain that is used as a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-attachment fragment shading rate attachment> -- /must/ be greater than or equal to ⌈@height@ \/ @texelHeight@⌉, -- where @texelHeight@ is the largest value of@@ -2352,16 +2380,18 @@ -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateAttachmentInfoKHR' -- which references that attachment ----- - #VUID-VkFramebufferCreateInfo-flags-04545# If @flags@ includes+-- - #VUID-VkFramebufferCreateInfo-flags-04545# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- the @layerCount@ member of any element of the--- @pAttachmentImageInfos@ member of an instance of+-- @pAttachmentImageInfos@ member of a -- 'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'--- in the @pNext@ chain that is used as a+-- structure in the @pNext@ chain that is used as a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-attachment fragment shading rate attachment> -- /must/ be either @1@, or greater than or equal to @layers@ ----- - #VUID-VkFramebufferCreateInfo-flags-04587# If @flags@ includes+-- - #VUID-VkFramebufferCreateInfo-flags-04587# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', @flags@ includes -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- and @renderPass@ was specified with non-zero view masks, each -- element of @pAttachments@ that is used as a@@ -2370,8 +2400,9 @@ -- greater than the index of the most significant bit set in any of -- those view masks ----- - #VUID-VkFramebufferCreateInfo-renderPass-03198# If multiview is--- enabled for @renderPass@, and @flags@ includes+-- - #VUID-VkFramebufferCreateInfo-renderPass-03198# If @renderpass@ is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE', multiview is enabled+-- for @renderPass@, and @flags@ includes -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- the @layerCount@ member of any element of the -- @pAttachmentImageInfos@ member of a@@ -2381,7 +2412,8 @@ -- greater than the maximum bit index set in the view mask in the -- subpasses in which it is used in @renderPass@ ----- - #VUID-VkFramebufferCreateInfo-renderPass-04546# If multiview is not+-- - #VUID-VkFramebufferCreateInfo-renderPass-04546# If @renderpass@ is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE', multiview is not -- enabled for @renderPass@, and @flags@ includes -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- the @layerCount@ member of any element of the@@ -2391,7 +2423,8 @@ -- resolve, or depth\/stencil attachment in @renderPass@ /must/ be -- greater than or equal to @layers@ ----- - #VUID-VkFramebufferCreateInfo-flags-03201# If @flags@ includes+-- - #VUID-VkFramebufferCreateInfo-flags-03201# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- the @usage@ member of any element of the @pAttachmentImageInfos@ -- member of a@@ -2401,7 +2434,8 @@ -- /must/ include -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT' ----- - #VUID-VkFramebufferCreateInfo-flags-03202# If @flags@ includes+-- - #VUID-VkFramebufferCreateInfo-flags-03202# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- the @usage@ member of any element of the @pAttachmentImageInfos@ -- member of a@@ -2410,7 +2444,8 @@ -- used as a depth\/stencil attachment by @renderPass@ /must/ include -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT' ----- - #VUID-VkFramebufferCreateInfo-flags-03203# If @flags@ includes+-- - #VUID-VkFramebufferCreateInfo-flags-03203# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- the @usage@ member of any element of the @pAttachmentImageInfos@ -- member of a@@ -2420,7 +2455,8 @@ -- include -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT' ----- - #VUID-VkFramebufferCreateInfo-flags-03204# If @flags@ includes+-- - #VUID-VkFramebufferCreateInfo-flags-03204# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- the @usage@ member of any element of the @pAttachmentImageInfos@ -- member of a@@ -2429,7 +2465,8 @@ -- used as an input attachment by @renderPass@ /must/ include -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT' ----- - #VUID-VkFramebufferCreateInfo-flags-03205# If @flags@ includes+-- - #VUID-VkFramebufferCreateInfo-flags-03205# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- at least one element of the @pViewFormats@ member of any element of -- the @pAttachmentImageInfos@ member of a@@ -2445,7 +2482,8 @@ -- 'Vulkan.Core10.ImageView.ImageViewCreateInfo'::@viewType@ not equal -- to 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D' ----- - #VUID-VkFramebufferCreateInfo-flags-04548# If @flags@ does not+-- - #VUID-VkFramebufferCreateInfo-flags-04548# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ does not -- include -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- each element of @pAttachments@ that is used as a fragment shading@@ -2453,7 +2491,8 @@ -- @usage@ value including -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR' ----- - #VUID-VkFramebufferCreateInfo-flags-04549# If @flags@ includes+-- - #VUID-VkFramebufferCreateInfo-flags-04549# If @renderpass@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @flags@ includes -- 'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', -- the @usage@ member of any element of the @pAttachmentImageInfos@ -- member of a
src/Vulkan/Core10/Pipeline.hs view
@@ -126,6 +126,7 @@ import Vulkan.CStruct.Extends (withSomeCStruct) import Vulkan.NamedType ((:::)) import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (AttachmentSampleCountInfoAMD) import Vulkan.Core10.Enums.BlendFactor (BlendFactor) import Vulkan.Core10.Enums.BlendOp (BlendOp) import Vulkan.Core10.FundamentalTypes (Bool32)@@ -147,6 +148,7 @@ import Vulkan.Core10.Enums.FrontFace (FrontFace) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (GraphicsPipelineShaderGroupsCreateInfoNV) import Vulkan.Core10.Enums.LogicOp (LogicOp)+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (MultiviewPerViewAttributesInfoNVX) import Vulkan.CStruct.Extends (PeekChain) import Vulkan.CStruct.Extends (PeekChain(..)) import Vulkan.Core10.Handles (Pipeline)@@ -177,6 +179,7 @@ import Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags (PipelineRasterizationStateCreateFlags) import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_rasterization_order (PipelineRasterizationStateRasterizationOrderAMD) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_transform_feedback (PipelineRasterizationStateStreamCreateInfoEXT)+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (PipelineRenderingCreateInfoKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_representative_fragment_test (PipelineRepresentativeFragmentTestStateCreateInfoNV) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (PipelineSampleLocationsStateCreateInfoEXT) import Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits (PipelineShaderStageCreateFlags)@@ -3690,7 +3693,8 @@ -- shader code /must/ write to a matching output variable, decorated -- with @PrimitiveId@, in all execution paths ----- - #VUID-VkGraphicsPipelineCreateInfo-pStages-00741# If the pipeline is+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06038# If @renderPass@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and the pipeline is -- being created with -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state> -- the fragment shader /must/ not read from any input attachment that@@ -3719,7 +3723,8 @@ -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces Shader Interfaces> -- chapter ----- - #VUID-VkGraphicsPipelineCreateInfo-subpass-04890# If the pipeline is+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06039# If @renderPass@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is -- being created with -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>, -- and @subpass@ uses a depth\/stencil attachment in @renderPass@ with@@ -3728,7 +3733,8 @@ -- @depthWriteEnable@ member of @pDepthStencilState@ /must/ be -- 'Vulkan.Core10.FundamentalTypes.FALSE' ----- - #VUID-VkGraphicsPipelineCreateInfo-subpass-04891# If the pipeline is+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06040# If @renderPass@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is -- being created with -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>, -- and @subpass@ uses a depth\/stencil attachment in @renderPass@ with@@ -3738,8 +3744,9 @@ -- and @back@ members of @pDepthStencilState@ /must/ be -- 'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP' ----- - #VUID-VkGraphicsPipelineCreateInfo-blendEnable-04717# If the--- pipeline is being created with+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06041# If @renderPass@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the pipeline is+-- being created with -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>, -- then for each color attachment in the subpass, if the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features>@@ -3750,8 +3757,9 @@ -- @pAttachments@ member of @pColorBlendState@ /must/ be -- 'Vulkan.Core10.FundamentalTypes.FALSE' ----- - #VUID-VkGraphicsPipelineCreateInfo-attachmentCount-00746# If the--- pipeline is being created with+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06042# If @renderPass@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the pipeline is+-- being created with -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>, -- and the subpass uses color attachments, the @attachmentCount@ member -- of @pColorBlendState@ /must/ be equal to the @colorAttachmentCount@@@ -3806,22 +3814,25 @@ -- @pMultisampleState@ /must/ be a valid pointer to a valid -- 'PipelineMultisampleStateCreateInfo' structure ----- - #VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00752# If--- the pipeline is being created with+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06043# If @renderPass@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is+-- being created with -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>, -- and @subpass@ uses a depth\/stencil attachment, @pDepthStencilState@ -- /must/ be a valid pointer to a valid -- 'PipelineDepthStencilStateCreateInfo' structure ----- - #VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00753# If--- the pipeline is being created with+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06044# If @renderPass@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is+-- being created with -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>, -- and @subpass@ uses color attachments, @pColorBlendState@ /must/ be a -- valid pointer to a valid 'PipelineColorBlendStateCreateInfo' -- structure ----- - #VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-04493# If--- the pipeline is being created with+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06045# If @renderPass@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and the pipeline is+-- being created with -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>, -- @pColorBlendState->attachmentCount@ /must/ be greater than the index -- of all color attachments that are not@@ -3961,33 +3972,34 @@ -- @pMultisampleState@ /must/ follow the rules for a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-noattachments zero-attachment subpass> ----- - #VUID-VkGraphicsPipelineCreateInfo-subpass-00759# @subpass@ /must/--- be a valid subpass within @renderPass@+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06046# If @renderPass@+-- is a valid renderPass, @subpass@ /must/ be a valid subpass within+-- @renderPass@ ----- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-00760# If the pipeline--- is being created with+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06047# If @renderPass@+-- is a valid renderPass, the pipeline is being created with -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>, -- and the @renderPass@ has multiview enabled and @subpass@ has more -- than one bit set in the view mask and @multiviewTessellationShader@ -- is not enabled, then @pStages@ /must/ not include tessellation -- shaders ----- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-00761# If the pipeline--- is being created with+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06048# If @renderPass@+-- is a valid renderPass, the pipeline is being created with -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>, -- and the @renderPass@ has multiview enabled and @subpass@ has more -- than one bit set in the view mask and @multiviewGeometryShader@ is -- not enabled, then @pStages@ /must/ not include a geometry shader ----- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-00762# If the pipeline--- is being created with+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06049# If @renderPass@+-- is a valid renderPass, the pipeline is being created with -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>, -- and the @renderPass@ has multiview enabled and @subpass@ has more -- than one bit set in the view mask, shaders in the pipeline /must/ -- not write to the @Layer@ built-in output ----- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-00763# If the pipeline--- is being created with+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06050# If @renderPass@+-- is a valid renderPass and the pipeline is being created with -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>, -- and the @renderPass@ has multiview enabled, then all shaders /must/ -- not include variables decorated with the @Layer@ built-in decoration@@ -4583,6 +4595,120 @@ -- and if @pResolveAttachments@ is not @NULL@, then each resolve -- attachment /must/ be 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' --+-- - #VUID-VkGraphicsPipelineCreateInfo-dynamicRendering-06052# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dynamicRendering dynamicRendering>+-- feature is not enabled, @renderPass@ /must/ not be+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06053# If @renderPass@+-- is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is being+-- created with+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>,+-- and either of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::depthAttachmentFormat+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::stencilAttachmentFormat+-- are not 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED',+-- @pDepthStencilState@ /must/ be a valid pointer to a valid+-- 'PipelineDepthStencilStateCreateInfo' structure+--+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06054# If @renderPass@+-- is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is being+-- created with+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::colorAttachmentCount+-- is not equal to @0@, @pColorBlendState@ /must/ be a valid pointer to+-- a valid 'PipelineColorBlendStateCreateInfo' structure+--+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06055# If @renderPass@+-- is 'Vulkan.Core10.APIConstants.NULL_HANDLE' and the pipeline is+-- being created with+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>,+-- @pColorBlendState->attachmentCount@ /must/ be equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::colorAttachmentCount+--+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06056# If @renderPass@+-- is 'Vulkan.Core10.APIConstants.NULL_HANDLE' and the pipeline is+-- being created with+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>+-- the fragment shader /must/ not read from any input attachment+--+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06057# If @renderPass@+-- is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is being+-- created with+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,+-- the @viewMask@ member of a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'+-- structure included in the @pNext@ chain is not @0@, and the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiview-tess multiviewTessellationShader>+-- feature is not enabled, then @pStages@ /must/ not include+-- tessellation shaders+--+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06058# If @renderPass@+-- is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is being+-- created with+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,+-- the @viewMask@ member of a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'+-- structure included in the @pNext@ chain is not @0@, and the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiview-gs multiviewGeometryShader>+-- feature is not enabled, then @pStages@ /must/ not include a geometry+-- shader+--+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06059# If @renderPass@+-- is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline is being+-- created with+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-pre-rasterization pre-rasterization shader state>,+-- and the @viewMask@ member of a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'+-- structure included in the @pNext@ chain is not @0@, shaders in+-- @pStages@ /must/ not include variables decorated with the @Layer@+-- built-in decoration in their interfaces+--+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06060# If the pipeline+-- is being created with+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>+-- and @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @pColorBlendState->attachmentCount@ /must/ be equal to the+-- @colorAttachmentCount@ member of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'+-- structure included in the @pNext@ chain+--+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06061# If the pipeline+-- is being created with+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-shader fragment shader state>+-- and @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- fragment shaders in @pStages@ /must/ not include the+-- @InputAttachment@ capability+--+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06062# If the pipeline+-- is being created with+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>+-- and @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', for+-- each color attachment format defined by the+-- @pColorAttachmentFormats@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR',+-- if its+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features>+-- do not contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',+-- then the @blendEnable@ member of the corresponding element of the+-- @pAttachments@ member of @pColorBlendState@ /must/ be+-- 'Vulkan.Core10.FundamentalTypes.FALSE'+--+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-06063# If the pipeline+-- is being created with+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-graphics-subsets-fragment-output fragment output interface state>+-- and @renderPass@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', if the+-- @pNext@ chain includes+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV',+-- the @colorAttachmentCount@ member of that structure /must/ be equal+-- to the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@colorAttachmentCount@+-- -- == Valid Usage (Implicit) -- -- - #VUID-VkGraphicsPipelineCreateInfo-sType-sType# @sType@ /must/ be@@ -4591,12 +4717,15 @@ -- - #VUID-VkGraphicsPipelineCreateInfo-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_dynamic_rendering.AttachmentSampleCountInfoAMD', -- 'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsPipelineShaderGroupsCreateInfoNV',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.MultiviewPerViewAttributesInfoNVX', -- 'Vulkan.Extensions.VK_AMD_pipeline_compiler_control.PipelineCompilerControlCreateInfoAMD', -- 'Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT', -- 'Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT', -- 'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV', -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR', -- or -- 'Vulkan.Extensions.VK_NV_representative_fragment_test.PipelineRepresentativeFragmentTestStateCreateInfoNV' --@@ -4623,7 +4752,8 @@ -- - #VUID-VkGraphicsPipelineCreateInfo-layout-parameter# @layout@ /must/ -- be a valid 'Vulkan.Core10.Handles.PipelineLayout' handle ----- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-parameter#+-- - #VUID-VkGraphicsPipelineCreateInfo-renderPass-parameter# If+-- @renderPass@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', -- @renderPass@ /must/ be a valid 'Vulkan.Core10.Handles.RenderPass' -- handle --@@ -4691,14 +4821,12 @@ multisampleState :: Maybe (SomeStruct PipelineMultisampleStateCreateInfo) , -- | @pDepthStencilState@ is a pointer to a -- 'PipelineDepthStencilStateCreateInfo' structure, and is ignored if the- -- pipeline has rasterization disabled or if the subpass of the render pass- -- the pipeline is created against does not use a depth\/stencil- -- attachment.+ -- pipeline has rasterization disabled or if no depth\/stencil attachment+ -- is used. depthStencilState :: Maybe PipelineDepthStencilStateCreateInfo , -- | @pColorBlendState@ is a pointer to a 'PipelineColorBlendStateCreateInfo' -- structure, and is ignored if the pipeline has rasterization disabled or- -- if the subpass of the render pass the pipeline is created against does- -- not use any color attachments.+ -- if no color attachments are used. colorBlendState :: Maybe (SomeStruct PipelineColorBlendStateCreateInfo) , -- | @pDynamicState@ is a pointer to a 'PipelineDynamicStateCreateInfo' -- structure, and is used to indicate which properties of the pipeline@@ -4710,9 +4838,9 @@ -- pipeline and descriptor sets used with the pipeline. layout :: PipelineLayout , -- | @renderPass@ is a handle to a render pass object describing the- -- environment in which the pipeline will be used; the pipeline /must/ only- -- be used with an instance of any render pass compatible with the one- -- provided. See+ -- environment in which the pipeline will be used. The pipeline /must/ only+ -- be used with a render pass instance compatible with the one provided.+ -- See -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility Render Pass Compatibility> -- for more information. renderPass :: RenderPass@@ -4737,6 +4865,9 @@ getNext GraphicsPipelineCreateInfo{..} = next extends :: forall e b proxy. Typeable e => proxy e -> (Extends GraphicsPipelineCreateInfo e => b) -> Maybe b extends _ f+ | Just Refl <- eqT @e @MultiviewPerViewAttributesInfoNVX = Just f+ | Just Refl <- eqT @e @AttachmentSampleCountInfoAMD = Just f+ | Just Refl <- eqT @e @PipelineRenderingCreateInfoKHR = Just f | Just Refl <- eqT @e @PipelineFragmentShadingRateEnumStateCreateInfoNV = Just f | Just Refl <- eqT @e @PipelineFragmentShadingRateStateCreateInfoKHR = Just f | Just Refl <- eqT @e @PipelineCompilerControlCreateInfoAMD = Just f@@ -4806,7 +4937,6 @@ pRasterizationState'' <- ContT @_ @_ @(Ptr (PipelineRasterizationStateCreateInfo '[])) $ \cont -> withSomeCStruct @PipelineRasterizationStateCreateInfo ((SomeStruct zero)) (cont . castPtr) lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr (PipelineRasterizationStateCreateInfo _)))) pRasterizationState'' lift $ poke ((p `plusPtr` 104 :: Ptr PipelineLayout)) (zero)- lift $ poke ((p `plusPtr` 112 :: Ptr RenderPass)) (zero) lift $ poke ((p `plusPtr` 120 :: Ptr Word32)) (zero) lift $ poke ((p `plusPtr` 136 :: Ptr Int32)) (zero) lift $ f
src/Vulkan/Core10/Query.hs view
@@ -543,6 +543,10 @@ -- @NULL@ or a pointer to a valid instance of -- 'Vulkan.Extensions.VK_KHR_performance_query.QueryPoolPerformanceCreateInfoKHR', -- 'Vulkan.Extensions.VK_INTEL_performance_query.QueryPoolPerformanceQueryCreateInfoINTEL',+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH264ProfileEXT VkVideoDecodeH264ProfileEXT>,+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH265ProfileEXT VkVideoDecodeH265ProfileEXT>,+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264ProfileEXT VkVideoEncodeH264ProfileEXT>,+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH265ProfileEXT VkVideoEncodeH265ProfileEXT>, -- or -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoProfileKHR VkVideoProfileKHR> --
src/Vulkan/Core10/Queue.hs view
@@ -707,6 +707,40 @@ -- 'Vulkan.Core10.FundamentalTypes.TRUE', then each element of the -- @pCommandBuffers@ array /must/ be a protected command buffer --+-- - #VUID-VkSubmitInfo-pCommandBuffers-06193# If @pCommandBuffers@+-- 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 @pCommandBuffers@+--+-- - #VUID-VkSubmitInfo-pCommandBuffers-06014# If @pCommandBuffers@+-- 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 @pCommandBuffers@+--+-- - #VUID-VkSubmitInfo-pCommandBuffers-06015# If @pCommandBuffers@+-- 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-VkSubmitInfo-pCommandBuffers-06016# If @pCommandBuffers@+-- 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-VkSubmitInfo-variableSampleLocations-06017# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-variableSampleLocations variableSampleLocations>+-- limit is not supported, and any element of @pCommandBuffers@+-- 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-VkSubmitInfo-sType-sType# @sType@ /must/ be
src/Vulkan/Core11/Originally_Based_On_VK_KHR_protected_memory.hs view
@@ -329,7 +329,7 @@ -- -- The queue returned by 'getDeviceQueue2' /must/ have the same @flags@ -- value from this structure as that used at device creation time in a--- 'Vulkan.Core10.Device.DeviceQueueCreateInfo' instance. If no matching+-- 'Vulkan.Core10.Device.DeviceQueueCreateInfo' structure. If no matching -- @flags@ were specified at device creation time, then the handle returned -- in @pQueue@ /must/ be @NULL@. --
src/Vulkan/Core11/Promoted_From_VK_KHR_device_group.hs view
@@ -734,7 +734,7 @@ -- The @deviceMask@ serves several purposes. It is an upper bound on the -- set of physical devices that /can/ be used during the render pass -- instance, and the initial device mask when the render pass instance--- begins. In addition, commands transitioning to the next subpass in the+-- begins. In addition, commands transitioning to the next subpass in a -- render pass instance and commands ending the render pass instance, and, -- accordingly render pass attachment load, store, and resolve operations -- and subpass dependencies corresponding to the render pass instance, are@@ -772,6 +772,24 @@ -- - #VUID-VkDeviceGroupRenderPassBeginInfo-deviceRenderAreaCount-00908# -- @deviceRenderAreaCount@ /must/ either be zero or equal to the number -- of physical devices in the logical device+--+-- - #VUID-VkDeviceGroupRenderPassBeginInfo-offset-06166# The @offset.x@+-- member of any element of @pDeviceRenderAreas@ /must/ be greater than+-- or equal to 0+--+-- - #VUID-VkDeviceGroupRenderPassBeginInfo-offset-06167# The @offset.y@+-- member of any element of @pDeviceRenderAreas@ /must/ be greater than+-- or equal to 0+--+-- - #VUID-VkDeviceGroupRenderPassBeginInfo-offset-06168# The sum of the+-- @offset.x@ and @extent.width@ members of any element of+-- @pDeviceRenderAreas@ /must/ be less than or equal to+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxFramebufferWidth maxFramebufferWidth>+--+-- - #VUID-VkDeviceGroupRenderPassBeginInfo-offset-06169# The sum of the+-- @offset.y@ and @extent.height@ members of any element of+-- @pDeviceRenderAreas@ /must/ be less than or equal to+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxFramebufferHeight maxFramebufferHeight> -- -- == Valid Usage (Implicit) --
src/Vulkan/Core11/Promoted_From_VK_KHR_get_physical_device_properties2.hs view
@@ -125,6 +125,7 @@ import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_discard_rectangles (PhysicalDeviceDiscardRectanglePropertiesEXT) import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_driver_properties (PhysicalDeviceDriverProperties) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_physical_device_drm (PhysicalDeviceDrmPropertiesEXT)+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (PhysicalDeviceDynamicRenderingFeaturesKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_scissor_exclusive (PhysicalDeviceExclusiveScissorFeaturesNV) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_extended_dynamic_state2 (PhysicalDeviceExtendedDynamicState2FeaturesEXT) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_extended_dynamic_state (PhysicalDeviceExtendedDynamicStateFeaturesEXT)@@ -711,6 +712,7 @@ getNext PhysicalDeviceFeatures2{..} = next extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceFeatures2 e => b) -> Maybe b extends _ f+ | Just Refl <- eqT @e @PhysicalDeviceDynamicRenderingFeaturesKHR = Just f | Just Refl <- eqT @e @PhysicalDeviceRGBA10X6FormatsFeaturesEXT = Just f | Just Refl <- eqT @e @PhysicalDeviceRayTracingMotionBlurFeaturesNV = Just f | Just Refl <- eqT @e @PhysicalDeviceShaderIntegerDotProductFeaturesKHR = Just f@@ -1045,6 +1047,10 @@ -- 'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesList2EXT', -- 'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesListEXT', -- 'Vulkan.Extensions.VK_KHR_format_feature_flags2.FormatProperties3KHR',+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH264ProfileEXT VkVideoDecodeH264ProfileEXT>,+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoDecodeH265ProfileEXT VkVideoDecodeH265ProfileEXT>,+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH264ProfileEXT VkVideoEncodeH264ProfileEXT>,+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoEncodeH265ProfileEXT VkVideoEncodeH265ProfileEXT>, -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoProfileKHR VkVideoProfileKHR>, -- or -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkVideoProfilesKHR VkVideoProfilesKHR>
src/Vulkan/Core12/Enums/ResolveModeFlagBits.hs view
@@ -30,6 +30,7 @@ -- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_depth_stencil_resolve VK_KHR_depth_stencil_resolve>, -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_2 VK_VERSION_1_2>,+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingAttachmentInfoKHR', -- 'ResolveModeFlags', -- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve' newtype ResolveModeFlagBits = ResolveModeFlagBits Flags
src/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs view
@@ -549,6 +549,10 @@ -- - #VUID-vkCmdEndRenderPass2-None-02352# This command /must/ not be -- recorded when transform feedback is active --+-- - #VUID-vkCmdEndRenderPass2-None-06171# The current render pass+-- instance /must/ not have been begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- -- == Valid Usage (Implicit) -- -- - #VUID-vkCmdEndRenderPass2-commandBuffer-parameter# @commandBuffer@@@ -1126,12 +1130,13 @@ -- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'::@pViewMasks@ -- has on each corresponding subpass. ----- If an instance of+-- If a -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateAttachmentInfoKHR'--- is included in the @pNext@ chain, @pFragmentShadingRateAttachment@ is--- not @NULL@, and its @attachment@ member is not--- 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', the identified--- attachment defines a fragment shading rate attachment for that subpass.+-- structure is included in the @pNext@ chain,+-- @pFragmentShadingRateAttachment@ is not @NULL@, and its @attachment@+-- member is not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', the+-- identified attachment defines a fragment shading rate attachment for+-- that subpass. -- -- == Valid Usage --@@ -1486,12 +1491,12 @@ -- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo'::@pViewOffsets@ -- has on each corresponding subpass dependency. ----- If an instance of--- 'Vulkan.Extensions.VK_KHR_synchronization2.MemoryBarrier2KHR' is--- included in the @pNext@ chain, @srcStageMask@, @dstStageMask@,--- @srcAccessMask@, and @dstAccessMask@ parameters are ignored. The--- synchronization and access scopes instead are defined by the parameters--- of 'Vulkan.Extensions.VK_KHR_synchronization2.MemoryBarrier2KHR'.+-- If a 'Vulkan.Extensions.VK_KHR_synchronization2.MemoryBarrier2KHR'+-- structure is included in the @pNext@ chain, @srcStageMask@,+-- @dstStageMask@, @srcAccessMask@, and @dstAccessMask@ parameters are+-- ignored. The synchronization and access scopes instead are defined by+-- the parameters of+-- 'Vulkan.Extensions.VK_KHR_synchronization2.MemoryBarrier2KHR'. -- -- == Valid Usage --
src/Vulkan/Core12/Promoted_From_VK_KHR_draw_indirect_count.hs view
@@ -417,10 +417,10 @@ -- - #VUID-vkCmdDrawIndirectCount-VkPipelineVieportCreateInfo-04141# If -- the bound graphics pipeline state was created with the -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of+-- dynamic state enabled and a -- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with -- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@ -- greater or equal to the @viewportCount@ parameter in the last call -- to@@ -429,10 +429,10 @@ -- - #VUID-vkCmdDrawIndirectCount-VkPipelineVieportCreateInfo-04142# If -- the bound graphics pipeline state was created with the -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of+-- dynamic state enabled and a -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@ -- greater or equal to the @viewportCount@ parameter in the last call -- to@@ -556,6 +556,242 @@ -- /must/ have been called in the current command buffer prior to this -- draw command --+-- - #VUID-vkCmdDrawIndirectCount-imageView-06172# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawIndirectCount-imageView-06173# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawIndirectCount-imageView-06174# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawIndirectCount-imageView-06175# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawIndirectCount-imageView-06176# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawIndirectCount-imageView-06177# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawIndirectCount-viewMask-06178# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@viewMask@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@viewMask@+--+-- - #VUID-vkCmdDrawIndirectCount-colorAttachmentCount-06179# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@colorAttachmentCount@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+--+-- - #VUID-vkCmdDrawIndirectCount-colorAttachmentCount-06180# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a 'Vulkan.Core10.Enums.Format.Format' equal to the+-- corresponding element of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@pColorAttachmentFormats@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawIndirectCount-pDepthAttachment-06181# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@depthAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndirectCount-pStencilAttachment-06182# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@stencilAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndirectCount-imageView-06183# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentShadingRateAttachmentInfoKHR'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'+--+-- - #VUID-vkCmdDrawIndirectCount-imageView-06184# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentDensityMapAttachmentInfoEXT'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT'+--+-- - #VUID-vkCmdDrawIndirectCount-colorAttachmentCount-06185# If the+-- currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the corresponding element of the+-- @pColorAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawIndirectCount-pDepthAttachment-06186# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndirectCount-pStencilAttachment-06187# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndirectCount-colorAttachmentCount-06188# If the+-- currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawIndirectCount-pDepthAttachment-06189# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndirectCount-pStencilAttachment-06190# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndirectCount-renderPass-06198# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline /must/ have been created with a+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@+-- equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'+-- -- - #VUID-vkCmdDrawIndirectCount-None-04007# All vertex input bindings -- accessed via vertex input variables declared in the vertex shader -- entry point’s interface /must/ have either valid or@@ -1108,10 +1344,10 @@ -- - #VUID-vkCmdDrawIndexedIndirectCount-VkPipelineVieportCreateInfo-04141# -- If the bound graphics pipeline state was created with the -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of+-- dynamic state enabled and a -- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with -- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@ -- greater or equal to the @viewportCount@ parameter in the last call -- to@@ -1120,10 +1356,10 @@ -- - #VUID-vkCmdDrawIndexedIndirectCount-VkPipelineVieportCreateInfo-04142# -- If the bound graphics pipeline state was created with the -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of+-- dynamic state enabled and a -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@ -- greater or equal to the @viewportCount@ parameter in the last call -- to@@ -1247,6 +1483,242 @@ -- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT' -- /must/ have been called in the current command buffer prior to this -- draw command+--+-- - #VUID-vkCmdDrawIndexedIndirectCount-imageView-06172# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawIndexedIndirectCount-imageView-06173# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawIndexedIndirectCount-imageView-06174# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawIndexedIndirectCount-imageView-06175# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawIndexedIndirectCount-imageView-06176# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawIndexedIndirectCount-imageView-06177# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawIndexedIndirectCount-viewMask-06178# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@viewMask@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@viewMask@+--+-- - #VUID-vkCmdDrawIndexedIndirectCount-colorAttachmentCount-06179# If+-- the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@colorAttachmentCount@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+--+-- - #VUID-vkCmdDrawIndexedIndirectCount-colorAttachmentCount-06180# If+-- the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a 'Vulkan.Core10.Enums.Format.Format' equal to the+-- corresponding element of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@pColorAttachmentFormats@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawIndexedIndirectCount-pDepthAttachment-06181# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@depthAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndexedIndirectCount-pStencilAttachment-06182# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@stencilAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndexedIndirectCount-imageView-06183# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentShadingRateAttachmentInfoKHR'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'+--+-- - #VUID-vkCmdDrawIndexedIndirectCount-imageView-06184# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentDensityMapAttachmentInfoEXT'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT'+--+-- - #VUID-vkCmdDrawIndexedIndirectCount-colorAttachmentCount-06185# If+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the corresponding element of the+-- @pColorAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawIndexedIndirectCount-pDepthAttachment-06186# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndexedIndirectCount-pStencilAttachment-06187# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndexedIndirectCount-colorAttachmentCount-06188# If+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawIndexedIndirectCount-pDepthAttachment-06189# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndexedIndirectCount-pStencilAttachment-06190# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndexedIndirectCount-renderPass-06198# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline /must/ have been created with a+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@+-- equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE' -- -- - #VUID-vkCmdDrawIndexedIndirectCount-None-04007# All vertex input -- bindings accessed via vertex input variables declared in the vertex
src/Vulkan/Core12/Promoted_From_VK_KHR_imageless_framebuffer.hs view
@@ -141,7 +141,7 @@ -- 'Vulkan.Core10.Enums.StructureType.StructureType' data FramebufferAttachmentsCreateInfo = FramebufferAttachmentsCreateInfo { -- | @pAttachmentImageInfos@ is a pointer to an array of- -- 'FramebufferAttachmentImageInfo' instances, each of which describes a+ -- 'FramebufferAttachmentImageInfo' structures, each of which describes a -- number of parameters of the corresponding attachment in a render pass -- instance. attachmentImageInfos :: Vector FramebufferAttachmentImageInfo }
src/Vulkan/Dynamic.hs view
@@ -312,6 +312,7 @@ import {-# SOURCE #-} Vulkan.Core10.CommandBufferBuilding (RenderPassBeginInfo) import {-# SOURCE #-} Vulkan.Core10.Pass (RenderPassCreateInfo) import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2 (RenderPassCreateInfo2)+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_dynamic_rendering (RenderingInfoKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_copy_commands2 (ResolveImageInfo2KHR) import {-# SOURCE #-} Vulkan.Core10.Enums.Result (Result) import {-# SOURCE #-} Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)@@ -1036,6 +1037,8 @@ , pVkSetBufferCollectionImageConstraintsFUCHSIA :: FunPtr (Ptr Device_T -> BufferCollectionFUCHSIA -> ("pImageConstraintsInfo" ::: Ptr ImageConstraintsInfoFUCHSIA) -> IO Result) , pVkDestroyBufferCollectionFUCHSIA :: FunPtr (Ptr Device_T -> BufferCollectionFUCHSIA -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) , pVkGetBufferCollectionPropertiesFUCHSIA :: FunPtr (Ptr Device_T -> BufferCollectionFUCHSIA -> ("pProperties" ::: Ptr BufferCollectionPropertiesFUCHSIA) -> IO Result)+ , pVkCmdBeginRenderingKHR :: FunPtr (Ptr CommandBuffer_T -> ("pRenderingInfo" ::: Ptr (SomeStruct RenderingInfoKHR)) -> IO ())+ , pVkCmdEndRenderingKHR :: FunPtr (Ptr CommandBuffer_T -> IO ()) } deriving instance Eq DeviceCmds@@ -1086,7 +1089,7 @@ nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr- nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr+ nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr foreign import ccall #if !defined(SAFE_FOREIGN_CALLS)@@ -1463,6 +1466,8 @@ vkSetBufferCollectionImageConstraintsFUCHSIA <- getDeviceProcAddr' handle (Ptr "vkSetBufferCollectionImageConstraintsFUCHSIA"#) vkDestroyBufferCollectionFUCHSIA <- getDeviceProcAddr' handle (Ptr "vkDestroyBufferCollectionFUCHSIA"#) vkGetBufferCollectionPropertiesFUCHSIA <- getDeviceProcAddr' handle (Ptr "vkGetBufferCollectionPropertiesFUCHSIA"#)+ vkCmdBeginRenderingKHR <- getDeviceProcAddr' handle (Ptr "vkCmdBeginRenderingKHR"#)+ vkCmdEndRenderingKHR <- getDeviceProcAddr' handle (Ptr "vkCmdEndRenderingKHR"#) pure $ DeviceCmds handle (castFunPtr @_ @(Ptr Device_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction) vkGetDeviceProcAddr) (castFunPtr @_ @(Ptr Device_T -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyDevice)@@ -1820,4 +1825,6 @@ (castFunPtr @_ @(Ptr Device_T -> BufferCollectionFUCHSIA -> ("pImageConstraintsInfo" ::: Ptr ImageConstraintsInfoFUCHSIA) -> IO Result) vkSetBufferCollectionImageConstraintsFUCHSIA) (castFunPtr @_ @(Ptr Device_T -> BufferCollectionFUCHSIA -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyBufferCollectionFUCHSIA) (castFunPtr @_ @(Ptr Device_T -> BufferCollectionFUCHSIA -> ("pProperties" ::: Ptr BufferCollectionPropertiesFUCHSIA) -> IO Result) vkGetBufferCollectionPropertiesFUCHSIA)+ (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pRenderingInfo" ::: Ptr (SomeStruct RenderingInfoKHR)) -> IO ()) vkCmdBeginRenderingKHR)+ (castFunPtr @_ @(Ptr CommandBuffer_T -> IO ()) vkCmdEndRenderingKHR)
src/Vulkan/Extensions.hs view
@@ -143,6 +143,7 @@ , module Vulkan.Extensions.VK_KHR_display_swapchain , module Vulkan.Extensions.VK_KHR_draw_indirect_count , module Vulkan.Extensions.VK_KHR_driver_properties+ , module Vulkan.Extensions.VK_KHR_dynamic_rendering , module Vulkan.Extensions.VK_KHR_external_fence , module Vulkan.Extensions.VK_KHR_external_fence_capabilities , module Vulkan.Extensions.VK_KHR_external_fence_fd@@ -403,6 +404,7 @@ import Vulkan.Extensions.VK_KHR_display_swapchain import Vulkan.Extensions.VK_KHR_draw_indirect_count import Vulkan.Extensions.VK_KHR_driver_properties+import Vulkan.Extensions.VK_KHR_dynamic_rendering import Vulkan.Extensions.VK_KHR_external_fence import Vulkan.Extensions.VK_KHR_external_fence_capabilities import Vulkan.Extensions.VK_KHR_external_fence_fd
src/Vulkan/Extensions/Dependencies.hs view
@@ -100,6 +100,7 @@ import Vulkan.Extensions.VK_KHR_display (pattern KHR_DISPLAY_EXTENSION_NAME) import Vulkan.Extensions.VK_KHR_display_swapchain (pattern KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME) import Vulkan.Extensions.VK_KHR_driver_properties (pattern KHR_DRIVER_PROPERTIES_EXTENSION_NAME)+import Vulkan.Extensions.VK_KHR_dynamic_rendering (pattern KHR_DYNAMIC_RENDERING_EXTENSION_NAME) import Vulkan.Extensions.VK_KHR_external_fence_capabilities (pattern KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME) import Vulkan.Extensions.VK_KHR_external_fence (pattern KHR_EXTERNAL_FENCE_EXTENSION_NAME) import Vulkan.Extensions.VK_KHR_external_fence_fd (pattern KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME)@@ -211,6 +212,7 @@ EXT_DEBUG_MARKER_EXTENSION_NAME -> [EXT_DEBUG_REPORT_EXTENSION_NAME] EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME] AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]+ KHR_DYNAMIC_RENDERING_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME] GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME -> [KHR_SURFACE_EXTENSION_NAME] NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME] KHR_MULTIVIEW_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME]
src/Vulkan/Extensions/VK_EXT_buffer_device_address.hs view
@@ -89,6 +89,8 @@ -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2', -- 'Vulkan.Core10.Device.DeviceCreateInfo': --+-- - 'PhysicalDeviceBufferAddressFeaturesEXT'+-- -- - 'PhysicalDeviceBufferDeviceAddressFeaturesEXT' -- -- == New Enum Constants@@ -116,6 +118,8 @@ -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT' -- -- - 'STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT'+--+-- - 'STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT' -- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT' --
src/Vulkan/Extensions/VK_EXT_buffer_device_address.hs-boot view
@@ -89,6 +89,8 @@ -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2', -- 'Vulkan.Core10.Device.DeviceCreateInfo': --+-- - 'PhysicalDeviceBufferAddressFeaturesEXT'+-- -- - 'PhysicalDeviceBufferDeviceAddressFeaturesEXT' -- -- == New Enum Constants@@ -116,6 +118,8 @@ -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT' -- -- - 'STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT'+--+-- - 'STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT' -- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT' --
src/Vulkan/Extensions/VK_EXT_conditional_rendering.hs view
@@ -143,7 +143,7 @@ -- - Revision 2, 2018-05-21 (Vikram Kushwaha) -- -- - Add new pipeline stage, access flags and limit conditional--- rendering to a subpass or entire renderpass.+-- rendering to a subpass or entire render pass. -- -- = See Also --
src/Vulkan/Extensions/VK_EXT_conditional_rendering.hs-boot view
@@ -143,7 +143,7 @@ -- - Revision 2, 2018-05-21 (Vikram Kushwaha) -- -- - Add new pipeline stage, access flags and limit conditional--- rendering to a subpass or entire renderpass.+-- rendering to a subpass or entire render pass. -- -- = See Also --
src/Vulkan/Extensions/VK_EXT_debug_report.hs view
@@ -112,6 +112,8 @@ -- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT' --+-- - 'STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT'+-- -- If -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#versions-1.1 Version 1.1> -- is supported:
src/Vulkan/Extensions/VK_EXT_debug_report.hs-boot view
@@ -112,6 +112,8 @@ -- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT' --+-- - 'STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT'+-- -- If -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#versions-1.1 Version 1.1> -- is supported:
src/Vulkan/Extensions/VK_EXT_display_surface_counter.hs view
@@ -78,6 +78,8 @@ -- -- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType': --+-- - 'STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT'+-- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT' -- -- == Version History
src/Vulkan/Extensions/VK_EXT_display_surface_counter.hs-boot view
@@ -78,6 +78,8 @@ -- -- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType': --+-- - 'STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT'+-- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT' -- -- == Version History
src/Vulkan/Extensions/VK_EXT_load_store_op_none.hs view
@@ -41,9 +41,8 @@ -- -- == Description ----- This extension incorporates--- 'Vulkan.Core10.Enums.AttachmentStoreOp.ATTACHMENT_STORE_OP_NONE_EXT'--- from @VK_QCOM_render_pass_store_ops@, enabling applications to avoid+-- This extension incorporates 'ATTACHMENT_STORE_OP_NONE_EXT' from+-- @VK_QCOM_render_pass_store_ops@, enabling applications to avoid -- unnecessary synchronization when an attachment is not written during a -- render pass. --@@ -51,10 +50,10 @@ -- 'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_NONE_EXT' is -- introduced to avoid unnecessary synchronization when an attachment is -- not used during a render pass at all. In combination with--- 'Vulkan.Core10.Enums.AttachmentStoreOp.ATTACHMENT_STORE_OP_NONE_EXT',--- this is useful as an alternative to preserve attachments in applications--- that cannot decide if an attachment will be used in a render pass until--- after the necessary pipelines have been created.+-- 'ATTACHMENT_STORE_OP_NONE_EXT', this is useful as an alternative to+-- preserve attachments in applications that cannot decide if an attachment+-- will be used in a render pass until after the necessary pipelines have+-- been created. -- -- == New Enum Constants --@@ -68,7 +67,7 @@ -- -- - Extending 'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp': ----- - 'Vulkan.Core10.Enums.AttachmentStoreOp.ATTACHMENT_STORE_OP_NONE_EXT'+-- - 'ATTACHMENT_STORE_OP_NONE_EXT' -- -- == Version History --@@ -89,13 +88,18 @@ -- -- This page is a generated document. Fixes and changes should be made to -- the generator scripts, not directly.-module Vulkan.Extensions.VK_EXT_load_store_op_none ( EXT_LOAD_STORE_OP_NONE_SPEC_VERSION+module Vulkan.Extensions.VK_EXT_load_store_op_none ( pattern ATTACHMENT_STORE_OP_NONE_EXT+ , EXT_LOAD_STORE_OP_NONE_SPEC_VERSION , pattern EXT_LOAD_STORE_OP_NONE_SPEC_VERSION , EXT_LOAD_STORE_OP_NONE_EXTENSION_NAME , pattern EXT_LOAD_STORE_OP_NONE_EXTENSION_NAME ) where import Data.String (IsString)+import Vulkan.Core10.Enums.AttachmentStoreOp (AttachmentStoreOp(ATTACHMENT_STORE_OP_NONE_KHR))+-- No documentation found for TopLevel "VK_ATTACHMENT_STORE_OP_NONE_EXT"+pattern ATTACHMENT_STORE_OP_NONE_EXT = ATTACHMENT_STORE_OP_NONE_KHR+ type EXT_LOAD_STORE_OP_NONE_SPEC_VERSION = 1
src/Vulkan/Extensions/VK_EXT_multi_draw.hs view
@@ -571,10 +571,10 @@ -- - #VUID-vkCmdDrawMultiEXT-VkPipelineVieportCreateInfo-04141# If the -- bound graphics pipeline state was created with the -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of+-- dynamic state enabled and a -- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with -- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@ -- greater or equal to the @viewportCount@ parameter in the last call -- to@@ -583,10 +583,10 @@ -- - #VUID-vkCmdDrawMultiEXT-VkPipelineVieportCreateInfo-04142# If the -- bound graphics pipeline state was created with the -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of+-- dynamic state enabled and a -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@ -- greater or equal to the @viewportCount@ parameter in the last call -- to@@ -710,6 +710,242 @@ -- /must/ have been called in the current command buffer prior to this -- draw command --+-- - #VUID-vkCmdDrawMultiEXT-imageView-06172# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawMultiEXT-imageView-06173# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawMultiEXT-imageView-06174# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawMultiEXT-imageView-06175# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawMultiEXT-imageView-06176# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawMultiEXT-imageView-06177# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawMultiEXT-viewMask-06178# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@viewMask@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@viewMask@+--+-- - #VUID-vkCmdDrawMultiEXT-colorAttachmentCount-06179# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@colorAttachmentCount@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+--+-- - #VUID-vkCmdDrawMultiEXT-colorAttachmentCount-06180# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a 'Vulkan.Core10.Enums.Format.Format' equal to the+-- corresponding element of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@pColorAttachmentFormats@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawMultiEXT-pDepthAttachment-06181# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@depthAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMultiEXT-pStencilAttachment-06182# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@stencilAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMultiEXT-imageView-06183# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentShadingRateAttachmentInfoKHR'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'+--+-- - #VUID-vkCmdDrawMultiEXT-imageView-06184# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentDensityMapAttachmentInfoEXT'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT'+--+-- - #VUID-vkCmdDrawMultiEXT-colorAttachmentCount-06185# If the currently+-- bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the corresponding element of the+-- @pColorAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawMultiEXT-pDepthAttachment-06186# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMultiEXT-pStencilAttachment-06187# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMultiEXT-colorAttachmentCount-06188# If the currently+-- bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawMultiEXT-pDepthAttachment-06189# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMultiEXT-pStencilAttachment-06190# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMultiEXT-renderPass-06198# If the current render pass+-- instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline /must/ have been created with a+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@+-- equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'+-- -- - #VUID-vkCmdDrawMultiEXT-commandBuffer-02712# If @commandBuffer@ is a -- protected command buffer, any resource written to by the -- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind@@ -1218,10 +1454,10 @@ -- - #VUID-vkCmdDrawMultiIndexedEXT-VkPipelineVieportCreateInfo-04141# If -- the bound graphics pipeline state was created with the -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of+-- dynamic state enabled and a -- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with -- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@ -- greater or equal to the @viewportCount@ parameter in the last call -- to@@ -1230,10 +1466,10 @@ -- - #VUID-vkCmdDrawMultiIndexedEXT-VkPipelineVieportCreateInfo-04142# If -- the bound graphics pipeline state was created with the -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of+-- dynamic state enabled and a -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@ -- greater or equal to the @viewportCount@ parameter in the last call -- to@@ -1356,6 +1592,242 @@ -- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT' -- /must/ have been called in the current command buffer prior to this -- draw command+--+-- - #VUID-vkCmdDrawMultiIndexedEXT-imageView-06172# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawMultiIndexedEXT-imageView-06173# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawMultiIndexedEXT-imageView-06174# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawMultiIndexedEXT-imageView-06175# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawMultiIndexedEXT-imageView-06176# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawMultiIndexedEXT-imageView-06177# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawMultiIndexedEXT-viewMask-06178# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@viewMask@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@viewMask@+--+-- - #VUID-vkCmdDrawMultiIndexedEXT-colorAttachmentCount-06179# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@colorAttachmentCount@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+--+-- - #VUID-vkCmdDrawMultiIndexedEXT-colorAttachmentCount-06180# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a 'Vulkan.Core10.Enums.Format.Format' equal to the+-- corresponding element of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@pColorAttachmentFormats@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawMultiIndexedEXT-pDepthAttachment-06181# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@depthAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMultiIndexedEXT-pStencilAttachment-06182# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@stencilAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMultiIndexedEXT-imageView-06183# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentShadingRateAttachmentInfoKHR'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'+--+-- - #VUID-vkCmdDrawMultiIndexedEXT-imageView-06184# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentDensityMapAttachmentInfoEXT'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT'+--+-- - #VUID-vkCmdDrawMultiIndexedEXT-colorAttachmentCount-06185# If the+-- currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the corresponding element of the+-- @pColorAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawMultiIndexedEXT-pDepthAttachment-06186# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMultiIndexedEXT-pStencilAttachment-06187# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMultiIndexedEXT-colorAttachmentCount-06188# If the+-- currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawMultiIndexedEXT-pDepthAttachment-06189# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMultiIndexedEXT-pStencilAttachment-06190# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMultiIndexedEXT-renderPass-06198# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline /must/ have been created with a+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@+-- equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE' -- -- - #VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02712# If -- @commandBuffer@ is a protected command buffer, any resource written
src/Vulkan/Extensions/VK_EXT_pipeline_creation_cache_control.hs view
@@ -169,6 +169,8 @@ -- -- - Extending 'Vulkan.Core10.Enums.Result.Result': --+-- - 'ERROR_PIPELINE_COMPILE_REQUIRED_EXT'+-- -- - 'Vulkan.Core10.Enums.Result.PIPELINE_COMPILE_REQUIRED_EXT' -- -- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
src/Vulkan/Extensions/VK_EXT_pipeline_creation_cache_control.hs-boot view
@@ -169,6 +169,8 @@ -- -- - Extending 'Vulkan.Core10.Enums.Result.Result': --+-- - 'ERROR_PIPELINE_COMPILE_REQUIRED_EXT'+-- -- - 'Vulkan.Core10.Enums.Result.PIPELINE_COMPILE_REQUIRED_EXT' -- -- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
src/Vulkan/Extensions/VK_EXT_provoking_vertex.hs view
@@ -121,18 +121,18 @@ -- -- 1) At what granularity should this state be set? ----- __RESOLVED__: At pipeline bind, with an optional per-renderpass+-- __RESOLVED__: At pipeline bind, with an optional per-render pass -- restriction. -- -- The most natural place to put this state is in the graphics pipeline -- object. Some implementations require it to be known when creating the -- pipeline, and pipeline state is convenient for implementing OpenGL 3.2’s -- glProvokingVertex, which can change the state between draw calls.--- However, some implementations can only change it approximately--- renderpass granularity. To accommodate both, provoking vertex will be--- pipeline state, but implementations can require that only one mode is--- used within a renderpass instance; the renderpass’s mode is chosen--- implicitly when the first pipeline is bound.+-- However, some implementations can only change it approximately render+-- pass granularity. To accommodate both, provoking vertex will be pipeline+-- state, but implementations can require that only one mode is used within+-- a render pass instance; the render pass’s mode is chosen implicitly when+-- the first pipeline is bound. -- -- 2) Does the provoking vertex mode affect the order that vertices are -- written to transform feedback buffers?@@ -338,7 +338,7 @@ data PhysicalDeviceProvokingVertexPropertiesEXT = PhysicalDeviceProvokingVertexPropertiesEXT { -- | #limits-provokingVertexModePerPipeline# @provokingVertexModePerPipeline@ -- indicates whether the implementation supports graphics pipelines with- -- different provoking vertex modes within the same renderpass instance.+ -- different provoking vertex modes within the same render pass instance. provokingVertexModePerPipeline :: Bool , -- | #limits-transformFeedbackPreservesTriangleFanProvokingVertex# -- @transformFeedbackPreservesTriangleFanProvokingVertex@ indicates whether@@ -398,8 +398,8 @@ -- -- If the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-provokingVertexModePerPipeline provokingVertexModePerPipeline>--- limit is 'Vulkan.Core10.FundamentalTypes.FALSE', then the all pipelines--- bound within a renderpass instance /must/ have the same+-- limit is 'Vulkan.Core10.FundamentalTypes.FALSE', then all pipelines+-- bound within a render pass instance /must/ have the same -- @provokingVertexMode@. -- -- == Valid Usage
src/Vulkan/Extensions/VK_EXT_provoking_vertex.hs-boot view
@@ -121,18 +121,18 @@ -- -- 1) At what granularity should this state be set? ----- __RESOLVED__: At pipeline bind, with an optional per-renderpass+-- __RESOLVED__: At pipeline bind, with an optional per-render pass -- restriction. -- -- The most natural place to put this state is in the graphics pipeline -- object. Some implementations require it to be known when creating the -- pipeline, and pipeline state is convenient for implementing OpenGL 3.2’s -- glProvokingVertex, which can change the state between draw calls.--- However, some implementations can only change it approximately--- renderpass granularity. To accommodate both, provoking vertex will be--- pipeline state, but implementations can require that only one mode is--- used within a renderpass instance; the renderpass’s mode is chosen--- implicitly when the first pipeline is bound.+-- However, some implementations can only change it approximately render+-- pass granularity. To accommodate both, provoking vertex will be pipeline+-- state, but implementations can require that only one mode is used within+-- a render pass instance; the render pass’s mode is chosen implicitly when+-- the first pipeline is bound. -- -- 2) Does the provoking vertex mode affect the order that vertices are -- written to transform feedback buffers?
src/Vulkan/Extensions/VK_EXT_swapchain_colorspace.hs view
@@ -62,6 +62,8 @@ -- -- - 'Vulkan.Extensions.VK_KHR_surface.COLOR_SPACE_BT709_NONLINEAR_EXT' --+-- - 'COLOR_SPACE_DCI_P3_LINEAR_EXT'+-- -- - 'Vulkan.Extensions.VK_KHR_surface.COLOR_SPACE_DCI_P3_NONLINEAR_EXT' -- -- - 'Vulkan.Extensions.VK_KHR_surface.COLOR_SPACE_DISPLAY_P3_LINEAR_EXT'
src/Vulkan/Extensions/VK_EXT_transform_feedback.hs view
@@ -1574,10 +1574,10 @@ -- - #VUID-vkCmdDrawIndirectByteCountEXT-VkPipelineVieportCreateInfo-04141# -- If the bound graphics pipeline state was created with the -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of+-- dynamic state enabled and a -- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with -- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@ -- greater or equal to the @viewportCount@ parameter in the last call -- to@@ -1586,10 +1586,10 @@ -- - #VUID-vkCmdDrawIndirectByteCountEXT-VkPipelineVieportCreateInfo-04142# -- If the bound graphics pipeline state was created with the -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of+-- dynamic state enabled and a -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@ -- greater or equal to the @viewportCount@ parameter in the last call -- to@@ -1713,6 +1713,242 @@ -- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT' -- /must/ have been called in the current command buffer prior to this -- draw command+--+-- - #VUID-vkCmdDrawIndirectByteCountEXT-imageView-06172# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawIndirectByteCountEXT-imageView-06173# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawIndirectByteCountEXT-imageView-06174# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawIndirectByteCountEXT-imageView-06175# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawIndirectByteCountEXT-imageView-06176# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawIndirectByteCountEXT-imageView-06177# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawIndirectByteCountEXT-viewMask-06178# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@viewMask@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@viewMask@+--+-- - #VUID-vkCmdDrawIndirectByteCountEXT-colorAttachmentCount-06179# If+-- the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@colorAttachmentCount@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+--+-- - #VUID-vkCmdDrawIndirectByteCountEXT-colorAttachmentCount-06180# If+-- the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a 'Vulkan.Core10.Enums.Format.Format' equal to the+-- corresponding element of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@pColorAttachmentFormats@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawIndirectByteCountEXT-pDepthAttachment-06181# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@depthAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndirectByteCountEXT-pStencilAttachment-06182# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@stencilAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndirectByteCountEXT-imageView-06183# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentShadingRateAttachmentInfoKHR'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'+--+-- - #VUID-vkCmdDrawIndirectByteCountEXT-imageView-06184# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentDensityMapAttachmentInfoEXT'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT'+--+-- - #VUID-vkCmdDrawIndirectByteCountEXT-colorAttachmentCount-06185# If+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the corresponding element of the+-- @pColorAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawIndirectByteCountEXT-pDepthAttachment-06186# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndirectByteCountEXT-pStencilAttachment-06187# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndirectByteCountEXT-colorAttachmentCount-06188# If+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawIndirectByteCountEXT-pDepthAttachment-06189# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndirectByteCountEXT-pStencilAttachment-06190# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawIndirectByteCountEXT-renderPass-06198# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline /must/ have been created with a+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@+-- equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE' -- -- - #VUID-vkCmdDrawIndirectByteCountEXT-None-04007# All vertex input -- bindings accessed via vertex input variables declared in the vertex
src/Vulkan/Extensions/VK_GOOGLE_hlsl_functionality1.hs view
@@ -52,6 +52,10 @@ -- -- == New Enum Constants --+-- - 'GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME'+--+-- - 'GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION'+-- -- - 'GOOGLE_HLSL_FUNCTIONALITY_1_EXTENSION_NAME' -- -- - 'GOOGLE_HLSL_FUNCTIONALITY_1_SPEC_VERSION'
src/Vulkan/Extensions/VK_HUAWEI_subpass_shading.hs view
@@ -799,9 +799,9 @@ -- 'Vulkan.Core10.Enums.StructureType.StructureType' data SubpassShadingPipelineCreateInfoHUAWEI = SubpassShadingPipelineCreateInfoHUAWEI { -- | @renderPass@ is a handle to a render pass object describing the- -- environment in which the pipeline will be used; the pipeline /must/ only- -- be used with an instance of any render pass compatible with the one- -- provided. See+ -- environment in which the pipeline will be used. The pipeline /must/ only+ -- be used with a render pass instance compatible with the one provided.+ -- See -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility Render Pass Compatibility> -- for more information. renderPass :: RenderPass
src/Vulkan/Extensions/VK_INTEL_performance_query.hs view
@@ -97,6 +97,8 @@ -- -- - Extending 'Vulkan.Core10.Query.QueryPoolCreateInfo': --+-- - 'QueryPoolCreateInfoINTEL'+-- -- - 'QueryPoolPerformanceQueryCreateInfoINTEL' -- -- == New Unions@@ -140,6 +142,8 @@ -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL' -- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL'+--+-- - 'STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL' -- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL' --
src/Vulkan/Extensions/VK_INTEL_performance_query.hs-boot view
@@ -97,6 +97,8 @@ -- -- - Extending 'Vulkan.Core10.Query.QueryPoolCreateInfo': --+-- - 'QueryPoolCreateInfoINTEL'+-- -- - 'QueryPoolPerformanceQueryCreateInfoINTEL' -- -- == New Unions@@ -140,6 +142,8 @@ -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL' -- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL'+--+-- - 'STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL' -- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL' --
src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs view
@@ -5424,6 +5424,12 @@ -- vertex motion in its instances /must/ set -- 'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' in @flags@. --+-- Members @srcAccelerationStructure@ and @dstAccelerationStructure@ /may/+-- be the same or different for an update operation (when @mode@ is+-- 'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR'). If they are the same,+-- the update happens in-place. Otherwise, the target acceleration+-- structure is updated and the source is not modified.+-- -- == Valid Usage -- -- - #VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03654# @type@@@ -6953,9 +6959,10 @@ deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits) -- | 'BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR' indicates that the--- specified acceleration structure /can/ be updated with @update@ of+-- specified acceleration structure /can/ be updated with a @mode@ of+-- 'BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR' in+-- 'AccelerationStructureBuildGeometryInfoKHR' or an @update@ of -- 'Vulkan.Core10.FundamentalTypes.TRUE' in--- 'cmdBuildAccelerationStructuresKHR' or -- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdBuildAccelerationStructureNV' . pattern BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR = BuildAccelerationStructureFlagBitsKHR 0x00000001 -- | 'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' indicates that
src/Vulkan/Extensions/VK_KHR_create_renderpass2.hs view
@@ -56,7 +56,7 @@ -- way that can be easily extended by other extensions through the -- substructures of render pass creation. The Vulkan 1.0 render pass -- creation sub-structures do not include @sType@\/@pNext@ members.--- Additionally, the renderpass begin\/next\/end commands have been+-- Additionally, the render pass begin\/next\/end commands have been -- augmented with new extensible structures for passing additional subpass -- information. --
src/Vulkan/Extensions/VK_KHR_device_group.hs view
@@ -148,7 +148,8 @@ -- -- - 'MemoryAllocateFlagsInfoKHR' ----- - Extending 'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo':+-- - Extending 'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo',+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR': -- -- - 'DeviceGroupRenderPassBeginInfoKHR' --
src/Vulkan/Extensions/VK_KHR_display_swapchain.hs view
@@ -159,7 +159,7 @@ -- - Revision 4, 2015-09-08 (James Jones) -- -- - Allow creating multiple swap chains that share the same images--- using a single call to vkCreateSwapChainKHR().+-- using a single call to vkCreateSwapchainKHR(). -- -- - Revision 5, 2015-09-10 (Alon Or-bach) --
src/Vulkan/Extensions/VK_KHR_display_swapchain.hs-boot view
@@ -159,7 +159,7 @@ -- - Revision 4, 2015-09-08 (James Jones) -- -- - Allow creating multiple swap chains that share the same images--- using a single call to vkCreateSwapChainKHR().+-- using a single call to vkCreateSwapchainKHR(). -- -- - Revision 5, 2015-09-10 (Alon Or-bach) --
+ src/Vulkan/Extensions/VK_KHR_dynamic_rendering.hs view
@@ -0,0 +1,2320 @@+{-# language CPP #-}+-- | = Name+--+-- VK_KHR_dynamic_rendering - device extension+--+-- == VK_KHR_dynamic_rendering+--+-- [__Name String__]+-- @VK_KHR_dynamic_rendering@+--+-- [__Extension Type__]+-- Device extension+--+-- [__Registered Extension Number__]+-- 45+--+-- [__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_dynamic_rendering] @tobski%0A<<Here describe the issue or question you have about the VK_KHR_dynamic_rendering extension>> >+--+-- [__Extension Proposal__]+-- <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_KHR_dynamic_rendering.asciidoc VK_KHR_dynamic_rendering>+--+-- == Other Extension Metadata+--+-- [__Last Modified Date__]+-- 2021-10-06+--+-- [__Contributors__]+--+-- - Tobias Hector, AMD+--+-- - Arseny Kapoulkine, Roblox+--+-- - François Duranleau, Gameloft+--+-- - Stuart Smith, AMD+--+-- - Hai Nguyen, Google+--+-- - Jean-François Roy, Google+--+-- - Jeff Leger, Qualcomm+--+-- - Jan-Harald Fredriksen, Arm+--+-- - Piers Daniell, Nvidia+--+-- - James Fitzpatrick, Imagination+--+-- - Piotr Byszewski, Mobica+--+-- - Jesse Hall, Google+--+-- - Mike Blumenkrantz, Valve+--+-- == Description+--+-- This extension allows applications to create single-pass render pass+-- instances without needing to create render pass objects or framebuffers.+-- Dynamic render passes can also span across multiple primary command+-- buffers, rather than relying on secondary command buffers.+--+-- This extension also incorporates+-- 'Vulkan.Core10.Enums.AttachmentStoreOp.ATTACHMENT_STORE_OP_NONE_KHR'+-- from <VK_QCOM_render_pass_store_ops.html VK_QCOM_render_pass_store_ops>,+-- enabling applications to avoid unnecessary synchronization when an+-- attachment is not written during a render pass.+--+-- == New Commands+--+-- - 'cmdBeginRenderingKHR'+--+-- - 'cmdEndRenderingKHR'+--+-- == New Structures+--+-- - 'RenderingAttachmentInfoKHR'+--+-- - 'RenderingInfoKHR'+--+-- - Extending+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo':+--+-- - 'CommandBufferInheritanceRenderingInfoKHR'+--+-- - Extending 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo':+--+-- - 'PipelineRenderingCreateInfoKHR'+--+-- - Extending+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',+-- 'Vulkan.Core10.Device.DeviceCreateInfo':+--+-- - 'PhysicalDeviceDynamicRenderingFeaturesKHR'+--+-- If+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_AMD_mixed_attachment_samples VK_AMD_mixed_attachment_samples>+-- is supported:+--+-- - Extending+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo',+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo':+--+-- - 'AttachmentSampleCountInfoAMD'+--+-- 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 'RenderingInfoKHR':+--+-- - 'RenderingFragmentDensityMapAttachmentInfoEXT'+--+-- 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 'RenderingInfoKHR':+--+-- - 'RenderingFragmentShadingRateAttachmentInfoKHR'+--+-- If+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_framebuffer_mixed_samples VK_NV_framebuffer_mixed_samples>+-- is supported:+--+-- - Extending+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo',+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo':+--+-- - 'AttachmentSampleCountInfoNV'+--+-- If+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NVX_multiview_per_view_attributes VK_NVX_multiview_per_view_attributes>+-- is supported:+--+-- - Extending+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo',+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo',+-- 'RenderingInfoKHR':+--+-- - 'MultiviewPerViewAttributesInfoNVX'+--+-- == New Enums+--+-- - 'RenderingFlagBitsKHR'+--+-- == New Bitmasks+--+-- - 'RenderingFlagsKHR'+--+-- == New Enum Constants+--+-- - 'KHR_DYNAMIC_RENDERING_EXTENSION_NAME'+--+-- - 'KHR_DYNAMIC_RENDERING_SPEC_VERSION'+--+-- - Extending 'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp':+--+-- - 'Vulkan.Core10.Enums.AttachmentStoreOp.ATTACHMENT_STORE_OP_NONE_KHR'+--+-- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType':+--+-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR'+--+-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR'+--+-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR'+--+-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR'+--+-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDERING_INFO_KHR'+--+-- If+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_AMD_mixed_attachment_samples VK_AMD_mixed_attachment_samples>+-- is supported:+--+-- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType':+--+-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD'+--+-- If+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_fragment_density_map VK_EXT_fragment_density_map>+-- is supported:+--+-- - Extending+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits':+--+-- - 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT'+--+-- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType':+--+-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT'+--+-- 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+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits':+--+-- - 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'+--+-- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType':+--+-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR'+--+-- If+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_framebuffer_mixed_samples VK_NV_framebuffer_mixed_samples>+-- is supported:+--+-- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType':+--+-- - 'STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_NV'+--+-- If+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NVX_multiview_per_view_attributes VK_NVX_multiview_per_view_attributes>+-- is supported:+--+-- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType':+--+-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX'+--+-- == Version History+--+-- - Revision 1, 2021-10-06 (Tobias Hector)+--+-- - Initial revision+--+-- = See Also+--+-- 'CommandBufferInheritanceRenderingInfoKHR',+-- 'PhysicalDeviceDynamicRenderingFeaturesKHR',+-- 'PipelineRenderingCreateInfoKHR', 'RenderingAttachmentInfoKHR',+-- 'RenderingFlagBitsKHR', 'RenderingFlagsKHR', 'RenderingInfoKHR',+-- 'cmdBeginRenderingKHR', 'cmdEndRenderingKHR'+--+-- = Document Notes+--+-- For more information, see the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_dynamic_rendering 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_dynamic_rendering ( cmdBeginRenderingKHR+ , cmdUseRenderingKHR+ , cmdEndRenderingKHR+ , pattern STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_NV+ , PipelineRenderingCreateInfoKHR(..)+ , RenderingInfoKHR(..)+ , RenderingAttachmentInfoKHR(..)+ , RenderingFragmentShadingRateAttachmentInfoKHR(..)+ , RenderingFragmentDensityMapAttachmentInfoEXT(..)+ , PhysicalDeviceDynamicRenderingFeaturesKHR(..)+ , CommandBufferInheritanceRenderingInfoKHR(..)+ , AttachmentSampleCountInfoAMD(..)+ , MultiviewPerViewAttributesInfoNVX(..)+ , RenderingFlagsKHR+ , RenderingFlagBitsKHR( RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR+ , RENDERING_SUSPENDING_BIT_KHR+ , RENDERING_RESUMING_BIT_KHR+ , ..+ )+ , AttachmentSampleCountInfoNV+ , KHR_DYNAMIC_RENDERING_SPEC_VERSION+ , pattern KHR_DYNAMIC_RENDERING_SPEC_VERSION+ , KHR_DYNAMIC_RENDERING_EXTENSION_NAME+ , pattern KHR_DYNAMIC_RENDERING_EXTENSION_NAME+ ) where++import Vulkan.Internal.Utils (enumReadPrec)+import Vulkan.Internal.Utils (enumShowsPrec)+import Vulkan.Internal.Utils (traceAroundEvent)+import Control.Monad (unless)+import Control.Monad.IO.Class (liftIO)+import Data.Typeable (eqT)+import Foreign.Marshal.Alloc (allocaBytes)+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.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.Core10.Enums.AttachmentLoadOp (AttachmentLoadOp)+import Vulkan.Core10.Enums.AttachmentStoreOp (AttachmentStoreOp)+import Vulkan.Core10.FundamentalTypes (Bool32)+import Vulkan.CStruct.Extends (Chain)+import Vulkan.Core10.CommandBufferBuilding (ClearValue)+import Vulkan.Core10.Handles (CommandBuffer)+import Vulkan.Core10.Handles (CommandBuffer(..))+import Vulkan.Core10.Handles (CommandBuffer_T)+import Vulkan.Dynamic (DeviceCmds(pVkCmdBeginRenderingKHR))+import Vulkan.Dynamic (DeviceCmds(pVkCmdEndRenderingKHR))+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_group (DeviceGroupRenderPassBeginInfo)+import Vulkan.CStruct.Extends (Extends)+import Vulkan.CStruct.Extends (Extendss)+import Vulkan.CStruct.Extends (Extensible(..))+import Vulkan.Core10.FundamentalTypes (Extent2D)+import Vulkan.Core10.FundamentalTypes (Flags)+import Vulkan.Core10.Enums.Format (Format)+import Vulkan.Core10.Enums.ImageLayout (ImageLayout)+import Vulkan.Core10.Handles (ImageView)+import Vulkan.CStruct.Extends (PokeChain)+import Vulkan.CStruct.Extends (PokeChain(..))+import Vulkan.Core10.FundamentalTypes (Rect2D)+import Vulkan.Core12.Enums.ResolveModeFlagBits (ResolveModeFlagBits)+import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)+import Vulkan.CStruct.Extends (SomeStruct)+import Vulkan.Core10.Enums.StructureType (StructureType)+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDERING_INFO_KHR))+foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdBeginRenderingKHR+ :: FunPtr (Ptr CommandBuffer_T -> Ptr (SomeStruct RenderingInfoKHR) -> IO ()) -> Ptr CommandBuffer_T -> Ptr (SomeStruct RenderingInfoKHR) -> IO ()++-- | vkCmdBeginRenderingKHR - Begin a dynamic render pass instance+--+-- = Description+--+-- After beginning a render pass instance, the command buffer is ready to+-- record+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing draw commands>.+--+-- If @pRenderingInfo->flags@ includes 'RENDERING_RESUMING_BIT_KHR' then+-- this render pass is resumed from a render pass instance that has been+-- suspended earlier in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.+--+-- == Valid Usage+--+-- - #VUID-vkCmdBeginRenderingKHR-dynamicRendering-06446# The+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dynamicRendering dynamicRendering>+-- feature /must/ be enabled+--+-- - #VUID-vkCmdBeginRenderingKHR-commandBuffer-06068# If @commandBuffer@+-- is a secondary command buffer, @pRenderingInfo->flags@ /must/ not+-- include 'RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR'+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdBeginRenderingKHR-commandBuffer-parameter#+-- @commandBuffer@ /must/ be a valid+-- 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdBeginRenderingKHR-pRenderingInfo-parameter#+-- @pRenderingInfo@ /must/ be a valid pointer to a valid+-- 'RenderingInfoKHR' structure+--+-- - #VUID-vkCmdBeginRenderingKHR-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-vkCmdBeginRenderingKHR-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics operations+--+-- - #VUID-vkCmdBeginRenderingKHR-renderpass# This command /must/ only be+-- called outside of a render pass instance+--+-- == Host Synchronization+--+-- - Host access to @commandBuffer@ /must/ be externally synchronized+--+-- - Host access to the 'Vulkan.Core10.Handles.CommandPool' that+-- @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================++-- | Primary | Outside | Graphics |+-- | Secondary | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_dynamic_rendering VK_KHR_dynamic_rendering>,+-- 'Vulkan.Core10.Handles.CommandBuffer', 'RenderingInfoKHR'+cmdBeginRenderingKHR :: forall a io+ . (Extendss RenderingInfoKHR a, PokeChain a, MonadIO io)+ => -- | @commandBuffer@ is the command buffer in which to record the command.+ CommandBuffer+ -> -- | @pRenderingInfo@ is a pointer to a 'RenderingInfoKHR' structure+ -- specifying details of the render pass instance to begin.+ (RenderingInfoKHR a)+ -> io ()+cmdBeginRenderingKHR commandBuffer renderingInfo = liftIO . evalContT $ do+ let vkCmdBeginRenderingKHRPtr = pVkCmdBeginRenderingKHR (deviceCmds (commandBuffer :: CommandBuffer))+ lift $ unless (vkCmdBeginRenderingKHRPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBeginRenderingKHR is null" Nothing Nothing+ let vkCmdBeginRenderingKHR' = mkVkCmdBeginRenderingKHR vkCmdBeginRenderingKHRPtr+ pRenderingInfo <- ContT $ withCStruct (renderingInfo)+ lift $ traceAroundEvent "vkCmdBeginRenderingKHR" (vkCmdBeginRenderingKHR' (commandBufferHandle (commandBuffer)) (forgetExtensions pRenderingInfo))+ pure $ ()++-- | This function will call the supplied action between calls to+-- 'cmdBeginRenderingKHR' and 'cmdEndRenderingKHR'+--+-- Note that 'cmdEndRenderingKHR' is *not* called if an exception is thrown+-- by the inner action.+cmdUseRenderingKHR :: forall a io r . (Extendss RenderingInfoKHR a, PokeChain a, MonadIO io) => CommandBuffer -> RenderingInfoKHR a -> io r -> io r+cmdUseRenderingKHR commandBuffer pRenderingInfo a =+ (cmdBeginRenderingKHR commandBuffer pRenderingInfo) *> a <* (cmdEndRenderingKHR commandBuffer)+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+ unsafe+#endif+ "dynamic" mkVkCmdEndRenderingKHR+ :: FunPtr (Ptr CommandBuffer_T -> IO ()) -> Ptr CommandBuffer_T -> IO ()++-- | vkCmdEndRenderingKHR - End a dynamic render pass instance+--+-- = Description+--+-- If the value of @pRenderingInfo->flags@ used to begin this render pass+-- instance included 'RENDERING_SUSPENDING_BIT_KHR', then this render pass+-- is suspended and will be resumed later in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.+--+-- == Valid Usage+--+-- - #VUID-vkCmdEndRenderingKHR-None-06161# The current render pass+-- instance /must/ have been begun with 'cmdBeginRenderingKHR'+--+-- - #VUID-vkCmdEndRenderingKHR-commandBuffer-06162# The current render+-- pass instance /must/ have been begun in @commandBuffer@+--+-- == Valid Usage (Implicit)+--+-- - #VUID-vkCmdEndRenderingKHR-commandBuffer-parameter# @commandBuffer@+-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- - #VUID-vkCmdEndRenderingKHR-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-vkCmdEndRenderingKHR-commandBuffer-cmdpool# The+-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- allocated from /must/ support graphics operations+--+-- - #VUID-vkCmdEndRenderingKHR-renderpass# This command /must/ only be+-- called inside of a render pass instance+--+-- == Host Synchronization+--+-- - Host access to @commandBuffer@ /must/ be externally synchronized+--+-- - Host access to the 'Vulkan.Core10.Handles.CommandPool' that+-- @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================++-- | Primary | Inside | Graphics |+-- | Secondary | | |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_dynamic_rendering VK_KHR_dynamic_rendering>,+-- 'Vulkan.Core10.Handles.CommandBuffer'+cmdEndRenderingKHR :: forall io+ . (MonadIO io)+ => -- | @commandBuffer@ is the command buffer in which to record the command.+ CommandBuffer+ -> io ()+cmdEndRenderingKHR commandBuffer = liftIO $ do+ let vkCmdEndRenderingKHRPtr = pVkCmdEndRenderingKHR (deviceCmds (commandBuffer :: CommandBuffer))+ unless (vkCmdEndRenderingKHRPtr /= nullFunPtr) $+ throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdEndRenderingKHR is null" Nothing Nothing+ let vkCmdEndRenderingKHR' = mkVkCmdEndRenderingKHR vkCmdEndRenderingKHRPtr+ traceAroundEvent "vkCmdEndRenderingKHR" (vkCmdEndRenderingKHR' (commandBufferHandle (commandBuffer)))+ pure $ ()+++-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_NV"+pattern STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_NV = STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD+++-- | VkPipelineRenderingCreateInfoKHR - Structure specifying attachment+-- formats+--+-- = Description+--+-- When a pipeline is created without a 'Vulkan.Core10.Handles.RenderPass',+-- if this structure is present in the @pNext@ chain of+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo', it specifies the+-- view mask and format of attachments used for rendering. If this+-- structure is not specified, and the pipeline does not include a+-- 'Vulkan.Core10.Handles.RenderPass', @viewMask@ and+-- @colorAttachmentCount@ are @0@, and @depthAttachmentFormat@ and+-- @stencilAttachmentFormat@ are+-- 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'. If a graphics pipeline is+-- created with a valid 'Vulkan.Core10.Handles.RenderPass', parameters of+-- this structure are ignored.+--+-- If @depthAttachmentFormat@, @stencilAttachmentFormat@, or any element of+-- @pColorAttachmentFormats@ is+-- 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', it indicates that the+-- corresponding attachment is unused within the render pass. Valid formats+-- indicate that an attachment /can/ be used - but it is still valid to set+-- the attachment to @NULL@ when beginning rendering.+--+-- == Valid Usage+--+-- - #VUID-VkPipelineRenderingCreateInfoKHR-pColorAttachmentFormats-06064#+-- If any element of @pColorAttachmentFormats@ is not+-- 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', it /must/ be a format+-- with+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features>+-- that include+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'+--+-- - #VUID-VkPipelineRenderingCreateInfoKHR-depthAttachmentFormat-06065#+-- If @depthAttachmentFormat@ is not+-- 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', it /must/ be a format+-- with+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features>+-- that include+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'+--+-- - #VUID-VkPipelineRenderingCreateInfoKHR-stencilAttachmentFormat-06164#+-- If @stencilAttachmentFormat@ is not+-- 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', it /must/ be a format+-- with+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features>+-- that include+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'+--+-- - #VUID-VkPipelineRenderingCreateInfoKHR-depthAttachmentFormat-06165#+-- If @depthAttachmentFormat@ is not+-- 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED' and+-- @stencilAttachmentFormat@ is not+-- 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED',+-- @depthAttachmentFormat@ /must/ equal @stencilAttachmentFormat@+--+-- - #VUID-VkPipelineRenderingCreateInfoKHR-multiview-06066# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiview multiview>+-- feature is not enabled, @viewMask@ /must/ be @0@+--+-- - #VUID-VkPipelineRenderingCreateInfoKHR-viewMask-06067# The index of+-- the most significant bit in @viewMask@ /must/ be less than+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxMultiviewViewCount maxMultiviewViewCount>+--+-- == Valid Usage (Implicit)+--+-- - #VUID-VkPipelineRenderingCreateInfoKHR-sType-sType# @sType@ /must/+-- be+-- 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR'+--+-- - #VUID-VkPipelineRenderingCreateInfoKHR-pColorAttachmentFormats-parameter#+-- If @colorAttachmentCount@ is not @0@, @pColorAttachmentFormats@+-- /must/ be a valid pointer to an array of @colorAttachmentCount@+-- valid 'Vulkan.Core10.Enums.Format.Format' values+--+-- - #VUID-VkPipelineRenderingCreateInfoKHR-depthAttachmentFormat-parameter#+-- @depthAttachmentFormat@ /must/ be a valid+-- 'Vulkan.Core10.Enums.Format.Format' value+--+-- - #VUID-VkPipelineRenderingCreateInfoKHR-stencilAttachmentFormat-parameter#+-- @stencilAttachmentFormat@ /must/ be a valid+-- 'Vulkan.Core10.Enums.Format.Format' value+--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_dynamic_rendering VK_KHR_dynamic_rendering>,+-- 'Vulkan.Core10.Enums.Format.Format',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data PipelineRenderingCreateInfoKHR = PipelineRenderingCreateInfoKHR+ { -- | @viewMask@ is the viewMask used for rendering.+ viewMask :: Word32+ , -- | @pColorAttachmentFormats@ is an array of+ -- 'Vulkan.Core10.Enums.Format.Format' values defining the format of color+ -- attachments used in this pipeline.+ colorAttachmentFormats :: Vector Format+ , -- | @depthAttachmentFormat@ is a 'Vulkan.Core10.Enums.Format.Format' value+ -- defining the format of the depth attachment used in this pipeline.+ depthAttachmentFormat :: Format+ , -- | @stencilAttachmentFormat@ is a 'Vulkan.Core10.Enums.Format.Format' value+ -- defining the format of the stencil attachment used in this pipeline.+ stencilAttachmentFormat :: Format+ }+ deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PipelineRenderingCreateInfoKHR)+#endif+deriving instance Show PipelineRenderingCreateInfoKHR++instance ToCStruct PipelineRenderingCreateInfoKHR where+ withCStruct x f = allocaBytes 40 $ \p -> pokeCStruct p x (f p)+ pokeCStruct p PipelineRenderingCreateInfoKHR{..} f = evalContT $ do+ lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR)+ lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+ lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (viewMask)+ lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (colorAttachmentFormats)) :: Word32))+ pPColorAttachmentFormats' <- ContT $ allocaBytes @Format ((Data.Vector.length (colorAttachmentFormats)) * 4)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPColorAttachmentFormats' `plusPtr` (4 * (i)) :: Ptr Format) (e)) (colorAttachmentFormats)+ lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Format))) (pPColorAttachmentFormats')+ lift $ poke ((p `plusPtr` 32 :: Ptr Format)) (depthAttachmentFormat)+ lift $ poke ((p `plusPtr` 36 :: Ptr Format)) (stencilAttachmentFormat)+ lift $ f+ cStructSize = 40+ cStructAlignment = 8+ pokeZeroCStruct p f = do+ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR)+ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)+ poke ((p `plusPtr` 32 :: Ptr Format)) (zero)+ poke ((p `plusPtr` 36 :: Ptr Format)) (zero)+ f++instance FromCStruct PipelineRenderingCreateInfoKHR where+ peekCStruct p = do+ viewMask <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))+ colorAttachmentCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))+ pColorAttachmentFormats <- peek @(Ptr Format) ((p `plusPtr` 24 :: Ptr (Ptr Format)))+ pColorAttachmentFormats' <- generateM (fromIntegral colorAttachmentCount) (\i -> peek @Format ((pColorAttachmentFormats `advancePtrBytes` (4 * (i)) :: Ptr Format)))+ depthAttachmentFormat <- peek @Format ((p `plusPtr` 32 :: Ptr Format))+ stencilAttachmentFormat <- peek @Format ((p `plusPtr` 36 :: Ptr Format))+ pure $ PipelineRenderingCreateInfoKHR+ viewMask pColorAttachmentFormats' depthAttachmentFormat stencilAttachmentFormat++instance Zero PipelineRenderingCreateInfoKHR where+ zero = PipelineRenderingCreateInfoKHR+ zero+ mempty+ zero+ zero+++-- | VkRenderingInfoKHR - Structure specifying render pass instance begin+-- info+--+-- = Description+--+-- If @viewMask@ is not @0@, multiview is enabled.+--+-- If there’s an instance of+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'+-- included in the @pNext@ chain and its @deviceCount@ member is not @0@,+-- then @renderArea@ is ignored, and the render area is defined per-device+-- by that structure.+--+-- Each element of the @pColorAttachments@ array corresponds to an output+-- location in the shader, i.e. if the shader declares an output variable+-- decorated with a @Location@ value of __X__, then it uses the attachment+-- provided in @pColorAttachments@[__X__]. If the @imageView@ member of any+-- element of @pColorAttachments@ is+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', writes to the corresponding+-- location by a fragment are discarded.+--+-- == Valid Usage+--+-- - #VUID-VkRenderingInfoKHR-viewMask-06069# If @viewMask@ is @0@,+-- @layerCount@ /must/ not be @0@+--+-- - #VUID-VkRenderingInfoKHR-imageView-06070# If neither the+-- @VK_AMD_mixed_attachment_samples@ nor the+-- @VK_NV_framebuffer_mixed_samples@ extensions are enabled,+-- @imageView@ members of @pDepthAttachment@, @pStencilAttachment@, and+-- elements of @pColorAttachments@ that are not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with the same @sampleCount@+--+-- - #VUID-VkRenderingInfoKHR-pNext-06077# If the @pNext@ chain does not+-- contain+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'+-- or its @deviceRenderAreaCount@ member is equal to 0,+-- @renderArea.offset.x@ /must/ be greater than or equal to 0+--+-- - #VUID-VkRenderingInfoKHR-pNext-06078# If the @pNext@ chain does not+-- contain+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'+-- or its @deviceRenderAreaCount@ member is equal to 0,+-- @renderArea.offset.y@ /must/ be greater than or equal to 0+--+-- - #VUID-VkRenderingInfoKHR-pNext-06079# If the @pNext@ chain does not+-- contain+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'+-- or its @deviceRenderAreaCount@ member is equal to 0, the width of+-- the @imageView@ member of any element of @pColorAttachments@,+-- @pDepthAttachment@, or @pStencilAttachment@ that is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ be greater than or+-- equal to @renderArea.offset.x@ + @renderArea.extent.width@+--+-- - #VUID-VkRenderingInfoKHR-pNext-06080# If the @pNext@ chain does not+-- contain+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'+-- or its @deviceRenderAreaCount@ member is equal to 0, the height of+-- the @imageView@ member of any element of @pColorAttachments@,+-- @pDepthAttachment@, or @pStencilAttachment@ that is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ be greater than or+-- equal to @renderArea.offset.y@ + @renderArea.extent.height@+--+-- - #VUID-VkRenderingInfoKHR-pNext-06081# If the @pNext@ chain contains+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',+-- the @offset.x@ member of each element of @pDeviceRenderAreas@ /must/+-- be greater than or equal to 0+--+-- - #VUID-VkRenderingInfoKHR-pNext-06082# If the @pNext@ chain contains+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',+-- the @offset.y@ member of each element of @pDeviceRenderAreas@ /must/+-- be greater than or equal to 0+--+-- - #VUID-VkRenderingInfoKHR-pNext-06083# If the @pNext@ chain contains+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',+-- the width of the @imageView@ member of any element of+-- @pColorAttachments@, @pDepthAttachment@, or @pStencilAttachment@+-- that is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ be+-- greater than or equal to the sum of the @offset.x@ and+-- @extent.width@ members of each element of @pDeviceRenderAreas@+--+-- - #VUID-VkRenderingInfoKHR-pNext-06084# If the @pNext@ chain contains+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',+-- the height of the @imageView@ member of any element of+-- @pColorAttachments@, @pDepthAttachment@, or @pStencilAttachment@+-- that is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ be+-- greater than or equal to the sum of the @offset.y@ and+-- @extent.height@ members of each element of @pDeviceRenderAreas@+--+-- - #VUID-VkRenderingInfoKHR-pDepthAttachment-06085# If neither+-- @pDepthAttachment@ or @pStencilAttachment@ are @NULL@ and the+-- @imageView@ member of either structure is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', the @imageView@ member of+-- each structure /must/ be the same+--+-- - #VUID-VkRenderingInfoKHR-pDepthAttachment-06086# If neither+-- @pDepthAttachment@ or @pStencilAttachment@ are @NULL@, and the+-- @resolveMode@ member of each is not+-- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE', the+-- @resolveImageView@ member of each structure /must/ be the same+--+-- - #VUID-VkRenderingInfoKHR-colorAttachmentCount-06087# If+-- @colorAttachmentCount@ is not @0@ and the @imageView@ member of an+-- element of @pColorAttachments@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', that @imageView@ /must/+-- have been created with+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'+--+-- - #VUID-VkRenderingInfoKHR-pDepthAttachment-06088# If+-- @pDepthAttachment@ is not @NULL@ and @pDepthAttachment->imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @pDepthAttachment->imageView@ /must/ have been created with+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'+--+-- - #VUID-VkRenderingInfoKHR-pStencilAttachment-06089# If+-- @pStencilAttachment@ is not @NULL@ and+-- @pStencilAttachment->imageView@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @pStencilAttachment->imageView@ /must/ have been created with a+-- stencil usage including+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'+--+-- - #VUID-VkRenderingInfoKHR-colorAttachmentCount-06090# If+-- @colorAttachmentCount@ is not @0@ and the @imageView@ member of an+-- element of @pColorAttachments@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', the @layout@ member of+-- that element of @pColorAttachments@ /must/ not be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL'+-- or+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'+--+-- - #VUID-VkRenderingInfoKHR-colorAttachmentCount-06091# If+-- @colorAttachmentCount@ is not @0@ and the @imageView@ member of an+-- element of @pColorAttachments@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', if the @resolveMode@+-- member of that element of @pColorAttachments@ is not+-- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE', its+-- @resolveImageLayout@ member /must/ not be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL'+-- or+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'+--+-- - #VUID-VkRenderingInfoKHR-pDepthAttachment-06092# If+-- @pDepthAttachment@ is not @NULL@ and @pDepthAttachment->imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @pDepthAttachment->layout@ /must/ not be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'+--+-- - #VUID-VkRenderingInfoKHR-pDepthAttachment-06093# If+-- @pDepthAttachment@ is not @NULL@, @pDepthAttachment->imageView@ is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE', and+-- @pDepthAttachment->resolveMode@ is not+-- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE',+-- @pDepthAttachment->resolveImageLayout@ /must/ not be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'+--+-- - #VUID-VkRenderingInfoKHR-pStencilAttachment-06094# If+-- @pStencilAttachment@ is not @NULL@ and+-- @pStencilAttachment->imageView@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @pStencilAttachment->layout@ /must/ not be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'+--+-- - #VUID-VkRenderingInfoKHR-pStencilAttachment-06095# If+-- @pStencilAttachment@ is not @NULL@, @pStencilAttachment->imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', and+-- @pStencilAttachment->resolveMode@ is not+-- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE',+-- @pStencilAttachment->resolveImageLayout@ /must/ not be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'+--+-- - #VUID-VkRenderingInfoKHR-colorAttachmentCount-06096# If+-- @colorAttachmentCount@ is not @0@ and the @imageView@ member of an+-- element of @pColorAttachments@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', the @layout@ member of+-- that element of @pColorAttachments@ /must/ not be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'+-- or+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL'+--+-- - #VUID-VkRenderingInfoKHR-colorAttachmentCount-06097# If+-- @colorAttachmentCount@ is not @0@ and the @imageView@ member of an+-- element of @pColorAttachments@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', if the @resolveMode@+-- member of that element of @pColorAttachments@ is not+-- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE', its+-- @resolveImageLayout@ member /must/ not be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'+-- or+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL'+--+-- - #VUID-VkRenderingInfoKHR-pDepthAttachment-06098# If+-- @pDepthAttachment@ is not @NULL@, @pDepthAttachment->imageView@ is+-- not 'Vulkan.Core10.APIConstants.NULL_HANDLE', and+-- @pDepthAttachment->resolveMode@ is not+-- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE',+-- @pDepthAttachment->resolveImageLayout@ /must/ not be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'+--+-- - #VUID-VkRenderingInfoKHR-pStencilAttachment-06099# If+-- @pStencilAttachment@ is not @NULL@, @pStencilAttachment->imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', and+-- @pStencilAttachment->resolveMode@ is not+-- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE',+-- @pStencilAttachment->resolveImageLayout@ /must/ not be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL'+--+-- - #VUID-VkRenderingInfoKHR-colorAttachmentCount-06100# If+-- @colorAttachmentCount@ is not @0@ and the @imageView@ member of an+-- element of @pColorAttachments@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', the @layout@ member of+-- that element of @pColorAttachments@ /must/ not be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',+-- or+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'+--+-- - #VUID-VkRenderingInfoKHR-colorAttachmentCount-06101# If+-- @colorAttachmentCount@ is not @0@ and the @imageView@ member of an+-- element of @pColorAttachments@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', if the @resolveMode@+-- member of that element of @pColorAttachments@ is not+-- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE', its+-- @resolveImageLayout@ member /must/ not be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',+-- or+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'+--+-- - #VUID-VkRenderingInfoKHR-pDepthAttachment-06102# If+-- @pDepthAttachment@ is not @NULL@ and @pDepthAttachment->imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @pDepthAttachment->resolveMode@ /must/ be one of the bits set in+-- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.PhysicalDeviceDepthStencilResolveProperties'::@supportedDepthResolveModes@+--+-- - #VUID-VkRenderingInfoKHR-pStencilAttachment-06103# If+-- @pStencilAttachment@ is not @NULL@ and+-- @pStencilAttachment->imageView@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @pStencilAttachment->resolveMode@ /must/ be one of the bits set in+-- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.PhysicalDeviceDepthStencilResolveProperties'::@supportedStencilResolveModes@+--+-- - #VUID-VkRenderingInfoKHR-pDepthAttachment-06104# If+-- @pDepthAttachment@ or @pStencilAttachment@ are both not @NULL@,+-- @pDepthAttachment->imageView@ and @pStencilAttachment->imageView@+-- are both not 'Vulkan.Core10.APIConstants.NULL_HANDLE', and+-- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.PhysicalDeviceDepthStencilResolveProperties'::@independentResolveNone@+-- is 'Vulkan.Core10.FundamentalTypes.FALSE', the @resolveMode@ of both+-- structures /must/ be the same value+--+-- - #VUID-VkRenderingInfoKHR-pDepthAttachment-06105# If+-- @pDepthAttachment@ or @pStencilAttachment@ are both not @NULL@,+-- @pDepthAttachment->imageView@ and @pStencilAttachment->imageView@+-- are both not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.PhysicalDeviceDepthStencilResolveProperties'::@independentResolve@+-- is 'Vulkan.Core10.FundamentalTypes.FALSE', and the @resolveMode@ of+-- neither structure is+-- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE', the+-- @resolveMode@ of both structures /must/ be the same value+--+-- - #VUID-VkRenderingInfoKHR-colorAttachmentCount-06106#+-- @colorAttachmentCount@ /must/ be less than or equal to+-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxColorAttachments@+--+-- - #VUID-VkRenderingInfoKHR-imageView-06107# If the @imageView@ member+-- of a 'RenderingFragmentDensityMapAttachmentInfoEXT' structure+-- included in the @pNext@ chain is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMapNonSubsampledImages non-subsample image feature>+-- is not enabled, valid @imageView@ and @resolveImageView@ members of+-- @pDepthAttachment@, @pStencilAttachment@, and each element of+-- @pColorAttachments@ /must/ be a 'Vulkan.Core10.Handles.ImageView'+-- created with+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'+--+-- - #VUID-VkRenderingInfoKHR-imageView-06108# If the @imageView@ member+-- of a 'RenderingFragmentDensityMapAttachmentInfoEXT' structure+-- included in the @pNext@ chain is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and @viewMask@ is not @0@,+-- @imageView@ /must/ have a @layerCount@ greater than or equal to the+-- index of the most significant bit in @viewMask@+--+-- - #VUID-VkRenderingInfoKHR-imageView-06109# If the @imageView@ member+-- of a 'RenderingFragmentDensityMapAttachmentInfoEXT' structure+-- included in the @pNext@ chain is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and @viewMask@ is @0@,+-- @imageView@ /must/ have a @layerCount@ equal to @1@+--+-- - #VUID-VkRenderingInfoKHR-pNext-06112# If the @pNext@ chain does not+-- contain+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'+-- or its @deviceRenderAreaCount@ member is equal to 0 and the+-- @imageView@ member of a+-- 'RenderingFragmentDensityMapAttachmentInfoEXT' structure included in+-- the @pNext@ chain is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @imageView@ /must/ have a width greater than or equal to+-- \(\left\lceil{\frac{renderArea_{x}+renderArea_{width}}{maxFragmentDensityTexelSize_{width}}}\right\rceil\)+--+-- - #VUID-VkRenderingInfoKHR-pNext-06113# If the @pNext@ chain contains+-- a+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'+-- structure, its @deviceRenderAreaCount@ member is not 0, and the+-- @imageView@ member of a+-- 'RenderingFragmentDensityMapAttachmentInfoEXT' structure included in+-- the @pNext@ chain is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @imageView@ /must/ have a width greater than or equal to+-- \(\left\lceil{\frac{pDeviceRenderAreas_{x}+pDeviceRenderAreas_{width}}{maxFragmentDensityTexelSize_{width}}}\right\rceil\)+-- for each element of @pDeviceRenderAreas@+--+-- - #VUID-VkRenderingInfoKHR-pNext-06114# If the @pNext@ chain does not+-- contain+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'+-- or its @deviceRenderAreaCount@ member is equal to 0 and the+-- @imageView@ member of a+-- 'RenderingFragmentDensityMapAttachmentInfoEXT' structure included in+-- the @pNext@ chain is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @imageView@ /must/ have a height greater than or equal to+-- \(\left\lceil{\frac{renderArea_{y}+renderArea_{height}}{maxFragmentDensityTexelSize_{height}}}\right\rceil\)+--+-- - #VUID-VkRenderingInfoKHR-pNext-06115# If the @pNext@ chain contains+-- a+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'+-- structure, its @deviceRenderAreaCount@ member is not 0, and the+-- @imageView@ member of a+-- 'RenderingFragmentDensityMapAttachmentInfoEXT' structure included in+-- the @pNext@ chain is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @imageView@ /must/ have a height greater than or equal to+-- \(\left\lceil{\frac{pDeviceRenderAreas_{y}+pDeviceRenderAreas_{height}}{maxFragmentDensityTexelSize_{height}}}\right\rceil\)+-- for each element of @pDeviceRenderAreas@+--+-- - #VUID-VkRenderingInfoKHR-imageView-06116# If the @imageView@ member+-- of a 'RenderingFragmentDensityMapAttachmentInfoEXT' structure+-- included in the @pNext@ chain is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', it /must/ not be equal to+-- the @imageView@ or @resolveImageView@ member of @pDepthAttachment@,+-- @pStencilAttachment@, or any element of @pColorAttachments@+--+-- - #VUID-VkRenderingInfoKHR-pNext-06119# If the @pNext@ chain does not+-- contain+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'+-- or its @deviceRenderAreaCount@ member is equal to 0 and the+-- @imageView@ member of a+-- 'RenderingFragmentShadingRateAttachmentInfoKHR' structure included+-- in the @pNext@ chain is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', @imageView@ /must/ have a+-- width greater than or equal to+-- \(\left\lceil{\frac{renderArea_{x}+renderArea_{width}}{shadingRateAttachmentTexelSize_{width}}}\right\rceil\)+--+-- - #VUID-VkRenderingInfoKHR-pNext-06120# If the @pNext@ chain contains+-- a+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'+-- structure, its @deviceRenderAreaCount@ member is not 0, and the+-- @imageView@ member of a+-- 'RenderingFragmentShadingRateAttachmentInfoKHR' structure included+-- in the @pNext@ chain is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', @imageView@ /must/ have a+-- width greater than or equal to+-- \(\left\lceil{\frac{pDeviceRenderAreas_{x}+pDeviceRenderAreas_{width}}{shadingRateAttachmentTexelSize_{width}}}\right\rceil\)+-- for each element of @pDeviceRenderAreas@+--+-- - #VUID-VkRenderingInfoKHR-pNext-06121# If the @pNext@ chain does not+-- contain+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'+-- or its @deviceRenderAreaCount@ member is equal to 0 and the+-- @imageView@ member of a+-- 'RenderingFragmentShadingRateAttachmentInfoKHR' structure included+-- in the @pNext@ chain is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', @imageView@ /must/ have a+-- height greater than or equal to+-- \(\left\lceil{\frac{renderArea_{y}+renderArea_{height}}{shadingRateAttachmentTexelSize_{height}}}\right\rceil\)+--+-- - #VUID-VkRenderingInfoKHR-pNext-06122# If the @pNext@ chain contains+-- a+-- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'+-- structure, its @deviceRenderAreaCount@ member is not 0, and the+-- @imageView@ member of a+-- 'RenderingFragmentShadingRateAttachmentInfoKHR' structure included+-- in the @pNext@ chain is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', @imageView@ /must/ have a+-- height greater than or equal to+-- \(\left\lceil{\frac{pDeviceRenderAreas_{y}+pDeviceRenderAreas_{height}}{shadingRateAttachmentTexelSize_{height}}}\right\rceil\)+-- for each element of @pDeviceRenderAreas@+--+-- - #VUID-VkRenderingInfoKHR-imageView-06123# If the @imageView@ member+-- of a 'RenderingFragmentShadingRateAttachmentInfoKHR' structure+-- included in the @pNext@ chain is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and @viewMask@ is @0@,+-- @imageView@ /must/ have a @layerCount@ that is either equal to @1@+-- or greater than or equal to @layerCount@+--+-- - #VUID-VkRenderingInfoKHR-imageView-06124# If the @imageView@ member+-- of a 'RenderingFragmentShadingRateAttachmentInfoKHR' structure+-- included in the @pNext@ chain is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and @viewMask@ is not @0@,+-- @imageView@ /must/ have a @layerCount@ that either equal to @1@ or+-- greater than or equal to the index of the most significant bit in+-- @viewMask@+--+-- - #VUID-VkRenderingInfoKHR-imageView-06125# If the @imageView@ member+-- of a 'RenderingFragmentShadingRateAttachmentInfoKHR' structure+-- included in the @pNext@ chain is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', it /must/ not be equal to+-- the @imageView@ or @resolveImageView@ member of @pDepthAttachment@,+-- @pStencilAttachment@, or any element of @pColorAttachments@+--+-- - #VUID-VkRenderingInfoKHR-imageView-06126# If the @imageView@ member+-- of a 'RenderingFragmentShadingRateAttachmentInfoKHR' structure+-- included in the @pNext@ chain is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', it /must/ not be equal to+-- the @imageView@ member of a+-- 'RenderingFragmentDensityMapAttachmentInfoEXT' structure included in+-- the @pNext@ chain+--+-- - #VUID-VkRenderingInfoKHR-multiview-06127# If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiview multiview>+-- feature is not enabled, @viewMask@ /must/ be @0@+--+-- - #VUID-VkRenderingInfoKHR-viewMask-06128# The index of the most+-- significant bit in @viewMask@ /must/ be less than+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxMultiviewViewCount maxMultiviewViewCount>+--+-- == Valid Usage (Implicit)+--+-- - #VUID-VkRenderingInfoKHR-sType-sType# @sType@ /must/ be+-- 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDERING_INFO_KHR'+--+-- - #VUID-VkRenderingInfoKHR-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.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',+-- 'MultiviewPerViewAttributesInfoNVX',+-- 'RenderingFragmentDensityMapAttachmentInfoEXT', or+-- 'RenderingFragmentShadingRateAttachmentInfoKHR'+--+-- - #VUID-VkRenderingInfoKHR-sType-unique# The @sType@ value of each+-- struct in the @pNext@ chain /must/ be unique+--+-- - #VUID-VkRenderingInfoKHR-flags-parameter# @flags@ /must/ be a valid+-- combination of 'RenderingFlagBitsKHR' values+--+-- - #VUID-VkRenderingInfoKHR-pColorAttachments-parameter# If+-- @colorAttachmentCount@ is not @0@, @pColorAttachments@ /must/ be a+-- valid pointer to an array of @colorAttachmentCount@ valid+-- 'RenderingAttachmentInfoKHR' structures+--+-- - #VUID-VkRenderingInfoKHR-pDepthAttachment-parameter# If+-- @pDepthAttachment@ is not @NULL@, @pDepthAttachment@ /must/ be a+-- valid pointer to a valid 'RenderingAttachmentInfoKHR' structure+--+-- - #VUID-VkRenderingInfoKHR-pStencilAttachment-parameter# If+-- @pStencilAttachment@ is not @NULL@, @pStencilAttachment@ /must/ be a+-- valid pointer to a valid 'RenderingAttachmentInfoKHR' structure+--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_dynamic_rendering VK_KHR_dynamic_rendering>,+-- 'Vulkan.Core10.FundamentalTypes.Rect2D', 'RenderingAttachmentInfoKHR',+-- 'RenderingFlagsKHR', 'Vulkan.Core10.Enums.StructureType.StructureType',+-- 'cmdBeginRenderingKHR'+data RenderingInfoKHR (es :: [Type]) = RenderingInfoKHR+ { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.+ next :: Chain es+ , -- | @flags@ is a bitmask of 'RenderingFlagBitsKHR'.+ flags :: RenderingFlagsKHR+ , -- | @renderArea@ is the render area that is affected by the render pass+ -- instance.+ renderArea :: Rect2D+ , -- | @layerCount@ is the number of layers rendered to in each attachment when+ -- @viewMask@ is @0@.+ layerCount :: Word32+ , -- | @viewMask@ is the view mask indicating the indices of attachment layers+ -- that will be rendered when it is not @0@.+ viewMask :: Word32+ , -- | @pColorAttachments@ is a pointer to an array of @colorAttachmentCount@+ -- 'RenderingAttachmentInfoKHR' structures describing any color attachments+ -- used.+ colorAttachments :: Vector RenderingAttachmentInfoKHR+ , -- | @pDepthAttachment@ is a pointer to a 'RenderingAttachmentInfoKHR'+ -- structure describing a depth attachment.+ depthAttachment :: Maybe RenderingAttachmentInfoKHR+ , -- | @pStencilAttachment@ is a pointer to a 'RenderingAttachmentInfoKHR'+ -- structure describing a stencil attachment.+ stencilAttachment :: Maybe RenderingAttachmentInfoKHR+ }+ deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (RenderingInfoKHR (es :: [Type]))+#endif+deriving instance Show (Chain es) => Show (RenderingInfoKHR es)++instance Extensible RenderingInfoKHR where+ extensibleTypeName = "RenderingInfoKHR"+ setNext x next = x{next = next}+ getNext RenderingInfoKHR{..} = next+ extends :: forall e b proxy. Typeable e => proxy e -> (Extends RenderingInfoKHR e => b) -> Maybe b+ extends _ f+ | Just Refl <- eqT @e @MultiviewPerViewAttributesInfoNVX = Just f+ | Just Refl <- eqT @e @RenderingFragmentDensityMapAttachmentInfoEXT = Just f+ | Just Refl <- eqT @e @RenderingFragmentShadingRateAttachmentInfoKHR = Just f+ | Just Refl <- eqT @e @DeviceGroupRenderPassBeginInfo = Just f+ | otherwise = Nothing++instance (Extendss RenderingInfoKHR es, PokeChain es) => ToCStruct (RenderingInfoKHR es) where+ withCStruct x f = allocaBytes 72 $ \p -> pokeCStruct p x (f p)+ pokeCStruct p RenderingInfoKHR{..} f = evalContT $ do+ lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDERING_INFO_KHR)+ pNext'' <- fmap castPtr . ContT $ withChain (next)+ lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''+ lift $ poke ((p `plusPtr` 16 :: Ptr RenderingFlagsKHR)) (flags)+ lift $ poke ((p `plusPtr` 20 :: Ptr Rect2D)) (renderArea)+ lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) (layerCount)+ lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) (viewMask)+ lift $ poke ((p `plusPtr` 44 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (colorAttachments)) :: Word32))+ pPColorAttachments' <- ContT $ allocaBytes @RenderingAttachmentInfoKHR ((Data.Vector.length (colorAttachments)) * 72)+ Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPColorAttachments' `plusPtr` (72 * (i)) :: Ptr RenderingAttachmentInfoKHR) (e) . ($ ())) (colorAttachments)+ lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr RenderingAttachmentInfoKHR))) (pPColorAttachments')+ pDepthAttachment'' <- case (depthAttachment) of+ Nothing -> pure nullPtr+ Just j -> ContT $ withCStruct (j)+ lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr RenderingAttachmentInfoKHR))) pDepthAttachment''+ pStencilAttachment'' <- case (stencilAttachment) of+ Nothing -> pure nullPtr+ Just j -> ContT $ withCStruct (j)+ lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr RenderingAttachmentInfoKHR))) pStencilAttachment''+ lift $ f+ cStructSize = 72+ cStructAlignment = 8+ pokeZeroCStruct p f = evalContT $ do+ lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDERING_INFO_KHR)+ pNext' <- fmap castPtr . ContT $ withZeroChain @es+ lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'+ lift $ poke ((p `plusPtr` 20 :: Ptr Rect2D)) (zero)+ lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) (zero)+ lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)+ lift $ f++instance es ~ '[] => Zero (RenderingInfoKHR es) where+ zero = RenderingInfoKHR+ ()+ zero+ zero+ zero+ zero+ mempty+ Nothing+ Nothing+++-- | VkRenderingAttachmentInfoKHR - Structure specifying attachment+-- information+--+-- = Description+--+-- Values in @imageView@ are loaded and stored according to the values of+-- @loadOp@ and @storeOp@, within the render area for each device specified+-- in 'RenderingInfoKHR'. If @imageView@ is+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', other members of this+-- structure are ignored; writes to this attachment will be discarded, and+-- no load, store, or resolve operations will be performed.+--+-- If @resolveMode@ is+-- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE', then+-- @resolveImageView@ is ignored. If @resolveMode@ is not+-- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE', values in+-- @resolveImageView@ within the render area become undefined once+-- rendering begins. At the end of rendering, the color values written to+-- each pixel location in @imageView@ will be resolved according to+-- @resolveMode@ and stored into the the same location in+-- @resolveImageView@.+--+-- Note+--+-- The resolve mode and store operation are independent; it is valid to+-- write both resolved and unresolved values, and equally valid to discard+-- the unresolved values while writing the resolved ones.+--+-- Store and resolve operations are only performed at the end of a render+-- pass instance that does not specify the 'RENDERING_SUSPENDING_BIT_KHR'+-- flag.+--+-- Load operations are only performed at the beginning of a render pass+-- instance that does not specify the 'RENDERING_RESUMING_BIT_KHR' flag.+--+-- Image contents at the end of a suspended render pass instance remain+-- defined for access by a resuming render pass instance.+--+-- == Valid Usage+--+-- - #VUID-VkRenderingAttachmentInfoKHR-imageView-06129# If @imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and has a+-- non-integer color format, @resolveMode@ /must/ be+-- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE' or+-- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_AVERAGE_BIT'+--+-- - #VUID-VkRenderingAttachmentInfoKHR-imageView-06130# If @imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and has an integer+-- color format, @resolveMode@ /must/ be+-- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE' or+-- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_SAMPLE_ZERO_BIT'+--+-- - #VUID-VkRenderingAttachmentInfoKHR-imageView-06132# If @imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @resolveMode@ is+-- not 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE',+-- @imageView@ /must/ not have a sample count of+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'+--+-- - #VUID-VkRenderingAttachmentInfoKHR-imageView-06133# If @imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @resolveMode@ is+-- not 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE',+-- @resolveImageView@ /must/ have a sample count of+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'+--+-- - #VUID-VkRenderingAttachmentInfoKHR-imageView-06134# If @imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @resolveMode@ is+-- not 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE',+-- @imageView@ and @resolveImageView@ /must/ have the same+-- 'Vulkan.Core10.Enums.Format.Format'+--+-- - #VUID-VkRenderingAttachmentInfoKHR-imageView-06135# If @imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @layout@ /must/ not+-- be 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',+-- or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED'+--+-- - #VUID-VkRenderingAttachmentInfoKHR-imageView-06136# If @imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @resolveMode@ is+-- not 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE',+-- @resolveImageLayout@ /must/ not be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL',+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',+-- or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED'+--+-- - #VUID-VkRenderingAttachmentInfoKHR-imageView-06137# If @imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @resolveMode@ is+-- not 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE',+-- @resolveImageLayout@ /must/ not be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL'+-- or+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'+--+-- - #VUID-VkRenderingAttachmentInfoKHR-imageView-06138# If @imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @layout@ /must/ not+-- be+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV'+--+-- - #VUID-VkRenderingAttachmentInfoKHR-imageView-06139# If @imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @resolveMode@ is+-- not 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE',+-- @resolveImageLayout@ /must/ not be+-- 'Vulkan.Extensions.VK_NV_shading_rate_image.IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV'+--+-- - #VUID-VkRenderingAttachmentInfoKHR-imageView-06140# If @imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @layout@ /must/ not+-- be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT'+--+-- - #VUID-VkRenderingAttachmentInfoKHR-imageView-06141# If @imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @resolveMode@ is+-- not 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE',+-- @resolveImageLayout@ /must/ not be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT'+--+-- - #VUID-VkRenderingAttachmentInfoKHR-imageView-06142# If @imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @resolveMode@ is+-- not 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE',+-- @resolveImageLayout@ /must/ not be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR'+--+-- - #VUID-VkRenderingAttachmentInfoKHR-imageView-06143# If @imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @layout@ /must/ not+-- be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR'+--+-- - #VUID-VkRenderingAttachmentInfoKHR-imageView-06144# If @imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @resolveMode@ is+-- not 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE',+-- @resolveImageLayout@ /must/ not be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR'+--+-- - #VUID-VkRenderingAttachmentInfoKHR-imageView-06145# If @imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @layout@ /must/ not+-- be 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PRESENT_SRC_KHR'+--+-- - #VUID-VkRenderingAttachmentInfoKHR-imageView-06146# If @imageView@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and @resolveMode@ is+-- not 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE',+-- @resolveImageLayout@ /must/ not be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PRESENT_SRC_KHR'+--+-- == Valid Usage (Implicit)+--+-- - #VUID-VkRenderingAttachmentInfoKHR-sType-sType# @sType@ /must/ be+-- 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR'+--+-- - #VUID-VkRenderingAttachmentInfoKHR-pNext-pNext# @pNext@ /must/ be+-- @NULL@+--+-- - #VUID-VkRenderingAttachmentInfoKHR-imageView-parameter# If+-- @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @imageView@ /must/ be a valid 'Vulkan.Core10.Handles.ImageView'+-- handle+--+-- - #VUID-VkRenderingAttachmentInfoKHR-imageLayout-parameter#+-- @imageLayout@ /must/ be a valid+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value+--+-- - #VUID-VkRenderingAttachmentInfoKHR-resolveMode-parameter# If+-- @resolveMode@ is not @0@, @resolveMode@ /must/ be a valid+-- 'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits' value+--+-- - #VUID-VkRenderingAttachmentInfoKHR-resolveImageView-parameter# If+-- @resolveImageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @resolveImageView@ /must/ be a valid+-- 'Vulkan.Core10.Handles.ImageView' handle+--+-- - #VUID-VkRenderingAttachmentInfoKHR-resolveImageLayout-parameter#+-- @resolveImageLayout@ /must/ be a valid+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value+--+-- - #VUID-VkRenderingAttachmentInfoKHR-loadOp-parameter# @loadOp@ /must/+-- be a valid 'Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp'+-- value+--+-- - #VUID-VkRenderingAttachmentInfoKHR-storeOp-parameter# @storeOp@+-- /must/ be a valid+-- 'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp' value+--+-- - #VUID-VkRenderingAttachmentInfoKHR-clearValue-parameter#+-- @clearValue@ /must/ be a valid+-- 'Vulkan.Core10.CommandBufferBuilding.ClearValue' union+--+-- - #VUID-VkRenderingAttachmentInfoKHR-commonparent# Both of+-- @imageView@, and @resolveImageView@ that are valid handles of+-- non-ignored parameters /must/ have been created, allocated, or+-- retrieved from the same 'Vulkan.Core10.Handles.Device'+--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_dynamic_rendering VK_KHR_dynamic_rendering>,+-- 'Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp',+-- 'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp',+-- 'Vulkan.Core10.CommandBufferBuilding.ClearValue',+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',+-- 'Vulkan.Core10.Handles.ImageView', 'RenderingInfoKHR',+-- 'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data RenderingAttachmentInfoKHR = RenderingAttachmentInfoKHR+ { -- | @imageView@ is the image view that will be used for rendering.+ imageView :: ImageView+ , -- | @imageLayout@ is the layout that @imageView@ will be in during+ -- rendering.+ imageLayout :: ImageLayout+ , -- | @resolveMode@ is a+ -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits' value+ -- defining how multisampled data written to @imageView@ will be resolved.+ resolveMode :: ResolveModeFlagBits+ , -- | @resolveImageView@ is an image view used to write resolved multisample+ -- data at the end of rendering.+ resolveImageView :: ImageView+ , -- | @resolveImageLayout@ is the layout that @resolveImageView@ will be in+ -- during rendering.+ resolveImageLayout :: ImageLayout+ , -- | @loadOp@ is a 'Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp'+ -- value specifying how the contents of @imageView@ are treated at the+ -- start of the render pass instance.+ loadOp :: AttachmentLoadOp+ , -- | @storeOp@ is a 'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp'+ -- value specifying how the contents of @imageView@ are treated at the end+ -- of the render pass instance.+ storeOp :: AttachmentStoreOp+ , -- | @clearValue@ is a 'Vulkan.Core10.CommandBufferBuilding.ClearValue'+ -- structure that defines values used to clear @imageView@ when @loadOp@ is+ -- 'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR'.+ clearValue :: ClearValue+ }+ deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (RenderingAttachmentInfoKHR)+#endif+deriving instance Show RenderingAttachmentInfoKHR++instance ToCStruct RenderingAttachmentInfoKHR where+ withCStruct x f = allocaBytes 72 $ \p -> pokeCStruct p x (f p)+ pokeCStruct p RenderingAttachmentInfoKHR{..} f = evalContT $ do+ lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR)+ lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+ lift $ poke ((p `plusPtr` 16 :: Ptr ImageView)) (imageView)+ lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (imageLayout)+ lift $ poke ((p `plusPtr` 28 :: Ptr ResolveModeFlagBits)) (resolveMode)+ lift $ poke ((p `plusPtr` 32 :: Ptr ImageView)) (resolveImageView)+ lift $ poke ((p `plusPtr` 40 :: Ptr ImageLayout)) (resolveImageLayout)+ lift $ poke ((p `plusPtr` 44 :: Ptr AttachmentLoadOp)) (loadOp)+ lift $ poke ((p `plusPtr` 48 :: Ptr AttachmentStoreOp)) (storeOp)+ ContT $ pokeCStruct ((p `plusPtr` 52 :: Ptr ClearValue)) (clearValue) . ($ ())+ lift $ f+ cStructSize = 72+ cStructAlignment = 8+ pokeZeroCStruct p f = evalContT $ do+ lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR)+ lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+ lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (zero)+ lift $ poke ((p `plusPtr` 40 :: Ptr ImageLayout)) (zero)+ lift $ poke ((p `plusPtr` 44 :: Ptr AttachmentLoadOp)) (zero)+ lift $ poke ((p `plusPtr` 48 :: Ptr AttachmentStoreOp)) (zero)+ ContT $ pokeCStruct ((p `plusPtr` 52 :: Ptr ClearValue)) (zero) . ($ ())+ lift $ f++instance Zero RenderingAttachmentInfoKHR where+ zero = RenderingAttachmentInfoKHR+ zero+ zero+ zero+ zero+ zero+ zero+ zero+ zero+++-- | VkRenderingFragmentShadingRateAttachmentInfoKHR - Structure specifying+-- fragment shading rate attachment information+--+-- = Description+--+-- This structure can be included in the @pNext@ chain of+-- 'RenderingInfoKHR' to define a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-attachment fragment shading rate attachment>.+-- If @imageView@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', or if this+-- structure isn’t specified, the implementation behaves as if a valid+-- shading rate attachment was specified with all texels specifying a+-- single pixel per fragment.+--+-- == Valid Usage+--+-- - #VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06147#+-- If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @layout@ /must/ be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL' or+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR'+--+-- - #VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06148#+-- If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', it+-- /must/ have been created with+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'+--+-- - #VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06149#+-- If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @shadingRateAttachmentTexelSize.width@ /must/ be a power of two+-- value+--+-- - #VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06150#+-- If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @shadingRateAttachmentTexelSize.width@ /must/ be less than or equal+-- to+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxFragmentShadingRateAttachmentTexelSize maxFragmentShadingRateAttachmentTexelSize.width>+--+-- - #VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06151#+-- If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @shadingRateAttachmentTexelSize.width@ /must/ be greater than or+-- equal to+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-minFragmentShadingRateAttachmentTexelSize minFragmentShadingRateAttachmentTexelSize.width>+--+-- - #VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06152#+-- If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @shadingRateAttachmentTexelSize.height@ /must/ be a power of two+-- value+--+-- - #VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06153#+-- If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @shadingRateAttachmentTexelSize.height@ /must/ be less than or equal+-- to+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxFragmentShadingRateAttachmentTexelSize maxFragmentShadingRateAttachmentTexelSize.height>+--+-- - #VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06154#+-- If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @shadingRateAttachmentTexelSize.height@ /must/ be greater than or+-- equal to+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-minFragmentShadingRateAttachmentTexelSize minFragmentShadingRateAttachmentTexelSize.height>+--+-- - #VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06155#+-- If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the+-- quotient of @shadingRateAttachmentTexelSize.width@ and+-- @shadingRateAttachmentTexelSize.height@ /must/ be less than or equal+-- to+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxFragmentShadingRateAttachmentTexelSizeAspectRatio maxFragmentShadingRateAttachmentTexelSizeAspectRatio>+--+-- - #VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06156#+-- If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the+-- quotient of @shadingRateAttachmentTexelSize.height@ and+-- @shadingRateAttachmentTexelSize.width@ /must/ be less than or equal+-- to+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxFragmentShadingRateAttachmentTexelSizeAspectRatio maxFragmentShadingRateAttachmentTexelSizeAspectRatio>+--+-- == Valid Usage (Implicit)+--+-- - #VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-sType-sType#+-- @sType@ /must/ be+-- 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR'+--+-- - #VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-parameter#+-- If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @imageView@ /must/ be a valid 'Vulkan.Core10.Handles.ImageView'+-- handle+--+-- - #VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageLayout-parameter#+-- @imageLayout@ /must/ be a valid+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value+--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_dynamic_rendering VK_KHR_dynamic_rendering>,+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_fragment_shading_rate VK_KHR_fragment_shading_rate>,+-- 'Vulkan.Core10.FundamentalTypes.Extent2D',+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',+-- 'Vulkan.Core10.Handles.ImageView',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data RenderingFragmentShadingRateAttachmentInfoKHR = RenderingFragmentShadingRateAttachmentInfoKHR+ { -- | @imageView@ is the image view that will be used as a fragment shading+ -- rate attachment.+ imageView :: ImageView+ , -- | @imageLayout@ is the layout that @imageView@ will be in during+ -- rendering.+ imageLayout :: ImageLayout+ , -- | @shadingRateAttachmentTexelSize@ specifies the number of pixels+ -- corresponding to each texel in @imageView@.+ shadingRateAttachmentTexelSize :: Extent2D+ }+ deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (RenderingFragmentShadingRateAttachmentInfoKHR)+#endif+deriving instance Show RenderingFragmentShadingRateAttachmentInfoKHR++instance ToCStruct RenderingFragmentShadingRateAttachmentInfoKHR where+ withCStruct x f = allocaBytes 40 $ \p -> pokeCStruct p x (f p)+ pokeCStruct p RenderingFragmentShadingRateAttachmentInfoKHR{..} f = do+ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR)+ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+ poke ((p `plusPtr` 16 :: Ptr ImageView)) (imageView)+ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (imageLayout)+ poke ((p `plusPtr` 28 :: Ptr Extent2D)) (shadingRateAttachmentTexelSize)+ f+ cStructSize = 40+ cStructAlignment = 8+ pokeZeroCStruct p f = do+ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR)+ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (zero)+ poke ((p `plusPtr` 28 :: Ptr Extent2D)) (zero)+ f++instance FromCStruct RenderingFragmentShadingRateAttachmentInfoKHR where+ peekCStruct p = do+ imageView <- peek @ImageView ((p `plusPtr` 16 :: Ptr ImageView))+ imageLayout <- peek @ImageLayout ((p `plusPtr` 24 :: Ptr ImageLayout))+ shadingRateAttachmentTexelSize <- peekCStruct @Extent2D ((p `plusPtr` 28 :: Ptr Extent2D))+ pure $ RenderingFragmentShadingRateAttachmentInfoKHR+ imageView imageLayout shadingRateAttachmentTexelSize++instance Storable RenderingFragmentShadingRateAttachmentInfoKHR where+ sizeOf ~_ = 40+ alignment ~_ = 8+ peek = peekCStruct+ poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero RenderingFragmentShadingRateAttachmentInfoKHR where+ zero = RenderingFragmentShadingRateAttachmentInfoKHR+ zero+ zero+ zero+++-- | VkRenderingFragmentDensityMapAttachmentInfoEXT - Structure specifying+-- fragment shading rate attachment information+--+-- = Description+--+-- This structure can be included in the @pNext@ chain of+-- 'RenderingInfoKHR' to define a fragment density map. If @imageView@ is+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', If this structure isn’t+-- specified, @imageView@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE'.+--+-- == Valid Usage+--+-- - #VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-imageView-06157#+-- If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- @layout@ /must/ be+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL' or+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT'+--+-- - #VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-imageView-06158#+-- If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', it+-- /must/ have been created with+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT'+--+-- - #VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-imageView-06159#+-- If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', it+-- /must/ not have been created with+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'+--+-- == Valid Usage (Implicit)+--+-- - #VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-sType-sType#+-- @sType@ /must/ be+-- 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT'+--+-- - #VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-imageView-parameter#+-- @imageView@ /must/ be a valid 'Vulkan.Core10.Handles.ImageView'+-- handle+--+-- - #VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-imageLayout-parameter#+-- @imageLayout@ /must/ be a valid+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value+--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_fragment_density_map VK_EXT_fragment_density_map>,+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_dynamic_rendering VK_KHR_dynamic_rendering>,+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',+-- 'Vulkan.Core10.Handles.ImageView',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data RenderingFragmentDensityMapAttachmentInfoEXT = RenderingFragmentDensityMapAttachmentInfoEXT+ { -- | @imageView@ is the image view that will be used as a fragment shading+ -- rate attachment.+ imageView :: ImageView+ , -- | @imageLayout@ is the layout that @imageView@ will be in during+ -- rendering.+ imageLayout :: ImageLayout+ }+ deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (RenderingFragmentDensityMapAttachmentInfoEXT)+#endif+deriving instance Show RenderingFragmentDensityMapAttachmentInfoEXT++instance ToCStruct RenderingFragmentDensityMapAttachmentInfoEXT where+ withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)+ pokeCStruct p RenderingFragmentDensityMapAttachmentInfoEXT{..} f = do+ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT)+ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+ poke ((p `plusPtr` 16 :: Ptr ImageView)) (imageView)+ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (imageLayout)+ f+ cStructSize = 32+ cStructAlignment = 8+ pokeZeroCStruct p f = do+ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT)+ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+ poke ((p `plusPtr` 16 :: Ptr ImageView)) (zero)+ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (zero)+ f++instance FromCStruct RenderingFragmentDensityMapAttachmentInfoEXT where+ peekCStruct p = do+ imageView <- peek @ImageView ((p `plusPtr` 16 :: Ptr ImageView))+ imageLayout <- peek @ImageLayout ((p `plusPtr` 24 :: Ptr ImageLayout))+ pure $ RenderingFragmentDensityMapAttachmentInfoEXT+ imageView imageLayout++instance Storable RenderingFragmentDensityMapAttachmentInfoEXT where+ sizeOf ~_ = 32+ alignment ~_ = 8+ peek = peekCStruct+ poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero RenderingFragmentDensityMapAttachmentInfoEXT where+ zero = RenderingFragmentDensityMapAttachmentInfoEXT+ zero+ zero+++-- | VkPhysicalDeviceDynamicRenderingFeaturesKHR - Structure indicating+-- support for dynamic render pass instances+--+-- = Members+--+-- The members of the 'PhysicalDeviceDynamicRenderingFeaturesKHR' structure+-- describe the following features:+--+-- = Description+--+-- If the 'PhysicalDeviceDynamicRenderingFeaturesKHR' 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. 'PhysicalDeviceDynamicRenderingFeaturesKHR' /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_dynamic_rendering VK_KHR_dynamic_rendering>,+-- 'Vulkan.Core10.FundamentalTypes.Bool32',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data PhysicalDeviceDynamicRenderingFeaturesKHR = PhysicalDeviceDynamicRenderingFeaturesKHR+ { -- | #features-dynamicRendering# @dynamicRendering@ specifies that the+ -- implementation supports dynamic render pass instances using the+ -- 'cmdBeginRenderingKHR' command.+ dynamicRendering :: Bool }+ deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PhysicalDeviceDynamicRenderingFeaturesKHR)+#endif+deriving instance Show PhysicalDeviceDynamicRenderingFeaturesKHR++instance ToCStruct PhysicalDeviceDynamicRenderingFeaturesKHR where+ withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)+ pokeCStruct p PhysicalDeviceDynamicRenderingFeaturesKHR{..} f = do+ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR)+ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (dynamicRendering))+ f+ cStructSize = 24+ cStructAlignment = 8+ pokeZeroCStruct p f = do+ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR)+ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))+ f++instance FromCStruct PhysicalDeviceDynamicRenderingFeaturesKHR where+ peekCStruct p = do+ dynamicRendering <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))+ pure $ PhysicalDeviceDynamicRenderingFeaturesKHR+ (bool32ToBool dynamicRendering)++instance Storable PhysicalDeviceDynamicRenderingFeaturesKHR where+ sizeOf ~_ = 24+ alignment ~_ = 8+ peek = peekCStruct+ poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero PhysicalDeviceDynamicRenderingFeaturesKHR where+ zero = PhysicalDeviceDynamicRenderingFeaturesKHR+ zero+++-- | VkCommandBufferInheritanceRenderingInfoKHR - Structure specifying+-- command buffer inheritance info for dynamic render pass instances+--+-- = Description+--+-- If the @pNext@ chain of+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo' includes a+-- 'CommandBufferInheritanceRenderingInfoKHR' structure, then that+-- structure controls parameters of dynamic render pass instances that the+-- 'Vulkan.Core10.Handles.CommandBuffer' /can/ be executed within. If+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@renderPass@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', or+-- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT'+-- is not specified in+-- 'Vulkan.Core10.CommandBuffer.CommandBufferBeginInfo'::@flags@,+-- parameters of this structure are ignored.+--+-- If @colorAttachmentCount@ is @0@ and the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-variableMultisampleRate variableMultisampleRate>+-- feature is enabled, @rasterizationSamples@ is ignored.+--+-- If @depthAttachmentFormat@, @stencilAttachmentFormat@, or any element of+-- @pColorAttachmentFormats@ is+-- 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', it indicates that the+-- corresponding attachment is unused within the render pass.+--+-- == Valid Usage+--+-- - #VUID-VkCommandBufferInheritanceRenderingInfoKHR-colorAttachmentCount-06004#+-- If @colorAttachmentCount@ is not @0@, @rasterizationSamples@ /must/+-- be a valid+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value+--+-- - #VUID-VkCommandBufferInheritanceRenderingInfoKHR-variableMultisampleRate-06005#+-- If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-variableMultisampleRate variableMultisampleRate>+-- feature is not enabled, @rasterizationSamples@ /must/ be a valid+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value+--+-- - #VUID-VkCommandBufferInheritanceRenderingInfoKHR-pColorAttachmentFormats-06006#+-- If any element of @pColorAttachmentFormats@ is not+-- 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', it /must/ be a format+-- with+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features>+-- that include+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'+--+-- - #VUID-VkCommandBufferInheritanceRenderingInfoKHR-depthAttachmentFormat-06007#+-- If @depthAttachmentFormat@ is not+-- 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', it /must/ be a format+-- with+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features>+-- that include+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'+--+-- - #VUID-VkCommandBufferInheritanceRenderingInfoKHR-stencilAttachmentFormat-06199#+-- If @stencilAttachmentFormat@ is not+-- 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', it /must/ be a format+-- with+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features>+-- that include+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'+--+-- - #VUID-VkCommandBufferInheritanceRenderingInfoKHR-depthAttachmentFormat-06200#+-- If @depthAttachmentFormat@ is not+-- 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED' and+-- @stencilAttachmentFormat@ is not+-- 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED',+-- @depthAttachmentFormat@ /must/ equal @stencilAttachmentFormat@+--+-- - #VUID-VkCommandBufferInheritanceRenderingInfoKHR-multiview-06008# If+-- the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiview multiview>+-- feature is not enabled, @viewMask@ /must/ be @0@+--+-- - #VUID-VkCommandBufferInheritanceRenderingInfoKHR-viewMask-06009# The+-- index of the most significant bit in @viewMask@ /must/ be less than+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxMultiviewViewCount maxMultiviewViewCount>+--+-- == Valid Usage (Implicit)+--+-- - #VUID-VkCommandBufferInheritanceRenderingInfoKHR-sType-sType#+-- @sType@ /must/ be+-- 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR'+--+-- - #VUID-VkCommandBufferInheritanceRenderingInfoKHR-flags-parameter#+-- @flags@ /must/ be a valid combination of 'RenderingFlagBitsKHR'+-- values+--+-- - #VUID-VkCommandBufferInheritanceRenderingInfoKHR-pColorAttachmentFormats-parameter#+-- @pColorAttachmentFormats@ /must/ be a valid pointer to an array of+-- @colorAttachmentCount@ valid 'Vulkan.Core10.Enums.Format.Format'+-- values+--+-- - #VUID-VkCommandBufferInheritanceRenderingInfoKHR-depthAttachmentFormat-parameter#+-- @depthAttachmentFormat@ /must/ be a valid+-- 'Vulkan.Core10.Enums.Format.Format' value+--+-- - #VUID-VkCommandBufferInheritanceRenderingInfoKHR-stencilAttachmentFormat-parameter#+-- @stencilAttachmentFormat@ /must/ be a valid+-- 'Vulkan.Core10.Enums.Format.Format' value+--+-- - #VUID-VkCommandBufferInheritanceRenderingInfoKHR-rasterizationSamples-parameter#+-- If @rasterizationSamples@ is not @0@, @rasterizationSamples@ /must/+-- be a valid+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value+--+-- - #VUID-VkCommandBufferInheritanceRenderingInfoKHR-colorAttachmentCount-arraylength#+-- @colorAttachmentCount@ /must/ be greater than @0@+--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_dynamic_rendering VK_KHR_dynamic_rendering>,+-- 'Vulkan.Core10.Enums.Format.Format', 'RenderingFlagsKHR',+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data CommandBufferInheritanceRenderingInfoKHR = CommandBufferInheritanceRenderingInfoKHR+ { -- | @flags@ is a bitmask of 'RenderingFlagBitsKHR' used by the render pass+ -- instance.+ flags :: RenderingFlagsKHR+ , -- | @viewMask@ is the view mask used for rendering.+ viewMask :: Word32+ , -- | @pColorAttachmentFormats@ is an array of+ -- 'Vulkan.Core10.Enums.Format.Format' values defining the format of color+ -- attachments.+ colorAttachmentFormats :: Vector Format+ , -- | @depthAttachmentFormat@ is a 'Vulkan.Core10.Enums.Format.Format' value+ -- defining the format of the depth attachment.+ depthAttachmentFormat :: Format+ , -- | @stencilAttachmentFormat@ is a 'Vulkan.Core10.Enums.Format.Format' value+ -- defining the format of the stencil attachment.+ stencilAttachmentFormat :: Format+ , -- | @rasterizationSamples@ is a+ -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' specifying+ -- the number of samples used in rasterization.+ rasterizationSamples :: SampleCountFlagBits+ }+ deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (CommandBufferInheritanceRenderingInfoKHR)+#endif+deriving instance Show CommandBufferInheritanceRenderingInfoKHR++instance ToCStruct CommandBufferInheritanceRenderingInfoKHR where+ withCStruct x f = allocaBytes 56 $ \p -> pokeCStruct p x (f p)+ pokeCStruct p CommandBufferInheritanceRenderingInfoKHR{..} f = evalContT $ do+ lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR)+ lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+ lift $ poke ((p `plusPtr` 16 :: Ptr RenderingFlagsKHR)) (flags)+ lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (viewMask)+ lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (colorAttachmentFormats)) :: Word32))+ pPColorAttachmentFormats' <- ContT $ allocaBytes @Format ((Data.Vector.length (colorAttachmentFormats)) * 4)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPColorAttachmentFormats' `plusPtr` (4 * (i)) :: Ptr Format) (e)) (colorAttachmentFormats)+ lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr Format))) (pPColorAttachmentFormats')+ lift $ poke ((p `plusPtr` 40 :: Ptr Format)) (depthAttachmentFormat)+ lift $ poke ((p `plusPtr` 44 :: Ptr Format)) (stencilAttachmentFormat)+ lift $ poke ((p `plusPtr` 48 :: Ptr SampleCountFlagBits)) (rasterizationSamples)+ lift $ f+ cStructSize = 56+ cStructAlignment = 8+ pokeZeroCStruct p f = do+ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR)+ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)+ poke ((p `plusPtr` 40 :: Ptr Format)) (zero)+ poke ((p `plusPtr` 44 :: Ptr Format)) (zero)+ f++instance FromCStruct CommandBufferInheritanceRenderingInfoKHR where+ peekCStruct p = do+ flags <- peek @RenderingFlagsKHR ((p `plusPtr` 16 :: Ptr RenderingFlagsKHR))+ viewMask <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))+ colorAttachmentCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))+ pColorAttachmentFormats <- peek @(Ptr Format) ((p `plusPtr` 32 :: Ptr (Ptr Format)))+ pColorAttachmentFormats' <- generateM (fromIntegral colorAttachmentCount) (\i -> peek @Format ((pColorAttachmentFormats `advancePtrBytes` (4 * (i)) :: Ptr Format)))+ depthAttachmentFormat <- peek @Format ((p `plusPtr` 40 :: Ptr Format))+ stencilAttachmentFormat <- peek @Format ((p `plusPtr` 44 :: Ptr Format))+ rasterizationSamples <- peek @SampleCountFlagBits ((p `plusPtr` 48 :: Ptr SampleCountFlagBits))+ pure $ CommandBufferInheritanceRenderingInfoKHR+ flags viewMask pColorAttachmentFormats' depthAttachmentFormat stencilAttachmentFormat rasterizationSamples++instance Zero CommandBufferInheritanceRenderingInfoKHR where+ zero = CommandBufferInheritanceRenderingInfoKHR+ zero+ zero+ mempty+ zero+ zero+ zero+++-- | VkAttachmentSampleCountInfoAMD - Structure specifying command buffer+-- inheritance info for dynamic render pass instances+--+-- = Description+--+-- If+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@renderPass@+-- is 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT'+-- is specified in+-- 'Vulkan.Core10.CommandBuffer.CommandBufferBeginInfo'::@flags@, and the+-- @pNext@ chain of+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo' includes+-- 'AttachmentSampleCountInfoAMD', then this structure defines the sample+-- counts of each attachment within the render pass instance. If+-- 'AttachmentSampleCountInfoAMD' is not included, the value of+-- 'CommandBufferInheritanceRenderingInfoKHR'::@rasterizationSamples@ is+-- used as the sample count for each attachment. If+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@renderPass@+-- is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', or+-- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT'+-- is not specified in+-- 'Vulkan.Core10.CommandBuffer.CommandBufferBeginInfo'::@flags@,+-- parameters of this structure are ignored.+--+-- 'AttachmentSampleCountInfoAMD' /can/ also be included in the @pNext@+-- chain of 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'. When a+-- graphics pipeline is created without a+-- 'Vulkan.Core10.Handles.RenderPass', if this structure is present in the+-- @pNext@ chain of 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo', it+-- specifies the sample count of attachments used for rendering. If this+-- structure is not specified, and the pipeline does not include a+-- 'Vulkan.Core10.Handles.RenderPass', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- is used as the sample count for each attachment. If a graphics pipeline+-- is created with a valid 'Vulkan.Core10.Handles.RenderPass', parameters+-- of this structure are ignored.+--+-- == Valid Usage (Implicit)+--+-- - #VUID-VkAttachmentSampleCountInfoAMD-sType-sType# @sType@ /must/ be+-- 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD'+--+-- - #VUID-VkAttachmentSampleCountInfoAMD-pColorAttachmentSamples-parameter#+-- @pColorAttachmentSamples@ /must/ be a valid pointer to an array of+-- @colorAttachmentCount@ valid or+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE'+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' values+--+-- - #VUID-VkAttachmentSampleCountInfoAMD-depthStencilAttachmentSamples-parameter#+-- If @depthStencilAttachmentSamples@ is not @0@,+-- @depthStencilAttachmentSamples@ /must/ be a valid+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value+--+-- - #VUID-VkAttachmentSampleCountInfoAMD-colorAttachmentCount-arraylength#+-- @colorAttachmentCount@ /must/ be greater than @0@+--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_AMD_mixed_attachment_samples VK_AMD_mixed_attachment_samples>,+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_dynamic_rendering VK_KHR_dynamic_rendering>,+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_framebuffer_mixed_samples VK_NV_framebuffer_mixed_samples>,+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data AttachmentSampleCountInfoAMD = AttachmentSampleCountInfoAMD+ { -- | @pColorAttachmentSamples@ is an array of+ -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' values+ -- defining the sample count of color attachments.+ colorAttachmentSamples :: Vector SampleCountFlagBits+ , -- | @depthStencilAttachmentSamples@ is a+ -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value+ -- defining the sample count of a depth\/stencil attachment.+ depthStencilAttachmentSamples :: SampleCountFlagBits+ }+ deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (AttachmentSampleCountInfoAMD)+#endif+deriving instance Show AttachmentSampleCountInfoAMD++instance ToCStruct AttachmentSampleCountInfoAMD where+ withCStruct x f = allocaBytes 40 $ \p -> pokeCStruct p x (f p)+ pokeCStruct p AttachmentSampleCountInfoAMD{..} f = evalContT $ do+ lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD)+ lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+ lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (colorAttachmentSamples)) :: Word32))+ pPColorAttachmentSamples' <- ContT $ allocaBytes @SampleCountFlagBits ((Data.Vector.length (colorAttachmentSamples)) * 4)+ lift $ Data.Vector.imapM_ (\i e -> poke (pPColorAttachmentSamples' `plusPtr` (4 * (i)) :: Ptr SampleCountFlagBits) (e)) (colorAttachmentSamples)+ lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr SampleCountFlagBits))) (pPColorAttachmentSamples')+ lift $ poke ((p `plusPtr` 32 :: Ptr SampleCountFlagBits)) (depthStencilAttachmentSamples)+ lift $ f+ cStructSize = 40+ cStructAlignment = 8+ pokeZeroCStruct p f = do+ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD)+ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+ f++instance FromCStruct AttachmentSampleCountInfoAMD where+ peekCStruct p = do+ colorAttachmentCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))+ pColorAttachmentSamples <- peek @(Ptr SampleCountFlagBits) ((p `plusPtr` 24 :: Ptr (Ptr SampleCountFlagBits)))+ pColorAttachmentSamples' <- generateM (fromIntegral colorAttachmentCount) (\i -> peek @SampleCountFlagBits ((pColorAttachmentSamples `advancePtrBytes` (4 * (i)) :: Ptr SampleCountFlagBits)))+ depthStencilAttachmentSamples <- peek @SampleCountFlagBits ((p `plusPtr` 32 :: Ptr SampleCountFlagBits))+ pure $ AttachmentSampleCountInfoAMD+ pColorAttachmentSamples' depthStencilAttachmentSamples++instance Zero AttachmentSampleCountInfoAMD where+ zero = AttachmentSampleCountInfoAMD+ mempty+ zero+++-- | VkMultiviewPerViewAttributesInfoNVX - Structure specifying the multiview+-- per-attribute properties+--+-- = Description+--+-- When dynamic render pass instances are being used, instead of specifying+-- 'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX'+-- or+-- 'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX'+-- in the subpass description flags, the per-attibute properties of the+-- render pass instance /must/ be specified by the+-- 'MultiviewPerViewAttributesInfoNVX' structure Include the+-- 'MultiviewPerViewAttributesInfoNVX' structure in the @pNext@ chain of+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' when creating a+-- graphics pipeline for dynamic rendering, 'RenderingInfoKHR' when+-- starting a dynamic render pass instance, and+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo' when+-- specifying the dynamic render pass instance parameters for secondary+-- command buffers.+--+-- == Valid Usage+--+-- - #VUID-VkMultiviewPerViewAttributesInfoNVX-perViewAttributesPositionXOnly-06163#+-- If @perViewAttributesPositionXOnly@ is+-- 'Vulkan.Core10.FundamentalTypes.TRUE' then @perViewAttributes@+-- /must/ also be 'Vulkan.Core10.FundamentalTypes.TRUE'+--+-- == Valid Usage (Implicit)+--+-- - #VUID-VkMultiviewPerViewAttributesInfoNVX-sType-sType# @sType@+-- /must/ be+-- 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX'+--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_dynamic_rendering VK_KHR_dynamic_rendering>,+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NVX_multiview_per_view_attributes VK_NVX_multiview_per_view_attributes>,+-- 'Vulkan.Core10.FundamentalTypes.Bool32',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data MultiviewPerViewAttributesInfoNVX = MultiviewPerViewAttributesInfoNVX+ { -- | @perViewAttributes@ specifies that shaders compiled for this pipeline+ -- write the attributes for all views in a single invocation of each vertex+ -- processing stage. All pipelines executed within a render pass instance+ -- that includes this bit /must/ write per-view attributes to the+ -- @*PerViewNV[]@ shader outputs, in addition to the non-per-view (e.g.+ -- @Position@) outputs.+ perViewAttributes :: Bool+ , -- | @perViewAttributesPositionXOnly@ specifies that shaders compiled for+ -- this pipeline use per-view positions which only differ in value in the x+ -- component. Per-view viewport mask /can/ also be used.+ perViewAttributesPositionXOnly :: Bool+ }+ deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (MultiviewPerViewAttributesInfoNVX)+#endif+deriving instance Show MultiviewPerViewAttributesInfoNVX++instance ToCStruct MultiviewPerViewAttributesInfoNVX where+ withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)+ pokeCStruct p MultiviewPerViewAttributesInfoNVX{..} f = do+ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX)+ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (perViewAttributes))+ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (perViewAttributesPositionXOnly))+ f+ cStructSize = 24+ cStructAlignment = 8+ pokeZeroCStruct p f = do+ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX)+ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))+ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))+ f++instance FromCStruct MultiviewPerViewAttributesInfoNVX where+ peekCStruct p = do+ perViewAttributes <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))+ perViewAttributesPositionXOnly <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))+ pure $ MultiviewPerViewAttributesInfoNVX+ (bool32ToBool perViewAttributes) (bool32ToBool perViewAttributesPositionXOnly)++instance Storable MultiviewPerViewAttributesInfoNVX where+ sizeOf ~_ = 24+ alignment ~_ = 8+ peek = peekCStruct+ poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero MultiviewPerViewAttributesInfoNVX where+ zero = MultiviewPerViewAttributesInfoNVX+ zero+ zero+++type RenderingFlagsKHR = RenderingFlagBitsKHR++-- | VkRenderingFlagBitsKHR - Bitmask specifying additional properties of a+-- dynamic render pass instance+--+-- = Description+--+-- The contents of @pRenderingInfo@ /must/ match between suspended render+-- pass instances and the render pass instances that resume them, other+-- than the presence or absence of the 'RENDERING_RESUMING_BIT_KHR',+-- 'RENDERING_SUSPENDING_BIT_KHR', and+-- 'RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR' flags. No action+-- or synchronization commands, or other render pass instances, are allowed+-- between suspending and resuming render pass instances.+--+-- = See Also+--+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_dynamic_rendering VK_KHR_dynamic_rendering>,+-- 'RenderingFlagsKHR'+newtype RenderingFlagBitsKHR = RenderingFlagBitsKHR Flags+ deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits)++-- | 'RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR' specifies that+-- draw calls for the render pass instance will be recorded in secondary+-- command buffers.+pattern RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR = RenderingFlagBitsKHR 0x00000001+-- | 'RENDERING_SUSPENDING_BIT_KHR' specifies that the render pass instance+-- will be suspended.+pattern RENDERING_SUSPENDING_BIT_KHR = RenderingFlagBitsKHR 0x00000002+-- | 'RENDERING_RESUMING_BIT_KHR' specifies that the render pass instance is+-- resuming an earlier suspended render pass instance.+pattern RENDERING_RESUMING_BIT_KHR = RenderingFlagBitsKHR 0x00000004++conNameRenderingFlagBitsKHR :: String+conNameRenderingFlagBitsKHR = "RenderingFlagBitsKHR"++enumPrefixRenderingFlagBitsKHR :: String+enumPrefixRenderingFlagBitsKHR = "RENDERING_"++showTableRenderingFlagBitsKHR :: [(RenderingFlagBitsKHR, String)]+showTableRenderingFlagBitsKHR =+ [ (RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR, "CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR")+ , (RENDERING_SUSPENDING_BIT_KHR , "SUSPENDING_BIT_KHR")+ , (RENDERING_RESUMING_BIT_KHR , "RESUMING_BIT_KHR")+ ]++instance Show RenderingFlagBitsKHR where+ showsPrec = enumShowsPrec enumPrefixRenderingFlagBitsKHR+ showTableRenderingFlagBitsKHR+ conNameRenderingFlagBitsKHR+ (\(RenderingFlagBitsKHR x) -> x)+ (\x -> showString "0x" . showHex x)++instance Read RenderingFlagBitsKHR where+ readPrec = enumReadPrec enumPrefixRenderingFlagBitsKHR+ showTableRenderingFlagBitsKHR+ conNameRenderingFlagBitsKHR+ RenderingFlagBitsKHR+++-- No documentation found for TopLevel "VkAttachmentSampleCountInfoNV"+type AttachmentSampleCountInfoNV = AttachmentSampleCountInfoAMD+++type KHR_DYNAMIC_RENDERING_SPEC_VERSION = 1++-- No documentation found for TopLevel "VK_KHR_DYNAMIC_RENDERING_SPEC_VERSION"+pattern KHR_DYNAMIC_RENDERING_SPEC_VERSION :: forall a . Integral a => a+pattern KHR_DYNAMIC_RENDERING_SPEC_VERSION = 1+++type KHR_DYNAMIC_RENDERING_EXTENSION_NAME = "VK_KHR_dynamic_rendering"++-- No documentation found for TopLevel "VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME"+pattern KHR_DYNAMIC_RENDERING_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a+pattern KHR_DYNAMIC_RENDERING_EXTENSION_NAME = "VK_KHR_dynamic_rendering"+
+ src/Vulkan/Extensions/VK_KHR_dynamic_rendering.hs-boot view
@@ -0,0 +1,339 @@+{-# language CPP #-}+-- | = Name+--+-- VK_KHR_dynamic_rendering - device extension+--+-- == VK_KHR_dynamic_rendering+--+-- [__Name String__]+-- @VK_KHR_dynamic_rendering@+--+-- [__Extension Type__]+-- Device extension+--+-- [__Registered Extension Number__]+-- 45+--+-- [__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_dynamic_rendering] @tobski%0A<<Here describe the issue or question you have about the VK_KHR_dynamic_rendering extension>> >+--+-- [__Extension Proposal__]+-- <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_KHR_dynamic_rendering.asciidoc VK_KHR_dynamic_rendering>+--+-- == Other Extension Metadata+--+-- [__Last Modified Date__]+-- 2021-10-06+--+-- [__Contributors__]+--+-- - Tobias Hector, AMD+--+-- - Arseny Kapoulkine, Roblox+--+-- - François Duranleau, Gameloft+--+-- - Stuart Smith, AMD+--+-- - Hai Nguyen, Google+--+-- - Jean-François Roy, Google+--+-- - Jeff Leger, Qualcomm+--+-- - Jan-Harald Fredriksen, Arm+--+-- - Piers Daniell, Nvidia+--+-- - James Fitzpatrick, Imagination+--+-- - Piotr Byszewski, Mobica+--+-- - Jesse Hall, Google+--+-- - Mike Blumenkrantz, Valve+--+-- == Description+--+-- This extension allows applications to create single-pass render pass+-- instances without needing to create render pass objects or framebuffers.+-- Dynamic render passes can also span across multiple primary command+-- buffers, rather than relying on secondary command buffers.+--+-- This extension also incorporates+-- 'Vulkan.Core10.Enums.AttachmentStoreOp.ATTACHMENT_STORE_OP_NONE_KHR'+-- from <VK_QCOM_render_pass_store_ops.html VK_QCOM_render_pass_store_ops>,+-- enabling applications to avoid unnecessary synchronization when an+-- attachment is not written during a render pass.+--+-- == New Commands+--+-- - 'cmdBeginRenderingKHR'+--+-- - 'cmdEndRenderingKHR'+--+-- == New Structures+--+-- - 'RenderingAttachmentInfoKHR'+--+-- - 'RenderingInfoKHR'+--+-- - Extending+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo':+--+-- - 'CommandBufferInheritanceRenderingInfoKHR'+--+-- - Extending 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo':+--+-- - 'PipelineRenderingCreateInfoKHR'+--+-- - Extending+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',+-- 'Vulkan.Core10.Device.DeviceCreateInfo':+--+-- - 'PhysicalDeviceDynamicRenderingFeaturesKHR'+--+-- If+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_AMD_mixed_attachment_samples VK_AMD_mixed_attachment_samples>+-- is supported:+--+-- - Extending+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo',+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo':+--+-- - 'AttachmentSampleCountInfoAMD'+--+-- 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 'RenderingInfoKHR':+--+-- - 'RenderingFragmentDensityMapAttachmentInfoEXT'+--+-- 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 'RenderingInfoKHR':+--+-- - 'RenderingFragmentShadingRateAttachmentInfoKHR'+--+-- If+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_framebuffer_mixed_samples VK_NV_framebuffer_mixed_samples>+-- is supported:+--+-- - Extending+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo',+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo':+--+-- - 'AttachmentSampleCountInfoNV'+--+-- If+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NVX_multiview_per_view_attributes VK_NVX_multiview_per_view_attributes>+-- is supported:+--+-- - Extending+-- 'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo',+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo',+-- 'RenderingInfoKHR':+--+-- - 'MultiviewPerViewAttributesInfoNVX'+--+-- == New Enums+--+-- - 'RenderingFlagBitsKHR'+--+-- == New Bitmasks+--+-- - 'RenderingFlagsKHR'+--+-- == New Enum Constants+--+-- - 'KHR_DYNAMIC_RENDERING_EXTENSION_NAME'+--+-- - 'KHR_DYNAMIC_RENDERING_SPEC_VERSION'+--+-- - Extending 'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp':+--+-- - 'Vulkan.Core10.Enums.AttachmentStoreOp.ATTACHMENT_STORE_OP_NONE_KHR'+--+-- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType':+--+-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR'+--+-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR'+--+-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR'+--+-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR'+--+-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDERING_INFO_KHR'+--+-- If+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_AMD_mixed_attachment_samples VK_AMD_mixed_attachment_samples>+-- is supported:+--+-- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType':+--+-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD'+--+-- If+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_fragment_density_map VK_EXT_fragment_density_map>+-- is supported:+--+-- - Extending+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits':+--+-- - 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT'+--+-- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType':+--+-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT'+--+-- 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+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits':+--+-- - 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'+--+-- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType':+--+-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR'+--+-- If+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_framebuffer_mixed_samples VK_NV_framebuffer_mixed_samples>+-- is supported:+--+-- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType':+--+-- - 'STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_NV'+--+-- If+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NVX_multiview_per_view_attributes VK_NVX_multiview_per_view_attributes>+-- is supported:+--+-- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType':+--+-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX'+--+-- == Version History+--+-- - Revision 1, 2021-10-06 (Tobias Hector)+--+-- - Initial revision+--+-- = See Also+--+-- 'CommandBufferInheritanceRenderingInfoKHR',+-- 'PhysicalDeviceDynamicRenderingFeaturesKHR',+-- 'PipelineRenderingCreateInfoKHR', 'RenderingAttachmentInfoKHR',+-- 'RenderingFlagBitsKHR', 'RenderingFlagsKHR', 'RenderingInfoKHR',+-- 'cmdBeginRenderingKHR', 'cmdEndRenderingKHR'+--+-- = Document Notes+--+-- For more information, see the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_dynamic_rendering 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_dynamic_rendering ( AttachmentSampleCountInfoAMD+ , CommandBufferInheritanceRenderingInfoKHR+ , MultiviewPerViewAttributesInfoNVX+ , PhysicalDeviceDynamicRenderingFeaturesKHR+ , PipelineRenderingCreateInfoKHR+ , RenderingAttachmentInfoKHR+ , RenderingFragmentDensityMapAttachmentInfoEXT+ , RenderingFragmentShadingRateAttachmentInfoKHR+ , RenderingInfoKHR+ ) where++import Vulkan.CStruct (FromCStruct)+import Vulkan.CStruct (ToCStruct)+import Data.Kind (Type)+import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)+import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)+import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)+data AttachmentSampleCountInfoAMD++instance ToCStruct AttachmentSampleCountInfoAMD+instance Show AttachmentSampleCountInfoAMD++instance FromCStruct AttachmentSampleCountInfoAMD+++data CommandBufferInheritanceRenderingInfoKHR++instance ToCStruct CommandBufferInheritanceRenderingInfoKHR+instance Show CommandBufferInheritanceRenderingInfoKHR++instance FromCStruct CommandBufferInheritanceRenderingInfoKHR+++data MultiviewPerViewAttributesInfoNVX++instance ToCStruct MultiviewPerViewAttributesInfoNVX+instance Show MultiviewPerViewAttributesInfoNVX++instance FromCStruct MultiviewPerViewAttributesInfoNVX+++data PhysicalDeviceDynamicRenderingFeaturesKHR++instance ToCStruct PhysicalDeviceDynamicRenderingFeaturesKHR+instance Show PhysicalDeviceDynamicRenderingFeaturesKHR++instance FromCStruct PhysicalDeviceDynamicRenderingFeaturesKHR+++data PipelineRenderingCreateInfoKHR++instance ToCStruct PipelineRenderingCreateInfoKHR+instance Show PipelineRenderingCreateInfoKHR++instance FromCStruct PipelineRenderingCreateInfoKHR+++data RenderingAttachmentInfoKHR++instance ToCStruct RenderingAttachmentInfoKHR+instance Show RenderingAttachmentInfoKHR+++data RenderingFragmentDensityMapAttachmentInfoEXT++instance ToCStruct RenderingFragmentDensityMapAttachmentInfoEXT+instance Show RenderingFragmentDensityMapAttachmentInfoEXT++instance FromCStruct RenderingFragmentDensityMapAttachmentInfoEXT+++data RenderingFragmentShadingRateAttachmentInfoKHR++instance ToCStruct RenderingFragmentShadingRateAttachmentInfoKHR+instance Show RenderingFragmentShadingRateAttachmentInfoKHR++instance FromCStruct RenderingFragmentShadingRateAttachmentInfoKHR+++type role RenderingInfoKHR nominal+data RenderingInfoKHR (es :: [Type])++instance (Extendss RenderingInfoKHR es, PokeChain es) => ToCStruct (RenderingInfoKHR es)+instance Show (Chain es) => Show (RenderingInfoKHR es)+
src/Vulkan/Extensions/VK_KHR_external_memory_win32.hs view
@@ -507,23 +507,11 @@ -- -- - 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT' ----- - 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT'--- -- The implementation /must/ ensure the access rights allow read and write -- access to the memory. ----- For handles of the following types:------ - 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT'------ - 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT'------ The access rights /must/ be:------ - @GENERIC_ALL@------ [1]--- <https://docs.microsoft.com/en-us/windows/win32/sync/synchronization-object-security-and-access-rights>+-- [1]+-- <https://docs.microsoft.com/en-us/windows/win32/sync/synchronization-object-security-and-access-rights> -- -- == Valid Usage --@@ -531,10 +519,6 @@ -- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@ -- does not include -- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT',--- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT',--- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT',--- or--- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT', -- a 'ExportMemoryWin32HandleInfoKHR' structure /must/ not be included -- in the @pNext@ chain of 'Vulkan.Core10.Memory.MemoryAllocateInfo' --
src/Vulkan/Extensions/VK_KHR_maintenance1.hs view
@@ -135,6 +135,10 @@ -- -- == New Enum Constants --+-- - 'KHR_MAINTENANCE1_EXTENSION_NAME'+--+-- - 'KHR_MAINTENANCE1_SPEC_VERSION'+-- -- - 'KHR_MAINTENANCE_1_EXTENSION_NAME' -- -- - 'KHR_MAINTENANCE_1_SPEC_VERSION'
src/Vulkan/Extensions/VK_KHR_maintenance2.hs view
@@ -131,6 +131,10 @@ -- -- == New Enum Constants --+-- - 'KHR_MAINTENANCE2_EXTENSION_NAME'+--+-- - 'KHR_MAINTENANCE2_SPEC_VERSION'+-- -- - 'KHR_MAINTENANCE_2_EXTENSION_NAME' -- -- - 'KHR_MAINTENANCE_2_SPEC_VERSION'
src/Vulkan/Extensions/VK_KHR_maintenance3.hs view
@@ -84,6 +84,10 @@ -- -- == New Enum Constants --+-- - 'KHR_MAINTENANCE3_EXTENSION_NAME'+--+-- - 'KHR_MAINTENANCE3_SPEC_VERSION'+-- -- - 'KHR_MAINTENANCE_3_EXTENSION_NAME' -- -- - 'KHR_MAINTENANCE_3_SPEC_VERSION'
src/Vulkan/Extensions/VK_KHR_present_id.hs view
@@ -250,7 +250,7 @@ -- - #VUID-VkPresentIdKHR-swapchainCount-04998# @swapchainCount@ /must/ -- be the same value as -- 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR'::@swapchainCount@,--- where this 'PresentIdKHR' is in the pNext-chain of the+-- where this 'PresentIdKHR' is in the @pNext@ chain of the -- 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR' structure -- -- - #VUID-VkPresentIdKHR-presentIds-04999# Each @presentIds@ entry
src/Vulkan/Extensions/VK_KHR_present_wait.hs view
@@ -245,7 +245,7 @@ -- be signaled. -- -- When the presentation has completed, the presentId associated with the--- related @pSwapChains@ entry will be increased in value so that it is at+-- related @pSwapchains@ entry will be increased in value so that it is at -- least equal to the value provided in the -- 'Vulkan.Extensions.VK_KHR_present_id.PresentIdKHR' structure. --
src/Vulkan/Extensions/VK_KHR_sampler_mirror_clamp_to_edge.hs view
@@ -82,6 +82,8 @@ -- -- - 'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE' --+-- - 'SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE_KHR'+-- -- == Example -- -- Creating a sampler with the new address mode in each dimension
src/Vulkan/Extensions/VK_KHR_synchronization2.hs view
@@ -123,6 +123,10 @@ -- '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'@@ -404,8 +408,8 @@ -- -- 'AccessFlagBits2KHR', 'AccessFlags2KHR', 'BufferMemoryBarrier2KHR', -- 'CommandBufferSubmitInfoKHR', 'DependencyInfoKHR',--- 'ImageMemoryBarrier2KHR', 'MemoryBarrier2KHR',--- 'PhysicalDeviceSynchronization2FeaturesKHR',+-- 'Vulkan.Core10.FundamentalTypes.Flags64', 'ImageMemoryBarrier2KHR',+-- 'MemoryBarrier2KHR', 'PhysicalDeviceSynchronization2FeaturesKHR', -- 'PipelineStageFlagBits2KHR', 'PipelineStageFlags2KHR', -- 'SemaphoreSubmitInfoKHR', 'SubmitFlagBitsKHR', 'SubmitFlagsKHR', -- 'SubmitInfo2KHR', 'cmdPipelineBarrier2KHR', 'cmdResetEvent2KHR',@@ -1310,6 +1314,11 @@ -- '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@@ -1402,8 +1411,7 @@ -- -- '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@ as an instance of--- the 'SubmitInfo2KHR' structure.+-- with each batch defined by an element of @pSubmits@. -- -- Semaphore operations submitted with 'queueSubmit2KHR' have additional -- ordering constraints compared to other submission commands, with@@ -5024,6 +5032,40 @@ -- '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@@ -5846,7 +5888,7 @@ -- 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-attachment shading rate image>+-- <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 PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = PipelineStageFlagBits2KHR 0x0000000000400000
src/Vulkan/Extensions/VK_KHR_synchronization2.hs-boot view
@@ -123,6 +123,10 @@ -- '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'@@ -404,8 +408,8 @@ -- -- 'AccessFlagBits2KHR', 'AccessFlags2KHR', 'BufferMemoryBarrier2KHR', -- 'CommandBufferSubmitInfoKHR', 'DependencyInfoKHR',--- 'ImageMemoryBarrier2KHR', 'MemoryBarrier2KHR',--- 'PhysicalDeviceSynchronization2FeaturesKHR',+-- 'Vulkan.Core10.FundamentalTypes.Flags64', 'ImageMemoryBarrier2KHR',+-- 'MemoryBarrier2KHR', 'PhysicalDeviceSynchronization2FeaturesKHR', -- 'PipelineStageFlagBits2KHR', 'PipelineStageFlags2KHR', -- 'SemaphoreSubmitInfoKHR', 'SubmitFlagBitsKHR', 'SubmitFlagsKHR', -- 'SubmitInfo2KHR', 'cmdPipelineBarrier2KHR', 'cmdResetEvent2KHR',
src/Vulkan/Extensions/VK_KHR_variable_pointers.hs view
@@ -111,6 +111,8 @@ -- -- - 'STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR' --+-- - 'STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR'+-- -- == New SPIR-V Capabilities -- -- - <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table-VariablePointers VariablePointers>
src/Vulkan/Extensions/VK_NV_device_generated_commands.hs view
@@ -1088,10 +1088,10 @@ -- - #VUID-vkCmdExecuteGeneratedCommandsNV-VkPipelineVieportCreateInfo-04141# -- If the bound graphics pipeline state was created with the -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of+-- dynamic state enabled and a -- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with -- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@ -- greater or equal to the @viewportCount@ parameter in the last call -- to@@ -1100,10 +1100,10 @@ -- - #VUID-vkCmdExecuteGeneratedCommandsNV-VkPipelineVieportCreateInfo-04142# -- If the bound graphics pipeline state was created with the -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of+-- dynamic state enabled and a -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@ -- greater or equal to the @viewportCount@ parameter in the last call -- to@@ -1228,6 +1228,242 @@ -- /must/ have been called in the current command buffer prior to this -- draw command --+-- - #VUID-vkCmdExecuteGeneratedCommandsNV-imageView-06172# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdExecuteGeneratedCommandsNV-imageView-06173# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdExecuteGeneratedCommandsNV-imageView-06174# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdExecuteGeneratedCommandsNV-imageView-06175# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdExecuteGeneratedCommandsNV-imageView-06176# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdExecuteGeneratedCommandsNV-imageView-06177# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdExecuteGeneratedCommandsNV-viewMask-06178# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@viewMask@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@viewMask@+--+-- - #VUID-vkCmdExecuteGeneratedCommandsNV-colorAttachmentCount-06179# If+-- the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@colorAttachmentCount@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+--+-- - #VUID-vkCmdExecuteGeneratedCommandsNV-colorAttachmentCount-06180# If+-- the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a 'Vulkan.Core10.Enums.Format.Format' equal to the+-- corresponding element of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@pColorAttachmentFormats@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdExecuteGeneratedCommandsNV-pDepthAttachment-06181# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@depthAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdExecuteGeneratedCommandsNV-pStencilAttachment-06182# If+-- the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@stencilAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdExecuteGeneratedCommandsNV-imageView-06183# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentShadingRateAttachmentInfoKHR'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'+--+-- - #VUID-vkCmdExecuteGeneratedCommandsNV-imageView-06184# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentDensityMapAttachmentInfoEXT'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT'+--+-- - #VUID-vkCmdExecuteGeneratedCommandsNV-colorAttachmentCount-06185# If+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the corresponding element of the+-- @pColorAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdExecuteGeneratedCommandsNV-pDepthAttachment-06186# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdExecuteGeneratedCommandsNV-pStencilAttachment-06187# If+-- the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdExecuteGeneratedCommandsNV-colorAttachmentCount-06188# If+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdExecuteGeneratedCommandsNV-pDepthAttachment-06189# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdExecuteGeneratedCommandsNV-pStencilAttachment-06190# If+-- the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdExecuteGeneratedCommandsNV-renderPass-06198# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline /must/ have been created with a+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@+-- equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'+-- -- - #VUID-vkCmdExecuteGeneratedCommandsNV-None-04007# All vertex input -- bindings accessed via vertex input variables declared in the vertex -- shader entry point’s interface /must/ have either valid or@@ -1324,9 +1560,8 @@ -- 'Vulkan.Core10.FundamentalTypes.FALSE' this command will implicitly -- trigger the preprocessing step, otherwise not. ("isPreprocessed" ::: Bool)- -> -- | @pGeneratedCommandsInfo@ is a pointer to an instance of the- -- 'GeneratedCommandsInfoNV' structure containing parameters affecting the- -- generation of commands.+ -> -- | @pGeneratedCommandsInfo@ is a pointer to a 'GeneratedCommandsInfoNV'+ -- structure containing parameters affecting the generation of commands. GeneratedCommandsInfoNV -> io () cmdExecuteGeneratedCommandsNV commandBuffer isPreprocessed generatedCommandsInfo = liftIO . evalContT $ do@@ -1411,9 +1646,8 @@ . (MonadIO io) => -- | @commandBuffer@ is the command buffer which does the preprocessing. CommandBuffer- -> -- | @pGeneratedCommandsInfo@ is a pointer to an instance of the- -- 'GeneratedCommandsInfoNV' structure containing parameters affecting the- -- preprocessing step.+ -> -- | @pGeneratedCommandsInfo@ is a pointer to a 'GeneratedCommandsInfoNV'+ -- structure containing parameters affecting the preprocessing step. GeneratedCommandsInfoNV -> io () cmdPreprocessGeneratedCommandsNV commandBuffer generatedCommandsInfo = liftIO . evalContT $ do@@ -1569,9 +1803,9 @@ . (Extendss MemoryRequirements2 a, PokeChain a, PeekChain a, MonadIO io) => -- | @device@ is the logical device that owns the buffer. Device- -> -- | @pInfo@ is a pointer to an instance of the- -- 'GeneratedCommandsMemoryRequirementsInfoNV' structure containing- -- parameters required for the memory requirements query.+ -> -- | @pInfo@ is a pointer to a 'GeneratedCommandsMemoryRequirementsInfoNV'+ -- structure containing parameters required for the memory requirements+ -- query. GeneratedCommandsMemoryRequirementsInfoNV -> io (MemoryRequirements2 a) getGeneratedCommandsMemoryRequirementsNV device info = liftIO . evalContT $ do@@ -1643,9 +1877,9 @@ . (MonadIO io) => -- | @device@ is the logical device that creates the indirect command layout. Device- -> -- | @pCreateInfo@ is a pointer to an instance of the- -- 'IndirectCommandsLayoutCreateInfoNV' structure containing parameters- -- affecting creation of the indirect command layout.+ -> -- | @pCreateInfo@ is a pointer to a 'IndirectCommandsLayoutCreateInfoNV'+ -- structure containing parameters affecting creation of the indirect+ -- command layout. IndirectCommandsLayoutCreateInfoNV -> -- | @pAllocator@ controls host memory allocation as described in the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>
src/Vulkan/Extensions/VK_NV_mesh_shader.hs view
@@ -703,10 +703,10 @@ -- - #VUID-vkCmdDrawMeshTasksNV-VkPipelineVieportCreateInfo-04141# If the -- bound graphics pipeline state was created with the -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of+-- dynamic state enabled and a -- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with -- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@ -- greater or equal to the @viewportCount@ parameter in the last call -- to@@ -715,10 +715,10 @@ -- - #VUID-vkCmdDrawMeshTasksNV-VkPipelineVieportCreateInfo-04142# If the -- bound graphics pipeline state was created with the -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of+-- dynamic state enabled and a -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@ -- greater or equal to the @viewportCount@ parameter in the last call -- to@@ -842,6 +842,242 @@ -- /must/ have been called in the current command buffer prior to this -- draw command --+-- - #VUID-vkCmdDrawMeshTasksNV-imageView-06172# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawMeshTasksNV-imageView-06173# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawMeshTasksNV-imageView-06174# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawMeshTasksNV-imageView-06175# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawMeshTasksNV-imageView-06176# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawMeshTasksNV-imageView-06177# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawMeshTasksNV-viewMask-06178# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@viewMask@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@viewMask@+--+-- - #VUID-vkCmdDrawMeshTasksNV-colorAttachmentCount-06179# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@colorAttachmentCount@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+--+-- - #VUID-vkCmdDrawMeshTasksNV-colorAttachmentCount-06180# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a 'Vulkan.Core10.Enums.Format.Format' equal to the+-- corresponding element of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@pColorAttachmentFormats@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawMeshTasksNV-pDepthAttachment-06181# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@depthAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMeshTasksNV-pStencilAttachment-06182# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@stencilAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMeshTasksNV-imageView-06183# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentShadingRateAttachmentInfoKHR'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'+--+-- - #VUID-vkCmdDrawMeshTasksNV-imageView-06184# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentDensityMapAttachmentInfoEXT'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT'+--+-- - #VUID-vkCmdDrawMeshTasksNV-colorAttachmentCount-06185# If the+-- currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the corresponding element of the+-- @pColorAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawMeshTasksNV-pDepthAttachment-06186# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMeshTasksNV-pStencilAttachment-06187# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMeshTasksNV-colorAttachmentCount-06188# If the+-- currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawMeshTasksNV-pDepthAttachment-06189# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMeshTasksNV-pStencilAttachment-06190# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMeshTasksNV-renderPass-06198# If the current render+-- pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline /must/ have been created with a+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@+-- equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'+-- -- - #VUID-vkCmdDrawMeshTasksNV-taskCount-02119# @taskCount@ /must/ be -- less than or equal to -- 'PhysicalDeviceMeshShaderPropertiesNV'::@maxDrawMeshTasksCount@@@ -1302,10 +1538,10 @@ -- - #VUID-vkCmdDrawMeshTasksIndirectNV-VkPipelineVieportCreateInfo-04141# -- If the bound graphics pipeline state was created with the -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of+-- dynamic state enabled and a -- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with -- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@ -- greater or equal to the @viewportCount@ parameter in the last call -- to@@ -1314,10 +1550,10 @@ -- - #VUID-vkCmdDrawMeshTasksIndirectNV-VkPipelineVieportCreateInfo-04142# -- If the bound graphics pipeline state was created with the -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of+-- dynamic state enabled and a -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@ -- greater or equal to the @viewportCount@ parameter in the last call -- to@@ -1442,6 +1678,242 @@ -- /must/ have been called in the current command buffer prior to this -- draw command --+-- - #VUID-vkCmdDrawMeshTasksIndirectNV-imageView-06172# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawMeshTasksIndirectNV-imageView-06173# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawMeshTasksIndirectNV-imageView-06174# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawMeshTasksIndirectNV-imageView-06175# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawMeshTasksIndirectNV-imageView-06176# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawMeshTasksIndirectNV-imageView-06177# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawMeshTasksIndirectNV-viewMask-06178# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@viewMask@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@viewMask@+--+-- - #VUID-vkCmdDrawMeshTasksIndirectNV-colorAttachmentCount-06179# If+-- the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@colorAttachmentCount@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+--+-- - #VUID-vkCmdDrawMeshTasksIndirectNV-colorAttachmentCount-06180# If+-- the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a 'Vulkan.Core10.Enums.Format.Format' equal to the+-- corresponding element of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@pColorAttachmentFormats@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawMeshTasksIndirectNV-pDepthAttachment-06181# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@depthAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMeshTasksIndirectNV-pStencilAttachment-06182# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@stencilAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMeshTasksIndirectNV-imageView-06183# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentShadingRateAttachmentInfoKHR'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'+--+-- - #VUID-vkCmdDrawMeshTasksIndirectNV-imageView-06184# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentDensityMapAttachmentInfoEXT'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT'+--+-- - #VUID-vkCmdDrawMeshTasksIndirectNV-colorAttachmentCount-06185# If+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the corresponding element of the+-- @pColorAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawMeshTasksIndirectNV-pDepthAttachment-06186# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMeshTasksIndirectNV-pStencilAttachment-06187# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMeshTasksIndirectNV-colorAttachmentCount-06188# If+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawMeshTasksIndirectNV-pDepthAttachment-06189# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMeshTasksIndirectNV-pStencilAttachment-06190# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-06198# If the current+-- render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline /must/ have been created with a+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@+-- equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'+-- -- - #VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708# If @buffer@ is -- non-sparse then it /must/ be bound completely and contiguously to a -- single 'Vulkan.Core10.Handles.DeviceMemory' object@@ -1946,10 +2418,10 @@ -- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-VkPipelineVieportCreateInfo-04141# -- If the bound graphics pipeline state was created with the -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of+-- dynamic state enabled and a -- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with -- 'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@ -- greater or equal to the @viewportCount@ parameter in the last call -- to@@ -1958,10 +2430,10 @@ -- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-VkPipelineVieportCreateInfo-04142# -- If the bound graphics pipeline state was created with the -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'--- dynamic state enabled and an instance of+-- dynamic state enabled and a -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'--- chained from @VkPipelineVieportCreateInfo@, then the bound graphics--- pipeline /must/ have been created with+-- structure chained from @VkPipelineVieportCreateInfo@, then the bound+-- graphics pipeline /must/ have been created with -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@ -- greater or equal to the @viewportCount@ parameter in the last call -- to@@ -2085,6 +2557,242 @@ -- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT' -- /must/ have been called in the current command buffer prior to this -- draw command+--+-- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-imageView-06172# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-imageView-06173# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-imageView-06174# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-imageView-06175# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-imageView-06176# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pDepthAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pDepthAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the depth attachment+--+-- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-imageView-06177# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the @imageView@ member of @pStencilAttachment@ is not+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of+-- @pStencilAttachment@ is+-- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL',+-- this command /must/ not write any values to the stencil attachment+--+-- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-viewMask-06178# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@viewMask@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@viewMask@+--+-- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-colorAttachmentCount-06179#+-- If the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound graphics pipeline /must/ have been created with+-- a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@colorAttachmentCount@+-- equal to+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+--+-- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-colorAttachmentCount-06180#+-- If the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a 'Vulkan.Core10.Enums.Format.Format' equal to the+-- corresponding element of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@pColorAttachmentFormats@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-pDepthAttachment-06181# If+-- the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@depthAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-pStencilAttachment-06182# If+-- the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.PipelineRenderingCreateInfoKHR'::@stencilAttachmentFormat@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the 'Vulkan.Core10.Enums.Format.Format' used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-imageView-06183# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentShadingRateAttachmentInfoKHR'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'+--+-- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-imageView-06184# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentDensityMapAttachmentInfoEXT'::@imageView@+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently+-- bound graphics pipeline /must/ have been created with+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT'+--+-- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-colorAttachmentCount-06185#+-- If the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the corresponding element of the+-- @pColorAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-pDepthAttachment-06186# If+-- the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-pStencilAttachment-06187# If+-- the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the+-- @depthStencilAttachmentSamples@ member of+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-colorAttachmentCount-06188#+-- If the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR'+-- with a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@colorAttachmentCount@+-- parameter greater than @0@, then each element of the+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pColorAttachments@+-- array with a @imageView@ not equal to+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created+-- with a sample count equal to the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline+--+-- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-pDepthAttachment-06189# If+-- the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pDepthAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-pStencilAttachment-06190# If+-- the current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline was created without a+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'+-- or+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'+-- structure, and+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+-- was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of+-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@+-- used to create the currently bound graphics pipeline /must/ be equal+-- to the sample count used to create+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingInfoKHR'::@pStencilAttachment->pname@:imageView+--+-- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-06198# If the+-- current render pass instance was begun with+-- 'Vulkan.Extensions.VK_KHR_dynamic_rendering.cmdBeginRenderingKHR',+-- the currently bound pipeline /must/ have been created with a+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@+-- equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE' -- -- - #VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708# If @buffer@ is -- non-sparse then it /must/ be bound completely and contiguously to a
src/Vulkan/Extensions/VK_NV_viewport_array2.hs view
@@ -89,6 +89,10 @@ -- -- == New Enum Constants --+-- - 'NV_VIEWPORT_ARRAY2_EXTENSION_NAME'+--+-- - 'NV_VIEWPORT_ARRAY2_SPEC_VERSION'+-- -- - 'NV_VIEWPORT_ARRAY_2_EXTENSION_NAME' -- -- - 'NV_VIEWPORT_ARRAY_2_SPEC_VERSION'
src/Vulkan/Extensions/VK_QCOM_render_pass_shader_resolve.hs view
@@ -98,7 +98,7 @@ -- resolve hardware has this limitation, there is little reason to require -- a shader resolve to resolve to a single sample buffer. ----- 3) Should a shader resolve subpass be the last subpass in a renderpass?+-- 3) Should a shader resolve subpass be the last subpass in a render pass? -- -- __RESOLVED__ Yes. --
src/Vulkan/Extensions/VK_QCOM_render_pass_store_ops.hs view
@@ -37,8 +37,8 @@ -- -- == Description ----- Renderpass attachments /can/ be read-only for the duration of a--- renderpass.+-- Renderpass attachments /can/ be read-only for the duration of a render+-- pass. -- -- Examples include input attachments and depth attachments where depth -- tests are enabled but depth writes are not enabled.@@ -104,9 +104,9 @@ ) where import Data.String (IsString)-import Vulkan.Core10.Enums.AttachmentStoreOp (AttachmentStoreOp(ATTACHMENT_STORE_OP_NONE_EXT))+import Vulkan.Core10.Enums.AttachmentStoreOp (AttachmentStoreOp(ATTACHMENT_STORE_OP_NONE_KHR)) -- No documentation found for TopLevel "VK_ATTACHMENT_STORE_OP_NONE_QCOM"-pattern ATTACHMENT_STORE_OP_NONE_QCOM = ATTACHMENT_STORE_OP_NONE_EXT+pattern ATTACHMENT_STORE_OP_NONE_QCOM = ATTACHMENT_STORE_OP_NONE_KHR type QCOM_RENDER_PASS_STORE_OPS_SPEC_VERSION = 2
src/Vulkan/Extensions/VK_QCOM_rotated_copy_commands.hs view
@@ -52,7 +52,7 @@ -- copying between two resources, where one resource contains rotated -- content and the other does not, a rotated copy may be desired. This -- extension may be used in combination with VK_QCOM_render_pass_transform--- which adds rotated renderpasses.+-- which adds rotated render passes. -- -- This extension adds an extension structure to the following commands: -- vkCmdBlitImage2KHR, vkCmdCopyImageToBuffer2KHR and
src/Vulkan/Extensions/VK_QCOM_rotated_copy_commands.hs-boot view
@@ -52,7 +52,7 @@ -- copying between two resources, where one resource contains rotated -- content and the other does not, a rotated copy may be desired. This -- extension may be used in combination with VK_QCOM_render_pass_transform--- which adds rotated renderpasses.+-- which adds rotated render passes. -- -- This extension adds an extension structure to the following commands: -- vkCmdBlitImage2KHR, vkCmdCopyImageToBuffer2KHR and
src/Vulkan/Version.hs view
@@ -19,11 +19,11 @@ import Data.Word (Word32) pattern HEADER_VERSION :: Word32-pattern HEADER_VERSION = 196+pattern HEADER_VERSION = 197 pattern HEADER_VERSION_COMPLETE :: Word32-pattern HEADER_VERSION_COMPLETE = MAKE_API_VERSION 1 2 196+pattern HEADER_VERSION_COMPLETE = MAKE_API_VERSION 1 2 197 pattern MAKE_API_VERSION :: Word32 -> Word32 -> Word32 -> Word32
vulkan.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: vulkan-version: 3.13+version: 3.13.1 synopsis: Bindings to the Vulkan graphics API. description: Please see [the readme](https://github.com/expipiplus1/vulkan/#readme) category: Graphics@@ -395,6 +395,7 @@ Vulkan.Extensions.VK_KHR_display_swapchain Vulkan.Extensions.VK_KHR_draw_indirect_count Vulkan.Extensions.VK_KHR_driver_properties+ Vulkan.Extensions.VK_KHR_dynamic_rendering Vulkan.Extensions.VK_KHR_external_fence Vulkan.Extensions.VK_KHR_external_fence_capabilities Vulkan.Extensions.VK_KHR_external_fence_fd