diff --git a/VulkanMemoryAllocator/VulkanMemoryAllocator b/VulkanMemoryAllocator/VulkanMemoryAllocator index 2f4bc1bb2..0790b5f0a 160000 --- a/VulkanMemoryAllocator/VulkanMemoryAllocator +++ b/VulkanMemoryAllocator/VulkanMemoryAllocator @@ -1 +1 @@ -Subproject commit 2f4bc1bb20959cf6aa90add8a3c40d94643edc03 +Subproject commit 0790b5f0a9b96cd79fe75e4f458fc6b468dd9ec3 diff --git a/VulkanMemoryAllocator/VulkanMemoryAllocator.cabal b/VulkanMemoryAllocator/VulkanMemoryAllocator.cabal index 4d630b3fb..01f3b5840 100644 --- a/VulkanMemoryAllocator/VulkanMemoryAllocator.cabal +++ b/VulkanMemoryAllocator/VulkanMemoryAllocator.cabal @@ -5,7 +5,7 @@ cabal-version: 2.2 -- see: https://github.com/sol/hpack name: VulkanMemoryAllocator -version: 0.5.1 +version: 0.6 synopsis: Bindings to the VulkanMemoryAllocator library category: Graphics homepage: https://github.com/expipiplus1/vulkan#readme @@ -96,7 +96,7 @@ library , bytestring , transformers , vector - , vulkan >=3.6 && <3.11 + , vulkan >=3.6 && <3.12 if flag(safe-foreign-calls) cpp-options: -DSAFE_FOREIGN_CALLS if flag(vma-ndebug) diff --git a/VulkanMemoryAllocator/changelog.md b/VulkanMemoryAllocator/changelog.md index 57b532b40..6ab7c5d0d 100644 --- a/VulkanMemoryAllocator/changelog.md +++ b/VulkanMemoryAllocator/changelog.md @@ -2,6 +2,9 @@ ## WIP +## [0.6] - 2021-06-22 +- Bump VMA, adding alignment info to PoolCreateInfo + ## [0.5.1] - 2021-06-05 - Bump VMA, documentation changes diff --git a/VulkanMemoryAllocator/package.yaml b/VulkanMemoryAllocator/package.yaml index 50609970c..98d4f95b0 100644 --- a/VulkanMemoryAllocator/package.yaml +++ b/VulkanMemoryAllocator/package.yaml @@ -1,5 +1,5 @@ name: VulkanMemoryAllocator -version: "0.5.1" +version: "0.6" synopsis: Bindings to the VulkanMemoryAllocator library category: Graphics maintainer: Joe Hermaszewski @@ -20,7 +20,7 @@ library: src/lib.cpp dependencies: - base <5 - - vulkan >= 3.6 && < 3.11 + - vulkan >= 3.6 && < 3.12 - bytestring - transformers - vector diff --git a/VulkanMemoryAllocator/src/VulkanMemoryAllocator.hs b/VulkanMemoryAllocator/src/VulkanMemoryAllocator.hs index 033bba622..f11425503 100644 --- a/VulkanMemoryAllocator/src/VulkanMemoryAllocator.hs +++ b/VulkanMemoryAllocator/src/VulkanMemoryAllocator.hs @@ -3987,15 +3987,37 @@ data PoolCreateInfo = PoolCreateInfo -- used during creation of the 'Allocator' object. Otherwise, this variable -- is ignored. priority :: Float + , -- | Additional minimum alignment to be used for all allocations created from + -- this pool. Can be 0. + -- + -- Leave 0 (default) not to impose any additional alignment. If not 0, it + -- must be a power of two. It can be useful in cases where alignment + -- returned by Vulkan by functions like @vkGetBufferMemoryRequirements@ is + -- not enough, e.g. when doing interop with OpenGL. + minAllocationAlignment :: DeviceSize + , -- | Additional @pNext@ chain to be attached to @VkMemoryAllocateInfo@ used + -- for every allocation made by this pool. Optional. + -- + -- Optional, can be null. If not null, it must point to a @pNext@ chain of + -- structures that can be attached to @VkMemoryAllocateInfo@. It can be + -- useful for special needs such as adding @VkExportMemoryAllocateInfoKHR@. + -- Structures pointed by this member must remain alive and unchanged for + -- the whole lifetime of the custom pool. + -- + -- Please note that some structures, e.g. + -- @VkMemoryPriorityAllocateInfoEXT@, @VkMemoryDedicatedAllocateInfoKHR@, + -- can be attached automatically by this library when using other, more + -- convenient of its features. + memoryAllocateNext :: Ptr () } - deriving (Typeable, Eq) + deriving (Typeable) #if defined(GENERIC_INSTANCES) deriving instance Generic (PoolCreateInfo) #endif deriving instance Show PoolCreateInfo instance ToCStruct PoolCreateInfo where - withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p) + withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p) pokeCStruct p PoolCreateInfo{..} f = do poke ((p `plusPtr` 0 :: Ptr Word32)) (memoryTypeIndex) poke ((p `plusPtr` 4 :: Ptr PoolCreateFlags)) (flags) @@ -4004,8 +4026,10 @@ instance ToCStruct PoolCreateInfo where poke ((p `plusPtr` 24 :: Ptr CSize)) (CSize (maxBlockCount)) poke ((p `plusPtr` 32 :: Ptr Word32)) (frameInUseCount) poke ((p `plusPtr` 36 :: Ptr CFloat)) (CFloat (priority)) + poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (minAllocationAlignment) + poke ((p `plusPtr` 48 :: Ptr (Ptr ()))) (memoryAllocateNext) f - cStructSize = 40 + cStructSize = 56 cStructAlignment = 8 pokeZeroCStruct p f = do poke ((p `plusPtr` 0 :: Ptr Word32)) (zero) @@ -4015,6 +4039,7 @@ instance ToCStruct PoolCreateInfo where poke ((p `plusPtr` 24 :: Ptr CSize)) (CSize (zero)) poke ((p `plusPtr` 32 :: Ptr Word32)) (zero) poke ((p `plusPtr` 36 :: Ptr CFloat)) (CFloat (zero)) + poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (zero) f instance FromCStruct PoolCreateInfo where @@ -4026,11 +4051,13 @@ instance FromCStruct PoolCreateInfo where maxBlockCount <- peek @CSize ((p `plusPtr` 24 :: Ptr CSize)) frameInUseCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32)) priority <- peek @CFloat ((p `plusPtr` 36 :: Ptr CFloat)) + minAllocationAlignment <- peek @DeviceSize ((p `plusPtr` 40 :: Ptr DeviceSize)) + pMemoryAllocateNext <- peek @(Ptr ()) ((p `plusPtr` 48 :: Ptr (Ptr ()))) pure $ PoolCreateInfo - memoryTypeIndex flags blockSize (coerce @CSize @Word64 minBlockCount) (coerce @CSize @Word64 maxBlockCount) frameInUseCount (coerce @CFloat @Float priority) + memoryTypeIndex flags blockSize (coerce @CSize @Word64 minBlockCount) (coerce @CSize @Word64 maxBlockCount) frameInUseCount (coerce @CFloat @Float priority) minAllocationAlignment pMemoryAllocateNext instance Storable PoolCreateInfo where - sizeOf ~_ = 40 + sizeOf ~_ = 56 alignment ~_ = 8 peek = peekCStruct poke ptr poked = pokeCStruct ptr poked (pure ()) @@ -4044,6 +4071,8 @@ instance Zero PoolCreateInfo where zero zero zero + zero + zero -- | VmaPoolStats diff --git a/changelog.md b/changelog.md index 8ffbe128e..e86f6a7ed 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,9 @@ ## WIP +## [3.11] - 2021-06-21 +- Bump API version to v1.2.182 + ## [3.10.4] - 2021-06-14 - Bump API version to v1.2.181 diff --git a/generate-new/Vulkan-Docs b/generate-new/Vulkan-Docs index ee9ed265a..1b32e9d5b 160000 --- a/generate-new/Vulkan-Docs +++ b/generate-new/Vulkan-Docs @@ -1 +1 @@ -Subproject commit ee9ed265a687fc31837081c6594530c6979235a4 +Subproject commit 1b32e9d5beeee44d81520cbf35193047e60dbf6b diff --git a/openxr/package.yaml b/openxr/package.yaml index 0665d4412..d460402e6 100644 --- a/openxr/package.yaml +++ b/openxr/package.yaml @@ -32,7 +32,7 @@ library: cpp-options: -DTRACE_CALLS - condition: flag(use-vulkan-types) cpp-options: -DUSE_VULKAN_TYPES - dependencies: vulkan >= 3.0 && < 3.11 + dependencies: vulkan >= 3.0 && < 3.12 ghc-options: - -Wall - -Wno-unticked-promoted-constructors diff --git a/package.yaml b/package.yaml index 61b427682..138692ff1 100644 --- a/package.yaml +++ b/package.yaml @@ -1,5 +1,5 @@ name: vulkan -version: "3.10.4" +version: "3.11" synopsis: Bindings to the Vulkan graphics API. category: Graphics maintainer: Joe Hermaszewski diff --git a/src/Vulkan/CStruct/Extends.hs b/src/Vulkan/CStruct/Extends.hs index e3cdbbb3f..a754d7e3c 100644 --- a/src/Vulkan/CStruct/Extends.hs +++ b/src/Vulkan/CStruct/Extends.hs @@ -59,10 +59,15 @@ import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_acceleration_structure (Accelerat import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_acceleration_structure (AccelerationStructureGeometryAabbsDataKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_acceleration_structure (AccelerationStructureGeometryInstancesDataKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_acceleration_structure (AccelerationStructureGeometryKHR) +import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (AccelerationStructureGeometryMotionTrianglesDataNV) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_acceleration_structure (AccelerationStructureGeometryTrianglesDataKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (AccelerationStructureInfoNV) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_acceleration_structure (AccelerationStructureInstanceKHR) +import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (AccelerationStructureMatrixMotionInstanceNV) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (AccelerationStructureMemoryRequirementsInfoNV) +import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (AccelerationStructureMotionInfoNV) +import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (AccelerationStructureMotionInstanceNV) +import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (AccelerationStructureSRTMotionInstanceNV) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_acceleration_structure (AccelerationStructureVersionInfoKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_swapchain (AcquireNextImageInfoKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (AcquireProfilingLockInfoKHR) @@ -321,6 +326,8 @@ import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (MemoryType) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_win32 (MemoryWin32HandlePropertiesKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_FUCHSIA_external_memory (MemoryZirconHandlePropertiesFUCHSIA) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_metal_surface (MetalSurfaceCreateInfoEXT) +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_VALVE_mutable_descriptor_type (MutableDescriptorTypeCreateInfoVALVE) import {-# SOURCE #-} Vulkan.Extensions.VK_VALVE_mutable_descriptor_type (MutableDescriptorTypeListVALVE) @@ -367,6 +374,7 @@ import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_device_memory_report (PhysicalDev import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostics_config (PhysicalDeviceDiagnosticsConfigFeaturesNV) 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_NV_scissor_exclusive (PhysicalDeviceExclusiveScissorFeaturesNV) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_extended_dynamic_state2 (PhysicalDeviceExtendedDynamicState2FeaturesEXT) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_extended_dynamic_state (PhysicalDeviceExtendedDynamicStateFeaturesEXT) @@ -412,6 +420,8 @@ import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (PhysicalDeviceMemoryPr import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceMemoryProperties2) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderFeaturesNV) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderPropertiesNV) +import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_multi_draw (PhysicalDeviceMultiDrawFeaturesEXT) +import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_multi_draw (PhysicalDeviceMultiDrawPropertiesEXT) import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewFeatures) import {-# SOURCE #-} Vulkan.Extensions.VK_NVX_multiview_per_view_attributes (PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX) import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewProperties) @@ -433,6 +443,7 @@ import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_provoking_vertex (PhysicalDeviceP import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_provoking_vertex (PhysicalDeviceProvokingVertexPropertiesEXT) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_push_descriptor (PhysicalDevicePushDescriptorPropertiesKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_query (PhysicalDeviceRayQueryFeaturesKHR) +import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (PhysicalDeviceRayTracingMotionBlurFeaturesNV) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing_pipeline (PhysicalDeviceRayTracingPipelineFeaturesKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing_pipeline (PhysicalDeviceRayTracingPipelinePropertiesKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (PhysicalDeviceRayTracingPropertiesNV) @@ -572,6 +583,7 @@ import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_multiview (RenderPassMu 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_copy_commands2 (ResolveImageInfo2KHR) +import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (SRTDataNV) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (SampleLocationEXT) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (SampleLocationsInfoEXT) import {-# SOURCE #-} Vulkan.Core10.Sampler (SamplerCreateInfo) @@ -771,6 +783,8 @@ instance Zero BaseInStructure where type family Extends (a :: [Type] -> Type) (b :: Type) :: Constraint where + Extends AccelerationStructureCreateInfoKHR AccelerationStructureMotionInfoNV = () + Extends AccelerationStructureGeometryTrianglesDataKHR AccelerationStructureGeometryMotionTrianglesDataNV = () Extends AndroidHardwareBufferPropertiesANDROID AndroidHardwareBufferFormatPropertiesANDROID = () Extends AttachmentDescription2 AttachmentDescriptionStencilLayout = () Extends AttachmentReference2 AttachmentReferenceStencilLayout = () @@ -809,6 +823,7 @@ type family Extends (a :: [Type] -> Type) (b :: Type) :: Constraint where Extends DeviceCreateInfo PhysicalDeviceSamplerYcbcrConversionFeatures = () Extends DeviceCreateInfo PhysicalDeviceProtectedMemoryFeatures = () Extends DeviceCreateInfo PhysicalDeviceBlendOperationAdvancedFeaturesEXT = () + Extends DeviceCreateInfo PhysicalDeviceMultiDrawFeaturesEXT = () Extends DeviceCreateInfo PhysicalDeviceInlineUniformBlockFeaturesEXT = () Extends DeviceCreateInfo PhysicalDeviceShaderDrawParametersFeatures = () Extends DeviceCreateInfo PhysicalDeviceShaderFloat16Int8Features = () @@ -890,6 +905,7 @@ type family Extends (a :: [Type] -> Type) (b :: Type) :: Constraint where Extends DeviceCreateInfo PhysicalDeviceInheritedViewportScissorFeaturesNV = () Extends DeviceCreateInfo PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT = () Extends DeviceCreateInfo PhysicalDeviceProvokingVertexFeaturesEXT = () + Extends DeviceCreateInfo PhysicalDeviceRayTracingMotionBlurFeaturesNV = () Extends DeviceQueueCreateInfo DeviceQueueGlobalPriorityCreateInfoEXT = () Extends FenceCreateInfo ExportFenceCreateInfo = () Extends FenceCreateInfo ExportFenceWin32HandleInfoKHR = () @@ -953,6 +969,7 @@ type family Extends (a :: [Type] -> Type) (b :: Type) :: Constraint where Extends PhysicalDeviceFeatures2 PhysicalDeviceSamplerYcbcrConversionFeatures = () Extends PhysicalDeviceFeatures2 PhysicalDeviceProtectedMemoryFeatures = () Extends PhysicalDeviceFeatures2 PhysicalDeviceBlendOperationAdvancedFeaturesEXT = () + Extends PhysicalDeviceFeatures2 PhysicalDeviceMultiDrawFeaturesEXT = () Extends PhysicalDeviceFeatures2 PhysicalDeviceInlineUniformBlockFeaturesEXT = () Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderDrawParametersFeatures = () Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderFloat16Int8Features = () @@ -1039,6 +1056,7 @@ type family Extends (a :: [Type] -> Type) (b :: Type) :: Constraint where Extends PhysicalDeviceImageFormatInfo2 PhysicalDeviceImageViewImageFormatInfoEXT = () Extends PhysicalDeviceMemoryProperties2 PhysicalDeviceMemoryBudgetPropertiesEXT = () Extends PhysicalDeviceProperties2 PhysicalDeviceDeviceGeneratedCommandsPropertiesNV = () + Extends PhysicalDeviceProperties2 PhysicalDeviceMultiDrawPropertiesEXT = () Extends PhysicalDeviceProperties2 PhysicalDevicePushDescriptorPropertiesKHR = () Extends PhysicalDeviceProperties2 PhysicalDeviceDriverProperties = () Extends PhysicalDeviceProperties2 PhysicalDeviceIDProperties = () @@ -1085,6 +1103,8 @@ type family Extends (a :: [Type] -> Type) (b :: Type) :: Constraint where Extends PhysicalDeviceProperties2 PhysicalDeviceFragmentShadingRatePropertiesKHR = () Extends PhysicalDeviceProperties2 PhysicalDeviceFragmentShadingRateEnumsPropertiesNV = () Extends PhysicalDeviceProperties2 PhysicalDeviceProvokingVertexPropertiesEXT = () + Extends PhysicalDeviceProperties2 PhysicalDeviceDrmPropertiesEXT = () + Extends PhysicalDeviceProperties2 PhysicalDeviceRayTracingMotionBlurFeaturesNV = () Extends PhysicalDeviceSurfaceInfo2KHR SurfaceFullScreenExclusiveInfoEXT = () Extends PhysicalDeviceSurfaceInfo2KHR SurfaceFullScreenExclusiveWin32InfoEXT = () Extends PipelineColorBlendStateCreateInfo PipelineColorBlendAdvancedStateCreateInfoEXT = () @@ -1280,6 +1300,7 @@ peekChainHead ty p c = case ty of STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT -> go @DevicePrivateDataCreateInfoEXT STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT -> go @PhysicalDevicePrivateDataFeaturesEXT STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV -> go @PhysicalDeviceDeviceGeneratedCommandsPropertiesNV + STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT -> go @PhysicalDeviceMultiDrawPropertiesEXT STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV -> go @GraphicsPipelineShaderGroupsCreateInfoNV STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2 -> go @(PhysicalDeviceFeatures2 '[]) STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR -> go @PhysicalDevicePushDescriptorPropertiesKHR @@ -1353,6 +1374,7 @@ peekChainHead ty p c = case ty of STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT -> go @PhysicalDeviceSampleLocationsPropertiesEXT STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO -> go @SamplerReductionModeCreateInfo STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT -> go @PhysicalDeviceBlendOperationAdvancedFeaturesEXT + STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT -> go @PhysicalDeviceMultiDrawFeaturesEXT STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT -> go @PhysicalDeviceBlendOperationAdvancedPropertiesEXT STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT -> go @PipelineColorBlendAdvancedStateCreateInfoEXT STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT -> go @PhysicalDeviceInlineUniformBlockFeaturesEXT @@ -1546,6 +1568,10 @@ peekChainHead ty p c = case ty of STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT -> go @PhysicalDeviceProvokingVertexFeaturesEXT STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT -> go @PhysicalDeviceProvokingVertexPropertiesEXT STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT -> go @PipelineRasterizationProvokingVertexStateCreateInfoEXT + STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT -> go @PhysicalDeviceDrmPropertiesEXT + STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV -> go @PhysicalDeviceRayTracingMotionBlurFeaturesNV + STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV -> throwIO $ IOError Nothing InvalidArgument "peekChainHead" ("struct type STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV contains an undiscriminated union (DeviceOrHostAddressConstKHR) and can't be safely peeked") Nothing Nothing + STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV -> go @AccelerationStructureMotionInfoNV 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 @@ -1616,6 +1642,7 @@ infix 6 ::& {-# complete (::&) :: DevicePrivateDataCreateInfoEXT #-} {-# complete (::&) :: PhysicalDevicePrivateDataFeaturesEXT #-} {-# complete (::&) :: PhysicalDeviceDeviceGeneratedCommandsPropertiesNV #-} +{-# complete (::&) :: PhysicalDeviceMultiDrawPropertiesEXT #-} {-# complete (::&) :: GraphicsPipelineShaderGroupsCreateInfoNV #-} {-# complete (::&) :: PhysicalDeviceFeatures2 #-} {-# complete (::&) :: PhysicalDevicePushDescriptorPropertiesKHR #-} @@ -1689,6 +1716,7 @@ infix 6 ::& {-# complete (::&) :: PhysicalDeviceSampleLocationsPropertiesEXT #-} {-# complete (::&) :: SamplerReductionModeCreateInfo #-} {-# complete (::&) :: PhysicalDeviceBlendOperationAdvancedFeaturesEXT #-} +{-# complete (::&) :: PhysicalDeviceMultiDrawFeaturesEXT #-} {-# complete (::&) :: PhysicalDeviceBlendOperationAdvancedPropertiesEXT #-} {-# complete (::&) :: PipelineColorBlendAdvancedStateCreateInfoEXT #-} {-# complete (::&) :: PhysicalDeviceInlineUniformBlockFeaturesEXT #-} @@ -1882,6 +1910,10 @@ infix 6 ::& {-# complete (::&) :: PhysicalDeviceProvokingVertexFeaturesEXT #-} {-# complete (::&) :: PhysicalDeviceProvokingVertexPropertiesEXT #-} {-# complete (::&) :: PipelineRasterizationProvokingVertexStateCreateInfoEXT #-} +{-# complete (::&) :: PhysicalDeviceDrmPropertiesEXT #-} +{-# complete (::&) :: PhysicalDeviceRayTracingMotionBlurFeaturesNV #-} +{-# complete (::&) :: AccelerationStructureGeometryMotionTrianglesDataNV #-} +{-# complete (::&) :: AccelerationStructureMotionInfoNV #-} -- | View the head and tail of a 'Chain', see '::&' -- diff --git a/src/Vulkan/Core10/CommandBufferBuilding.hs b/src/Vulkan/Core10/CommandBufferBuilding.hs index bc5dcaa1b..b14d4b650 100644 --- a/src/Vulkan/Core10/CommandBufferBuilding.hs +++ b/src/Vulkan/Core10/CommandBufferBuilding.hs @@ -2894,11 +2894,11 @@ foreign import ccall -- within the corresponding vertex buffer binding, as described in -- -- --- - #VUID-vkCmdDrawIndexed-indexSize-00463# (@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' +-- - #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) -- @@ -9535,13 +9535,13 @@ foreign import ccall -- at any specific stage of the pipeline, it /may/ instead do so at any -- logically later stage. -- --- Timestamps /may/ only be meaningfully compared if they are written by --- commands submitted to the same queue. +-- 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 determining the execution time of a --- sequence of commands. +-- 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 diff --git a/src/Vulkan/Core10/Device.hs b/src/Vulkan/Core10/Device.hs index 33637b66b..e4cb2484d 100644 --- a/src/Vulkan/Core10/Device.hs +++ b/src/Vulkan/Core10/Device.hs @@ -129,6 +129,7 @@ import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_inline_uniform_block (PhysicalDev import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_line_rasterization (PhysicalDeviceLineRasterizationFeaturesEXT) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_memory_priority (PhysicalDeviceMemoryPriorityFeaturesEXT) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderFeaturesNV) +import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_multi_draw (PhysicalDeviceMultiDrawFeaturesEXT) import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewFeatures) import {-# SOURCE #-} Vulkan.Extensions.VK_VALVE_mutable_descriptor_type (PhysicalDeviceMutableDescriptorTypeFeaturesVALVE) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (PhysicalDevicePerformanceQueryFeaturesKHR) @@ -139,6 +140,7 @@ import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_private_data (PhysicalDevicePriva import {-# SOURCE #-} Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (PhysicalDeviceProtectedMemoryFeatures) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_provoking_vertex (PhysicalDeviceProvokingVertexFeaturesEXT) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_query (PhysicalDeviceRayQueryFeaturesKHR) +import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (PhysicalDeviceRayTracingMotionBlurFeaturesNV) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing_pipeline (PhysicalDeviceRayTracingPipelineFeaturesKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_representative_fragment_test (PhysicalDeviceRepresentativeFragmentTestFeaturesNV) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_robustness2 (PhysicalDeviceRobustness2FeaturesEXT) @@ -752,6 +754,7 @@ instance es ~ '[] => Zero (DeviceQueueCreateInfo es) where -- 'Vulkan.Extensions.VK_EXT_line_rasterization.PhysicalDeviceLineRasterizationFeaturesEXT', -- 'Vulkan.Extensions.VK_EXT_memory_priority.PhysicalDeviceMemoryPriorityFeaturesEXT', -- 'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderFeaturesNV', +-- 'Vulkan.Extensions.VK_EXT_multi_draw.PhysicalDeviceMultiDrawFeaturesEXT', -- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewFeatures', -- 'Vulkan.Extensions.VK_VALVE_mutable_descriptor_type.PhysicalDeviceMutableDescriptorTypeFeaturesVALVE', -- 'Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryFeaturesKHR', @@ -762,6 +765,7 @@ instance es ~ '[] => Zero (DeviceQueueCreateInfo es) where -- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryFeatures', -- 'Vulkan.Extensions.VK_EXT_provoking_vertex.PhysicalDeviceProvokingVertexFeaturesEXT', -- 'Vulkan.Extensions.VK_KHR_ray_query.PhysicalDeviceRayQueryFeaturesKHR', +-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.PhysicalDeviceRayTracingMotionBlurFeaturesNV', -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelineFeaturesKHR', -- 'Vulkan.Extensions.VK_NV_representative_fragment_test.PhysicalDeviceRepresentativeFragmentTestFeaturesNV', -- 'Vulkan.Extensions.VK_EXT_robustness2.PhysicalDeviceRobustness2FeaturesEXT', @@ -783,6 +787,7 @@ instance es ~ '[] => Zero (DeviceQueueCreateInfo es) where -- 'Vulkan.Extensions.VK_KHR_shader_terminate_invocation.PhysicalDeviceShaderTerminateInvocationFeaturesKHR', -- 'Vulkan.Extensions.VK_NV_shading_rate_image.PhysicalDeviceShadingRateImageFeaturesNV', -- 'Vulkan.Extensions.VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlFeaturesEXT', +-- , -- 'Vulkan.Extensions.VK_KHR_synchronization2.PhysicalDeviceSynchronization2FeaturesKHR', -- 'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentFeaturesEXT', -- 'Vulkan.Extensions.VK_EXT_texture_compression_astc_hdr.PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT', @@ -879,6 +884,7 @@ instance Extensible DeviceCreateInfo where getNext DeviceCreateInfo{..} = next extends :: forall e b proxy. Typeable e => proxy e -> (Extends DeviceCreateInfo e => b) -> Maybe b extends _ f + | Just Refl <- eqT @e @PhysicalDeviceRayTracingMotionBlurFeaturesNV = Just f | Just Refl <- eqT @e @PhysicalDeviceProvokingVertexFeaturesEXT = Just f | Just Refl <- eqT @e @PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT = Just f | Just Refl <- eqT @e @PhysicalDeviceInheritedViewportScissorFeaturesNV = Just f @@ -960,6 +966,7 @@ instance Extensible DeviceCreateInfo where | Just Refl <- eqT @e @PhysicalDeviceShaderFloat16Int8Features = Just f | Just Refl <- eqT @e @PhysicalDeviceShaderDrawParametersFeatures = Just f | Just Refl <- eqT @e @PhysicalDeviceInlineUniformBlockFeaturesEXT = Just f + | Just Refl <- eqT @e @PhysicalDeviceMultiDrawFeaturesEXT = Just f | Just Refl <- eqT @e @PhysicalDeviceBlendOperationAdvancedFeaturesEXT = Just f | Just Refl <- eqT @e @PhysicalDeviceProtectedMemoryFeatures = Just f | Just Refl <- eqT @e @PhysicalDeviceSamplerYcbcrConversionFeatures = Just f diff --git a/src/Vulkan/Core10/Enums/PipelineCreateFlagBits.hs b/src/Vulkan/Core10/Enums/PipelineCreateFlagBits.hs index 84ca2cfe2..e14266f75 100644 --- a/src/Vulkan/Core10/Enums/PipelineCreateFlagBits.hs +++ b/src/Vulkan/Core10/Enums/PipelineCreateFlagBits.hs @@ -4,6 +4,7 @@ module Vulkan.Core10.Enums.PipelineCreateFlagBits ( PipelineCreateFlags , PipelineCreateFlagBits( PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT , PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT , PIPELINE_CREATE_DERIVATIVE_BIT + , PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV , PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT , PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT , PIPELINE_CREATE_LIBRARY_BIT_KHR @@ -147,6 +148,9 @@ type PipelineCreateFlags = PipelineCreateFlagBits -- corresponding pipeline rather than continuing to create additional -- pipelines. -- +-- - 'PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV' specifies that the +-- pipeline is allowed to use OpTraceRaysMotionNV. +-- -- 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 @@ -165,6 +169,8 @@ pattern PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = PipelineCr pattern PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = PipelineCreateFlagBits 0x00000002 -- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_DERIVATIVE_BIT" pattern PIPELINE_CREATE_DERIVATIVE_BIT = PipelineCreateFlagBits 0x00000004 +-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV" +pattern PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV = PipelineCreateFlagBits 0x00100000 -- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT" pattern PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT = PipelineCreateFlagBits 0x00000200 -- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT" @@ -209,6 +215,7 @@ 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") diff --git a/src/Vulkan/Core10/Enums/StructureType.hs b/src/Vulkan/Core10/Enums/StructureType.hs index 2e7e3612d..781194b74 100644 --- a/src/Vulkan/Core10/Enums/StructureType.hs +++ b/src/Vulkan/Core10/Enums/StructureType.hs @@ -49,6 +49,8 @@ module Vulkan.Core10.Enums.StructureType (StructureType( STRUCTURE_TYPE_APPLICA , STRUCTURE_TYPE_MEMORY_BARRIER , STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO , STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO + , STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT + , STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT , STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT , STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT , STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT @@ -60,6 +62,7 @@ module Vulkan.Core10.Enums.StructureType (StructureType( STRUCTURE_TYPE_APPLICA , STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA , STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA , STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA + , STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT , STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT , STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT , STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT @@ -84,6 +87,9 @@ module Vulkan.Core10.Enums.StructureType (StructureType( STRUCTURE_TYPE_APPLICA , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT , STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT + , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV + , STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV + , STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV , STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV @@ -533,9 +539,11 @@ import GHC.Show (Show(showsPrec)) -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureGeometryAabbsDataKHR', -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureGeometryInstancesDataKHR', -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureGeometryKHR', +-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureGeometryMotionTrianglesDataNV', -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureGeometryTrianglesDataKHR', -- 'Vulkan.Extensions.VK_NV_ray_tracing.AccelerationStructureInfoNV', -- 'Vulkan.Extensions.VK_NV_ray_tracing.AccelerationStructureMemoryRequirementsInfoNV', +-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInfoNV', -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureVersionInfoKHR', -- 'Vulkan.Extensions.VK_KHR_swapchain.AcquireNextImageInfoKHR', -- 'Vulkan.Extensions.VK_KHR_performance_query.AcquireProfilingLockInfoKHR', @@ -786,6 +794,7 @@ import GHC.Show (Show(showsPrec)) -- 'Vulkan.Extensions.VK_NV_device_diagnostics_config.PhysicalDeviceDiagnosticsConfigFeaturesNV', -- '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_NV_scissor_exclusive.PhysicalDeviceExclusiveScissorFeaturesNV', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.PhysicalDeviceExtendedDynamicState2FeaturesEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.PhysicalDeviceExtendedDynamicStateFeaturesEXT', @@ -828,6 +837,8 @@ import GHC.Show (Show(showsPrec)) -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceMemoryProperties2', -- 'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderFeaturesNV', -- 'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderPropertiesNV', +-- 'Vulkan.Extensions.VK_EXT_multi_draw.PhysicalDeviceMultiDrawFeaturesEXT', +-- 'Vulkan.Extensions.VK_EXT_multi_draw.PhysicalDeviceMultiDrawPropertiesEXT', -- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewFeatures', -- 'Vulkan.Extensions.VK_NVX_multiview_per_view_attributes.PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX', -- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties', @@ -848,6 +859,7 @@ import GHC.Show (Show(showsPrec)) -- 'Vulkan.Extensions.VK_EXT_provoking_vertex.PhysicalDeviceProvokingVertexPropertiesEXT', -- 'Vulkan.Extensions.VK_KHR_push_descriptor.PhysicalDevicePushDescriptorPropertiesKHR', -- 'Vulkan.Extensions.VK_KHR_ray_query.PhysicalDeviceRayQueryFeaturesKHR', +-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.PhysicalDeviceRayTracingMotionBlurFeaturesNV', -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelineFeaturesKHR', -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelinePropertiesKHR', -- 'Vulkan.Extensions.VK_NV_ray_tracing.PhysicalDeviceRayTracingPropertiesNV', @@ -881,6 +893,8 @@ import GHC.Show (Show(showsPrec)) -- 'Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup.PhysicalDeviceSubgroupProperties', -- 'Vulkan.Extensions.VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlFeaturesEXT', -- 'Vulkan.Extensions.VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlPropertiesEXT', +-- , +-- , -- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR', -- 'Vulkan.Extensions.VK_KHR_synchronization2.PhysicalDeviceSynchronization2FeaturesKHR', -- 'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentFeaturesEXT', @@ -1007,6 +1021,7 @@ import GHC.Show (Show(showsPrec)) -- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassDescription2', -- 'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve', -- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassEndInfo', +-- , -- 'Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCapabilities2EXT', -- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.SurfaceCapabilities2KHR', -- 'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceCapabilitiesFullScreenExclusiveEXT', @@ -1178,6 +1193,10 @@ pattern STRUCTURE_TYPE_MEMORY_BARRIER = StructureType pattern STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = StructureType 47 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO" pattern STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = StructureType 48 +-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT" +pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT = StructureType 1000392001 +-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT" +pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT = StructureType 1000392000 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT" pattern STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT = StructureType 1000388001 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT" @@ -1200,6 +1219,8 @@ pattern STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA = StructureType pattern STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA = StructureType 1000364001 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA" pattern STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA = StructureType 1000364000 +-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT" +pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT = StructureType 1000353000 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT" pattern STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT = StructureType 1000352002 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT" @@ -1248,6 +1269,12 @@ pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT = S pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT = StructureType 1000332000 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT" pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT = StructureType 1000330000 +-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV" +pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV = StructureType 1000327002 +-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV" +pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV = StructureType 1000327001 +-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV" +pattern STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV = StructureType 1000327000 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV" pattern STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV = StructureType 1000326002 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV" @@ -2147,6 +2174,8 @@ pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES = StructureType STRUCTURE_TYPE_MEMORY_BARRIER, STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO, STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO, + STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT, + STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT, STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT, STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT, STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT, @@ -2158,6 +2187,7 @@ pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES = StructureType STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA, STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA, STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA, + STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT, STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT, STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT, STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT, @@ -2182,6 +2212,9 @@ pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES = StructureType STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT, STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT, STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT, + STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV, + STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV, + STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV, STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV, STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV, STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV, @@ -2665,6 +2698,8 @@ showTableStructureType = , (STRUCTURE_TYPE_MEMORY_BARRIER , "MEMORY_BARRIER") , (STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO , "LOADER_INSTANCE_CREATE_INFO") , (STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO , "LOADER_DEVICE_CREATE_INFO") + , (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT, "PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT") + , (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT , "PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT") , (STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT, "QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT") , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT , "PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT" @@ -2680,6 +2715,7 @@ showTableStructureType = , (STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA , "MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA") , (STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA , "MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA") , (STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA , "IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA") + , (STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT , "PHYSICAL_DEVICE_DRM_PROPERTIES_EXT") , (STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT , "VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT") , (STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT , "VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT") , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT @@ -2716,6 +2752,13 @@ showTableStructureType = , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT , "PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT" ) + , (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV, "ACCELERATION_STRUCTURE_MOTION_INFO_NV") + , ( STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV + , "PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV" + ) + , ( STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV + , "ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV" + ) , ( STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV , "PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV" ) diff --git a/src/Vulkan/Core10/FundamentalTypes.hs b/src/Vulkan/Core10/FundamentalTypes.hs index bfd56fbdd..02784bf5a 100644 --- a/src/Vulkan/Core10/FundamentalTypes.hs +++ b/src/Vulkan/Core10/FundamentalTypes.hs @@ -201,7 +201,8 @@ instance Zero Offset3D where -- , -- , -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.cmdSetFragmentShadingRateKHR', --- 'Vulkan.Core10.Pass.getRenderAreaGranularity' +-- 'Vulkan.Core10.Pass.getRenderAreaGranularity', +-- data Extent2D = Extent2D { -- | @width@ is the width of the extent. width :: Word32 @@ -431,6 +432,7 @@ instance Zero Rect2D where -- '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_EXT_physical_device_drm.PhysicalDeviceDrmPropertiesEXT', -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.PhysicalDeviceExclusiveScissorFeaturesNV', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.PhysicalDeviceExtendedDynamicState2FeaturesEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.PhysicalDeviceExtendedDynamicStateFeaturesEXT', @@ -458,6 +460,7 @@ instance Zero Rect2D where -- 'Vulkan.Extensions.VK_EXT_line_rasterization.PhysicalDeviceLineRasterizationFeaturesEXT', -- 'Vulkan.Extensions.VK_EXT_memory_priority.PhysicalDeviceMemoryPriorityFeaturesEXT', -- 'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderFeaturesNV', +-- 'Vulkan.Extensions.VK_EXT_multi_draw.PhysicalDeviceMultiDrawFeaturesEXT', -- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewFeatures', -- 'Vulkan.Extensions.VK_NVX_multiview_per_view_attributes.PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX', -- 'Vulkan.Extensions.VK_VALVE_mutable_descriptor_type.PhysicalDeviceMutableDescriptorTypeFeaturesVALVE', @@ -472,6 +475,7 @@ instance Zero Rect2D where -- 'Vulkan.Extensions.VK_EXT_provoking_vertex.PhysicalDeviceProvokingVertexFeaturesEXT', -- 'Vulkan.Extensions.VK_EXT_provoking_vertex.PhysicalDeviceProvokingVertexPropertiesEXT', -- 'Vulkan.Extensions.VK_KHR_ray_query.PhysicalDeviceRayQueryFeaturesKHR', +-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.PhysicalDeviceRayTracingMotionBlurFeaturesNV', -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelineFeaturesKHR', -- 'Vulkan.Extensions.VK_NV_representative_fragment_test.PhysicalDeviceRepresentativeFragmentTestFeaturesNV', -- 'Vulkan.Extensions.VK_EXT_robustness2.PhysicalDeviceRobustness2FeaturesEXT', @@ -497,6 +501,7 @@ instance Zero Rect2D where -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceSparseProperties', -- 'Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup.PhysicalDeviceSubgroupProperties', -- 'Vulkan.Extensions.VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlFeaturesEXT', +-- , -- 'Vulkan.Extensions.VK_KHR_synchronization2.PhysicalDeviceSynchronization2FeaturesKHR', -- 'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentFeaturesEXT', -- 'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT', diff --git a/src/Vulkan/Core10/Handles.hs b/src/Vulkan/Core10/Handles.hs index eee9bf84e..173de8052 100644 --- a/src/Vulkan/Core10/Handles.hs +++ b/src/Vulkan/Core10/Handles.hs @@ -124,6 +124,7 @@ data PhysicalDevice_T -- -- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.DeviceGroupDeviceCreateInfo', -- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.PhysicalDeviceGroupProperties', +-- 'Vulkan.Extensions.VK_EXT_acquire_drm_display.acquireDrmDisplayEXT', -- 'Vulkan.Extensions.VK_NV_acquire_winrt_display.acquireWinrtDisplayNV', -- 'Vulkan.Extensions.VK_EXT_acquire_xlib_display.acquireXlibDisplayEXT', -- 'Vulkan.Core10.Device.createDevice', @@ -137,6 +138,7 @@ data PhysicalDevice_T -- 'Vulkan.Extensions.VK_KHR_get_display_properties2.getDisplayPlaneCapabilities2KHR', -- 'Vulkan.Extensions.VK_KHR_display.getDisplayPlaneCapabilitiesKHR', -- 'Vulkan.Extensions.VK_KHR_display.getDisplayPlaneSupportedDisplaysKHR', +-- 'Vulkan.Extensions.VK_EXT_acquire_drm_display.getDrmDisplayEXT', -- 'Vulkan.Extensions.VK_EXT_calibrated_timestamps.getPhysicalDeviceCalibrateableTimeDomainsEXT', -- 'Vulkan.Extensions.VK_NV_cooperative_matrix.getPhysicalDeviceCooperativeMatrixPropertiesNV', -- 'Vulkan.Extensions.VK_EXT_directfb_surface.getPhysicalDeviceDirectFBPresentationSupportEXT', @@ -550,6 +552,8 @@ data CommandBuffer_T -- 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectCountNV', -- 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectNV', -- 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksNV', +-- 'Vulkan.Extensions.VK_EXT_multi_draw.cmdDrawMultiEXT', +-- 'Vulkan.Extensions.VK_EXT_multi_draw.cmdDrawMultiIndexedEXT', -- , -- 'Vulkan.Extensions.VK_EXT_conditional_rendering.cmdEndConditionalRenderingEXT', -- 'Vulkan.Extensions.VK_EXT_debug_utils.cmdEndDebugUtilsLabelEXT', @@ -623,6 +627,7 @@ data CommandBuffer_T -- 'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV', -- 'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT', +-- , -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.cmdTraceRaysIndirectKHR', -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.cmdTraceRaysKHR', -- 'Vulkan.Extensions.VK_NV_ray_tracing.cmdTraceRaysNV', @@ -1134,11 +1139,13 @@ instance Show Framebuffer where -- 'Vulkan.Core10.Pass.FramebufferCreateInfo', -- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo', -- 'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo', +-- , -- 'Vulkan.Core10.Pass.createRenderPass', -- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.createRenderPass2', -- 'Vulkan.Extensions.VK_KHR_create_renderpass2.createRenderPass2KHR', -- 'Vulkan.Core10.Pass.destroyRenderPass', --- 'Vulkan.Core10.Pass.getRenderAreaGranularity' +-- 'Vulkan.Core10.Pass.getRenderAreaGranularity', +-- newtype RenderPass = RenderPass Word64 deriving newtype (Eq, Ord, Storable, Zero) deriving anyclass (IsHandle) diff --git a/src/Vulkan/Core10/Image.hs b/src/Vulkan/Core10/Image.hs index a366d1846..f554c63a2 100644 --- a/src/Vulkan/Core10/Image.hs +++ b/src/Vulkan/Core10/Image.hs @@ -540,15 +540,18 @@ getImageSubresourceLayout device image subresource = liftIO . evalContT $ do -- -- - If @tiling@ is -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR', then --- @imageCreateMaybeLinear@ is @true@. +-- @imageCreateMaybeLinear@ is +-- 'Vulkan.Core10.FundamentalTypes.TRUE'. -- -- - If @tiling@ is -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', then --- @imageCreateMaybeLinear@ is @false@. +-- @imageCreateMaybeLinear@ is +-- 'Vulkan.Core10.FundamentalTypes.FALSE'. -- -- - If @tiling@ is -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT', --- then @imageCreateMaybeLinear_@ is @true@ if and only if +-- then @imageCreateMaybeLinear@ is +-- 'Vulkan.Core10.FundamentalTypes.TRUE' if and only if -- @imageCreateDrmFormatModifiers@ contains -- @DRM_FORMAT_MOD_LINEAR@. -- @@ -843,7 +846,7 @@ getImageSubresourceLayout device image subresource = liftIO . evalContT $ do -- @mipLevels@ /must/ be equal to @1@, and @imageCreateMaybeLinear@ (as -- defined in -- ) --- /must/ be @false@, +-- /must/ be 'Vulkan.Core10.FundamentalTypes.FALSE', -- -- - #VUID-VkImageCreateInfo-samples-02558# If @samples@ is not -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT', @@ -1045,7 +1048,7 @@ getImageSubresourceLayout device image subresource = liftIO . evalContT $ do -- @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'. -- and @imageCreateMaybeLinear@ (as defined in -- ) --- /must/ be @false@ +-- /must/ be 'Vulkan.Core10.FundamentalTypes.FALSE' -- -- - #VUID-VkImageCreateInfo-flags-01572# If @flags@ contains -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT', diff --git a/src/Vulkan/Core10/Pipeline.hs b/src/Vulkan/Core10/Pipeline.hs index 091aeb8df..26c59179a 100644 --- a/src/Vulkan/Core10/Pipeline.hs +++ b/src/Vulkan/Core10/Pipeline.hs @@ -1338,6 +1338,10 @@ instance es ~ '[] => Zero (PipelineShaderStageCreateInfo es) where -- include -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR' -- +-- - #VUID-VkComputePipelineCreateInfo-flags-04945# @flags@ /must/ not +-- include +-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV' +-- -- - #VUID-VkComputePipelineCreateInfo-flags-02874# @flags@ /must/ not -- include -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV' @@ -1358,9 +1362,10 @@ instance es ~ '[] => Zero (PipelineShaderStageCreateInfo es) where -- - #VUID-VkComputePipelineCreateInfo-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_AMD_pipeline_compiler_control.PipelineCompilerControlCreateInfoAMD' +-- 'Vulkan.Extensions.VK_AMD_pipeline_compiler_control.PipelineCompilerControlCreateInfoAMD', +-- 'Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT', -- or --- 'Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT' +-- -- -- - #VUID-VkComputePipelineCreateInfo-sType-unique# The @sType@ value of -- each struct in the @pNext@ chain /must/ be unique @@ -1862,7 +1867,8 @@ data PipelineInputAssemblyStateCreateInfo = PipelineInputAssemblyStateCreateInfo , -- | @primitiveRestartEnable@ controls whether a special vertex index value -- is treated as restarting the assembly of primitives. This enable only -- applies to indexed draws - -- ('Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexed' and + -- ('Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexed', + -- 'Vulkan.Extensions.VK_EXT_multi_draw.cmdDrawMultiIndexedEXT', and -- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect'), and the -- special index value is either 0xFFFFFFFF when the @indexType@ parameter -- of 'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer' is equal to @@ -4112,6 +4118,10 @@ instance Zero PipelineDepthStencilStateCreateInfo where -- include -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR' -- +-- - #VUID-VkGraphicsPipelineCreateInfo-flags-04947# @flags@ /must/ not +-- include +-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV' +-- -- - #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03378# If the -- -- feature is not enabled, there /must/ be no element of the diff --git a/src/Vulkan/Core11/Promoted_From_VK_KHR_get_physical_device_properties2.hs b/src/Vulkan/Core11/Promoted_From_VK_KHR_get_physical_device_properties2.hs index 877ef0604..7fe34e72f 100644 --- a/src/Vulkan/Core11/Promoted_From_VK_KHR_get_physical_device_properties2.hs +++ b/src/Vulkan/Core11/Promoted_From_VK_KHR_get_physical_device_properties2.hs @@ -121,6 +121,7 @@ import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_device_memory_report (PhysicalDev import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostics_config (PhysicalDeviceDiagnosticsConfigFeaturesNV) 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_NV_scissor_exclusive (PhysicalDeviceExclusiveScissorFeaturesNV) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_extended_dynamic_state2 (PhysicalDeviceExtendedDynamicState2FeaturesEXT) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_extended_dynamic_state (PhysicalDeviceExtendedDynamicStateFeaturesEXT) @@ -157,6 +158,8 @@ import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_memory_priority (PhysicalDeviceMe import Vulkan.Core10.DeviceInitialization (PhysicalDeviceMemoryProperties) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderFeaturesNV) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderPropertiesNV) +import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_multi_draw (PhysicalDeviceMultiDrawFeaturesEXT) +import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_multi_draw (PhysicalDeviceMultiDrawPropertiesEXT) import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewFeatures) import {-# SOURCE #-} Vulkan.Extensions.VK_NVX_multiview_per_view_attributes (PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX) import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewProperties) @@ -177,6 +180,7 @@ import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_provoking_vertex (PhysicalDeviceP import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_provoking_vertex (PhysicalDeviceProvokingVertexPropertiesEXT) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_push_descriptor (PhysicalDevicePushDescriptorPropertiesKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_query (PhysicalDeviceRayQueryFeaturesKHR) +import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (PhysicalDeviceRayTracingMotionBlurFeaturesNV) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing_pipeline (PhysicalDeviceRayTracingPipelineFeaturesKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing_pipeline (PhysicalDeviceRayTracingPipelinePropertiesKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing (PhysicalDeviceRayTracingPropertiesNV) @@ -761,6 +765,7 @@ instance Extensible PhysicalDeviceFeatures2 where | Just Refl <- eqT @e @PhysicalDeviceShaderFloat16Int8Features = Just f | Just Refl <- eqT @e @PhysicalDeviceShaderDrawParametersFeatures = Just f | Just Refl <- eqT @e @PhysicalDeviceInlineUniformBlockFeaturesEXT = Just f + | Just Refl <- eqT @e @PhysicalDeviceMultiDrawFeaturesEXT = Just f | Just Refl <- eqT @e @PhysicalDeviceBlendOperationAdvancedFeaturesEXT = Just f | Just Refl <- eqT @e @PhysicalDeviceProtectedMemoryFeatures = Just f | Just Refl <- eqT @e @PhysicalDeviceSamplerYcbcrConversionFeatures = Just f @@ -829,6 +834,7 @@ instance es ~ '[] => Zero (PhysicalDeviceFeatures2 es) where -- 'Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsPropertiesNV', -- '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_EXT_external_memory_host.PhysicalDeviceExternalMemoryHostPropertiesEXT', -- 'Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls.PhysicalDeviceFloatControlsProperties', -- 'Vulkan.Extensions.VK_EXT_fragment_density_map2.PhysicalDeviceFragmentDensityMap2PropertiesEXT', @@ -840,6 +846,7 @@ instance es ~ '[] => Zero (PhysicalDeviceFeatures2 es) where -- 'Vulkan.Extensions.VK_EXT_line_rasterization.PhysicalDeviceLineRasterizationPropertiesEXT', -- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.PhysicalDeviceMaintenance3Properties', -- 'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderPropertiesNV', +-- 'Vulkan.Extensions.VK_EXT_multi_draw.PhysicalDeviceMultiDrawPropertiesEXT', -- 'Vulkan.Extensions.VK_NVX_multiview_per_view_attributes.PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX', -- 'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties', -- 'Vulkan.Extensions.VK_EXT_pci_bus_info.PhysicalDevicePCIBusInfoPropertiesEXT', @@ -849,6 +856,7 @@ instance es ~ '[] => Zero (PhysicalDeviceFeatures2 es) where -- 'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryProperties', -- 'Vulkan.Extensions.VK_EXT_provoking_vertex.PhysicalDeviceProvokingVertexPropertiesEXT', -- 'Vulkan.Extensions.VK_KHR_push_descriptor.PhysicalDevicePushDescriptorPropertiesKHR', +-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.PhysicalDeviceRayTracingMotionBlurFeaturesNV', -- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelinePropertiesKHR', -- 'Vulkan.Extensions.VK_NV_ray_tracing.PhysicalDeviceRayTracingPropertiesNV', -- 'Vulkan.Extensions.VK_EXT_robustness2.PhysicalDeviceRobustness2PropertiesEXT', @@ -860,6 +868,7 @@ instance es ~ '[] => Zero (PhysicalDeviceFeatures2 es) where -- 'Vulkan.Extensions.VK_NV_shading_rate_image.PhysicalDeviceShadingRateImagePropertiesNV', -- 'Vulkan.Core11.Originally_Based_On_VK_KHR_subgroup.PhysicalDeviceSubgroupProperties', -- 'Vulkan.Extensions.VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlPropertiesEXT', +-- , -- 'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT', -- 'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.PhysicalDeviceTimelineSemaphoreProperties', -- 'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackPropertiesEXT', @@ -898,6 +907,8 @@ instance Extensible PhysicalDeviceProperties2 where getNext PhysicalDeviceProperties2{..} = next extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceProperties2 e => b) -> Maybe b extends _ f + | Just Refl <- eqT @e @PhysicalDeviceRayTracingMotionBlurFeaturesNV = Just f + | Just Refl <- eqT @e @PhysicalDeviceDrmPropertiesEXT = Just f | Just Refl <- eqT @e @PhysicalDeviceProvokingVertexPropertiesEXT = Just f | Just Refl <- eqT @e @PhysicalDeviceFragmentShadingRateEnumsPropertiesNV = Just f | Just Refl <- eqT @e @PhysicalDeviceFragmentShadingRatePropertiesKHR = Just f @@ -944,6 +955,7 @@ instance Extensible PhysicalDeviceProperties2 where | Just Refl <- eqT @e @PhysicalDeviceIDProperties = Just f | Just Refl <- eqT @e @PhysicalDeviceDriverProperties = Just f | Just Refl <- eqT @e @PhysicalDevicePushDescriptorPropertiesKHR = Just f + | Just Refl <- eqT @e @PhysicalDeviceMultiDrawPropertiesEXT = Just f | Just Refl <- eqT @e @PhysicalDeviceDeviceGeneratedCommandsPropertiesNV = Just f | otherwise = Nothing diff --git a/src/Vulkan/Dynamic.hs b/src/Vulkan/Dynamic.hs index 44836bbbd..ac90624e9 100644 --- a/src/Vulkan/Dynamic.hs +++ b/src/Vulkan/Dynamic.hs @@ -234,6 +234,8 @@ import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_get_memory_requirements2 (MemoryR import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_external_memory_win32 (MemoryWin32HandlePropertiesKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_FUCHSIA_external_memory (MemoryZirconHandlePropertiesFUCHSIA) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_metal_surface (MetalSurfaceCreateInfoEXT) +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.Core10.Enums.ObjectType (ObjectType) import {-# SOURCE #-} Vulkan.Core10.FuncPointers (PFN_vkVoidFunction) @@ -454,6 +456,8 @@ data InstanceCmds = InstanceCmds , pVkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV :: FunPtr (Ptr PhysicalDevice_T -> ("pCombinationCount" ::: Ptr Word32) -> ("pCombinations" ::: Ptr FramebufferMixedSamplesCombinationNV) -> IO Result) , pVkGetPhysicalDeviceToolPropertiesEXT :: FunPtr (Ptr PhysicalDevice_T -> ("pToolCount" ::: Ptr Word32) -> ("pToolProperties" ::: Ptr PhysicalDeviceToolPropertiesEXT) -> IO Result) , pVkGetPhysicalDeviceFragmentShadingRatesKHR :: FunPtr (Ptr PhysicalDevice_T -> ("pFragmentShadingRateCount" ::: Ptr Word32) -> ("pFragmentShadingRates" ::: Ptr PhysicalDeviceFragmentShadingRateKHR) -> IO Result) + , pVkAcquireDrmDisplayEXT :: FunPtr (Ptr PhysicalDevice_T -> ("drmFd" ::: Int32) -> DisplayKHR -> IO Result) + , pVkGetDrmDisplayEXT :: FunPtr (Ptr PhysicalDevice_T -> ("drmFd" ::: Int32) -> ("connectorId" ::: Word32) -> Ptr DisplayKHR -> IO Result) } deriving instance Eq InstanceCmds @@ -470,7 +474,7 @@ instance Zero InstanceCmds where 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 nullFunPtr nullFunPtr -- | A version of 'getInstanceProcAddr' which can be called -- with a null pointer for the instance. @@ -574,6 +578,8 @@ initInstanceCmds handle = do vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV"#) vkGetPhysicalDeviceToolPropertiesEXT <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceToolPropertiesEXT"#) vkGetPhysicalDeviceFragmentShadingRatesKHR <- getInstanceProcAddr' handle (Ptr "vkGetPhysicalDeviceFragmentShadingRatesKHR"#) + vkAcquireDrmDisplayEXT <- getInstanceProcAddr' handle (Ptr "vkAcquireDrmDisplayEXT"#) + vkGetDrmDisplayEXT <- getInstanceProcAddr' handle (Ptr "vkGetDrmDisplayEXT"#) pure $ InstanceCmds handle (castFunPtr @_ @(Ptr Instance_T -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyInstance) (castFunPtr @_ @(Ptr Instance_T -> ("pPhysicalDeviceCount" ::: Ptr Word32) -> ("pPhysicalDevices" ::: Ptr (Ptr PhysicalDevice_T)) -> IO Result) vkEnumeratePhysicalDevices) @@ -660,6 +666,8 @@ initInstanceCmds handle = do (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pCombinationCount" ::: Ptr Word32) -> ("pCombinations" ::: Ptr FramebufferMixedSamplesCombinationNV) -> IO Result) vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV) (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pToolCount" ::: Ptr Word32) -> ("pToolProperties" ::: Ptr PhysicalDeviceToolPropertiesEXT) -> IO Result) vkGetPhysicalDeviceToolPropertiesEXT) (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("pFragmentShadingRateCount" ::: Ptr Word32) -> ("pFragmentShadingRates" ::: Ptr PhysicalDeviceFragmentShadingRateKHR) -> IO Result) vkGetPhysicalDeviceFragmentShadingRatesKHR) + (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("drmFd" ::: Int32) -> DisplayKHR -> IO Result) vkAcquireDrmDisplayEXT) + (castFunPtr @_ @(Ptr PhysicalDevice_T -> ("drmFd" ::: Int32) -> ("connectorId" ::: Word32) -> Ptr DisplayKHR -> IO Result) vkGetDrmDisplayEXT) data DeviceCmds = DeviceCmds { deviceCmdsHandle :: Ptr Device_T @@ -756,6 +764,8 @@ data DeviceCmds = DeviceCmds , pVkCmdBindVertexBuffers :: FunPtr (Ptr CommandBuffer_T -> ("firstBinding" ::: Word32) -> ("bindingCount" ::: Word32) -> ("pBuffers" ::: Ptr Buffer) -> ("pOffsets" ::: Ptr DeviceSize) -> IO ()) , pVkCmdDraw :: FunPtr (Ptr CommandBuffer_T -> ("vertexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstVertex" ::: Word32) -> ("firstInstance" ::: Word32) -> IO ()) , pVkCmdDrawIndexed :: FunPtr (Ptr CommandBuffer_T -> ("indexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstIndex" ::: Word32) -> ("vertexOffset" ::: Int32) -> ("firstInstance" ::: Word32) -> IO ()) + , pVkCmdDrawMultiEXT :: FunPtr (Ptr CommandBuffer_T -> ("drawCount" ::: Word32) -> ("pVertexInfo" ::: Ptr MultiDrawInfoEXT) -> ("instanceCount" ::: Word32) -> ("firstInstance" ::: Word32) -> ("stride" ::: Word32) -> IO ()) + , pVkCmdDrawMultiIndexedEXT :: FunPtr (Ptr CommandBuffer_T -> ("drawCount" ::: Word32) -> ("pIndexInfo" ::: Ptr MultiDrawIndexedInfoEXT) -> ("instanceCount" ::: Word32) -> ("firstInstance" ::: Word32) -> ("stride" ::: Word32) -> ("pVertexOffset" ::: Ptr Int32) -> IO ()) , pVkCmdDrawIndirect :: FunPtr (Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()) , pVkCmdDrawIndexedIndirect :: FunPtr (Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()) , pVkCmdDispatch :: FunPtr (Ptr CommandBuffer_T -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> IO ()) @@ -948,7 +958,7 @@ data DeviceCmds = DeviceCmds , pVkGetPipelineExecutableStatisticsKHR :: FunPtr (Ptr Device_T -> ("pExecutableInfo" ::: Ptr PipelineExecutableInfoKHR) -> ("pStatisticCount" ::: Ptr Word32) -> ("pStatistics" ::: Ptr PipelineExecutableStatisticKHR) -> IO Result) , pVkGetPipelineExecutableInternalRepresentationsKHR :: FunPtr (Ptr Device_T -> ("pExecutableInfo" ::: Ptr PipelineExecutableInfoKHR) -> ("pInternalRepresentationCount" ::: Ptr Word32) -> ("pInternalRepresentations" ::: Ptr PipelineExecutableInternalRepresentationKHR) -> IO Result) , pVkCmdSetLineStippleEXT :: FunPtr (Ptr CommandBuffer_T -> ("lineStippleFactor" ::: Word32) -> ("lineStipplePattern" ::: Word16) -> IO ()) - , pVkCreateAccelerationStructureKHR :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr AccelerationStructureCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pAccelerationStructure" ::: Ptr AccelerationStructureKHR) -> IO Result) + , pVkCreateAccelerationStructureKHR :: FunPtr (Ptr Device_T -> ("pCreateInfo" ::: Ptr (SomeStruct AccelerationStructureCreateInfoKHR)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pAccelerationStructure" ::: Ptr AccelerationStructureKHR) -> IO Result) , pVkCmdBuildAccelerationStructuresKHR :: FunPtr (Ptr CommandBuffer_T -> ("infoCount" ::: Word32) -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR) -> ("ppBuildRangeInfos" ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR)) -> IO ()) , pVkCmdBuildAccelerationStructuresIndirectKHR :: FunPtr (Ptr CommandBuffer_T -> ("infoCount" ::: Word32) -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR) -> ("pIndirectDeviceAddresses" ::: Ptr DeviceAddress) -> ("pIndirectStrides" ::: Ptr Word32) -> ("ppMaxPrimitiveCounts" ::: Ptr (Ptr Word32)) -> IO ()) , pVkBuildAccelerationStructuresKHR :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> ("infoCount" ::: Word32) -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR) -> ("ppBuildRangeInfos" ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR)) -> IO Result) @@ -1051,7 +1061,7 @@ instance Zero DeviceCmds where 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) @@ -1165,6 +1175,8 @@ initDeviceCmds instanceCmds handle = do vkCmdBindVertexBuffers <- getDeviceProcAddr' handle (Ptr "vkCmdBindVertexBuffers"#) vkCmdDraw <- getDeviceProcAddr' handle (Ptr "vkCmdDraw"#) vkCmdDrawIndexed <- getDeviceProcAddr' handle (Ptr "vkCmdDrawIndexed"#) + vkCmdDrawMultiEXT <- getDeviceProcAddr' handle (Ptr "vkCmdDrawMultiEXT"#) + vkCmdDrawMultiIndexedEXT <- getDeviceProcAddr' handle (Ptr "vkCmdDrawMultiIndexedEXT"#) vkCmdDrawIndirect <- getDeviceProcAddr' handle (Ptr "vkCmdDrawIndirect"#) vkCmdDrawIndexedIndirect <- getDeviceProcAddr' handle (Ptr "vkCmdDrawIndexedIndirect"#) vkCmdDispatch <- getDeviceProcAddr' handle (Ptr "vkCmdDispatch"#) @@ -1506,6 +1518,8 @@ initDeviceCmds instanceCmds handle = do (castFunPtr @_ @(Ptr CommandBuffer_T -> ("firstBinding" ::: Word32) -> ("bindingCount" ::: Word32) -> ("pBuffers" ::: Ptr Buffer) -> ("pOffsets" ::: Ptr DeviceSize) -> IO ()) vkCmdBindVertexBuffers) (castFunPtr @_ @(Ptr CommandBuffer_T -> ("vertexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstVertex" ::: Word32) -> ("firstInstance" ::: Word32) -> IO ()) vkCmdDraw) (castFunPtr @_ @(Ptr CommandBuffer_T -> ("indexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstIndex" ::: Word32) -> ("vertexOffset" ::: Int32) -> ("firstInstance" ::: Word32) -> IO ()) vkCmdDrawIndexed) + (castFunPtr @_ @(Ptr CommandBuffer_T -> ("drawCount" ::: Word32) -> ("pVertexInfo" ::: Ptr MultiDrawInfoEXT) -> ("instanceCount" ::: Word32) -> ("firstInstance" ::: Word32) -> ("stride" ::: Word32) -> IO ()) vkCmdDrawMultiEXT) + (castFunPtr @_ @(Ptr CommandBuffer_T -> ("drawCount" ::: Word32) -> ("pIndexInfo" ::: Ptr MultiDrawIndexedInfoEXT) -> ("instanceCount" ::: Word32) -> ("firstInstance" ::: Word32) -> ("stride" ::: Word32) -> ("pVertexOffset" ::: Ptr Int32) -> IO ()) vkCmdDrawMultiIndexedEXT) (castFunPtr @_ @(Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()) vkCmdDrawIndirect) (castFunPtr @_ @(Ptr CommandBuffer_T -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()) vkCmdDrawIndexedIndirect) (castFunPtr @_ @(Ptr CommandBuffer_T -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> IO ()) vkCmdDispatch) @@ -1698,7 +1712,7 @@ initDeviceCmds instanceCmds handle = do (castFunPtr @_ @(Ptr Device_T -> ("pExecutableInfo" ::: Ptr PipelineExecutableInfoKHR) -> ("pStatisticCount" ::: Ptr Word32) -> ("pStatistics" ::: Ptr PipelineExecutableStatisticKHR) -> IO Result) vkGetPipelineExecutableStatisticsKHR) (castFunPtr @_ @(Ptr Device_T -> ("pExecutableInfo" ::: Ptr PipelineExecutableInfoKHR) -> ("pInternalRepresentationCount" ::: Ptr Word32) -> ("pInternalRepresentations" ::: Ptr PipelineExecutableInternalRepresentationKHR) -> IO Result) vkGetPipelineExecutableInternalRepresentationsKHR) (castFunPtr @_ @(Ptr CommandBuffer_T -> ("lineStippleFactor" ::: Word32) -> ("lineStipplePattern" ::: Word16) -> IO ()) vkCmdSetLineStippleEXT) - (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr AccelerationStructureCreateInfoKHR) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pAccelerationStructure" ::: Ptr AccelerationStructureKHR) -> IO Result) vkCreateAccelerationStructureKHR) + (castFunPtr @_ @(Ptr Device_T -> ("pCreateInfo" ::: Ptr (SomeStruct AccelerationStructureCreateInfoKHR)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pAccelerationStructure" ::: Ptr AccelerationStructureKHR) -> IO Result) vkCreateAccelerationStructureKHR) (castFunPtr @_ @(Ptr CommandBuffer_T -> ("infoCount" ::: Word32) -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR) -> ("ppBuildRangeInfos" ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR)) -> IO ()) vkCmdBuildAccelerationStructuresKHR) (castFunPtr @_ @(Ptr CommandBuffer_T -> ("infoCount" ::: Word32) -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR) -> ("pIndirectDeviceAddresses" ::: Ptr DeviceAddress) -> ("pIndirectStrides" ::: Ptr Word32) -> ("ppMaxPrimitiveCounts" ::: Ptr (Ptr Word32)) -> IO ()) vkCmdBuildAccelerationStructuresIndirectKHR) (castFunPtr @_ @(Ptr Device_T -> DeferredOperationKHR -> ("infoCount" ::: Word32) -> ("pInfos" ::: Ptr AccelerationStructureBuildGeometryInfoKHR) -> ("ppBuildRangeInfos" ::: Ptr (Ptr AccelerationStructureBuildRangeInfoKHR)) -> IO Result) vkBuildAccelerationStructuresKHR) diff --git a/src/Vulkan/Extensions.hs b/src/Vulkan/Extensions.hs index e8e315449..f9e7d791b 100644 --- a/src/Vulkan/Extensions.hs +++ b/src/Vulkan/Extensions.hs @@ -25,6 +25,7 @@ module Vulkan.Extensions ( module Vulkan.Extensions.Dependencies , module Vulkan.Extensions.VK_AMD_texture_gather_bias_lod , module Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer , module Vulkan.Extensions.VK_EXT_4444_formats + , module Vulkan.Extensions.VK_EXT_acquire_drm_display , module Vulkan.Extensions.VK_EXT_acquire_xlib_display , module Vulkan.Extensions.VK_EXT_astc_decode_mode , module Vulkan.Extensions.VK_EXT_blend_operation_advanced @@ -68,7 +69,9 @@ module Vulkan.Extensions ( module Vulkan.Extensions.Dependencies , module Vulkan.Extensions.VK_EXT_memory_budget , module Vulkan.Extensions.VK_EXT_memory_priority , module Vulkan.Extensions.VK_EXT_metal_surface + , module Vulkan.Extensions.VK_EXT_multi_draw , module Vulkan.Extensions.VK_EXT_pci_bus_info + , module Vulkan.Extensions.VK_EXT_physical_device_drm , module Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control , module Vulkan.Extensions.VK_EXT_pipeline_creation_feedback , module Vulkan.Extensions.VK_EXT_post_depth_coverage @@ -224,6 +227,7 @@ module Vulkan.Extensions ( module Vulkan.Extensions.Dependencies , module Vulkan.Extensions.VK_NV_inherited_viewport_scissor , module Vulkan.Extensions.VK_NV_mesh_shader , module Vulkan.Extensions.VK_NV_ray_tracing + , module Vulkan.Extensions.VK_NV_ray_tracing_motion_blur , module Vulkan.Extensions.VK_NV_representative_fragment_test , module Vulkan.Extensions.VK_NV_sample_mask_override_coverage , module Vulkan.Extensions.VK_NV_scissor_exclusive @@ -266,6 +270,7 @@ import Vulkan.Extensions.VK_AMD_shader_trinary_minmax import Vulkan.Extensions.VK_AMD_texture_gather_bias_lod import Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer import Vulkan.Extensions.VK_EXT_4444_formats +import Vulkan.Extensions.VK_EXT_acquire_drm_display import Vulkan.Extensions.VK_EXT_acquire_xlib_display import Vulkan.Extensions.VK_EXT_astc_decode_mode import Vulkan.Extensions.VK_EXT_blend_operation_advanced @@ -309,7 +314,9 @@ import Vulkan.Extensions.VK_EXT_line_rasterization import Vulkan.Extensions.VK_EXT_memory_budget import Vulkan.Extensions.VK_EXT_memory_priority import Vulkan.Extensions.VK_EXT_metal_surface +import Vulkan.Extensions.VK_EXT_multi_draw import Vulkan.Extensions.VK_EXT_pci_bus_info +import Vulkan.Extensions.VK_EXT_physical_device_drm import Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control import Vulkan.Extensions.VK_EXT_pipeline_creation_feedback import Vulkan.Extensions.VK_EXT_post_depth_coverage @@ -465,6 +472,7 @@ import Vulkan.Extensions.VK_NV_glsl_shader import Vulkan.Extensions.VK_NV_inherited_viewport_scissor import Vulkan.Extensions.VK_NV_mesh_shader import Vulkan.Extensions.VK_NV_ray_tracing +import Vulkan.Extensions.VK_NV_ray_tracing_motion_blur import Vulkan.Extensions.VK_NV_representative_fragment_test import Vulkan.Extensions.VK_NV_sample_mask_override_coverage import Vulkan.Extensions.VK_NV_scissor_exclusive diff --git a/src/Vulkan/Extensions/Dependencies.hs b/src/Vulkan/Extensions/Dependencies.hs index 2c3d0514e..5a84b15c0 100644 --- a/src/Vulkan/Extensions/Dependencies.hs +++ b/src/Vulkan/Extensions/Dependencies.hs @@ -14,6 +14,7 @@ import Vulkan.Extensions.VK_AMD_texture_gather_bias_lod (pattern AMD_TEXTURE_GAT import Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer (pattern ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME) import Vulkan.Core10 (pattern API_VERSION_1_0) import Vulkan.Extensions.VK_EXT_4444_formats (pattern EXT_4444_FORMATS_EXTENSION_NAME) +import Vulkan.Extensions.VK_EXT_acquire_drm_display (pattern EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME) import Vulkan.Extensions.VK_EXT_acquire_xlib_display (pattern EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME) import Vulkan.Extensions.VK_EXT_astc_decode_mode (pattern EXT_ASTC_DECODE_MODE_EXTENSION_NAME) import Vulkan.Extensions.VK_EXT_buffer_device_address (pattern EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME) @@ -49,6 +50,7 @@ import Vulkan.Extensions.VK_EXT_memory_budget (pattern EXT_MEMORY_BUDGET_EXTENSI import Vulkan.Extensions.VK_EXT_memory_priority (pattern EXT_MEMORY_PRIORITY_EXTENSION_NAME) import Vulkan.Extensions.VK_EXT_metal_surface (pattern EXT_METAL_SURFACE_EXTENSION_NAME) import Vulkan.Extensions.VK_EXT_pci_bus_info (pattern EXT_PCI_BUS_INFO_EXTENSION_NAME) +import Vulkan.Extensions.VK_EXT_physical_device_drm (pattern EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME) import Vulkan.Extensions.VK_EXT_provoking_vertex (pattern EXT_PROVOKING_VERTEX_EXTENSION_NAME) import Vulkan.Extensions.VK_EXT_queue_family_foreign (pattern EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME) import Vulkan.Extensions.VK_EXT_sampler_filter_minmax (pattern EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME) @@ -168,6 +170,7 @@ import Vulkan.Extensions.VK_NV_fragment_shading_rate_enums (pattern NV_FRAGMENT_ import Vulkan.Extensions.VK_NV_framebuffer_mixed_samples (pattern NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME) import Vulkan.Extensions.VK_NV_mesh_shader (pattern NV_MESH_SHADER_EXTENSION_NAME) import Vulkan.Extensions.VK_NV_ray_tracing (pattern NV_RAY_TRACING_EXTENSION_NAME) +import Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (pattern NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME) import Vulkan.Extensions.VK_NV_scissor_exclusive (pattern NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME) import Vulkan.Extensions.VK_NV_shader_image_footprint (pattern NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME) import Vulkan.Extensions.VK_NV_shader_sm_builtins (pattern NV_SHADER_SM_BUILTINS_EXTENSION_NAME) @@ -466,9 +469,11 @@ extensionDependencies = \case EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME] QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME -> [KHR_SWAPCHAIN_EXTENSION_NAME, KHR_SURFACE_EXTENSION_NAME] EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME] - NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME] - KHR_SYNCHRONIZATION_2_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME] - KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME] + EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME -> + [EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME, KHR_DISPLAY_EXTENSION_NAME, KHR_SURFACE_EXTENSION_NAME] + NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME] + KHR_SYNCHRONIZATION_2_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME] + KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME] NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME -> [ KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME , KHR_CREATE_RENDERPASS_2_EXTENSION_NAME @@ -476,6 +481,17 @@ extensionDependencies = \case , KHR_MULTIVIEW_EXTENSION_NAME , KHR_MAINTENANCE2_EXTENSION_NAME ] + NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME -> + [ KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME + , KHR_SPIRV_1_4_EXTENSION_NAME + , KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME + , KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME + , KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME + , EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME + , KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME + , KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME + , KHR_MAINTENANCE3_EXTENSION_NAME + ] EXT_YCBCR_2PLANE_444_FORMATS_EXTENSION_NAME -> [ KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME , KHR_MAINTENANCE1_EXTENSION_NAME @@ -496,6 +512,7 @@ extensionDependencies = \case VALVE_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME -> [KHR_MAINTENANCE3_EXTENSION_NAME, KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME] EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME] + EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME -> [KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME] FUCHSIA_EXTERNAL_MEMORY_EXTENSION_NAME -> [ KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME , KHR_EXTERNAL_MEMORY_EXTENSION_NAME diff --git a/src/Vulkan/Extensions/Handles.hs b/src/Vulkan/Extensions/Handles.hs index c4ebc7f30..2893b7f58 100644 --- a/src/Vulkan/Extensions/Handles.hs +++ b/src/Vulkan/Extensions/Handles.hs @@ -262,6 +262,7 @@ instance Show CuFunctionNVX where -- -- 'Vulkan.Extensions.VK_KHR_display.DisplayPlanePropertiesKHR', -- 'Vulkan.Extensions.VK_KHR_display.DisplayPropertiesKHR', +-- 'Vulkan.Extensions.VK_EXT_acquire_drm_display.acquireDrmDisplayEXT', -- 'Vulkan.Extensions.VK_NV_acquire_winrt_display.acquireWinrtDisplayNV', -- 'Vulkan.Extensions.VK_EXT_acquire_xlib_display.acquireXlibDisplayEXT', -- 'Vulkan.Extensions.VK_KHR_display.createDisplayModeKHR', @@ -269,6 +270,7 @@ instance Show CuFunctionNVX where -- 'Vulkan.Extensions.VK_KHR_get_display_properties2.getDisplayModeProperties2KHR', -- 'Vulkan.Extensions.VK_KHR_display.getDisplayModePropertiesKHR', -- 'Vulkan.Extensions.VK_KHR_display.getDisplayPlaneSupportedDisplaysKHR', +-- 'Vulkan.Extensions.VK_EXT_acquire_drm_display.getDrmDisplayEXT', -- 'Vulkan.Extensions.VK_EXT_acquire_xlib_display.getRandROutputDisplayEXT', -- 'Vulkan.Extensions.VK_NV_acquire_winrt_display.getWinrtDisplayNV', -- 'Vulkan.Extensions.VK_EXT_display_control.registerDisplayEventEXT', diff --git a/src/Vulkan/Extensions/VK_EXT_acquire_drm_display.hs b/src/Vulkan/Extensions/VK_EXT_acquire_drm_display.hs new file mode 100644 index 000000000..02164c329 --- /dev/null +++ b/src/Vulkan/Extensions/VK_EXT_acquire_drm_display.hs @@ -0,0 +1,266 @@ +{-# language CPP #-} +-- | = Name +-- +-- VK_EXT_acquire_drm_display - instance extension +-- +-- == VK_EXT_acquire_drm_display +-- +-- [__Name String__] +-- @VK_EXT_acquire_drm_display@ +-- +-- [__Extension Type__] +-- Instance extension +-- +-- [__Registered Extension Number__] +-- 286 +-- +-- [__Revision__] +-- 1 +-- +-- [__Extension and Version Dependencies__] +-- +-- - Requires Vulkan 1.0 +-- +-- - Requires @VK_EXT_direct_mode_display@ +-- +-- [__Contact__] +-- +-- - Drew DeVault +-- +-- == Other Extension Metadata +-- +-- [__Last Modified Date__] +-- 2021-06-09 +-- +-- [__IP Status__] +-- No known IP claims. +-- +-- [__Contributors__] +-- +-- - Simon Zeni, Status Holdings, Ltd. +-- +-- == Description +-- +-- This extension allows an application to take exclusive control of a +-- display using the Direct Rendering Manager (DRM) interface. When +-- acquired, the display will be under full control of the application +-- until the display is either released or the connector is unplugged. +-- +-- == New Commands +-- +-- - 'acquireDrmDisplayEXT' +-- +-- - 'getDrmDisplayEXT' +-- +-- == New Enum Constants +-- +-- - 'EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME' +-- +-- - 'EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION' +-- +-- == Issues +-- +-- None. +-- +-- == Version History +-- +-- - Revision 1, 2021-05-11 (Simon Zeni) +-- +-- - Initial draft +-- +-- = See Also +-- +-- 'acquireDrmDisplayEXT', 'getDrmDisplayEXT' +-- +-- = Document Notes +-- +-- For more information, see the +-- +-- +-- This page is a generated document. Fixes and changes should be made to +-- the generator scripts, not directly. +module Vulkan.Extensions.VK_EXT_acquire_drm_display ( acquireDrmDisplayEXT + , getDrmDisplayEXT + , EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION + , pattern EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION + , EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME + , pattern EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME + , DisplayKHR(..) + ) where + +import Vulkan.Internal.Utils (traceAroundEvent) +import Control.Exception.Base (bracket) +import Control.Monad (unless) +import Control.Monad.IO.Class (liftIO) +import Foreign.Marshal.Alloc (callocBytes) +import Foreign.Marshal.Alloc (free) +import GHC.Base (when) +import GHC.IO (throwIO) +import GHC.Ptr (nullFunPtr) +import Control.Monad.Trans.Class (lift) +import Control.Monad.Trans.Cont (evalContT) +import Control.Monad.IO.Class (MonadIO) +import Data.String (IsString) +import Foreign.Storable (Storable(peek)) +import GHC.IO.Exception (IOErrorType(..)) +import GHC.IO.Exception (IOException(..)) +import Data.Int (Int32) +import Foreign.Ptr (FunPtr) +import Foreign.Ptr (Ptr) +import Data.Word (Word32) +import Control.Monad.Trans.Cont (ContT(..)) +import Vulkan.NamedType ((:::)) +import Vulkan.Extensions.Handles (DisplayKHR) +import Vulkan.Extensions.Handles (DisplayKHR(..)) +import Vulkan.Dynamic (InstanceCmds(pVkAcquireDrmDisplayEXT)) +import Vulkan.Dynamic (InstanceCmds(pVkGetDrmDisplayEXT)) +import Vulkan.Core10.Handles (PhysicalDevice) +import Vulkan.Core10.Handles (PhysicalDevice(..)) +import Vulkan.Core10.Handles (PhysicalDevice_T) +import Vulkan.Core10.Enums.Result (Result) +import Vulkan.Core10.Enums.Result (Result(..)) +import Vulkan.Exception (VulkanException(..)) +import Vulkan.Core10.Enums.Result (Result(SUCCESS)) +import Vulkan.Extensions.Handles (DisplayKHR(..)) +foreign import ccall +#if !defined(SAFE_FOREIGN_CALLS) + unsafe +#endif + "dynamic" mkVkAcquireDrmDisplayEXT + :: FunPtr (Ptr PhysicalDevice_T -> Int32 -> DisplayKHR -> IO Result) -> Ptr PhysicalDevice_T -> Int32 -> DisplayKHR -> IO Result + +-- | vkAcquireDrmDisplayEXT - Acquire access to a VkDisplayKHR using DRM +-- +-- = Description +-- +-- All permissions necessary to control the display are granted to the +-- Vulkan instance associated with the provided @physicalDevice@ until the +-- display is either released or the connector is unplugged. The provided +-- @drmFd@ must correspond to the one owned by the @physicalDevice@. If +-- not, the error code 'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN' must be +-- returned. The DRM FD must have DRM master permissions. If any error is +-- encountered during the acquisition of the display, the call must return +-- the error code 'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'. +-- +-- The provided DRM fd should not be closed before the display is released, +-- attempting to do it may result in undefined behaviour. +-- +-- == Return Codes +-- +-- [] +-- +-- - 'Vulkan.Core10.Enums.Result.SUCCESS' +-- +-- [] +-- +-- - 'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED' +-- +-- = See Also +-- +-- 'Vulkan.Extensions.Handles.DisplayKHR', +-- 'Vulkan.Core10.Handles.PhysicalDevice' +acquireDrmDisplayEXT :: forall io + . (MonadIO io) + => -- | @physicalDevice@ The physical device the display is on. + -- + -- #VUID-vkAcquireDrmDisplayEXT-physicalDevice-parameter# @physicalDevice@ + -- /must/ be a valid 'Vulkan.Core10.Handles.PhysicalDevice' handle + PhysicalDevice + -> -- | @drmFd@ DRM primary file descriptor. + ("drmFd" ::: Int32) + -> -- | @display@ The display the caller wishes Vulkan to control. + -- + -- #VUID-vkAcquireDrmDisplayEXT-display-parameter# @display@ /must/ be a + -- valid 'Vulkan.Extensions.Handles.DisplayKHR' handle + -- + -- #VUID-vkAcquireDrmDisplayEXT-display-parent# @display@ /must/ have been + -- created, allocated, or retrieved from @physicalDevice@ + DisplayKHR + -> io () +acquireDrmDisplayEXT physicalDevice drmFd display = liftIO $ do + let vkAcquireDrmDisplayEXTPtr = pVkAcquireDrmDisplayEXT (instanceCmds (physicalDevice :: PhysicalDevice)) + unless (vkAcquireDrmDisplayEXTPtr /= nullFunPtr) $ + throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkAcquireDrmDisplayEXT is null" Nothing Nothing + let vkAcquireDrmDisplayEXT' = mkVkAcquireDrmDisplayEXT vkAcquireDrmDisplayEXTPtr + r <- traceAroundEvent "vkAcquireDrmDisplayEXT" (vkAcquireDrmDisplayEXT' (physicalDeviceHandle (physicalDevice)) (drmFd) (display)) + when (r < SUCCESS) (throwIO (VulkanException r)) + + +foreign import ccall +#if !defined(SAFE_FOREIGN_CALLS) + unsafe +#endif + "dynamic" mkVkGetDrmDisplayEXT + :: FunPtr (Ptr PhysicalDevice_T -> Int32 -> Word32 -> Ptr DisplayKHR -> IO Result) -> Ptr PhysicalDevice_T -> Int32 -> Word32 -> Ptr DisplayKHR -> IO Result + +-- | vkGetDrmDisplayEXT - Query the VkDisplayKHR corresponding to a DRM +-- connector ID +-- +-- = Description +-- +-- If there is no 'Vulkan.Extensions.Handles.DisplayKHR' corresponding to +-- the @connectorId@ on the @physicalDevice@, the returning @display@ must +-- be set to 'Vulkan.Core10.APIConstants.NULL_HANDLE'. The provided @drmFd@ +-- must correspond to the one owned by the @physicalDevice@. If not, the +-- error code 'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN' must be returned. +-- Master permissions are not required, because the file descriptor is just +-- used for information gathering purposes. The given @connectorId@ must be +-- a resource owned by the provided @drmFd@. If not, the error code +-- 'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN' must be returned. If any +-- error is encountered during the identification of the display, the call +-- must return the error code +-- 'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'. +-- +-- == Return Codes +-- +-- [] +-- +-- - 'Vulkan.Core10.Enums.Result.SUCCESS' +-- +-- [] +-- +-- - 'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED' +-- +-- - 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY' +-- +-- = See Also +-- +-- 'Vulkan.Extensions.Handles.DisplayKHR', +-- 'Vulkan.Core10.Handles.PhysicalDevice' +getDrmDisplayEXT :: forall io + . (MonadIO io) + => -- | @physicalDevice@ The physical device to query the display from. + -- + -- #VUID-vkGetDrmDisplayEXT-physicalDevice-parameter# @physicalDevice@ + -- /must/ be a valid 'Vulkan.Core10.Handles.PhysicalDevice' handle + PhysicalDevice + -> -- | @drmFd@ DRM primary file descriptor. + ("drmFd" ::: Int32) + -> -- | @connectorId@ Identifier of the specified DRM connector. + ("connectorId" ::: Word32) + -> io (DisplayKHR) +getDrmDisplayEXT physicalDevice drmFd connectorId = liftIO . evalContT $ do + let vkGetDrmDisplayEXTPtr = pVkGetDrmDisplayEXT (instanceCmds (physicalDevice :: PhysicalDevice)) + lift $ unless (vkGetDrmDisplayEXTPtr /= nullFunPtr) $ + throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDrmDisplayEXT is null" Nothing Nothing + let vkGetDrmDisplayEXT' = mkVkGetDrmDisplayEXT vkGetDrmDisplayEXTPtr + pDisplay <- ContT $ bracket (callocBytes @DisplayKHR 8) free + r <- lift $ traceAroundEvent "vkGetDrmDisplayEXT" (vkGetDrmDisplayEXT' (physicalDeviceHandle (physicalDevice)) (drmFd) (connectorId) (pDisplay)) + lift $ when (r < SUCCESS) (throwIO (VulkanException r)) + display <- lift $ peek @DisplayKHR pDisplay + pure $ (display) + + +type EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION = 1 + +-- No documentation found for TopLevel "VK_EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION" +pattern EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION :: forall a . Integral a => a +pattern EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION = 1 + + +type EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME = "VK_EXT_acquire_drm_display" + +-- No documentation found for TopLevel "VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME" +pattern EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a +pattern EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME = "VK_EXT_acquire_drm_display" + diff --git a/src/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs b/src/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs index 150177700..2115a89b7 100644 --- a/src/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs +++ b/src/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs @@ -250,8 +250,8 @@ data PhysicalDeviceConservativeRasterizationPropertiesEXT = PhysicalDeviceConser -- means the implementation can use the smallest representable non-zero -- value in the screen space pixel fixed-point grid. extraPrimitiveOverestimationSizeGranularity :: Float - , -- | #limits-primitiveUnderestimation# @primitiveUnderestimation@ is true if - -- the implementation supports the + , -- | #limits-primitiveUnderestimation# @primitiveUnderestimation@ is + -- 'Vulkan.Core10.FundamentalTypes.TRUE' if the implementation supports the -- 'CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT' conservative -- rasterization mode in addition to -- 'CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT'. Otherwise the @@ -259,38 +259,41 @@ data PhysicalDeviceConservativeRasterizationPropertiesEXT = PhysicalDeviceConser -- 'CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT'. primitiveUnderestimation :: Bool , -- | #limits-conservativePointAndLineRasterization# - -- @conservativePointAndLineRasterization@ is true if the implementation - -- supports conservative rasterization of point and line primitives as well - -- as triangle primitives. Otherwise the implementation only supports - -- triangle primitives. + -- @conservativePointAndLineRasterization@ is + -- 'Vulkan.Core10.FundamentalTypes.TRUE' if the implementation supports + -- conservative rasterization of point and line primitives as well as + -- triangle primitives. Otherwise the implementation only supports triangle + -- primitives. conservativePointAndLineRasterization :: Bool , -- | #limits-degenerateTrianglesRasterized# @degenerateTrianglesRasterized@ -- is false if the implementation culls primitives generated from triangles -- that become zero area after they are quantized to the fixed-point - -- rasterization pixel grid. @degenerateTrianglesRasterized@ is true if - -- these primitives are not culled and the provoking vertex attributes and - -- depth value are used for the fragments. The primitive area calculation - -- is done on the primitive generated from the clipped triangle if - -- applicable. Zero area primitives are backfacing and the application - -- /can/ enable backface culling if desired. + -- rasterization pixel grid. @degenerateTrianglesRasterized@ is + -- 'Vulkan.Core10.FundamentalTypes.TRUE' if these primitives are not culled + -- and the provoking vertex attributes and depth value are used for the + -- fragments. The primitive area calculation is done on the primitive + -- generated from the clipped triangle if applicable. Zero area primitives + -- are backfacing and the application /can/ enable backface culling if + -- desired. degenerateTrianglesRasterized :: Bool , -- | #limits-degenerateLinesRasterized# @degenerateLinesRasterized@ is false -- if the implementation culls lines that become zero length after they are -- quantized to the fixed-point rasterization pixel grid. - -- @degenerateLinesRasterized@ is true if zero length lines are not culled - -- and the provoking vertex attributes and depth value are used for the - -- fragments. + -- @degenerateLinesRasterized@ is 'Vulkan.Core10.FundamentalTypes.TRUE' if + -- zero length lines are not culled and the provoking vertex attributes and + -- depth value are used for the fragments. degenerateLinesRasterized :: Bool , -- | #limits-fullyCoveredFragmentShaderInputVariable# - -- @fullyCoveredFragmentShaderInputVariable@ is true if the implementation - -- supports the SPIR-V builtin fragment shader input variable - -- @FullyCoveredEXT@ which specifies that conservative rasterization is - -- enabled and the fragment area is fully covered by the generating - -- primitive. + -- @fullyCoveredFragmentShaderInputVariable@ is + -- 'Vulkan.Core10.FundamentalTypes.TRUE' if the implementation supports the + -- SPIR-V builtin fragment shader input variable @FullyCoveredEXT@ which + -- specifies that conservative rasterization is enabled and the fragment + -- area is fully covered by the generating primitive. fullyCoveredFragmentShaderInputVariable :: Bool , -- | #limits-conservativeRasterizationPostDepthCoverage# - -- @conservativeRasterizationPostDepthCoverage@ is true if the - -- implementation supports conservative rasterization with the + -- @conservativeRasterizationPostDepthCoverage@ is + -- 'Vulkan.Core10.FundamentalTypes.TRUE' if the implementation supports + -- conservative rasterization with the -- -- execution mode enabled. When supported the -- 'Vulkan.Core10.FundamentalTypes.SampleMask' built-in input variable will diff --git a/src/Vulkan/Extensions/VK_EXT_multi_draw.hs b/src/Vulkan/Extensions/VK_EXT_multi_draw.hs new file mode 100644 index 000000000..d270a0a2f --- /dev/null +++ b/src/Vulkan/Extensions/VK_EXT_multi_draw.hs @@ -0,0 +1,1719 @@ +{-# language CPP #-} +-- | = Name +-- +-- VK_EXT_multi_draw - device extension +-- +-- == VK_EXT_multi_draw +-- +-- [__Name String__] +-- @VK_EXT_multi_draw@ +-- +-- [__Extension Type__] +-- Device extension +-- +-- [__Registered Extension Number__] +-- 393 +-- +-- [__Revision__] +-- 1 +-- +-- [__Extension and Version Dependencies__] +-- +-- - Requires Vulkan 1.0 +-- +-- [__Contact__] +-- +-- - Mike Blumenkrantz +-- +-- +-- == Other Extension Metadata +-- +-- [__Last Modified Date__] +-- 2021-05-19 +-- +-- [__IP Status__] +-- No known IP claims. +-- +-- [__Contributors__] +-- +-- - Mike Blumenkrantz, VALVE +-- +-- - Piers Daniell, NVIDIA +-- +-- - Jason Ekstrand, INTEL +-- +-- - Spencer Fricke, SAMSUNG +-- +-- - Ricardo Garcia, IGALIA +-- +-- - Jon Leech, KHRONOS +-- +-- - Stu Smith, AMD +-- +-- == Description +-- +-- Processing multiple draw commands in sequence incurs measurable overhead +-- within drivers due to repeated state checks and updates during dispatch. +-- This extension enables passing the entire sequence of draws directly to +-- the driver in order to avoid any such overhead, using an array of +-- 'MultiDrawInfoEXT' or 'MultiDrawIndexedInfoEXT' structs with +-- 'cmdDrawMultiEXT' or 'cmdDrawMultiIndexedEXT', respectively. These +-- functions could be used any time multiple draw commands are being +-- recorded without any state changes between them in order to maximize +-- performance. +-- +-- == New Commands +-- +-- - 'cmdDrawMultiEXT' +-- +-- - 'cmdDrawMultiIndexedEXT' +-- +-- == New Structures +-- +-- - 'MultiDrawIndexedInfoEXT' +-- +-- - 'MultiDrawInfoEXT' +-- +-- - Extending +-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2', +-- 'Vulkan.Core10.Device.DeviceCreateInfo': +-- +-- - 'PhysicalDeviceMultiDrawFeaturesEXT' +-- +-- - Extending +-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2': +-- +-- - 'PhysicalDeviceMultiDrawPropertiesEXT' +-- +-- == New Enum Constants +-- +-- - 'EXT_MULTI_DRAW_EXTENSION_NAME' +-- +-- - 'EXT_MULTI_DRAW_SPEC_VERSION' +-- +-- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType': +-- +-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT' +-- +-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT' +-- +-- == New or Modified Built-In Variables +-- +-- - (modified)@DrawIndex@ +-- +-- == Version History +-- +-- - Version 1, 2021-01-20 (Mike Blumenkrantz) +-- +-- - Initial version +-- +-- = See Also +-- +-- 'MultiDrawIndexedInfoEXT', 'MultiDrawInfoEXT', +-- 'PhysicalDeviceMultiDrawFeaturesEXT', +-- 'PhysicalDeviceMultiDrawPropertiesEXT', 'cmdDrawMultiEXT', +-- 'cmdDrawMultiIndexedEXT' +-- +-- = Document Notes +-- +-- For more information, see the +-- +-- +-- This page is a generated document. Fixes and changes should be made to +-- the generator scripts, not directly. +module Vulkan.Extensions.VK_EXT_multi_draw ( cmdDrawMultiEXT + , cmdDrawMultiIndexedEXT + , MultiDrawInfoEXT(..) + , MultiDrawIndexedInfoEXT(..) + , PhysicalDeviceMultiDrawPropertiesEXT(..) + , PhysicalDeviceMultiDrawFeaturesEXT(..) + , EXT_MULTI_DRAW_SPEC_VERSION + , pattern EXT_MULTI_DRAW_SPEC_VERSION + , EXT_MULTI_DRAW_EXTENSION_NAME + , pattern EXT_MULTI_DRAW_EXTENSION_NAME + ) where + +import Vulkan.Internal.Utils (traceAroundEvent) +import Control.Monad (unless) +import Control.Monad.IO.Class (liftIO) +import Foreign.Marshal.Alloc (allocaBytesAligned) +import Foreign.Marshal.Utils (with) +import GHC.IO (throwIO) +import GHC.Ptr (nullFunPtr) +import Foreign.Ptr (nullPtr) +import Foreign.Ptr (plusPtr) +import Control.Monad.Trans.Class (lift) +import Control.Monad.Trans.Cont (evalContT) +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 Control.Monad.IO.Class (MonadIO) +import Data.String (IsString) +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 Data.Int (Int32) +import Foreign.Ptr (FunPtr) +import Foreign.Ptr (Ptr) +import Data.Word (Word32) +import Data.Kind (Type) +import Control.Monad.Trans.Cont (ContT(..)) +import Data.Vector (Vector) +import Vulkan.Core10.FundamentalTypes (bool32ToBool) +import Vulkan.Core10.FundamentalTypes (boolToBool32) +import Vulkan.NamedType ((:::)) +import Vulkan.Core10.FundamentalTypes (Bool32) +import Vulkan.Core10.Handles (CommandBuffer) +import Vulkan.Core10.Handles (CommandBuffer(..)) +import Vulkan.Core10.Handles (CommandBuffer_T) +import Vulkan.Dynamic (DeviceCmds(pVkCmdDrawMultiEXT)) +import Vulkan.Dynamic (DeviceCmds(pVkCmdDrawMultiIndexedEXT)) +import Vulkan.Core10.Enums.StructureType (StructureType) +import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT)) +import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT)) +foreign import ccall +#if !defined(SAFE_FOREIGN_CALLS) + unsafe +#endif + "dynamic" mkVkCmdDrawMultiEXT + :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr MultiDrawInfoEXT -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr MultiDrawInfoEXT -> Word32 -> Word32 -> Word32 -> IO () + +-- | vkCmdDrawMultiEXT - Draw primitives +-- +-- = Description +-- +-- This command is equivalent to calling +-- 'Vulkan.Core10.CommandBufferBuilding.cmdDraw' @drawCount@ times. The +-- number of draw commands recorded is @drawCount@, with each command +-- reading, sequentially, a @firstVertex@ and a @vertexCount@ from +-- @pVertexInfo@. +-- +-- == Valid Usage +-- +-- - #VUID-vkCmdDrawMultiEXT-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 +-- +-- /must/ contain +-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' +-- +-- - #VUID-vkCmdDrawMultiEXT-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 +-- +-- /must/ contain +-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' +-- +-- - #VUID-vkCmdDrawMultiEXT-None-02691# If a +-- 'Vulkan.Core10.Handles.ImageView' is accessed using atomic +-- operations as a result of this command, then the image view’s +-- +-- /must/ contain +-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT' +-- +-- - #VUID-vkCmdDrawMultiEXT-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 +-- +-- /must/ contain +-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT' +-- +-- - #VUID-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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 +-- +-- +-- - #VUID-vkCmdDrawMultiEXT-None-02698# For each push constant that is +-- statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the +-- pipeline bind point used by this command, a push constant value +-- /must/ have been set for the same pipeline bind point, with a +-- 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push +-- constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to +-- create the current 'Vulkan.Core10.Handles.Pipeline', as described in +-- +-- +-- - #VUID-vkCmdDrawMultiEXT-None-02699# Descriptors in each bound +-- descriptor set, specified via +-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/ +-- be valid if they are statically used by the +-- 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point +-- used by this command +-- +-- - #VUID-vkCmdDrawMultiEXT-None-02700# A valid pipeline /must/ be bound +-- to the pipeline bind point used by this command +-- +-- - #VUID-vkCmdDrawMultiEXT-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 for @commandBuffer@, and done so +-- after any previously bound pipeline with the corresponding state not +-- specified as dynamic +-- +-- - #VUID-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-None-02705# If the +-- +-- 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-vkCmdDrawMultiEXT-None-02706# If the +-- +-- 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-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-SampledType-04470# If a +-- 'Vulkan.Core10.Handles.ImageView' with a +-- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width +-- is accessed as a result of this command, the @SampledType@ of the +-- @OpTypeImage@ operand of that instruction /must/ have a @Width@ of +-- 64. +-- +-- - #VUID-vkCmdDrawMultiEXT-SampledType-04471# If a +-- 'Vulkan.Core10.Handles.ImageView' with a +-- 'Vulkan.Core10.Enums.Format.Format' that has a channel width less +-- than 64-bit is accessed as a result of this command, the +-- @SampledType@ of the @OpTypeImage@ operand of that instruction +-- /must/ have a @Width@ of 32. +-- +-- - #VUID-vkCmdDrawMultiEXT-SampledType-04472# If a +-- 'Vulkan.Core10.Handles.BufferView' with a +-- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width +-- is accessed as a result of this command, the @SampledType@ of the +-- @OpTypeImage@ operand of that instruction /must/ have a @Width@ of +-- 64. +-- +-- - #VUID-vkCmdDrawMultiEXT-SampledType-04473# If a +-- 'Vulkan.Core10.Handles.BufferView' with a +-- 'Vulkan.Core10.Enums.Format.Format' that has a channel width less +-- than 64-bit is accessed as a result of this command, the +-- @SampledType@ of the @OpTypeImage@ operand of that instruction +-- /must/ have a @Width@ of 32. +-- +-- - #VUID-vkCmdDrawMultiEXT-sparseImageInt64Atomics-04474# If the +-- +-- 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-vkCmdDrawMultiEXT-sparseImageInt64Atomics-04475# If the +-- +-- 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-vkCmdDrawMultiEXT-renderPass-02684# The current render pass +-- /must/ be +-- +-- 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-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-None-02686# Every input attachment used by +-- the current subpass /must/ be bound to the pipeline via a descriptor +-- set +-- +-- - #VUID-vkCmdDrawMultiEXT-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 +-- +-- chapter +-- +-- - #VUID-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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-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 +-- '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-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 +-- '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-vkCmdDrawMultiEXT-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 +-- +-- as the pipeline +-- 'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@ +-- state +-- +-- - #VUID-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-primitiveFragmentShadingRateWithMultipleViewports-04552# +-- If the +-- +-- 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-vkCmdDrawMultiEXT-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 +-- +-- 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-vkCmdDrawMultiEXT-rasterizationSamples-04740# If rasterization +-- is not disabled in the bound graphics pipeline, and neither the @@ +-- nor the @@ extensions are enabled, then +-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@ +-- /must/ be the same as the current subpass color and\/or +-- depth\/stencil attachments +-- +-- - #VUID-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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-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 +-- point used by this command /must/ not be an unprotected resource +-- +-- - #VUID-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-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 +-- +-- capability, then @commandBuffer@ /must/ not be a protected command +-- buffer +-- +-- - #VUID-vkCmdDrawMultiEXT-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-vkCmdDrawMultiEXT-None-04008# If the +-- +-- 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-vkCmdDrawMultiEXT-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 +-- +-- +-- - #VUID-vkCmdDrawMultiEXT-None-04933# The +-- +-- feature /must/ be enabled +-- +-- - #VUID-vkCmdDrawMultiEXT-drawCount-04934# @drawCount@ /must/ be less +-- than 'PhysicalDeviceMultiDrawPropertiesEXT'::@maxMultiDrawCount@ +-- +-- - #VUID-vkCmdDrawMultiEXT-drawCount-04935# If @drawCount@ is greater +-- than zero, @pVertexInfo@ /must/ be a valid pointer to memory +-- containing one or more valid instances of 'MultiDrawInfoEXT' +-- structures +-- +-- - #VUID-vkCmdDrawMultiEXT-stride-04936# @stride@ must be a multiple of +-- 4 +-- +-- == Valid Usage (Implicit) +-- +-- - #VUID-vkCmdDrawMultiEXT-commandBuffer-parameter# @commandBuffer@ +-- /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle +-- +-- - #VUID-vkCmdDrawMultiEXT-commandBuffer-recording# @commandBuffer@ +-- /must/ be in the +-- +-- +-- - #VUID-vkCmdDrawMultiEXT-commandBuffer-cmdpool# The +-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was +-- allocated from /must/ support graphics operations +-- +-- - #VUID-vkCmdDrawMultiEXT-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 +-- +-- \' +-- +-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+ +-- | | | | +-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+ +-- | Primary | Inside | Graphics | +-- | Secondary | | | +-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+ +-- +-- = See Also +-- +-- 'Vulkan.Core10.Handles.CommandBuffer', 'MultiDrawInfoEXT' +cmdDrawMultiEXT :: forall io + . (MonadIO io) + => -- | @commandBuffer@ is the command buffer into which the command is + -- recorded. + CommandBuffer + -> -- | @pVertexInfo@ is a pointer to an array of 'MultiDrawInfoEXT' with vertex + -- info to be drawn. + ("vertexInfo" ::: Vector MultiDrawInfoEXT) + -> -- | @instanceCount@ is the number of instances to draw. + ("instanceCount" ::: Word32) + -> -- | @firstInstance@ is the instance ID of the first instance to draw. + ("firstInstance" ::: Word32) + -> -- | @stride@ is the byte stride between consecutive elements of + -- @pVertexInfo@. + ("stride" ::: Word32) + -> io () +cmdDrawMultiEXT commandBuffer vertexInfo instanceCount firstInstance stride = liftIO . evalContT $ do + let vkCmdDrawMultiEXTPtr = pVkCmdDrawMultiEXT (deviceCmds (commandBuffer :: CommandBuffer)) + lift $ unless (vkCmdDrawMultiEXTPtr /= nullFunPtr) $ + throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawMultiEXT is null" Nothing Nothing + let vkCmdDrawMultiEXT' = mkVkCmdDrawMultiEXT vkCmdDrawMultiEXTPtr + pPVertexInfo <- ContT $ allocaBytesAligned @MultiDrawInfoEXT ((Data.Vector.length (vertexInfo)) * 8) 4 + lift $ Data.Vector.imapM_ (\i e -> poke (pPVertexInfo `plusPtr` (8 * (i)) :: Ptr MultiDrawInfoEXT) (e)) (vertexInfo) + lift $ traceAroundEvent "vkCmdDrawMultiEXT" (vkCmdDrawMultiEXT' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (vertexInfo)) :: Word32)) (pPVertexInfo) (instanceCount) (firstInstance) (stride)) + pure $ () + + +foreign import ccall +#if !defined(SAFE_FOREIGN_CALLS) + unsafe +#endif + "dynamic" mkVkCmdDrawMultiIndexedEXT + :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr MultiDrawIndexedInfoEXT -> Word32 -> Word32 -> Word32 -> Ptr Int32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr MultiDrawIndexedInfoEXT -> Word32 -> Word32 -> Word32 -> Ptr Int32 -> IO () + +-- | vkCmdDrawMultiIndexedEXT - Draw primitives +-- +-- = Description +-- +-- This command is equivalent to calling +-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexed' @drawCount@ times. +-- The number of draw commands recorded is @drawCount@, with each command +-- reading, sequentially, a @firstIndex@ and an @indexCount@ from +-- @pIndexInfo@. If @pVertexOffset@ is @NULL@, a @vertexOffset@ is also +-- read from @pIndexInfo@, otherwise the value from dereferencing +-- @pVertexOffset@ is used. +-- +-- == Valid Usage +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-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 +-- +-- /must/ contain +-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-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 +-- +-- /must/ contain +-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-None-02691# If a +-- 'Vulkan.Core10.Handles.ImageView' is accessed using atomic +-- operations as a result of this command, then the image view’s +-- +-- /must/ contain +-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT' +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-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 +-- +-- /must/ contain +-- 'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT' +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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 +-- +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-None-02698# For each push constant +-- that is statically used by the 'Vulkan.Core10.Handles.Pipeline' +-- bound to the pipeline bind point used by this command, a push +-- constant value /must/ have been set for the same pipeline bind +-- point, with a 'Vulkan.Core10.Handles.PipelineLayout' that is +-- compatible for push constants, with the +-- 'Vulkan.Core10.Handles.PipelineLayout' used to create the current +-- 'Vulkan.Core10.Handles.Pipeline', as described in +-- +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-None-02699# Descriptors in each bound +-- descriptor set, specified via +-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/ +-- be valid if they are statically used by the +-- 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point +-- used by this command +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-None-02700# A valid pipeline /must/ +-- be bound to the pipeline bind point used by this command +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-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 for @commandBuffer@, and done so +-- after any previously bound pipeline with the corresponding state not +-- specified as dynamic +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-None-02705# If the +-- +-- 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-vkCmdDrawMultiIndexedEXT-None-02706# If the +-- +-- 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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-SampledType-04470# If a +-- 'Vulkan.Core10.Handles.ImageView' with a +-- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width +-- is accessed as a result of this command, the @SampledType@ of the +-- @OpTypeImage@ operand of that instruction /must/ have a @Width@ of +-- 64. +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-SampledType-04471# If a +-- 'Vulkan.Core10.Handles.ImageView' with a +-- 'Vulkan.Core10.Enums.Format.Format' that has a channel width less +-- than 64-bit is accessed as a result of this command, the +-- @SampledType@ of the @OpTypeImage@ operand of that instruction +-- /must/ have a @Width@ of 32. +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-SampledType-04472# If a +-- 'Vulkan.Core10.Handles.BufferView' with a +-- 'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width +-- is accessed as a result of this command, the @SampledType@ of the +-- @OpTypeImage@ operand of that instruction /must/ have a @Width@ of +-- 64. +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-SampledType-04473# If a +-- 'Vulkan.Core10.Handles.BufferView' with a +-- 'Vulkan.Core10.Enums.Format.Format' that has a channel width less +-- than 64-bit is accessed as a result of this command, the +-- @SampledType@ of the @OpTypeImage@ operand of that instruction +-- /must/ have a @Width@ of 32. +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-sparseImageInt64Atomics-04474# If the +-- +-- 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-vkCmdDrawMultiIndexedEXT-sparseImageInt64Atomics-04475# If the +-- +-- 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-vkCmdDrawMultiIndexedEXT-renderPass-02684# The current render +-- pass /must/ be +-- +-- 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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-None-02686# Every input attachment +-- used by the current subpass /must/ be bound to the pipeline via a +-- descriptor set +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-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 +-- +-- chapter +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-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 +-- '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-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 +-- '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-vkCmdDrawMultiIndexedEXT-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 +-- +-- as the pipeline +-- 'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@ +-- state +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-primitiveFragmentShadingRateWithMultipleViewports-04552# +-- If the +-- +-- 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-vkCmdDrawMultiIndexedEXT-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 +-- +-- 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-vkCmdDrawMultiIndexedEXT-rasterizationSamples-04740# If +-- rasterization is not disabled in the bound graphics pipeline, and +-- neither the @@ nor the @@ extensions are enabled, then +-- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@ +-- /must/ be the same as the current subpass color and\/or +-- depth\/stencil attachments +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-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 +-- +-- capability, then @commandBuffer@ /must/ not be a protected command +-- buffer +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-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-vkCmdDrawMultiIndexedEXT-None-04008# If the +-- +-- 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-vkCmdDrawMultiIndexedEXT-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 +-- +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-None-04937# The +-- +-- feature /must/ be enabled +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-firstIndex-04938# (@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 +-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer' +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-drawCount-04939# @drawCount@ /must/ +-- be less than +-- 'PhysicalDeviceMultiDrawPropertiesEXT'::@maxMultiDrawCount@ +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-drawCount-04940# If @drawCount@ is +-- greater than zero, @pIndexInfo@ /must/ be a valid pointer to memory +-- containing one or more valid instances of 'MultiDrawIndexedInfoEXT' +-- structures +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-stride-04941# @stride@ must be a +-- multiple of 4 +-- +-- == Valid Usage (Implicit) +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-parameter# +-- @commandBuffer@ /must/ be a valid +-- 'Vulkan.Core10.Handles.CommandBuffer' handle +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-pVertexOffset-parameter# If +-- @pVertexOffset@ is not @NULL@, @pVertexOffset@ /must/ be a valid +-- pointer to a valid @int32_t@ value +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-recording# +-- @commandBuffer@ /must/ be in the +-- +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-cmdpool# The +-- 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was +-- allocated from /must/ support graphics operations +-- +-- - #VUID-vkCmdDrawMultiIndexedEXT-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 +-- +-- \' +-- +-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+ +-- | | | | +-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+ +-- | Primary | Inside | Graphics | +-- | Secondary | | | +-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+ +-- +-- = See Also +-- +-- 'Vulkan.Core10.Handles.CommandBuffer', 'MultiDrawIndexedInfoEXT' +cmdDrawMultiIndexedEXT :: forall io + . (MonadIO io) + => -- | @commandBuffer@ is the command buffer into which the command is + -- recorded. + CommandBuffer + -> -- | @pIndexInfo@ is a pointer to an array of 'MultiDrawIndexedInfoEXT' with + -- index info to be drawn. + ("indexInfo" ::: Vector MultiDrawIndexedInfoEXT) + -> -- | @instanceCount@ is the number of instances to draw. + ("instanceCount" ::: Word32) + -> -- | @firstInstance@ is the instance ID of the first instance to draw. + ("firstInstance" ::: Word32) + -> -- | @stride@ is the byte stride between consecutive elements of + -- @pIndexInfo@. + ("stride" ::: Word32) + -> -- | @pVertexOffset@ is @NULL@ or a pointer to the value added to the vertex + -- index before indexing into the vertex buffer. When specified, + -- 'MultiDrawIndexedInfoEXT'::@offset@ is ignored. + ("vertexOffset" ::: Maybe Int32) + -> io () +cmdDrawMultiIndexedEXT commandBuffer indexInfo instanceCount firstInstance stride vertexOffset = liftIO . evalContT $ do + let vkCmdDrawMultiIndexedEXTPtr = pVkCmdDrawMultiIndexedEXT (deviceCmds (commandBuffer :: CommandBuffer)) + lift $ unless (vkCmdDrawMultiIndexedEXTPtr /= nullFunPtr) $ + throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawMultiIndexedEXT is null" Nothing Nothing + let vkCmdDrawMultiIndexedEXT' = mkVkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXTPtr + pPIndexInfo <- ContT $ allocaBytesAligned @MultiDrawIndexedInfoEXT ((Data.Vector.length (indexInfo)) * 12) 4 + lift $ Data.Vector.imapM_ (\i e -> poke (pPIndexInfo `plusPtr` (12 * (i)) :: Ptr MultiDrawIndexedInfoEXT) (e)) (indexInfo) + pVertexOffset <- case (vertexOffset) of + Nothing -> pure nullPtr + Just j -> ContT $ with (j) + lift $ traceAroundEvent "vkCmdDrawMultiIndexedEXT" (vkCmdDrawMultiIndexedEXT' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (indexInfo)) :: Word32)) (pPIndexInfo) (instanceCount) (firstInstance) (stride) pVertexOffset) + pure $ () + + +-- | VkMultiDrawInfoEXT - Structure specifying a multi-draw command +-- +-- = Description +-- +-- The members of 'MultiDrawInfoEXT' have the same meaning as the +-- @firstVertex@ and @vertexCount@ parameters in +-- 'Vulkan.Core10.CommandBufferBuilding.cmdDraw'. +-- +-- = See Also +-- +-- 'cmdDrawMultiEXT' +data MultiDrawInfoEXT = MultiDrawInfoEXT + { -- | @firstVertex@ is the first vertex to draw. + firstVertex :: Word32 + , -- | @vertexCount@ is the number of vertices to draw. + vertexCount :: Word32 + } + deriving (Typeable, Eq) +#if defined(GENERIC_INSTANCES) +deriving instance Generic (MultiDrawInfoEXT) +#endif +deriving instance Show MultiDrawInfoEXT + +instance ToCStruct MultiDrawInfoEXT where + withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p) + pokeCStruct p MultiDrawInfoEXT{..} f = do + poke ((p `plusPtr` 0 :: Ptr Word32)) (firstVertex) + poke ((p `plusPtr` 4 :: Ptr Word32)) (vertexCount) + f + cStructSize = 8 + cStructAlignment = 4 + pokeZeroCStruct p f = do + poke ((p `plusPtr` 0 :: Ptr Word32)) (zero) + poke ((p `plusPtr` 4 :: Ptr Word32)) (zero) + f + +instance FromCStruct MultiDrawInfoEXT where + peekCStruct p = do + firstVertex <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32)) + vertexCount <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32)) + pure $ MultiDrawInfoEXT + firstVertex vertexCount + +instance Storable MultiDrawInfoEXT where + sizeOf ~_ = 8 + alignment ~_ = 4 + peek = peekCStruct + poke ptr poked = pokeCStruct ptr poked (pure ()) + +instance Zero MultiDrawInfoEXT where + zero = MultiDrawInfoEXT + zero + zero + + +-- | VkMultiDrawIndexedInfoEXT - Structure specifying a multi-draw command +-- +-- = Description +-- +-- The @firstIndex@, @indexCount@, and @vertexOffset@ members of +-- 'MultiDrawIndexedInfoEXT' have the same meaning as the @firstIndex@, +-- @indexCount@, and @vertexOffset@ parameters, respectively, of +-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexed'. +-- +-- = See Also +-- +-- 'cmdDrawMultiIndexedEXT' +data MultiDrawIndexedInfoEXT = MultiDrawIndexedInfoEXT + { -- | @firstIndex@ is the first index to draw. + firstIndex :: Word32 + , -- | @indexCount@ is the number of vertices to draw. + indexCount :: Word32 + , -- | @vertexOffset@ is the value added to the vertex index before indexing + -- into the vertex buffer for indexed multidraws. + vertexOffset :: Int32 + } + deriving (Typeable, Eq) +#if defined(GENERIC_INSTANCES) +deriving instance Generic (MultiDrawIndexedInfoEXT) +#endif +deriving instance Show MultiDrawIndexedInfoEXT + +instance ToCStruct MultiDrawIndexedInfoEXT where + withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p) + pokeCStruct p MultiDrawIndexedInfoEXT{..} f = do + poke ((p `plusPtr` 0 :: Ptr Word32)) (firstIndex) + poke ((p `plusPtr` 4 :: Ptr Word32)) (indexCount) + poke ((p `plusPtr` 8 :: Ptr Int32)) (vertexOffset) + f + cStructSize = 12 + cStructAlignment = 4 + pokeZeroCStruct p f = do + poke ((p `plusPtr` 0 :: Ptr Word32)) (zero) + poke ((p `plusPtr` 4 :: Ptr Word32)) (zero) + poke ((p `plusPtr` 8 :: Ptr Int32)) (zero) + f + +instance FromCStruct MultiDrawIndexedInfoEXT where + peekCStruct p = do + firstIndex <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32)) + indexCount <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32)) + vertexOffset <- peek @Int32 ((p `plusPtr` 8 :: Ptr Int32)) + pure $ MultiDrawIndexedInfoEXT + firstIndex indexCount vertexOffset + +instance Storable MultiDrawIndexedInfoEXT where + sizeOf ~_ = 12 + alignment ~_ = 4 + peek = peekCStruct + poke ptr poked = pokeCStruct ptr poked (pure ()) + +instance Zero MultiDrawIndexedInfoEXT where + zero = MultiDrawIndexedInfoEXT + zero + zero + zero + + +-- | VkPhysicalDeviceMultiDrawPropertiesEXT - Structure describing multidraw +-- limits of an implementation +-- +-- = Members +-- +-- The members of the 'PhysicalDeviceMultiDrawPropertiesEXT' structure +-- describe the following features: +-- +-- = Description +-- +-- If the @VkPhysicalDeviceMultiDrawPropertiesPropertiesEXT@ structure is +-- included in the @pNext@ chain of the +-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2' +-- structure passed to +-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceProperties2', +-- it is filled in with each corresponding implementation-dependent +-- property. +-- +-- == Valid Usage (Implicit) +-- +-- = See Also +-- +-- 'Vulkan.Core10.Enums.StructureType.StructureType' +data PhysicalDeviceMultiDrawPropertiesEXT = PhysicalDeviceMultiDrawPropertiesEXT + { -- | #limits-maxMultiDrawCount# @maxMultiDrawCount@ indicates the maximum + -- number of draw calls which /can/ be batched into a single multidraw. + maxMultiDrawCount :: Word32 } + deriving (Typeable, Eq) +#if defined(GENERIC_INSTANCES) +deriving instance Generic (PhysicalDeviceMultiDrawPropertiesEXT) +#endif +deriving instance Show PhysicalDeviceMultiDrawPropertiesEXT + +instance ToCStruct PhysicalDeviceMultiDrawPropertiesEXT where + withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p) + pokeCStruct p PhysicalDeviceMultiDrawPropertiesEXT{..} f = do + poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT) + poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr) + poke ((p `plusPtr` 16 :: Ptr Word32)) (maxMultiDrawCount) + f + cStructSize = 24 + cStructAlignment = 8 + pokeZeroCStruct p f = do + poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT) + poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr) + poke ((p `plusPtr` 16 :: Ptr Word32)) (zero) + f + +instance FromCStruct PhysicalDeviceMultiDrawPropertiesEXT where + peekCStruct p = do + maxMultiDrawCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32)) + pure $ PhysicalDeviceMultiDrawPropertiesEXT + maxMultiDrawCount + +instance Storable PhysicalDeviceMultiDrawPropertiesEXT where + sizeOf ~_ = 24 + alignment ~_ = 8 + peek = peekCStruct + poke ptr poked = pokeCStruct ptr poked (pure ()) + +instance Zero PhysicalDeviceMultiDrawPropertiesEXT where + zero = PhysicalDeviceMultiDrawPropertiesEXT + zero + + +-- | VkPhysicalDeviceMultiDrawFeaturesEXT - Structure describing whether the +-- implementation supports multi draw functionality +-- +-- = Members +-- +-- The members of the 'PhysicalDeviceMultiDrawFeaturesEXT' structure +-- describe the following features: +-- +-- = Description +-- +-- If the 'PhysicalDeviceMultiDrawFeaturesEXT' 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. 'PhysicalDeviceMultiDrawFeaturesEXT' /can/ also be used in +-- the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to +-- selectively enable these features. +-- +-- == Valid Usage (Implicit) +-- +-- = See Also +-- +-- 'Vulkan.Core10.FundamentalTypes.Bool32', +-- 'Vulkan.Core10.Enums.StructureType.StructureType' +data PhysicalDeviceMultiDrawFeaturesEXT = PhysicalDeviceMultiDrawFeaturesEXT + { -- | #features-multiDraw# @multiDraw@ indicates that the implementation + -- supports 'cmdDrawMultiEXT' and 'cmdDrawMultiIndexedEXT'. + multiDraw :: Bool } + deriving (Typeable, Eq) +#if defined(GENERIC_INSTANCES) +deriving instance Generic (PhysicalDeviceMultiDrawFeaturesEXT) +#endif +deriving instance Show PhysicalDeviceMultiDrawFeaturesEXT + +instance ToCStruct PhysicalDeviceMultiDrawFeaturesEXT where + withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p) + pokeCStruct p PhysicalDeviceMultiDrawFeaturesEXT{..} f = do + poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT) + poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr) + poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (multiDraw)) + f + cStructSize = 24 + cStructAlignment = 8 + pokeZeroCStruct p f = do + poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT) + poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr) + poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero)) + f + +instance FromCStruct PhysicalDeviceMultiDrawFeaturesEXT where + peekCStruct p = do + multiDraw <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32)) + pure $ PhysicalDeviceMultiDrawFeaturesEXT + (bool32ToBool multiDraw) + +instance Storable PhysicalDeviceMultiDrawFeaturesEXT where + sizeOf ~_ = 24 + alignment ~_ = 8 + peek = peekCStruct + poke ptr poked = pokeCStruct ptr poked (pure ()) + +instance Zero PhysicalDeviceMultiDrawFeaturesEXT where + zero = PhysicalDeviceMultiDrawFeaturesEXT + zero + + +type EXT_MULTI_DRAW_SPEC_VERSION = 1 + +-- No documentation found for TopLevel "VK_EXT_MULTI_DRAW_SPEC_VERSION" +pattern EXT_MULTI_DRAW_SPEC_VERSION :: forall a . Integral a => a +pattern EXT_MULTI_DRAW_SPEC_VERSION = 1 + + +type EXT_MULTI_DRAW_EXTENSION_NAME = "VK_EXT_multi_draw" + +-- No documentation found for TopLevel "VK_EXT_MULTI_DRAW_EXTENSION_NAME" +pattern EXT_MULTI_DRAW_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a +pattern EXT_MULTI_DRAW_EXTENSION_NAME = "VK_EXT_multi_draw" + diff --git a/src/Vulkan/Extensions/VK_EXT_multi_draw.hs-boot b/src/Vulkan/Extensions/VK_EXT_multi_draw.hs-boot new file mode 100644 index 000000000..ec2551f74 --- /dev/null +++ b/src/Vulkan/Extensions/VK_EXT_multi_draw.hs-boot @@ -0,0 +1,164 @@ +{-# language CPP #-} +-- | = Name +-- +-- VK_EXT_multi_draw - device extension +-- +-- == VK_EXT_multi_draw +-- +-- [__Name String__] +-- @VK_EXT_multi_draw@ +-- +-- [__Extension Type__] +-- Device extension +-- +-- [__Registered Extension Number__] +-- 393 +-- +-- [__Revision__] +-- 1 +-- +-- [__Extension and Version Dependencies__] +-- +-- - Requires Vulkan 1.0 +-- +-- [__Contact__] +-- +-- - Mike Blumenkrantz +-- +-- +-- == Other Extension Metadata +-- +-- [__Last Modified Date__] +-- 2021-05-19 +-- +-- [__IP Status__] +-- No known IP claims. +-- +-- [__Contributors__] +-- +-- - Mike Blumenkrantz, VALVE +-- +-- - Piers Daniell, NVIDIA +-- +-- - Jason Ekstrand, INTEL +-- +-- - Spencer Fricke, SAMSUNG +-- +-- - Ricardo Garcia, IGALIA +-- +-- - Jon Leech, KHRONOS +-- +-- - Stu Smith, AMD +-- +-- == Description +-- +-- Processing multiple draw commands in sequence incurs measurable overhead +-- within drivers due to repeated state checks and updates during dispatch. +-- This extension enables passing the entire sequence of draws directly to +-- the driver in order to avoid any such overhead, using an array of +-- 'MultiDrawInfoEXT' or 'MultiDrawIndexedInfoEXT' structs with +-- 'cmdDrawMultiEXT' or 'cmdDrawMultiIndexedEXT', respectively. These +-- functions could be used any time multiple draw commands are being +-- recorded without any state changes between them in order to maximize +-- performance. +-- +-- == New Commands +-- +-- - 'cmdDrawMultiEXT' +-- +-- - 'cmdDrawMultiIndexedEXT' +-- +-- == New Structures +-- +-- - 'MultiDrawIndexedInfoEXT' +-- +-- - 'MultiDrawInfoEXT' +-- +-- - Extending +-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2', +-- 'Vulkan.Core10.Device.DeviceCreateInfo': +-- +-- - 'PhysicalDeviceMultiDrawFeaturesEXT' +-- +-- - Extending +-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2': +-- +-- - 'PhysicalDeviceMultiDrawPropertiesEXT' +-- +-- == New Enum Constants +-- +-- - 'EXT_MULTI_DRAW_EXTENSION_NAME' +-- +-- - 'EXT_MULTI_DRAW_SPEC_VERSION' +-- +-- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType': +-- +-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT' +-- +-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT' +-- +-- == New or Modified Built-In Variables +-- +-- - (modified)@DrawIndex@ +-- +-- == Version History +-- +-- - Version 1, 2021-01-20 (Mike Blumenkrantz) +-- +-- - Initial version +-- +-- = See Also +-- +-- 'MultiDrawIndexedInfoEXT', 'MultiDrawInfoEXT', +-- 'PhysicalDeviceMultiDrawFeaturesEXT', +-- 'PhysicalDeviceMultiDrawPropertiesEXT', 'cmdDrawMultiEXT', +-- 'cmdDrawMultiIndexedEXT' +-- +-- = Document Notes +-- +-- For more information, see the +-- +-- +-- This page is a generated document. Fixes and changes should be made to +-- the generator scripts, not directly. +module Vulkan.Extensions.VK_EXT_multi_draw ( MultiDrawIndexedInfoEXT + , MultiDrawInfoEXT + , PhysicalDeviceMultiDrawFeaturesEXT + , PhysicalDeviceMultiDrawPropertiesEXT + ) where + +import Vulkan.CStruct (FromCStruct) +import Vulkan.CStruct (ToCStruct) +import Data.Kind (Type) + +data MultiDrawIndexedInfoEXT + +instance ToCStruct MultiDrawIndexedInfoEXT +instance Show MultiDrawIndexedInfoEXT + +instance FromCStruct MultiDrawIndexedInfoEXT + + +data MultiDrawInfoEXT + +instance ToCStruct MultiDrawInfoEXT +instance Show MultiDrawInfoEXT + +instance FromCStruct MultiDrawInfoEXT + + +data PhysicalDeviceMultiDrawFeaturesEXT + +instance ToCStruct PhysicalDeviceMultiDrawFeaturesEXT +instance Show PhysicalDeviceMultiDrawFeaturesEXT + +instance FromCStruct PhysicalDeviceMultiDrawFeaturesEXT + + +data PhysicalDeviceMultiDrawPropertiesEXT + +instance ToCStruct PhysicalDeviceMultiDrawPropertiesEXT +instance Show PhysicalDeviceMultiDrawPropertiesEXT + +instance FromCStruct PhysicalDeviceMultiDrawPropertiesEXT + diff --git a/src/Vulkan/Extensions/VK_EXT_physical_device_drm.hs b/src/Vulkan/Extensions/VK_EXT_physical_device_drm.hs new file mode 100644 index 000000000..9c30b9223 --- /dev/null +++ b/src/Vulkan/Extensions/VK_EXT_physical_device_drm.hs @@ -0,0 +1,241 @@ +{-# language CPP #-} +-- | = Name +-- +-- VK_EXT_physical_device_drm - device extension +-- +-- == VK_EXT_physical_device_drm +-- +-- [__Name String__] +-- @VK_EXT_physical_device_drm@ +-- +-- [__Extension Type__] +-- Device extension +-- +-- [__Registered Extension Number__] +-- 354 +-- +-- [__Revision__] +-- 1 +-- +-- [__Extension and Version Dependencies__] +-- +-- - Requires Vulkan 1.0 +-- +-- - Requires @VK_KHR_get_physical_device_properties2@ +-- +-- [__Contact__] +-- +-- - Simon Ser +-- +-- +-- == Other Extension Metadata +-- +-- [__Last Modified Date__] +-- 2021-06-09 +-- +-- [__IP Status__] +-- No known IP claims. +-- +-- [__Contributors__] +-- +-- - Simon Ser +-- +-- == Description +-- +-- This extension provides new facilities to query DRM properties for +-- physical devices, enabling users to match Vulkan physical devices with +-- DRM nodes on Linux. +-- +-- Its functionality closely overlaps with +-- @EGL_EXT_device_drm@^. Unlike the +-- EGL extension, this extension does not expose a string containing the +-- name of the device file and instead exposes device minor numbers. +-- +-- DRM defines multiple device node types. Each physical device may have +-- one primary node and one render node associated. Physical devices may +-- have no primary node (e.g. if the device doesn’t have a display +-- subsystem), may have no render node (e.g. if it’s a software rendering +-- engine), or may have neither (e.g. if it’s a software rendering engine +-- without a display subsystem). +-- +-- To query DRM properties for a physical device, chain +-- 'PhysicalDeviceDrmPropertiesEXT' to +-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2'. +-- +-- == New Structures +-- +-- - Extending +-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2': +-- +-- - 'PhysicalDeviceDrmPropertiesEXT' +-- +-- == New Enum Constants +-- +-- - 'EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME' +-- +-- - 'EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION' +-- +-- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType': +-- +-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT' +-- +-- == References +-- +-- 1. #VK_EXT_physical_device_drm-fn1# +-- +-- +-- == Version History +-- +-- - Revision 1, 2021-06-09 +-- +-- - First stable revision +-- +-- = See Also +-- +-- 'PhysicalDeviceDrmPropertiesEXT' +-- +-- = Document Notes +-- +-- For more information, see the +-- +-- +-- This page is a generated document. Fixes and changes should be made to +-- the generator scripts, not directly. +module Vulkan.Extensions.VK_EXT_physical_device_drm ( PhysicalDeviceDrmPropertiesEXT(..) + , EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION + , pattern EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION + , EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME + , pattern EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME + ) where + +import Foreign.Marshal.Alloc (allocaBytesAligned) +import Foreign.Ptr (nullPtr) +import Foreign.Ptr (plusPtr) +import Vulkan.CStruct (FromCStruct) +import Vulkan.CStruct (FromCStruct(..)) +import Vulkan.CStruct (ToCStruct) +import Vulkan.CStruct (ToCStruct(..)) +import Vulkan.Zero (Zero(..)) +import Data.String (IsString) +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 Data.Int (Int64) +import Foreign.Ptr (Ptr) +import Data.Kind (Type) +import Vulkan.Core10.FundamentalTypes (bool32ToBool) +import Vulkan.Core10.FundamentalTypes (boolToBool32) +import Vulkan.Core10.FundamentalTypes (Bool32) +import Vulkan.Core10.Enums.StructureType (StructureType) +import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT)) +-- | VkPhysicalDeviceDrmPropertiesEXT - Structure containing DRM information +-- of a physical device +-- +-- = Description +-- +-- If the 'PhysicalDeviceDrmPropertiesEXT' structure is included in the +-- @pNext@ chain of the +-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2' +-- structure passed to +-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceProperties2', +-- it is filled in with each corresponding implementation-dependent +-- property. +-- +-- These are properties of the DRM information of a physical device. +-- +-- == Valid Usage (Implicit) +-- +-- = See Also +-- +-- 'Vulkan.Core10.FundamentalTypes.Bool32', +-- 'Vulkan.Core10.Enums.StructureType.StructureType' +data PhysicalDeviceDrmPropertiesEXT = PhysicalDeviceDrmPropertiesEXT + { -- | @hasPrimary@ is a boolean indicating whether the physical device has a + -- DRM primary node. + hasPrimary :: Bool + , -- | @hasRender@ is a boolean indicating whether the physical device has a + -- DRM render node. + hasRender :: Bool + , -- | @primaryMajor@ is the DRM primary node major number, if any. + primaryMajor :: Int64 + , -- | @primaryMinor@ is the DRM primary node minor number, if any. + primaryMinor :: Int64 + , -- | @renderMajor@ is the DRM render node major number, if any. + renderMajor :: Int64 + , -- | @renderMinor@ is the DRM render node minor number, if any. + renderMinor :: Int64 + } + deriving (Typeable, Eq) +#if defined(GENERIC_INSTANCES) +deriving instance Generic (PhysicalDeviceDrmPropertiesEXT) +#endif +deriving instance Show PhysicalDeviceDrmPropertiesEXT + +instance ToCStruct PhysicalDeviceDrmPropertiesEXT where + withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p) + pokeCStruct p PhysicalDeviceDrmPropertiesEXT{..} f = do + poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT) + poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr) + poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (hasPrimary)) + poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (hasRender)) + poke ((p `plusPtr` 24 :: Ptr Int64)) (primaryMajor) + poke ((p `plusPtr` 32 :: Ptr Int64)) (primaryMinor) + poke ((p `plusPtr` 40 :: Ptr Int64)) (renderMajor) + poke ((p `plusPtr` 48 :: Ptr Int64)) (renderMinor) + f + cStructSize = 56 + cStructAlignment = 8 + pokeZeroCStruct p f = do + poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT) + poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr) + poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero)) + poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero)) + poke ((p `plusPtr` 24 :: Ptr Int64)) (zero) + poke ((p `plusPtr` 32 :: Ptr Int64)) (zero) + poke ((p `plusPtr` 40 :: Ptr Int64)) (zero) + poke ((p `plusPtr` 48 :: Ptr Int64)) (zero) + f + +instance FromCStruct PhysicalDeviceDrmPropertiesEXT where + peekCStruct p = do + hasPrimary <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32)) + hasRender <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32)) + primaryMajor <- peek @Int64 ((p `plusPtr` 24 :: Ptr Int64)) + primaryMinor <- peek @Int64 ((p `plusPtr` 32 :: Ptr Int64)) + renderMajor <- peek @Int64 ((p `plusPtr` 40 :: Ptr Int64)) + renderMinor <- peek @Int64 ((p `plusPtr` 48 :: Ptr Int64)) + pure $ PhysicalDeviceDrmPropertiesEXT + (bool32ToBool hasPrimary) (bool32ToBool hasRender) primaryMajor primaryMinor renderMajor renderMinor + +instance Storable PhysicalDeviceDrmPropertiesEXT where + sizeOf ~_ = 56 + alignment ~_ = 8 + peek = peekCStruct + poke ptr poked = pokeCStruct ptr poked (pure ()) + +instance Zero PhysicalDeviceDrmPropertiesEXT where + zero = PhysicalDeviceDrmPropertiesEXT + zero + zero + zero + zero + zero + zero + + +type EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION = 1 + +-- No documentation found for TopLevel "VK_EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION" +pattern EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION :: forall a . Integral a => a +pattern EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION = 1 + + +type EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME = "VK_EXT_physical_device_drm" + +-- No documentation found for TopLevel "VK_EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME" +pattern EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a +pattern EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME = "VK_EXT_physical_device_drm" + diff --git a/src/Vulkan/Extensions/VK_EXT_physical_device_drm.hs-boot b/src/Vulkan/Extensions/VK_EXT_physical_device_drm.hs-boot new file mode 100644 index 000000000..85d4988d9 --- /dev/null +++ b/src/Vulkan/Extensions/VK_EXT_physical_device_drm.hs-boot @@ -0,0 +1,116 @@ +{-# language CPP #-} +-- | = Name +-- +-- VK_EXT_physical_device_drm - device extension +-- +-- == VK_EXT_physical_device_drm +-- +-- [__Name String__] +-- @VK_EXT_physical_device_drm@ +-- +-- [__Extension Type__] +-- Device extension +-- +-- [__Registered Extension Number__] +-- 354 +-- +-- [__Revision__] +-- 1 +-- +-- [__Extension and Version Dependencies__] +-- +-- - Requires Vulkan 1.0 +-- +-- - Requires @VK_KHR_get_physical_device_properties2@ +-- +-- [__Contact__] +-- +-- - Simon Ser +-- +-- +-- == Other Extension Metadata +-- +-- [__Last Modified Date__] +-- 2021-06-09 +-- +-- [__IP Status__] +-- No known IP claims. +-- +-- [__Contributors__] +-- +-- - Simon Ser +-- +-- == Description +-- +-- This extension provides new facilities to query DRM properties for +-- physical devices, enabling users to match Vulkan physical devices with +-- DRM nodes on Linux. +-- +-- Its functionality closely overlaps with +-- @EGL_EXT_device_drm@^. Unlike the +-- EGL extension, this extension does not expose a string containing the +-- name of the device file and instead exposes device minor numbers. +-- +-- DRM defines multiple device node types. Each physical device may have +-- one primary node and one render node associated. Physical devices may +-- have no primary node (e.g. if the device doesn’t have a display +-- subsystem), may have no render node (e.g. if it’s a software rendering +-- engine), or may have neither (e.g. if it’s a software rendering engine +-- without a display subsystem). +-- +-- To query DRM properties for a physical device, chain +-- 'PhysicalDeviceDrmPropertiesEXT' to +-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2'. +-- +-- == New Structures +-- +-- - Extending +-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2': +-- +-- - 'PhysicalDeviceDrmPropertiesEXT' +-- +-- == New Enum Constants +-- +-- - 'EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME' +-- +-- - 'EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION' +-- +-- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType': +-- +-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT' +-- +-- == References +-- +-- 1. #VK_EXT_physical_device_drm-fn1# +-- +-- +-- == Version History +-- +-- - Revision 1, 2021-06-09 +-- +-- - First stable revision +-- +-- = See Also +-- +-- 'PhysicalDeviceDrmPropertiesEXT' +-- +-- = Document Notes +-- +-- For more information, see the +-- +-- +-- This page is a generated document. Fixes and changes should be made to +-- the generator scripts, not directly. +module Vulkan.Extensions.VK_EXT_physical_device_drm (PhysicalDeviceDrmPropertiesEXT) where + +import Vulkan.CStruct (FromCStruct) +import Vulkan.CStruct (ToCStruct) +import Data.Kind (Type) + +data PhysicalDeviceDrmPropertiesEXT + +instance ToCStruct PhysicalDeviceDrmPropertiesEXT +instance Show PhysicalDeviceDrmPropertiesEXT + +instance FromCStruct PhysicalDeviceDrmPropertiesEXT + diff --git a/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs b/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs index 9fb602165..f8993df4a 100644 --- a/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs +++ b/src/Vulkan/Extensions/VK_EXT_transform_feedback.hs @@ -1934,15 +1934,16 @@ data PhysicalDeviceTransformFeedbackPropertiesEXT = PhysicalDeviceTransformFeedb -- @maxTransformFeedbackBufferDataStride@ is the maximum stride between -- each capture of vertex data to the buffer. maxTransformFeedbackBufferDataStride :: Word32 - , -- | #limits-transformFeedbackQueries# @transformFeedbackQueries@ is true if - -- the implementation supports the + , -- | #limits-transformFeedbackQueries# @transformFeedbackQueries@ is + -- 'Vulkan.Core10.FundamentalTypes.TRUE' if the implementation supports the -- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT' -- query type. @transformFeedbackQueries@ is false if queries of this type -- /cannot/ be created. transformFeedbackQueries :: Bool , -- | #limits-transformFeedbackStreamsLinesTriangles# - -- @transformFeedbackStreamsLinesTriangles@ is true if the implementation - -- supports the geometry shader @OpExecutionMode@ of @OutputLineStrip@ and + -- @transformFeedbackStreamsLinesTriangles@ is + -- 'Vulkan.Core10.FundamentalTypes.TRUE' if the implementation supports the + -- geometry shader @OpExecutionMode@ of @OutputLineStrip@ and -- @OutputTriangleStrip@ in addition to @OutputPoints@ when more than one -- vertex stream is output. If @transformFeedbackStreamsLinesTriangles@ is -- false the implementation only supports an @OpExecutionMode@ of @@ -1950,15 +1951,17 @@ data PhysicalDeviceTransformFeedbackPropertiesEXT = PhysicalDeviceTransformFeedb -- geometry shader. transformFeedbackStreamsLinesTriangles :: Bool , -- | #limits-transformFeedbackRasterizationStreamSelect# - -- @transformFeedbackRasterizationStreamSelect@ is true if the - -- implementation supports the @GeometryStreams@ SPIR-V capability and the - -- application can use 'PipelineRasterizationStateStreamCreateInfoEXT' to - -- modify which vertex stream output is used for rasterization. Otherwise - -- vertex stream @0@ /must/ always be used for rasterization. + -- @transformFeedbackRasterizationStreamSelect@ is + -- 'Vulkan.Core10.FundamentalTypes.TRUE' if the implementation supports the + -- @GeometryStreams@ SPIR-V capability and the application can use + -- 'PipelineRasterizationStateStreamCreateInfoEXT' to modify which vertex + -- stream output is used for rasterization. Otherwise vertex stream @0@ + -- /must/ always be used for rasterization. transformFeedbackRasterizationStreamSelect :: Bool - , -- | #limits-transformFeedbackDraw# @transformFeedbackDraw@ is true if the - -- implementation supports the 'cmdDrawIndirectByteCountEXT' function - -- otherwise the function /must/ not be called. + , -- | #limits-transformFeedbackDraw# @transformFeedbackDraw@ is + -- 'Vulkan.Core10.FundamentalTypes.TRUE' if the implementation supports the + -- 'cmdDrawIndirectByteCountEXT' function otherwise the function /must/ not + -- be called. transformFeedbackDraw :: Bool } deriving (Typeable, Eq) diff --git a/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs b/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs index 2c10ab0bf..090bcd490 100644 --- a/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs +++ b/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs @@ -1189,10 +1189,12 @@ module Vulkan.Extensions.VK_KHR_acceleration_structure ( destroyAccelerationStr , BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR , BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR , BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR + , BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV , .. ) , AccelerationStructureCreateFlagsKHR , AccelerationStructureCreateFlagBitsKHR( ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR + , ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV , .. ) , CopyAccelerationStructureModeKHR( COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR @@ -1244,6 +1246,7 @@ import Data.Bits ((.&.)) import Data.Bits ((.|.)) import Data.Bits (shiftL) import Data.Bits (shiftR) +import Data.Typeable (eqT) import Foreign.Marshal.Alloc (allocaBytesAligned) import Foreign.Marshal.Alloc (callocBytes) import Foreign.Marshal.Alloc (free) @@ -1278,6 +1281,7 @@ import Control.Monad.IO.Class (MonadIO) import Data.Bits (Bits) import Data.Bits (FiniteBits) import Data.String (IsString) +import Data.Type.Equality ((:~:)(Refl)) import Data.Typeable (Typeable) import Foreign.C.Types (CChar) import Foreign.C.Types (CFloat) @@ -1307,13 +1311,18 @@ import Data.Vector (Vector) import Vulkan.CStruct.Utils (advancePtrBytes) import Vulkan.Core10.FundamentalTypes (bool32ToBool) import Vulkan.Core10.FundamentalTypes (boolToBool32) +import Vulkan.CStruct.Extends (forgetExtensions) import Vulkan.CStruct.Utils (lowerArrayPtr) +import Vulkan.CStruct.Extends (pokeSomeCStruct) import Vulkan.NamedType ((:::)) +import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (AccelerationStructureGeometryMotionTrianglesDataNV) import Vulkan.Extensions.Handles (AccelerationStructureKHR) import Vulkan.Extensions.Handles (AccelerationStructureKHR(..)) +import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (AccelerationStructureMotionInfoNV) import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks) import Vulkan.Core10.FundamentalTypes (Bool32) import Vulkan.Core10.Handles (Buffer) +import Vulkan.CStruct.Extends (Chain) import Vulkan.Core10.Handles (CommandBuffer) import Vulkan.Core10.Handles (CommandBuffer(..)) import Vulkan.Core10.Handles (CommandBuffer_T) @@ -1340,15 +1349,24 @@ import Vulkan.Dynamic (DeviceCmds(pVkGetDeviceAccelerationStructureCompatibility import Vulkan.Dynamic (DeviceCmds(pVkWriteAccelerationStructuresPropertiesKHR)) import Vulkan.Core10.FundamentalTypes (DeviceSize) import Vulkan.Core10.Handles (Device_T) +import Vulkan.CStruct.Extends (Extends) +import Vulkan.CStruct.Extends (Extendss) +import Vulkan.CStruct.Extends (Extensible(..)) import Vulkan.Core10.FundamentalTypes (Flags) import Vulkan.Core10.Enums.Format (Format) import Vulkan.Core10.Enums.IndexType (IndexType) +import Vulkan.CStruct.Extends (PeekChain) +import Vulkan.CStruct.Extends (PeekChain(..)) +import Vulkan.CStruct.Extends (PokeChain) +import Vulkan.CStruct.Extends (PokeChain(..)) import Vulkan.Core10.Handles (QueryPool) import Vulkan.Core10.Handles (QueryPool(..)) import Vulkan.Core10.Enums.QueryType (QueryType) import Vulkan.Core10.Enums.QueryType (QueryType(..)) import Vulkan.Core10.Enums.Result (Result) import Vulkan.Core10.Enums.Result (Result(..)) +import Vulkan.CStruct.Extends (SomeStruct) +import Vulkan.CStruct.Extends (SomeStruct(..)) import Vulkan.Core10.Enums.StructureType (StructureType) import Vulkan.Exception (VulkanException(..)) import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR)) @@ -2500,7 +2518,7 @@ foreign import ccall unsafe #endif "dynamic" mkVkCreateAccelerationStructureKHR - :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr AccelerationStructureKHR -> IO Result) -> Ptr Device_T -> Ptr AccelerationStructureCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr AccelerationStructureKHR -> IO Result + :: FunPtr (Ptr Device_T -> Ptr (SomeStruct AccelerationStructureCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr AccelerationStructureKHR -> IO Result) -> Ptr Device_T -> Ptr (SomeStruct AccelerationStructureCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr AccelerationStructureKHR -> IO Result -- | vkCreateAccelerationStructureKHR - Create a new acceleration structure -- object @@ -2580,15 +2598,15 @@ foreign import ccall -- 'Vulkan.Extensions.Handles.AccelerationStructureKHR', -- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks', -- 'Vulkan.Core10.Handles.Device' -createAccelerationStructureKHR :: forall io - . (MonadIO io) +createAccelerationStructureKHR :: forall a io + . (Extendss AccelerationStructureCreateInfoKHR a, PokeChain a, MonadIO io) => -- | @device@ is the logical device that creates the acceleration structure -- object. Device -> -- | @pCreateInfo@ is a pointer to a 'AccelerationStructureCreateInfoKHR' -- structure containing parameters affecting creation of the acceleration -- structure. - AccelerationStructureCreateInfoKHR + (AccelerationStructureCreateInfoKHR a) -> -- | @pAllocator@ controls host memory allocation as described in the -- -- chapter. @@ -2604,7 +2622,7 @@ createAccelerationStructureKHR device createInfo allocator = liftIO . evalContT Nothing -> pure nullPtr Just j -> ContT $ withCStruct (j) pPAccelerationStructure <- ContT $ bracket (callocBytes @AccelerationStructureKHR 8) free - r <- lift $ traceAroundEvent "vkCreateAccelerationStructureKHR" (vkCreateAccelerationStructureKHR' (deviceHandle (device)) pCreateInfo pAllocator (pPAccelerationStructure)) + r <- lift $ traceAroundEvent "vkCreateAccelerationStructureKHR" (vkCreateAccelerationStructureKHR' (deviceHandle (device)) (forgetExtensions pCreateInfo) pAllocator (pPAccelerationStructure)) lift $ when (r < SUCCESS) (throwIO (VulkanException r)) pAccelerationStructure <- lift $ peek @AccelerationStructureKHR pPAccelerationStructure pure $ (pAccelerationStructure) @@ -2617,7 +2635,7 @@ createAccelerationStructureKHR device createInfo allocator = liftIO . evalContT -- favourite resource management library) as the last argument. -- To just extract the pair pass '(,)' as the last argument. -- -withAccelerationStructureKHR :: forall io r . MonadIO io => Device -> AccelerationStructureCreateInfoKHR -> Maybe AllocationCallbacks -> (io AccelerationStructureKHR -> (AccelerationStructureKHR -> io ()) -> r) -> r +withAccelerationStructureKHR :: forall a io r . (Extendss AccelerationStructureCreateInfoKHR a, PokeChain a, MonadIO io) => Device -> AccelerationStructureCreateInfoKHR a -> Maybe AllocationCallbacks -> (io AccelerationStructureKHR -> (AccelerationStructureKHR -> io ()) -> r) -> r withAccelerationStructureKHR device pCreateInfo pAllocator b = b (createAccelerationStructureKHR device pCreateInfo pAllocator) (\(o0) -> destroyAccelerationStructureKHR device o0 pAllocator) @@ -2667,6 +2685,7 @@ foreign import ccall -- 'AccelerationStructureBuildGeometryInfoKHR'::@dstAccelerationStructure@. -- -- Accesses to other input buffers as identified by any used values of +-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureGeometryMotionTrianglesDataNV'::@vertexData@, -- 'AccelerationStructureGeometryTrianglesDataKHR'::@vertexData@, -- 'AccelerationStructureGeometryTrianglesDataKHR'::@indexData@, -- 'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@, @@ -4249,6 +4268,15 @@ foreign import ccall -- value in @geometry.instances.data.hostAddress@ must be a valid -- 'Vulkan.Extensions.Handles.AccelerationStructureKHR' object -- +-- - #VUID-vkBuildAccelerationStructuresKHR-pInfos-04930# For any element +-- of @pInfos@[i].@pGeometries@ or @pInfos@[i].@ppGeometries@ with a +-- @geometryType@ of 'GEOMETRY_TYPE_INSTANCES_KHR' with +-- 'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' set, each +-- @accelerationStructureReference@ in any structure in +-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInstanceNV' +-- value in @geometry.instances.data.hostAddress@ must be a valid +-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR' object +-- -- == Valid Usage (Implicit) -- -- - #VUID-vkBuildAccelerationStructuresKHR-device-parameter# @device@ @@ -4925,8 +4953,51 @@ instance Zero PhysicalDeviceAccelerationStructurePropertiesKHR where -- @vertexStride@ for acceleration structure geometry is instead restricted -- to being a 32-bit value. -- +-- == Valid Usage +-- +-- - #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexStride-03735# +-- @vertexStride@ /must/ be a multiple of the size in bytes of the +-- smallest component of @vertexFormat@ +-- +-- - #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexStride-03819# +-- @vertexStride@ /must/ be less than or equal to 232-1 +-- +-- - #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexFormat-03797# +-- @vertexFormat@ /must/ support the +-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR' +-- in +-- 'Vulkan.Core10.DeviceInitialization.FormatProperties'::@bufferFeatures@ +-- as returned by +-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2' +-- +-- - #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexType-03798# +-- @indexType@ /must/ be +-- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16', +-- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32', or +-- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR' +-- -- == Valid Usage (Implicit) -- +-- - #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-sType-sType# +-- @sType@ /must/ be +-- 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR' +-- +-- - #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-pNext-pNext# +-- @pNext@ /must/ be @NULL@ or a pointer to a valid instance of +-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureGeometryMotionTrianglesDataNV' +-- +-- - #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-sType-unique# +-- The @sType@ value of each struct in the @pNext@ chain /must/ be +-- unique +-- +-- - #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexFormat-parameter# +-- @vertexFormat@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' +-- value +-- +-- - #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexType-parameter# +-- @indexType@ /must/ be a valid +-- 'Vulkan.Core10.Enums.IndexType.IndexType' value +-- -- = See Also -- -- 'AccelerationStructureGeometryDataKHR', 'DeviceOrHostAddressConstKHR', @@ -4934,48 +5005,22 @@ instance Zero PhysicalDeviceAccelerationStructurePropertiesKHR where -- 'Vulkan.Core10.Enums.Format.Format', -- 'Vulkan.Core10.Enums.IndexType.IndexType', -- 'Vulkan.Core10.Enums.StructureType.StructureType' -data AccelerationStructureGeometryTrianglesDataKHR = AccelerationStructureGeometryTrianglesDataKHR - { -- | @vertexFormat@ is the 'Vulkan.Core10.Enums.Format.Format' of each vertex +data AccelerationStructureGeometryTrianglesDataKHR (es :: [Type]) = AccelerationStructureGeometryTrianglesDataKHR + { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure. + next :: Chain es + , -- | @vertexFormat@ is the 'Vulkan.Core10.Enums.Format.Format' of each vertex -- element. - -- - -- #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexFormat-03797# - -- @vertexFormat@ /must/ support the - -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR' - -- in - -- 'Vulkan.Core10.DeviceInitialization.FormatProperties'::@bufferFeatures@ - -- as returned by - -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2' - -- - -- #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexFormat-parameter# - -- @vertexFormat@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' - -- value vertexFormat :: Format , -- | @vertexData@ is a device or host address to memory containing vertex -- data for this geometry. vertexData :: DeviceOrHostAddressConstKHR , -- | @vertexStride@ is the stride in bytes between each vertex. - -- - -- #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexStride-03735# - -- @vertexStride@ /must/ be a multiple of the size in bytes of the smallest - -- component of @vertexFormat@ - -- - -- #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexStride-03819# - -- @vertexStride@ /must/ be less than or equal to 232-1 vertexStride :: DeviceSize , -- | @maxVertex@ is the highest index of a vertex that will be addressed by a -- build command using this structure. maxVertex :: Word32 , -- | @indexType@ is the 'Vulkan.Core10.Enums.IndexType.IndexType' of each -- index element. - -- - -- #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexType-03798# - -- @indexType@ /must/ be 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16', - -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32', or - -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR' - -- - -- #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexType-parameter# - -- @indexType@ /must/ be a valid 'Vulkan.Core10.Enums.IndexType.IndexType' - -- value indexType :: IndexType , -- | @indexData@ is a device or host address to memory containing index data -- for this geometry. @@ -4987,15 +5032,25 @@ data AccelerationStructureGeometryTrianglesDataKHR = AccelerationStructureGeomet } deriving (Typeable) #if defined(GENERIC_INSTANCES) -deriving instance Generic (AccelerationStructureGeometryTrianglesDataKHR) +deriving instance Generic (AccelerationStructureGeometryTrianglesDataKHR (es :: [Type])) #endif -deriving instance Show AccelerationStructureGeometryTrianglesDataKHR - -instance ToCStruct AccelerationStructureGeometryTrianglesDataKHR where +deriving instance Show (Chain es) => Show (AccelerationStructureGeometryTrianglesDataKHR es) + +instance Extensible AccelerationStructureGeometryTrianglesDataKHR where + extensibleTypeName = "AccelerationStructureGeometryTrianglesDataKHR" + setNext x next = x{next = next} + getNext AccelerationStructureGeometryTrianglesDataKHR{..} = next + extends :: forall e b proxy. Typeable e => proxy e -> (Extends AccelerationStructureGeometryTrianglesDataKHR e => b) -> Maybe b + extends _ f + | Just Refl <- eqT @e @AccelerationStructureGeometryMotionTrianglesDataNV = Just f + | otherwise = Nothing + +instance (Extendss AccelerationStructureGeometryTrianglesDataKHR es, PokeChain es) => ToCStruct (AccelerationStructureGeometryTrianglesDataKHR es) where withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p) pokeCStruct p AccelerationStructureGeometryTrianglesDataKHR{..} f = evalContT $ do lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR) - lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr) + pNext'' <- fmap castPtr . ContT $ withChain (next) + lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'' lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (vertexFormat) ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressConstKHR)) (vertexData) . ($ ()) lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (vertexStride) @@ -5008,7 +5063,8 @@ instance ToCStruct AccelerationStructureGeometryTrianglesDataKHR where cStructAlignment = 8 pokeZeroCStruct p f = evalContT $ do lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR) - lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr) + pNext' <- fmap castPtr . ContT $ withZeroChain @es + lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext' lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (zero) ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ()) lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero) @@ -5018,8 +5074,9 @@ instance ToCStruct AccelerationStructureGeometryTrianglesDataKHR where ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ()) lift $ f -instance Zero AccelerationStructureGeometryTrianglesDataKHR where +instance es ~ '[] => Zero (AccelerationStructureGeometryTrianglesDataKHR es) where zero = AccelerationStructureGeometryTrianglesDataKHR + () zero zero zero @@ -5099,9 +5156,16 @@ data AccelerationStructureGeometryInstancesDataKHR = AccelerationStructureGeomet -- addresses or just an array. arrayOfPointers :: Bool , -- | @data@ is either the address of an array of device or host addresses - -- referencing individual 'AccelerationStructureInstanceKHR' structures if - -- @arrayOfPointers@ is 'Vulkan.Core10.FundamentalTypes.TRUE', or the - -- address of an array of 'AccelerationStructureInstanceKHR' structures. + -- referencing individual 'AccelerationStructureInstanceKHR' structures or + -- packed motion instance information as described in + -- + -- if @arrayOfPointers@ is 'Vulkan.Core10.FundamentalTypes.TRUE', or the + -- address of an array of 'AccelerationStructureInstanceKHR' or + -- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInstanceNV' + -- structures. Addresses and 'AccelerationStructureInstanceKHR' structures + -- are tightly packed. + -- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInstanceNV' + -- have a stride of 160 bytes. data' :: DeviceOrHostAddressConstKHR } deriving (Typeable) @@ -5232,6 +5296,30 @@ instance Zero AccelerationStructureGeometryKHR where -- The geometry index is available to ray queries via the -- @OpRayQueryGetIntersectionGeometryIndexKHR@ instruction. -- +-- Setting 'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' in @flags@ +-- indicates that this build is a motion top level acceleration structure. +-- A motion top level uses instances of format +-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInstanceNV' +-- if 'AccelerationStructureGeometryInstancesDataKHR'::@arrayOfPointers@ is +-- 'Vulkan.Core10.FundamentalTypes.FALSE'. +-- +-- If 'AccelerationStructureGeometryInstancesDataKHR'::@arrayOfPointers@ is +-- 'Vulkan.Core10.FundamentalTypes.TRUE', the pointer for any given element +-- of the array of instance pointers consists of 4 bits of +-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInstanceTypeNV' +-- in the low 4 bits of the pointer identifying the type of structure at +-- the pointer. The device address accessed is the value in the array with +-- the low 4 bits set to zero. The structure at the pointer is one of +-- 'AccelerationStructureInstanceKHR', +-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMatrixMotionInstanceNV' +-- or +-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureSRTMotionInstanceNV', +-- depending on the type value encoded in the low 4 bits. +-- +-- A top level acceleration structure with either motion instances or +-- vertex motion in its instances /must/ set +-- 'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' in @flags@. +-- -- == Valid Usage -- -- - #VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03654# @type@ @@ -5285,6 +5373,23 @@ instance Zero AccelerationStructureGeometryKHR where -- then it /must/ not have the -- 'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR' bit set -- +-- - #VUID-VkAccelerationStructureBuildGeometryInfoKHR-dstAccelerationStructure-04927# +-- If @dstAccelerationStructure@ was created with +-- 'ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV' set in +-- 'AccelerationStructureCreateInfoKHR'::@flags@, +-- 'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' /must/ be set in +-- @flags@ +-- +-- - #VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-04928# If +-- 'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' is set in @flags@, +-- @dstAccelerationStructure@ /must/ have been created with +-- 'ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV' set in +-- 'AccelerationStructureCreateInfoKHR'::@flags@ +-- +-- - #VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-04929# If +-- 'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' is set in @flags@, +-- @type@ /must/ not be 'ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR' +-- -- == Valid Usage (Implicit) -- -- - #VUID-VkAccelerationStructureBuildGeometryInfoKHR-sType-sType# @@ -5437,8 +5542,9 @@ instance Zero AccelerationStructureBuildGeometryInfoKHR where -- -- - For geometries of type 'GEOMETRY_TYPE_INSTANCES_KHR', -- @primitiveCount@ is the number of acceleration structures. --- @primitiveCount@ 'AccelerationStructureInstanceKHR' structures are --- consumed from +-- @primitiveCount@ 'AccelerationStructureInstanceKHR' or +-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInstanceNV' +-- structures are consumed from -- 'AccelerationStructureGeometryInstancesDataKHR'::@data@, starting at -- an offset of @primitiveOffset@. -- @@ -5591,6 +5697,13 @@ instance Zero AccelerationStructureBuildRangeInfoKHR where -- 'writeAccelerationStructuresPropertiesKHR' /can/ be used to obtain the -- compacted size required. -- +-- If the acceleration structure will be the target of a build operation +-- with 'BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' it /must/ include +-- 'ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV' in @flags@ and include +-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInfoNV' +-- as an extension structure in @pNext@ with the number of instances as +-- metadata for the object. +-- -- == Valid Usage -- -- - #VUID-VkAccelerationStructureCreateInfoKHR-deviceAddress-03612# If @@ -5617,6 +5730,18 @@ instance Zero AccelerationStructureBuildRangeInfoKHR where -- - #VUID-VkAccelerationStructureCreateInfoKHR-offset-03734# @offset@ -- /must/ be a multiple of @256@ bytes -- +-- - #VUID-VkAccelerationStructureCreateInfoKHR-flags-04954# If +-- 'ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV' is set in @flags@ and +-- @type@ is 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR', one member of +-- the @pNext@ chain /must/ be a pointer to a valid instance of +-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInfoNV' +-- +-- - #VUID-VkAccelerationStructureCreateInfoKHR-flags-04955# If any +-- geometry includes +-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureGeometryMotionTrianglesDataNV' +-- then @flags@ /must/ contain +-- 'ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV' +-- -- == Valid Usage (Implicit) -- -- - #VUID-VkAccelerationStructureCreateInfoKHR-sType-sType# @sType@ @@ -5624,7 +5749,11 @@ instance Zero AccelerationStructureBuildRangeInfoKHR where -- 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR' -- -- - #VUID-VkAccelerationStructureCreateInfoKHR-pNext-pNext# @pNext@ --- /must/ be @NULL@ +-- /must/ be @NULL@ or a pointer to a valid instance of +-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInfoNV' +-- +-- - #VUID-VkAccelerationStructureCreateInfoKHR-sType-unique# The @sType@ +-- value of each struct in the @pNext@ chain /must/ be unique -- -- - #VUID-VkAccelerationStructureCreateInfoKHR-createFlags-parameter# -- @createFlags@ /must/ be a valid combination of @@ -5644,8 +5773,10 @@ instance Zero AccelerationStructureBuildRangeInfoKHR where -- 'Vulkan.Core10.FundamentalTypes.DeviceSize', -- 'Vulkan.Core10.Enums.StructureType.StructureType', -- 'createAccelerationStructureKHR' -data AccelerationStructureCreateInfoKHR = AccelerationStructureCreateInfoKHR - { -- | @createFlags@ is a bitmask of 'AccelerationStructureCreateFlagBitsKHR' +data AccelerationStructureCreateInfoKHR (es :: [Type]) = AccelerationStructureCreateInfoKHR + { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure. + next :: Chain es + , -- | @createFlags@ is a bitmask of 'AccelerationStructureCreateFlagBitsKHR' -- specifying additional creation parameters of the acceleration structure. createFlags :: AccelerationStructureCreateFlagsKHR , -- | @buffer@ is the buffer on which the acceleration structure will be @@ -5666,37 +5797,50 @@ data AccelerationStructureCreateInfoKHR = AccelerationStructureCreateInfoKHR -- feature is being used. deviceAddress :: DeviceAddress } - deriving (Typeable, Eq) + deriving (Typeable) #if defined(GENERIC_INSTANCES) -deriving instance Generic (AccelerationStructureCreateInfoKHR) +deriving instance Generic (AccelerationStructureCreateInfoKHR (es :: [Type])) #endif -deriving instance Show AccelerationStructureCreateInfoKHR - -instance ToCStruct AccelerationStructureCreateInfoKHR where +deriving instance Show (Chain es) => Show (AccelerationStructureCreateInfoKHR es) + +instance Extensible AccelerationStructureCreateInfoKHR where + extensibleTypeName = "AccelerationStructureCreateInfoKHR" + setNext x next = x{next = next} + getNext AccelerationStructureCreateInfoKHR{..} = next + extends :: forall e b proxy. Typeable e => proxy e -> (Extends AccelerationStructureCreateInfoKHR e => b) -> Maybe b + extends _ f + | Just Refl <- eqT @e @AccelerationStructureMotionInfoNV = Just f + | otherwise = Nothing + +instance (Extendss AccelerationStructureCreateInfoKHR es, PokeChain es) => ToCStruct (AccelerationStructureCreateInfoKHR es) where withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p) - pokeCStruct p AccelerationStructureCreateInfoKHR{..} f = do - poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR) - poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr) - poke ((p `plusPtr` 16 :: Ptr AccelerationStructureCreateFlagsKHR)) (createFlags) - poke ((p `plusPtr` 24 :: Ptr Buffer)) (buffer) - poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (offset) - poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (size) - poke ((p `plusPtr` 48 :: Ptr AccelerationStructureTypeKHR)) (type') - poke ((p `plusPtr` 56 :: Ptr DeviceAddress)) (deviceAddress) - f + pokeCStruct p AccelerationStructureCreateInfoKHR{..} f = evalContT $ do + lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR) + pNext'' <- fmap castPtr . ContT $ withChain (next) + lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'' + lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureCreateFlagsKHR)) (createFlags) + lift $ poke ((p `plusPtr` 24 :: Ptr Buffer)) (buffer) + lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (offset) + lift $ poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (size) + lift $ poke ((p `plusPtr` 48 :: Ptr AccelerationStructureTypeKHR)) (type') + lift $ poke ((p `plusPtr` 56 :: Ptr DeviceAddress)) (deviceAddress) + lift $ f cStructSize = 64 cStructAlignment = 8 - pokeZeroCStruct p f = do - poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR) - poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr) - poke ((p `plusPtr` 24 :: Ptr Buffer)) (zero) - poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero) - poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (zero) - poke ((p `plusPtr` 48 :: Ptr AccelerationStructureTypeKHR)) (zero) - f + pokeZeroCStruct p f = evalContT $ do + lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR) + pNext' <- fmap castPtr . ContT $ withZeroChain @es + lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext' + lift $ poke ((p `plusPtr` 24 :: Ptr Buffer)) (zero) + lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero) + lift $ poke ((p `plusPtr` 40 :: Ptr DeviceSize)) (zero) + lift $ poke ((p `plusPtr` 48 :: Ptr AccelerationStructureTypeKHR)) (zero) + lift $ f -instance FromCStruct AccelerationStructureCreateInfoKHR where +instance (Extendss AccelerationStructureCreateInfoKHR es, PeekChain es) => FromCStruct (AccelerationStructureCreateInfoKHR es) where peekCStruct p = do + pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ()))) + next <- peekChain (castPtr pNext) createFlags <- peek @AccelerationStructureCreateFlagsKHR ((p `plusPtr` 16 :: Ptr AccelerationStructureCreateFlagsKHR)) buffer <- peek @Buffer ((p `plusPtr` 24 :: Ptr Buffer)) offset <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize)) @@ -5704,16 +5848,11 @@ instance FromCStruct AccelerationStructureCreateInfoKHR where type' <- peek @AccelerationStructureTypeKHR ((p `plusPtr` 48 :: Ptr AccelerationStructureTypeKHR)) deviceAddress <- peek @DeviceAddress ((p `plusPtr` 56 :: Ptr DeviceAddress)) pure $ AccelerationStructureCreateInfoKHR - createFlags buffer offset size type' deviceAddress + next createFlags buffer offset size type' deviceAddress -instance Storable AccelerationStructureCreateInfoKHR where - sizeOf ~_ = 64 - alignment ~_ = 8 - peek = peekCStruct - poke ptr poked = pokeCStruct ptr poked (pure ()) - -instance Zero AccelerationStructureCreateInfoKHR where +instance es ~ '[] => Zero (AccelerationStructureCreateInfoKHR es) where zero = AccelerationStructureCreateInfoKHR + () zero zero zero @@ -5817,7 +5956,8 @@ instance Zero AabbPositionsKHR where -- -- = See Also -- --- 'AccelerationStructureInstanceKHR' +-- 'AccelerationStructureInstanceKHR', +-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMatrixMotionInstanceNV' data TransformMatrixKHR = TransformMatrixKHR { -- No documentation found for Nested "VkTransformMatrixKHR" "matrixRow0" matrixRow0 :: (Float, Float, Float, Float) @@ -5916,6 +6056,7 @@ instance Zero TransformMatrixKHR where -- -- = See Also -- +-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.AccelerationStructureMotionInstanceDataNV', -- 'GeometryInstanceFlagsKHR', 'TransformMatrixKHR' data AccelerationStructureInstanceKHR = AccelerationStructureInstanceKHR { -- | @transform@ is a 'TransformMatrixKHR' structure describing a @@ -6513,7 +6654,7 @@ instance Zero DeviceOrHostAddressConstKHR where data AccelerationStructureGeometryDataKHR - = Triangles AccelerationStructureGeometryTrianglesDataKHR + = Triangles (SomeStruct AccelerationStructureGeometryTrianglesDataKHR) | Aabbs AccelerationStructureGeometryAabbsDataKHR | Instances AccelerationStructureGeometryInstancesDataKHR deriving (Show) @@ -6522,7 +6663,7 @@ instance ToCStruct AccelerationStructureGeometryDataKHR where withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p) pokeCStruct :: Ptr AccelerationStructureGeometryDataKHR -> AccelerationStructureGeometryDataKHR -> IO a -> IO a pokeCStruct p = (. const) . runContT . \case - Triangles v -> ContT $ pokeCStruct (castPtr @_ @AccelerationStructureGeometryTrianglesDataKHR p) (v) . ($ ()) + Triangles v -> ContT $ pokeSomeCStruct (forgetExtensions (castPtr @_ @(AccelerationStructureGeometryTrianglesDataKHR _) p)) (v) . ($ ()) Aabbs v -> ContT $ pokeCStruct (castPtr @_ @AccelerationStructureGeometryAabbsDataKHR p) (v) . ($ ()) Instances v -> ContT $ pokeCStruct (castPtr @_ @AccelerationStructureGeometryInstancesDataKHR p) (v) . ($ ()) pokeZeroCStruct :: Ptr AccelerationStructureGeometryDataKHR -> IO b -> IO b @@ -6531,7 +6672,7 @@ instance ToCStruct AccelerationStructureGeometryDataKHR where cStructAlignment = 8 instance Zero AccelerationStructureGeometryDataKHR where - zero = Triangles zero + zero = Triangles (SomeStruct zero) type GeometryInstanceFlagsKHR = GeometryInstanceFlagBitsKHR @@ -6689,6 +6830,8 @@ pattern BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR = BuildAccelerati -- and the final result acceleration structure, potentially at the expense -- of build time or trace performance. pattern BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR = BuildAccelerationStructureFlagBitsKHR 0x00000010 +-- No documentation found for Nested "VkBuildAccelerationStructureFlagBitsKHR" "VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV" +pattern BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV = BuildAccelerationStructureFlagBitsKHR 0x00000020 conNameBuildAccelerationStructureFlagBitsKHR :: String conNameBuildAccelerationStructureFlagBitsKHR = "BuildAccelerationStructureFlagBitsKHR" @@ -6703,6 +6846,7 @@ showTableBuildAccelerationStructureFlagBitsKHR = , (BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR, "PREFER_FAST_TRACE_BIT_KHR") , (BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR, "PREFER_FAST_BUILD_BIT_KHR") , (BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR , "LOW_MEMORY_BIT_KHR") + , (BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV , "MOTION_BIT_NV") ] instance Show BuildAccelerationStructureFlagBitsKHR where @@ -6735,17 +6879,20 @@ newtype AccelerationStructureCreateFlagBitsKHR = AccelerationStructureCreateFlag -- reused on a subsequent run. pattern ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = AccelerationStructureCreateFlagBitsKHR 0x00000001 +-- No documentation found for Nested "VkAccelerationStructureCreateFlagBitsKHR" "VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV" +pattern ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV = AccelerationStructureCreateFlagBitsKHR 0x00000004 conNameAccelerationStructureCreateFlagBitsKHR :: String conNameAccelerationStructureCreateFlagBitsKHR = "AccelerationStructureCreateFlagBitsKHR" enumPrefixAccelerationStructureCreateFlagBitsKHR :: String -enumPrefixAccelerationStructureCreateFlagBitsKHR = - "ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR" +enumPrefixAccelerationStructureCreateFlagBitsKHR = "ACCELERATION_STRUCTURE_CREATE_" showTableAccelerationStructureCreateFlagBitsKHR :: [(AccelerationStructureCreateFlagBitsKHR, String)] showTableAccelerationStructureCreateFlagBitsKHR = - [(ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR, "")] + [ (ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR, "DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR") + , (ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV , "MOTION_BIT_NV") + ] instance Show AccelerationStructureCreateFlagBitsKHR where showsPrec = enumShowsPrec enumPrefixAccelerationStructureCreateFlagBitsKHR diff --git a/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs-boot b/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs-boot index 7c9fe68eb..03bc75601 100644 --- a/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs-boot +++ b/src/Vulkan/Extensions/VK_KHR_acceleration_structure.hs-boot @@ -1167,7 +1167,10 @@ module Vulkan.Extensions.VK_KHR_acceleration_structure ( AabbPositionsKHR 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 (PeekChain) +import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain) data AabbPositionsKHR instance ToCStruct AabbPositionsKHR @@ -1198,12 +1201,13 @@ instance Show AccelerationStructureBuildSizesInfoKHR instance FromCStruct AccelerationStructureBuildSizesInfoKHR -data AccelerationStructureCreateInfoKHR +type role AccelerationStructureCreateInfoKHR nominal +data AccelerationStructureCreateInfoKHR (es :: [Type]) -instance ToCStruct AccelerationStructureCreateInfoKHR -instance Show AccelerationStructureCreateInfoKHR +instance (Extendss AccelerationStructureCreateInfoKHR es, PokeChain es) => ToCStruct (AccelerationStructureCreateInfoKHR es) +instance Show (Chain es) => Show (AccelerationStructureCreateInfoKHR es) -instance FromCStruct AccelerationStructureCreateInfoKHR +instance (Extendss AccelerationStructureCreateInfoKHR es, PeekChain es) => FromCStruct (AccelerationStructureCreateInfoKHR es) data AccelerationStructureDeviceAddressInfoKHR @@ -1232,10 +1236,11 @@ instance ToCStruct AccelerationStructureGeometryKHR instance Show AccelerationStructureGeometryKHR -data AccelerationStructureGeometryTrianglesDataKHR +type role AccelerationStructureGeometryTrianglesDataKHR nominal +data AccelerationStructureGeometryTrianglesDataKHR (es :: [Type]) -instance ToCStruct AccelerationStructureGeometryTrianglesDataKHR -instance Show AccelerationStructureGeometryTrianglesDataKHR +instance (Extendss AccelerationStructureGeometryTrianglesDataKHR es, PokeChain es) => ToCStruct (AccelerationStructureGeometryTrianglesDataKHR es) +instance Show (Chain es) => Show (AccelerationStructureGeometryTrianglesDataKHR es) data AccelerationStructureInstanceKHR diff --git a/src/Vulkan/Extensions/VK_KHR_ray_tracing_pipeline.hs b/src/Vulkan/Extensions/VK_KHR_ray_tracing_pipeline.hs index 0fc9ccf0e..ab7e6dec7 100644 --- a/src/Vulkan/Extensions/VK_KHR_ray_tracing_pipeline.hs +++ b/src/Vulkan/Extensions/VK_KHR_ray_tracing_pipeline.hs @@ -2160,6 +2160,12 @@ foreign import ccall -- -- feature /must/ be enabled -- +-- - #VUID-vkCmdTraceRaysIndirectKHR-rayTracingMotionBlurPipelineTraceRaysIndirect-04951# +-- If the bound ray tracing pipeline was created with +-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV' +-- 'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.PhysicalDeviceRayTracingMotionBlurFeaturesNV'::@rayTracingMotionBlurPipelineTraceRaysIndirect@ +-- feature /must/ be enabled +-- -- == Valid Usage (Implicit) -- -- - #VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-parameter# diff --git a/src/Vulkan/Extensions/VK_KHR_synchronization2.hs b/src/Vulkan/Extensions/VK_KHR_synchronization2.hs index 949ca1fb2..ace540370 100644 --- a/src/Vulkan/Extensions/VK_KHR_synchronization2.hs +++ b/src/Vulkan/Extensions/VK_KHR_synchronization2.hs @@ -880,7 +880,7 @@ foreign import ccall -- feature is not enabled, @stageMask@ /must/ not contain -- 'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV' -- --- - #VUID-vkCmdResetEvent2KHR-stageMask-03936# If the +-- - #VUID-vkCmdResetEvent2KHR-stageMask-04956# If the -- -- feature is not enabled, @stageMask@ /must/ not contain -- 'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV' @@ -1651,13 +1651,13 @@ foreign import ccall -- at any specific stage of the pipeline, it /may/ instead do so at any -- logically later stage. -- --- Timestamps /may/ only be meaningfully compared if they are written by --- commands submitted to the same queue. +-- 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 determining the execution time of a --- sequence of commands. +-- An example of such a comparison is subtracting an older timestamp from a +-- newer one to determine the execution time of a sequence of commands. -- -- If 'cmdWriteTimestamp2KHR' is called while executing a render pass -- instance that has multiview enabled, the timestamp uses N consecutive @@ -1719,7 +1719,7 @@ foreign import ccall -- feature is not enabled, @stage@ /must/ not contain -- 'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV' -- --- - #VUID-vkCmdWriteTimestamp2KHR-stage-03936# If the +-- - #VUID-vkCmdWriteTimestamp2KHR-stage-04956# If the -- -- feature is not enabled, @stage@ /must/ not contain -- 'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV' @@ -1909,7 +1909,7 @@ foreign import ccall -- feature is not enabled, @stage@ /must/ not contain -- 'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV' -- --- - #VUID-vkCmdWriteBufferMarker2AMD-stage-03936# If the +-- - #VUID-vkCmdWriteBufferMarker2AMD-stage-04956# If the -- -- feature is not enabled, @stage@ /must/ not contain -- 'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV' @@ -2171,7 +2171,7 @@ pattern PIPELINE_STAGE_2_TRANSFER_BIT_KHR = PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KH -- feature is not enabled, @srcStageMask@ /must/ not contain -- 'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV' -- --- - #VUID-VkMemoryBarrier2KHR-srcStageMask-03936# If the +-- - #VUID-VkMemoryBarrier2KHR-srcStageMask-04956# If the -- -- feature is not enabled, @srcStageMask@ /must/ not contain -- 'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV' @@ -2400,7 +2400,7 @@ pattern PIPELINE_STAGE_2_TRANSFER_BIT_KHR = PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KH -- feature is not enabled, @dstStageMask@ /must/ not contain -- 'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV' -- --- - #VUID-VkMemoryBarrier2KHR-dstStageMask-03936# If the +-- - #VUID-VkMemoryBarrier2KHR-dstStageMask-04956# If the -- -- feature is not enabled, @dstStageMask@ /must/ not contain -- 'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV' @@ -2796,7 +2796,7 @@ instance Zero MemoryBarrier2KHR where -- feature is not enabled, @srcStageMask@ /must/ not contain -- 'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV' -- --- - #VUID-VkImageMemoryBarrier2KHR-srcStageMask-03936# If the +-- - #VUID-VkImageMemoryBarrier2KHR-srcStageMask-04956# If the -- -- feature is not enabled, @srcStageMask@ /must/ not contain -- 'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV' @@ -3043,7 +3043,7 @@ instance Zero MemoryBarrier2KHR where -- feature is not enabled, @dstStageMask@ /must/ not contain -- 'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV' -- --- - #VUID-VkImageMemoryBarrier2KHR-dstStageMask-03936# If the +-- - #VUID-VkImageMemoryBarrier2KHR-dstStageMask-04956# If the -- -- feature is not enabled, @dstStageMask@ /must/ not contain -- 'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV' @@ -3798,7 +3798,7 @@ instance es ~ '[] => Zero (ImageMemoryBarrier2KHR es) where -- feature is not enabled, @srcStageMask@ /must/ not contain -- 'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV' -- --- - #VUID-VkBufferMemoryBarrier2KHR-srcStageMask-03936# If the +-- - #VUID-VkBufferMemoryBarrier2KHR-srcStageMask-04956# If the -- -- feature is not enabled, @srcStageMask@ /must/ not contain -- 'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV' @@ -4045,7 +4045,7 @@ instance es ~ '[] => Zero (ImageMemoryBarrier2KHR es) where -- feature is not enabled, @dstStageMask@ /must/ not contain -- 'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV' -- --- - #VUID-VkBufferMemoryBarrier2KHR-dstStageMask-03936# If the +-- - #VUID-VkBufferMemoryBarrier2KHR-dstStageMask-04956# If the -- -- feature is not enabled, @dstStageMask@ /must/ not contain -- 'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV' @@ -4598,7 +4598,7 @@ instance Zero DependencyInfoKHR where -- feature is not enabled, @stageMask@ /must/ not contain -- 'PIPELINE_STAGE_2_TASK_SHADER_BIT_NV' -- --- - #VUID-VkSemaphoreSubmitInfoKHR-stageMask-03936# If the +-- - #VUID-VkSemaphoreSubmitInfoKHR-stageMask-04956# If the -- -- feature is not enabled, @stageMask@ /must/ not contain -- 'PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV' diff --git a/src/Vulkan/Extensions/VK_NV_ray_tracing.hs b/src/Vulkan/Extensions/VK_NV_ray_tracing.hs index 883673881..cbd225b4b 100644 --- a/src/Vulkan/Extensions/VK_NV_ray_tracing.hs +++ b/src/Vulkan/Extensions/VK_NV_ray_tracing.hs @@ -2651,6 +2651,10 @@ instance Zero RayTracingShaderGroupCreateInfoNV where -- not include -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR' -- +-- - #VUID-VkRayTracingPipelineCreateInfoNV-flags-04948# @flags@ /must/ +-- not include +-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV' +-- -- - #VUID-VkRayTracingPipelineCreateInfoNV-flags-02957# @flags@ /must/ -- not include both -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DEFER_COMPILE_BIT_NV' diff --git a/src/Vulkan/Extensions/VK_NV_ray_tracing_motion_blur.hs b/src/Vulkan/Extensions/VK_NV_ray_tracing_motion_blur.hs new file mode 100644 index 000000000..dc3b6210e --- /dev/null +++ b/src/Vulkan/Extensions/VK_NV_ray_tracing_motion_blur.hs @@ -0,0 +1,1152 @@ +{-# language CPP #-} +-- | = Name +-- +-- VK_NV_ray_tracing_motion_blur - device extension +-- +-- == VK_NV_ray_tracing_motion_blur +-- +-- [__Name String__] +-- @VK_NV_ray_tracing_motion_blur@ +-- +-- [__Extension Type__] +-- Device extension +-- +-- [__Registered Extension Number__] +-- 328 +-- +-- [__Revision__] +-- 1 +-- +-- [__Extension and Version Dependencies__] +-- +-- - Requires Vulkan 1.0 +-- +-- - Requires @VK_KHR_ray_tracing_pipeline@ +-- +-- [__Contact__] +-- +-- - Eric Werness +-- +-- == Other Extension Metadata +-- +-- [__Last Modified Date__] +-- 2021-06-16 +-- +-- [__Interactions and External Dependencies__] +-- +-- - This extension requires +-- +-- +-- - This extension provides API support for +-- +-- +-- [__Contributors__] +-- +-- - Eric Werness, NVIDIA +-- +-- - Ashwin Lele, NVIDIA +-- +-- == Description +-- +-- Ray tracing support in the API provides an efficient mechanism to +-- intersect rays against static geometry, but rendering algorithms often +-- want to support motion, which is more efficiently supported with +-- motion-specific algorithms. This extension adds a set of mechanisms to +-- support fast tracing of moving geometry: +-- +-- - A ray pipeline trace call which takes a time parameter +-- +-- - Flags to enable motion support in an acceleration structure +-- +-- - Support for time-varying vertex positions in a geometry +-- +-- - Motion instances to move existing instances over time +-- +-- The motion represented here is parameterized across a normalized +-- timestep between 0.0 and 1.0. A motion trace using OpTraceRaysMotionNV +-- provides a time within that normalized range to be used when +-- intersecting that ray with geometry. The geometry can be provided with +-- motion by a combination of adding a second vertex position for time of +-- 1.0 using 'AccelerationStructureGeometryMotionTrianglesDataNV' and +-- providing multiple transforms in the instance using +-- 'AccelerationStructureMotionInstanceNV'. +-- +-- == New Structures +-- +-- - 'AccelerationStructureMatrixMotionInstanceNV' +-- +-- - 'AccelerationStructureMotionInstanceNV' +-- +-- - 'AccelerationStructureSRTMotionInstanceNV' +-- +-- - 'SRTDataNV' +-- +-- - Extending +-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureCreateInfoKHR': +-- +-- - 'AccelerationStructureMotionInfoNV' +-- +-- - Extending +-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureGeometryTrianglesDataKHR': +-- +-- - 'AccelerationStructureGeometryMotionTrianglesDataNV' +-- +-- - Extending +-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2', +-- 'Vulkan.Core10.Device.DeviceCreateInfo': +-- +-- - 'PhysicalDeviceRayTracingMotionBlurFeaturesNV' +-- +-- == New Unions +-- +-- - 'AccelerationStructureMotionInstanceDataNV' +-- +-- == New Enums +-- +-- - 'AccelerationStructureMotionInstanceTypeNV' +-- +-- == New Bitmasks +-- +-- - 'AccelerationStructureMotionInfoFlagsNV' +-- +-- - 'AccelerationStructureMotionInstanceFlagsNV' +-- +-- == New Enum Constants +-- +-- - 'NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME' +-- +-- - 'NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION' +-- +-- - Extending +-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureCreateFlagBitsKHR': +-- +-- - 'Vulkan.Extensions.VK_KHR_acceleration_structure.ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV' +-- +-- - Extending +-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.BuildAccelerationStructureFlagBitsKHR': +-- +-- - 'Vulkan.Extensions.VK_KHR_acceleration_structure.BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' +-- +-- - Extending +-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits': +-- +-- - 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV' +-- +-- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType': +-- +-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV' +-- +-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV' +-- +-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV' +-- +-- == Issues +-- +-- (1) What size is VkAccelerationStructureMotionInstanceNV? +-- +-- - Added a note on the structure size and made the stride explicit in +-- the language. +-- +-- (2) Allow arrayOfPointers for motion TLAS? +-- +-- - Yes, with a packed encoding to minimize the amount of data sent for +-- metadata. +-- +-- == Version History +-- +-- - Revision 1, 2020-06-16 (Eric Werness, Ashwin Lele) +-- +-- - Initial external release +-- +-- = See Also +-- +-- 'AccelerationStructureGeometryMotionTrianglesDataNV', +-- 'AccelerationStructureMatrixMotionInstanceNV', +-- 'AccelerationStructureMotionInfoFlagsNV', +-- 'AccelerationStructureMotionInfoNV', +-- 'AccelerationStructureMotionInstanceDataNV', +-- 'AccelerationStructureMotionInstanceFlagsNV', +-- 'AccelerationStructureMotionInstanceNV', +-- 'AccelerationStructureMotionInstanceTypeNV', +-- 'AccelerationStructureSRTMotionInstanceNV', +-- 'PhysicalDeviceRayTracingMotionBlurFeaturesNV', 'SRTDataNV' +-- +-- = Document Notes +-- +-- For more information, see the +-- +-- +-- This page is a generated document. Fixes and changes should be made to +-- the generator scripts, not directly. +module Vulkan.Extensions.VK_NV_ray_tracing_motion_blur ( PhysicalDeviceRayTracingMotionBlurFeaturesNV(..) + , AccelerationStructureGeometryMotionTrianglesDataNV(..) + , AccelerationStructureMotionInfoNV(..) + , SRTDataNV(..) + , AccelerationStructureSRTMotionInstanceNV(..) + , AccelerationStructureMatrixMotionInstanceNV(..) + , AccelerationStructureMotionInstanceNV(..) + , AccelerationStructureMotionInstanceDataNV(..) + , AccelerationStructureMotionInfoFlagsNV(..) + , AccelerationStructureMotionInstanceFlagsNV(..) + , AccelerationStructureMotionInstanceTypeNV( ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV + , ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV + , ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV + , .. + ) + , NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION + , pattern NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION + , NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME + , pattern NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME + , TransformMatrixKHR(..) + , AccelerationStructureInstanceKHR(..) + , DeviceOrHostAddressConstKHR(..) + , GeometryInstanceFlagBitsKHR(..) + , GeometryInstanceFlagsKHR + , BuildAccelerationStructureFlagBitsKHR(..) + , BuildAccelerationStructureFlagsKHR + , AccelerationStructureCreateFlagBitsKHR(..) + , AccelerationStructureCreateFlagsKHR + ) where + +import Vulkan.Internal.Utils (enumReadPrec) +import Vulkan.Internal.Utils (enumShowsPrec) +import Control.Exception.Base (bracket) +import Data.Bits ((.&.)) +import Data.Bits ((.|.)) +import Data.Bits (shiftL) +import Data.Bits (shiftR) +import Foreign.Marshal.Alloc (allocaBytesAligned) +import Foreign.Marshal.Alloc (callocBytes) +import Foreign.Marshal.Alloc (free) +import GHC.Ptr (castPtr) +import Foreign.Ptr (nullPtr) +import Foreign.Ptr (plusPtr) +import GHC.Show (showString) +import GHC.Show (showsPrec) +import Numeric (showHex) +import Data.Coerce (coerce) +import Control.Monad.Trans.Class (lift) +import Control.Monad.Trans.Cont (evalContT) +import Control.Monad.Trans.Cont (runContT) +import Vulkan.CStruct (FromCStruct) +import Vulkan.CStruct (FromCStruct(..)) +import Vulkan.CStruct (ToCStruct) +import Vulkan.CStruct (ToCStruct(..)) +import Vulkan.Zero (Zero) +import Vulkan.Zero (Zero(..)) +import Data.Bits (Bits) +import Data.Bits (FiniteBits) +import Data.String (IsString) +import Data.Typeable (Typeable) +import Foreign.C.Types (CFloat) +import Foreign.C.Types (CFloat(..)) +import Foreign.C.Types (CFloat(CFloat)) +import Foreign.Storable (Storable) +import Foreign.Storable (Storable(peek)) +import Foreign.Storable (Storable(poke)) +import qualified Foreign.Storable (Storable(..)) +import GHC.Generics (Generic) +import Data.Int (Int32) +import Foreign.Ptr (Ptr) +import GHC.Read (Read(readPrec)) +import GHC.Show (Show(showsPrec)) +import Data.Word (Word32) +import Data.Word (Word64) +import Data.Kind (Type) +import Control.Monad.Trans.Cont (ContT(..)) +import Vulkan.Core10.FundamentalTypes (bool32ToBool) +import Vulkan.Core10.FundamentalTypes (boolToBool32) +import Vulkan.Extensions.VK_KHR_acceleration_structure (AccelerationStructureInstanceKHR) +import Vulkan.Core10.FundamentalTypes (Bool32) +import Vulkan.Extensions.VK_KHR_acceleration_structure (DeviceOrHostAddressConstKHR) +import Vulkan.Core10.FundamentalTypes (Flags) +import Vulkan.Extensions.VK_KHR_acceleration_structure (GeometryInstanceFlagsKHR) +import Vulkan.Core10.Enums.StructureType (StructureType) +import Vulkan.Extensions.VK_KHR_acceleration_structure (TransformMatrixKHR) +import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV)) +import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV)) +import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV)) +import Vulkan.Extensions.VK_KHR_acceleration_structure (AccelerationStructureCreateFlagBitsKHR(..)) +import Vulkan.Extensions.VK_KHR_acceleration_structure (AccelerationStructureCreateFlagsKHR) +import Vulkan.Extensions.VK_KHR_acceleration_structure (AccelerationStructureInstanceKHR(..)) +import Vulkan.Extensions.VK_KHR_acceleration_structure (BuildAccelerationStructureFlagBitsKHR(..)) +import Vulkan.Extensions.VK_KHR_acceleration_structure (BuildAccelerationStructureFlagsKHR) +import Vulkan.Extensions.VK_KHR_acceleration_structure (DeviceOrHostAddressConstKHR(..)) +import Vulkan.Extensions.VK_KHR_acceleration_structure (GeometryInstanceFlagBitsKHR(..)) +import Vulkan.Extensions.VK_KHR_acceleration_structure (GeometryInstanceFlagsKHR) +import Vulkan.Extensions.VK_KHR_acceleration_structure (TransformMatrixKHR(..)) +-- | VkPhysicalDeviceRayTracingMotionBlurFeaturesNV - Structure describing +-- the ray tracing motion blur features that can be supported by an +-- implementation +-- +-- = Members +-- +-- This structure describes the following feature: * @sType@ is the type of +-- this structure. * @pNext@ is @NULL@ or a pointer to a structure +-- extending this structure. * #features-rayTracingMotionBlur# +-- @rayTracingMotionBlur@ indicates whether the implementation supports the +-- motion blur feature. * +-- #features-rayTracingMotionBlurPipelineTraceRaysIndirect# +-- @rayTracingMotionBlurPipelineTraceRaysIndirect@ indicates whether the +-- implementation supports indirect trace ray commands with the motion blur +-- feature enabled. +-- +-- = Description +-- +-- If the 'PhysicalDeviceRayTracingMotionBlurFeaturesNV' 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. 'PhysicalDeviceRayTracingMotionBlurFeaturesNV' /can/ also be +-- used in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to +-- selectively enable these features. +-- +-- == Valid Usage (Implicit) +-- +-- = See Also +-- +-- 'Vulkan.Core10.FundamentalTypes.Bool32', +-- 'Vulkan.Core10.Enums.StructureType.StructureType' +data PhysicalDeviceRayTracingMotionBlurFeaturesNV = PhysicalDeviceRayTracingMotionBlurFeaturesNV + { -- No documentation found for Nested "VkPhysicalDeviceRayTracingMotionBlurFeaturesNV" "rayTracingMotionBlur" + rayTracingMotionBlur :: Bool + , -- No documentation found for Nested "VkPhysicalDeviceRayTracingMotionBlurFeaturesNV" "rayTracingMotionBlurPipelineTraceRaysIndirect" + rayTracingMotionBlurPipelineTraceRaysIndirect :: Bool + } + deriving (Typeable, Eq) +#if defined(GENERIC_INSTANCES) +deriving instance Generic (PhysicalDeviceRayTracingMotionBlurFeaturesNV) +#endif +deriving instance Show PhysicalDeviceRayTracingMotionBlurFeaturesNV + +instance ToCStruct PhysicalDeviceRayTracingMotionBlurFeaturesNV where + withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p) + pokeCStruct p PhysicalDeviceRayTracingMotionBlurFeaturesNV{..} f = do + poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV) + poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr) + poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (rayTracingMotionBlur)) + poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (rayTracingMotionBlurPipelineTraceRaysIndirect)) + f + cStructSize = 24 + cStructAlignment = 8 + pokeZeroCStruct p f = do + poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV) + 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 PhysicalDeviceRayTracingMotionBlurFeaturesNV where + peekCStruct p = do + rayTracingMotionBlur <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32)) + rayTracingMotionBlurPipelineTraceRaysIndirect <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32)) + pure $ PhysicalDeviceRayTracingMotionBlurFeaturesNV + (bool32ToBool rayTracingMotionBlur) (bool32ToBool rayTracingMotionBlurPipelineTraceRaysIndirect) + +instance Storable PhysicalDeviceRayTracingMotionBlurFeaturesNV where + sizeOf ~_ = 24 + alignment ~_ = 8 + peek = peekCStruct + poke ptr poked = pokeCStruct ptr poked (pure ()) + +instance Zero PhysicalDeviceRayTracingMotionBlurFeaturesNV where + zero = PhysicalDeviceRayTracingMotionBlurFeaturesNV + zero + zero + + +-- | VkAccelerationStructureGeometryMotionTrianglesDataNV - Structure +-- specifying vertex motion in a bottom-level acceleration structure +-- +-- = Description +-- +-- If 'AccelerationStructureGeometryMotionTrianglesDataNV' is present in a +-- geometry, the basic vertex positions are used for the position of the +-- triangles in the geometry at time 0.0 and the @vertexData@ in +-- 'AccelerationStructureGeometryMotionTrianglesDataNV' is used for the +-- vertex positions at time 1.0, with positions linearly interpolated at +-- intermediate times. +-- +-- Indexing for 'AccelerationStructureGeometryMotionTrianglesDataNV' +-- @vertexData@ is equivalent to the basic vertex position data. +-- +-- == Valid Usage (Implicit) +-- +-- = See Also +-- +-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.DeviceOrHostAddressConstKHR', +-- 'Vulkan.Core10.Enums.StructureType.StructureType' +data AccelerationStructureGeometryMotionTrianglesDataNV = AccelerationStructureGeometryMotionTrianglesDataNV + { -- | @vertexData@ is a pointer to vertex data for this geometry at time 1.0 + vertexData :: DeviceOrHostAddressConstKHR } + deriving (Typeable) +#if defined(GENERIC_INSTANCES) +deriving instance Generic (AccelerationStructureGeometryMotionTrianglesDataNV) +#endif +deriving instance Show AccelerationStructureGeometryMotionTrianglesDataNV + +instance ToCStruct AccelerationStructureGeometryMotionTrianglesDataNV where + withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p) + pokeCStruct p AccelerationStructureGeometryMotionTrianglesDataNV{..} f = evalContT $ do + lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV) + lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr) + ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DeviceOrHostAddressConstKHR)) (vertexData) . ($ ()) + lift $ f + cStructSize = 24 + cStructAlignment = 8 + pokeZeroCStruct p f = evalContT $ do + lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV) + lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr) + ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ()) + lift $ f + +instance Zero AccelerationStructureGeometryMotionTrianglesDataNV where + zero = AccelerationStructureGeometryMotionTrianglesDataNV + zero + + +-- | VkAccelerationStructureMotionInfoNV - Structure specifying the +-- parameters of a newly created acceleration structure object +-- +-- == Valid Usage (Implicit) +-- +-- = See Also +-- +-- 'AccelerationStructureMotionInfoFlagsNV', +-- 'Vulkan.Core10.Enums.StructureType.StructureType' +data AccelerationStructureMotionInfoNV = AccelerationStructureMotionInfoNV + { -- | @maxInstances@ is the maximum number of instances that /may/ be used in + -- the motion top-level acceleration structure. + maxInstances :: Word32 + , -- | @flags@ is 0 and reserved for future use. + -- + -- #VUID-VkAccelerationStructureMotionInfoNV-flags-zerobitmask# @flags@ + -- /must/ be @0@ + flags :: AccelerationStructureMotionInfoFlagsNV + } + deriving (Typeable, Eq) +#if defined(GENERIC_INSTANCES) +deriving instance Generic (AccelerationStructureMotionInfoNV) +#endif +deriving instance Show AccelerationStructureMotionInfoNV + +instance ToCStruct AccelerationStructureMotionInfoNV where + withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p) + pokeCStruct p AccelerationStructureMotionInfoNV{..} f = do + poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV) + poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr) + poke ((p `plusPtr` 16 :: Ptr Word32)) (maxInstances) + poke ((p `plusPtr` 20 :: Ptr AccelerationStructureMotionInfoFlagsNV)) (flags) + f + cStructSize = 24 + cStructAlignment = 8 + pokeZeroCStruct p f = do + poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV) + poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr) + poke ((p `plusPtr` 16 :: Ptr Word32)) (zero) + f + +instance FromCStruct AccelerationStructureMotionInfoNV where + peekCStruct p = do + maxInstances <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32)) + flags <- peek @AccelerationStructureMotionInfoFlagsNV ((p `plusPtr` 20 :: Ptr AccelerationStructureMotionInfoFlagsNV)) + pure $ AccelerationStructureMotionInfoNV + maxInstances flags + +instance Storable AccelerationStructureMotionInfoNV where + sizeOf ~_ = 24 + alignment ~_ = 8 + peek = peekCStruct + poke ptr poked = pokeCStruct ptr poked (pure ()) + +instance Zero AccelerationStructureMotionInfoNV where + zero = AccelerationStructureMotionInfoNV + zero + zero + + +-- | VkSRTDataNV - Structure specifying a transform in SRT decomposition +-- +-- = Description +-- +-- This transform decomposition consists of three elements. The first is a +-- matrix S, consisting of a scale, shear, and translation, usually used to +-- define the pivot point of the following rotation. This matrix is +-- constructed from the parameters above by: +-- +-- \[S = +-- \left( +-- \begin{matrix} +-- sx & a & b & pvx \\ +-- 0 & sy & c & pvy \\ +-- 0 & 0 & sz & pvz +-- \end{matrix} +-- \right)\] +-- +-- The rotation quaternion is defined as: +-- +-- - @R@ = [ @qx@, @qy@, @qz@, @qw@ ] +-- +-- This is a rotation around a conceptual normalized axis [ ax, ay, az ] of +-- amount @theta@ such that: +-- +-- - [ @qx@, @qy@, @qz@ ] = sin(@theta@\/2) × [ @ax@, @ay@, @az@ ] +-- +-- and +-- +-- - @qw@ = cos(@theta@\/2) +-- +-- Finally, the transform has a translation T constructed from the +-- parameters above by: +-- +-- \[T = +-- \left( +-- \begin{matrix} +-- 1 & 0 & 0 & tx \\ +-- 0 & 1 & 0 & ty \\ +-- 0 & 0 & 1 & tz +-- \end{matrix} +-- \right)\] +-- +-- The effective derived transform is then given by +-- +-- - @T@ × @R@ × @S@ +-- +-- = See Also +-- +-- 'AccelerationStructureSRTMotionInstanceNV' +data SRTDataNV = SRTDataNV + { -- | @sx@ is the x component of the scale of the transform + sx :: Float + , -- | @a@ is one component of the shear for the transform + a :: Float + , -- | @b@ is one component of the shear for the transform + b :: Float + , -- | @pvx@ is the x component of the pivot point of the transform + pvx :: Float + , -- | @sy@ is the y component of the scale of the transform + sy :: Float + , -- | @c@ is one component of the shear for the transform + c :: Float + , -- | @pvy@ is the y component of the pivot point of the transform + pvy :: Float + , -- | @sz@ is the z component of the scale of the transform + sz :: Float + , -- | @pvz@ is the z component of the pivot point of the transform + pvz :: Float + , -- | @qx@ is the x component of the rotation quaternion + qx :: Float + , -- | @qy@ is the y component of the rotation quaternion + qy :: Float + , -- | @qz@ is the z component of the rotation quaternion + qz :: Float + , -- | @qw@ is the w component of the rotation quaternion + qw :: Float + , -- | @tx@ is the x component of the post-rotation translation + tx :: Float + , -- | @ty@ is the y component of the post-rotation translation + ty :: Float + , -- | @tz@ is the z component of the post-rotation translation + tz :: Float + } + deriving (Typeable, Eq) +#if defined(GENERIC_INSTANCES) +deriving instance Generic (SRTDataNV) +#endif +deriving instance Show SRTDataNV + +instance ToCStruct SRTDataNV where + withCStruct x f = allocaBytesAligned 64 4 $ \p -> pokeCStruct p x (f p) + pokeCStruct p SRTDataNV{..} f = do + poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (sx)) + poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (a)) + poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (b)) + poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (pvx)) + poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (sy)) + poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (c)) + poke ((p `plusPtr` 24 :: Ptr CFloat)) (CFloat (pvy)) + poke ((p `plusPtr` 28 :: Ptr CFloat)) (CFloat (sz)) + poke ((p `plusPtr` 32 :: Ptr CFloat)) (CFloat (pvz)) + poke ((p `plusPtr` 36 :: Ptr CFloat)) (CFloat (qx)) + poke ((p `plusPtr` 40 :: Ptr CFloat)) (CFloat (qy)) + poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (qz)) + poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (qw)) + poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (tx)) + poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (ty)) + poke ((p `plusPtr` 60 :: Ptr CFloat)) (CFloat (tz)) + f + cStructSize = 64 + cStructAlignment = 4 + pokeZeroCStruct p f = do + poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (zero)) + poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (zero)) + poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (zero)) + poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (zero)) + poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (zero)) + poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (zero)) + poke ((p `plusPtr` 24 :: Ptr CFloat)) (CFloat (zero)) + poke ((p `plusPtr` 28 :: Ptr CFloat)) (CFloat (zero)) + poke ((p `plusPtr` 32 :: Ptr CFloat)) (CFloat (zero)) + poke ((p `plusPtr` 36 :: Ptr CFloat)) (CFloat (zero)) + poke ((p `plusPtr` 40 :: Ptr CFloat)) (CFloat (zero)) + poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (zero)) + poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (zero)) + poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (zero)) + poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (zero)) + poke ((p `plusPtr` 60 :: Ptr CFloat)) (CFloat (zero)) + f + +instance FromCStruct SRTDataNV where + peekCStruct p = do + sx <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat)) + a <- peek @CFloat ((p `plusPtr` 4 :: Ptr CFloat)) + b <- peek @CFloat ((p `plusPtr` 8 :: Ptr CFloat)) + pvx <- peek @CFloat ((p `plusPtr` 12 :: Ptr CFloat)) + sy <- peek @CFloat ((p `plusPtr` 16 :: Ptr CFloat)) + c <- peek @CFloat ((p `plusPtr` 20 :: Ptr CFloat)) + pvy <- peek @CFloat ((p `plusPtr` 24 :: Ptr CFloat)) + sz <- peek @CFloat ((p `plusPtr` 28 :: Ptr CFloat)) + pvz <- peek @CFloat ((p `plusPtr` 32 :: Ptr CFloat)) + qx <- peek @CFloat ((p `plusPtr` 36 :: Ptr CFloat)) + qy <- peek @CFloat ((p `plusPtr` 40 :: Ptr CFloat)) + qz <- peek @CFloat ((p `plusPtr` 44 :: Ptr CFloat)) + qw <- peek @CFloat ((p `plusPtr` 48 :: Ptr CFloat)) + tx <- peek @CFloat ((p `plusPtr` 52 :: Ptr CFloat)) + ty <- peek @CFloat ((p `plusPtr` 56 :: Ptr CFloat)) + tz <- peek @CFloat ((p `plusPtr` 60 :: Ptr CFloat)) + pure $ SRTDataNV + (coerce @CFloat @Float sx) (coerce @CFloat @Float a) (coerce @CFloat @Float b) (coerce @CFloat @Float pvx) (coerce @CFloat @Float sy) (coerce @CFloat @Float c) (coerce @CFloat @Float pvy) (coerce @CFloat @Float sz) (coerce @CFloat @Float pvz) (coerce @CFloat @Float qx) (coerce @CFloat @Float qy) (coerce @CFloat @Float qz) (coerce @CFloat @Float qw) (coerce @CFloat @Float tx) (coerce @CFloat @Float ty) (coerce @CFloat @Float tz) + +instance Storable SRTDataNV where + sizeOf ~_ = 64 + alignment ~_ = 4 + peek = peekCStruct + poke ptr poked = pokeCStruct ptr poked (pure ()) + +instance Zero SRTDataNV where + zero = SRTDataNV + zero + zero + zero + zero + zero + zero + zero + zero + zero + zero + zero + zero + zero + zero + zero + zero + + +-- | VkAccelerationStructureSRTMotionInstanceNV - Structure specifying a +-- single acceleration structure SRT motion instance for building into an +-- acceleration structure geometry +-- +-- = Description +-- +-- The C language spec does not define the ordering of bit-fields, but in +-- practice, this struct produces the correct layout with existing +-- compilers. The intended bit pattern is for the following: +-- +-- If a compiler produces code that diverges from that pattern, +-- applications /must/ employ another method to set values according to the +-- correct bit pattern. +-- +-- The transform for a SRT motion instance at a point in time is derived +-- from component-wise linear interpolation of the two SRT transforms. That +-- is, for a @time@ in [0,1] the resulting transform is +-- +-- - @transformT0@ × (1 - @time@) + @transformT1@ × @time@ +-- +-- == Valid Usage (Implicit) +-- +-- = See Also +-- +-- 'AccelerationStructureMotionInstanceDataNV', +-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.GeometryInstanceFlagsKHR', +-- 'SRTDataNV' +data AccelerationStructureSRTMotionInstanceNV = AccelerationStructureSRTMotionInstanceNV + { -- | @transformT0@ is a 'SRTDataNV' structure describing a transformation to + -- be applied to the acceleration structure at time 0. + transformT0 :: SRTDataNV + , -- | @transformT1@ is a 'SRTDataNV' structure describing a transformation to + -- be applied to the acceleration structure at time 1. + transformT1 :: SRTDataNV + , -- | @instanceCustomIndex@ is a 24-bit user-specified index value accessible + -- to ray shaders in the @InstanceCustomIndexKHR@ built-in. + -- + -- @instanceCustomIndex@ and @mask@ occupy the same memory as if a single + -- @uint32_t@ was specified in their place + -- + -- - @instanceCustomIndex@ occupies the 24 least significant bits of that + -- memory + -- + -- - @mask@ occupies the 8 most significant bits of that memory + instanceCustomIndex :: Word32 + , -- | @mask@ is an 8-bit visibility mask for the geometry. The instance /may/ + -- only be hit if @rayMask & instance.mask != 0@ + mask :: Word32 + , -- | @instanceShaderBindingTableRecordOffset@ is a 24-bit offset used in + -- calculating the hit shader binding table index. + -- + -- @instanceShaderBindingTableRecordOffset@ and @flags@ occupy the same + -- memory as if a single @uint32_t@ was specified in their place + -- + -- - @instanceShaderBindingTableRecordOffset@ occupies the 24 least + -- significant bits of that memory + -- + -- - @flags@ occupies the 8 most significant bits of that memory + instanceShaderBindingTableRecordOffset :: Word32 + , -- | @flags@ is an 8-bit mask of + -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.GeometryInstanceFlagBitsKHR' + -- values to apply to this instance. + -- + -- #VUID-VkAccelerationStructureSRTMotionInstanceNV-flags-parameter# + -- @flags@ /must/ be a valid combination of + -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.GeometryInstanceFlagBitsKHR' + -- values + flags :: GeometryInstanceFlagsKHR + , -- | @accelerationStructureReference@ is either: + -- + -- - a device address containing the value obtained from + -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.getAccelerationStructureDeviceAddressKHR' + -- or + -- 'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV' + -- (used by device operations which reference acceleration structures) + -- or, + -- + -- - a 'Vulkan.Extensions.Handles.AccelerationStructureKHR' object (used + -- by host operations which reference acceleration structures). + accelerationStructureReference :: Word64 + } + deriving (Typeable) +#if defined(GENERIC_INSTANCES) +deriving instance Generic (AccelerationStructureSRTMotionInstanceNV) +#endif +deriving instance Show AccelerationStructureSRTMotionInstanceNV + +instance ToCStruct AccelerationStructureSRTMotionInstanceNV where + withCStruct x f = allocaBytesAligned 144 8 $ \p -> pokeCStruct p x (f p) + pokeCStruct p AccelerationStructureSRTMotionInstanceNV{..} f = do + poke ((p `plusPtr` 0 :: Ptr SRTDataNV)) (transformT0) + poke ((p `plusPtr` 64 :: Ptr SRTDataNV)) (transformT1) + poke ((p `plusPtr` 128 :: Ptr Word32)) (((coerce @_ @Word32 (mask)) `shiftL` 24) .|. (instanceCustomIndex)) + poke ((p `plusPtr` 132 :: Ptr Word32)) (((coerce @_ @Word32 (flags)) `shiftL` 24) .|. (instanceShaderBindingTableRecordOffset)) + poke ((p `plusPtr` 136 :: Ptr Word64)) (accelerationStructureReference) + f + cStructSize = 144 + cStructAlignment = 8 + pokeZeroCStruct p f = do + poke ((p `plusPtr` 0 :: Ptr SRTDataNV)) (zero) + poke ((p `plusPtr` 64 :: Ptr SRTDataNV)) (zero) + poke ((p `plusPtr` 136 :: Ptr Word64)) (zero) + f + +instance FromCStruct AccelerationStructureSRTMotionInstanceNV where + peekCStruct p = do + transformT0 <- peekCStruct @SRTDataNV ((p `plusPtr` 0 :: Ptr SRTDataNV)) + transformT1 <- peekCStruct @SRTDataNV ((p `plusPtr` 64 :: Ptr SRTDataNV)) + instanceCustomIndex <- peek @Word32 ((p `plusPtr` 128 :: Ptr Word32)) + let instanceCustomIndex' = ((instanceCustomIndex .&. coerce @Word32 0xffffff)) + mask <- peek @Word32 ((p `plusPtr` 128 :: Ptr Word32)) + let mask' = ((((mask `shiftR` 24)) .&. coerce @Word32 0xff)) + instanceShaderBindingTableRecordOffset <- peek @Word32 ((p `plusPtr` 132 :: Ptr Word32)) + let instanceShaderBindingTableRecordOffset' = ((instanceShaderBindingTableRecordOffset .&. coerce @Word32 0xffffff)) + flags <- peek @GeometryInstanceFlagsKHR ((p `plusPtr` 132 :: Ptr GeometryInstanceFlagsKHR)) + let flags' = ((((flags `shiftR` 24)) .&. coerce @Word32 0xff)) + accelerationStructureReference <- peek @Word64 ((p `plusPtr` 136 :: Ptr Word64)) + pure $ AccelerationStructureSRTMotionInstanceNV + transformT0 transformT1 instanceCustomIndex' mask' instanceShaderBindingTableRecordOffset' flags' accelerationStructureReference + +instance Storable AccelerationStructureSRTMotionInstanceNV where + sizeOf ~_ = 144 + alignment ~_ = 8 + peek = peekCStruct + poke ptr poked = pokeCStruct ptr poked (pure ()) + +instance Zero AccelerationStructureSRTMotionInstanceNV where + zero = AccelerationStructureSRTMotionInstanceNV + zero + zero + zero + zero + zero + zero + zero + + +-- | VkAccelerationStructureMatrixMotionInstanceNV - Structure specifying a +-- single acceleration structure matrix motion instance for building into +-- an acceleration structure geometry +-- +-- = Description +-- +-- The C language spec does not define the ordering of bit-fields, but in +-- practice, this struct produces the correct layout with existing +-- compilers. The intended bit pattern is for the following: +-- +-- If a compiler produces code that diverges from that pattern, +-- applications /must/ employ another method to set values according to the +-- correct bit pattern. +-- +-- The transform for a matrix motion instance at a point in time is derived +-- by component-wise linear interpolation of the two transforms. That is, +-- for a @time@ in [0,1] the resulting transform is +-- +-- - @transformT0@ × (1 - @time@) + @transformT1@ × @time@ +-- +-- == Valid Usage (Implicit) +-- +-- = See Also +-- +-- 'AccelerationStructureMotionInstanceDataNV', +-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.GeometryInstanceFlagsKHR', +-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.TransformMatrixKHR' +data AccelerationStructureMatrixMotionInstanceNV = AccelerationStructureMatrixMotionInstanceNV + { -- | @transformT0@ is a + -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.TransformMatrixKHR' + -- structure describing a transformation to be applied to the acceleration + -- structure at time 0. + transformT0 :: TransformMatrixKHR + , -- | @transformT1@ is a + -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.TransformMatrixKHR' + -- structure describing a transformation to be applied to the acceleration + -- structure at time 1. + transformT1 :: TransformMatrixKHR + , -- | @instanceCustomIndex@ is a 24-bit user-specified index value accessible + -- to ray shaders in the @InstanceCustomIndexKHR@ built-in. + -- + -- @instanceCustomIndex@ and @mask@ occupy the same memory as if a single + -- @uint32_t@ was specified in their place + -- + -- - @instanceCustomIndex@ occupies the 24 least significant bits of that + -- memory + -- + -- - @mask@ occupies the 8 most significant bits of that memory + instanceCustomIndex :: Word32 + , -- | @mask@ is an 8-bit visibility mask for the geometry. The instance /may/ + -- only be hit if @rayMask & instance.mask != 0@ + mask :: Word32 + , -- | @instanceShaderBindingTableRecordOffset@ is a 24-bit offset used in + -- calculating the hit shader binding table index. + -- + -- @instanceShaderBindingTableRecordOffset@ and @flags@ occupy the same + -- memory as if a single @uint32_t@ was specified in their place + -- + -- - @instanceShaderBindingTableRecordOffset@ occupies the 24 least + -- significant bits of that memory + -- + -- - @flags@ occupies the 8 most significant bits of that memory + instanceShaderBindingTableRecordOffset :: Word32 + , -- | @flags@ is an 8-bit mask of + -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.GeometryInstanceFlagBitsKHR' + -- values to apply to this instance. + -- + -- #VUID-VkAccelerationStructureMatrixMotionInstanceNV-flags-parameter# + -- @flags@ /must/ be a valid combination of + -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.GeometryInstanceFlagBitsKHR' + -- values + flags :: GeometryInstanceFlagsKHR + , -- | @accelerationStructureReference@ is either: + -- + -- - a device address containing the value obtained from + -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.getAccelerationStructureDeviceAddressKHR' + -- or + -- 'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV' + -- (used by device operations which reference acceleration structures) + -- or, + -- + -- - a 'Vulkan.Extensions.Handles.AccelerationStructureKHR' object (used + -- by host operations which reference acceleration structures). + accelerationStructureReference :: Word64 + } + deriving (Typeable) +#if defined(GENERIC_INSTANCES) +deriving instance Generic (AccelerationStructureMatrixMotionInstanceNV) +#endif +deriving instance Show AccelerationStructureMatrixMotionInstanceNV + +instance ToCStruct AccelerationStructureMatrixMotionInstanceNV where + withCStruct x f = allocaBytesAligned 112 8 $ \p -> pokeCStruct p x (f p) + pokeCStruct p AccelerationStructureMatrixMotionInstanceNV{..} f = do + poke ((p `plusPtr` 0 :: Ptr TransformMatrixKHR)) (transformT0) + poke ((p `plusPtr` 48 :: Ptr TransformMatrixKHR)) (transformT1) + poke ((p `plusPtr` 96 :: Ptr Word32)) (((coerce @_ @Word32 (mask)) `shiftL` 24) .|. (instanceCustomIndex)) + poke ((p `plusPtr` 100 :: Ptr Word32)) (((coerce @_ @Word32 (flags)) `shiftL` 24) .|. (instanceShaderBindingTableRecordOffset)) + poke ((p `plusPtr` 104 :: Ptr Word64)) (accelerationStructureReference) + f + cStructSize = 112 + cStructAlignment = 8 + pokeZeroCStruct p f = do + poke ((p `plusPtr` 0 :: Ptr TransformMatrixKHR)) (zero) + poke ((p `plusPtr` 48 :: Ptr TransformMatrixKHR)) (zero) + poke ((p `plusPtr` 104 :: Ptr Word64)) (zero) + f + +instance FromCStruct AccelerationStructureMatrixMotionInstanceNV where + peekCStruct p = do + transformT0 <- peekCStruct @TransformMatrixKHR ((p `plusPtr` 0 :: Ptr TransformMatrixKHR)) + transformT1 <- peekCStruct @TransformMatrixKHR ((p `plusPtr` 48 :: Ptr TransformMatrixKHR)) + instanceCustomIndex <- peek @Word32 ((p `plusPtr` 96 :: Ptr Word32)) + let instanceCustomIndex' = ((instanceCustomIndex .&. coerce @Word32 0xffffff)) + mask <- peek @Word32 ((p `plusPtr` 96 :: Ptr Word32)) + let mask' = ((((mask `shiftR` 24)) .&. coerce @Word32 0xff)) + instanceShaderBindingTableRecordOffset <- peek @Word32 ((p `plusPtr` 100 :: Ptr Word32)) + let instanceShaderBindingTableRecordOffset' = ((instanceShaderBindingTableRecordOffset .&. coerce @Word32 0xffffff)) + flags <- peek @GeometryInstanceFlagsKHR ((p `plusPtr` 100 :: Ptr GeometryInstanceFlagsKHR)) + let flags' = ((((flags `shiftR` 24)) .&. coerce @Word32 0xff)) + accelerationStructureReference <- peek @Word64 ((p `plusPtr` 104 :: Ptr Word64)) + pure $ AccelerationStructureMatrixMotionInstanceNV + transformT0 transformT1 instanceCustomIndex' mask' instanceShaderBindingTableRecordOffset' flags' accelerationStructureReference + +instance Storable AccelerationStructureMatrixMotionInstanceNV where + sizeOf ~_ = 112 + alignment ~_ = 8 + peek = peekCStruct + poke ptr poked = pokeCStruct ptr poked (pure ()) + +instance Zero AccelerationStructureMatrixMotionInstanceNV where + zero = AccelerationStructureMatrixMotionInstanceNV + zero + zero + zero + zero + zero + zero + zero + + +-- | VkAccelerationStructureMotionInstanceNV - Structure specifying a single +-- acceleration structure motion instance for building into an acceleration +-- structure geometry +-- +-- = Description +-- +-- Note +-- +-- If writing this other than with a standard C compiler, note that the +-- final structure should be 152 bytes in size. +-- +-- == Valid Usage (Implicit) +-- +-- - #VUID-VkAccelerationStructureMotionInstanceNV-type-parameter# @type@ +-- /must/ be a valid 'AccelerationStructureMotionInstanceTypeNV' value +-- +-- - #VUID-VkAccelerationStructureMotionInstanceNV-flags-zerobitmask# +-- @flags@ /must/ be @0@ +-- +-- - #VUID-VkAccelerationStructureMotionInstanceNV-staticInstance-parameter# +-- If @type@ is +-- 'ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV', the +-- @staticInstance@ member of @data@ /must/ be a valid +-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureInstanceKHR' +-- structure +-- +-- - #VUID-VkAccelerationStructureMotionInstanceNV-matrixMotionInstance-parameter# +-- If @type@ is +-- 'ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV', the +-- @matrixMotionInstance@ member of @data@ /must/ be a valid +-- 'AccelerationStructureMatrixMotionInstanceNV' structure +-- +-- - #VUID-VkAccelerationStructureMotionInstanceNV-srtMotionInstance-parameter# +-- If @type@ is +-- 'ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV', the +-- @srtMotionInstance@ member of @data@ /must/ be a valid +-- 'AccelerationStructureSRTMotionInstanceNV' structure +-- +-- = See Also +-- +-- 'AccelerationStructureMotionInstanceDataNV', +-- 'AccelerationStructureMotionInstanceFlagsNV', +-- 'AccelerationStructureMotionInstanceTypeNV' +data AccelerationStructureMotionInstanceNV = AccelerationStructureMotionInstanceNV + { -- | @type@ is a 'AccelerationStructureMotionInstanceTypeNV' enumerant + -- identifying which type of motion instance this is and which type of the + -- union is valid. + type' :: AccelerationStructureMotionInstanceTypeNV + , -- | @flags@ is currently unused, but is required to keep natural alignment + -- of @data@. + flags :: AccelerationStructureMotionInstanceFlagsNV + , -- | @data@ is a 'AccelerationStructureMotionInstanceDataNV' containing + -- motion instance data for this instance. + data' :: AccelerationStructureMotionInstanceDataNV + } + deriving (Typeable) +#if defined(GENERIC_INSTANCES) +deriving instance Generic (AccelerationStructureMotionInstanceNV) +#endif +deriving instance Show AccelerationStructureMotionInstanceNV + +instance ToCStruct AccelerationStructureMotionInstanceNV where + withCStruct x f = allocaBytesAligned 152 8 $ \p -> pokeCStruct p x (f p) + pokeCStruct p AccelerationStructureMotionInstanceNV{..} f = evalContT $ do + lift $ poke ((p `plusPtr` 0 :: Ptr AccelerationStructureMotionInstanceTypeNV)) (type') + lift $ poke ((p `plusPtr` 4 :: Ptr AccelerationStructureMotionInstanceFlagsNV)) (flags) + ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr AccelerationStructureMotionInstanceDataNV)) (data') . ($ ()) + lift $ f + cStructSize = 152 + cStructAlignment = 8 + pokeZeroCStruct p f = evalContT $ do + lift $ poke ((p `plusPtr` 0 :: Ptr AccelerationStructureMotionInstanceTypeNV)) (zero) + ContT $ pokeCStruct ((p `plusPtr` 8 :: Ptr AccelerationStructureMotionInstanceDataNV)) (zero) . ($ ()) + lift $ f + +instance Zero AccelerationStructureMotionInstanceNV where + zero = AccelerationStructureMotionInstanceNV + zero + zero + zero + + +data AccelerationStructureMotionInstanceDataNV + = StaticInstance AccelerationStructureInstanceKHR + | MatrixMotionInstance AccelerationStructureMatrixMotionInstanceNV + | SrtMotionInstance AccelerationStructureSRTMotionInstanceNV + deriving (Show) + +instance ToCStruct AccelerationStructureMotionInstanceDataNV where + withCStruct x f = allocaBytesAligned 144 8 $ \p -> pokeCStruct p x (f p) + pokeCStruct :: Ptr AccelerationStructureMotionInstanceDataNV -> AccelerationStructureMotionInstanceDataNV -> IO a -> IO a + pokeCStruct p = (. const) . runContT . \case + StaticInstance v -> lift $ poke (castPtr @_ @AccelerationStructureInstanceKHR p) (v) + MatrixMotionInstance v -> lift $ poke (castPtr @_ @AccelerationStructureMatrixMotionInstanceNV p) (v) + SrtMotionInstance v -> lift $ poke (castPtr @_ @AccelerationStructureSRTMotionInstanceNV p) (v) + pokeZeroCStruct :: Ptr AccelerationStructureMotionInstanceDataNV -> IO b -> IO b + pokeZeroCStruct _ f = f + cStructSize = 144 + cStructAlignment = 8 + +instance Zero AccelerationStructureMotionInstanceDataNV where + zero = SrtMotionInstance zero + + +-- No documentation found for TopLevel "VkAccelerationStructureMotionInfoFlagsNV" +newtype AccelerationStructureMotionInfoFlagsNV = AccelerationStructureMotionInfoFlagsNV Flags + deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits) + + + +conNameAccelerationStructureMotionInfoFlagsNV :: String +conNameAccelerationStructureMotionInfoFlagsNV = "AccelerationStructureMotionInfoFlagsNV" + +enumPrefixAccelerationStructureMotionInfoFlagsNV :: String +enumPrefixAccelerationStructureMotionInfoFlagsNV = "" + +showTableAccelerationStructureMotionInfoFlagsNV :: [(AccelerationStructureMotionInfoFlagsNV, String)] +showTableAccelerationStructureMotionInfoFlagsNV = [] + +instance Show AccelerationStructureMotionInfoFlagsNV where + showsPrec = enumShowsPrec enumPrefixAccelerationStructureMotionInfoFlagsNV + showTableAccelerationStructureMotionInfoFlagsNV + conNameAccelerationStructureMotionInfoFlagsNV + (\(AccelerationStructureMotionInfoFlagsNV x) -> x) + (\x -> showString "0x" . showHex x) + +instance Read AccelerationStructureMotionInfoFlagsNV where + readPrec = enumReadPrec enumPrefixAccelerationStructureMotionInfoFlagsNV + showTableAccelerationStructureMotionInfoFlagsNV + conNameAccelerationStructureMotionInfoFlagsNV + AccelerationStructureMotionInfoFlagsNV + + +-- No documentation found for TopLevel "VkAccelerationStructureMotionInstanceFlagsNV" +newtype AccelerationStructureMotionInstanceFlagsNV = AccelerationStructureMotionInstanceFlagsNV Flags + deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits) + + + +conNameAccelerationStructureMotionInstanceFlagsNV :: String +conNameAccelerationStructureMotionInstanceFlagsNV = "AccelerationStructureMotionInstanceFlagsNV" + +enumPrefixAccelerationStructureMotionInstanceFlagsNV :: String +enumPrefixAccelerationStructureMotionInstanceFlagsNV = "" + +showTableAccelerationStructureMotionInstanceFlagsNV :: [(AccelerationStructureMotionInstanceFlagsNV, String)] +showTableAccelerationStructureMotionInstanceFlagsNV = [] + +instance Show AccelerationStructureMotionInstanceFlagsNV where + showsPrec = enumShowsPrec enumPrefixAccelerationStructureMotionInstanceFlagsNV + showTableAccelerationStructureMotionInstanceFlagsNV + conNameAccelerationStructureMotionInstanceFlagsNV + (\(AccelerationStructureMotionInstanceFlagsNV x) -> x) + (\x -> showString "0x" . showHex x) + +instance Read AccelerationStructureMotionInstanceFlagsNV where + readPrec = enumReadPrec enumPrefixAccelerationStructureMotionInstanceFlagsNV + showTableAccelerationStructureMotionInstanceFlagsNV + conNameAccelerationStructureMotionInstanceFlagsNV + AccelerationStructureMotionInstanceFlagsNV + + +-- | VkAccelerationStructureMotionInstanceTypeNV - Enum specifying a type of +-- acceleration structure motion instance data for building into an +-- acceleration structure geometry +-- +-- = See Also +-- +-- 'AccelerationStructureMotionInstanceNV' +newtype AccelerationStructureMotionInstanceTypeNV = AccelerationStructureMotionInstanceTypeNV Int32 + deriving newtype (Eq, Ord, Storable, Zero) + +-- | 'ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV' specifies that +-- the instance is a static instance with no instance motion. +pattern ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV = AccelerationStructureMotionInstanceTypeNV 0 +-- | 'ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV' specifies +-- that the instance is a motion instance with motion specified by +-- interpolation between two matrices. +pattern ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV = AccelerationStructureMotionInstanceTypeNV 1 +-- | 'ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV' specifies +-- that the instance is a motion instance with motion specified by +-- interpolation in the SRT decomposition. +pattern ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV = AccelerationStructureMotionInstanceTypeNV 2 +{-# complete ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV, + ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV, + ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV :: AccelerationStructureMotionInstanceTypeNV #-} + +conNameAccelerationStructureMotionInstanceTypeNV :: String +conNameAccelerationStructureMotionInstanceTypeNV = "AccelerationStructureMotionInstanceTypeNV" + +enumPrefixAccelerationStructureMotionInstanceTypeNV :: String +enumPrefixAccelerationStructureMotionInstanceTypeNV = "ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_" + +showTableAccelerationStructureMotionInstanceTypeNV :: [(AccelerationStructureMotionInstanceTypeNV, String)] +showTableAccelerationStructureMotionInstanceTypeNV = + [ (ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV , "STATIC_NV") + , (ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV, "MATRIX_MOTION_NV") + , (ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV , "SRT_MOTION_NV") + ] + +instance Show AccelerationStructureMotionInstanceTypeNV where + showsPrec = enumShowsPrec enumPrefixAccelerationStructureMotionInstanceTypeNV + showTableAccelerationStructureMotionInstanceTypeNV + conNameAccelerationStructureMotionInstanceTypeNV + (\(AccelerationStructureMotionInstanceTypeNV x) -> x) + (showsPrec 11) + +instance Read AccelerationStructureMotionInstanceTypeNV where + readPrec = enumReadPrec enumPrefixAccelerationStructureMotionInstanceTypeNV + showTableAccelerationStructureMotionInstanceTypeNV + conNameAccelerationStructureMotionInstanceTypeNV + AccelerationStructureMotionInstanceTypeNV + + +type NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION = 1 + +-- No documentation found for TopLevel "VK_NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION" +pattern NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION :: forall a . Integral a => a +pattern NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION = 1 + + +type NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME = "VK_NV_ray_tracing_motion_blur" + +-- No documentation found for TopLevel "VK_NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME" +pattern NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a +pattern NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME = "VK_NV_ray_tracing_motion_blur" + diff --git a/src/Vulkan/Extensions/VK_NV_ray_tracing_motion_blur.hs-boot b/src/Vulkan/Extensions/VK_NV_ray_tracing_motion_blur.hs-boot new file mode 100644 index 000000000..a33f2c482 --- /dev/null +++ b/src/Vulkan/Extensions/VK_NV_ray_tracing_motion_blur.hs-boot @@ -0,0 +1,244 @@ +{-# language CPP #-} +-- | = Name +-- +-- VK_NV_ray_tracing_motion_blur - device extension +-- +-- == VK_NV_ray_tracing_motion_blur +-- +-- [__Name String__] +-- @VK_NV_ray_tracing_motion_blur@ +-- +-- [__Extension Type__] +-- Device extension +-- +-- [__Registered Extension Number__] +-- 328 +-- +-- [__Revision__] +-- 1 +-- +-- [__Extension and Version Dependencies__] +-- +-- - Requires Vulkan 1.0 +-- +-- - Requires @VK_KHR_ray_tracing_pipeline@ +-- +-- [__Contact__] +-- +-- - Eric Werness +-- +-- == Other Extension Metadata +-- +-- [__Last Modified Date__] +-- 2021-06-16 +-- +-- [__Interactions and External Dependencies__] +-- +-- - This extension requires +-- +-- +-- - This extension provides API support for +-- +-- +-- [__Contributors__] +-- +-- - Eric Werness, NVIDIA +-- +-- - Ashwin Lele, NVIDIA +-- +-- == Description +-- +-- Ray tracing support in the API provides an efficient mechanism to +-- intersect rays against static geometry, but rendering algorithms often +-- want to support motion, which is more efficiently supported with +-- motion-specific algorithms. This extension adds a set of mechanisms to +-- support fast tracing of moving geometry: +-- +-- - A ray pipeline trace call which takes a time parameter +-- +-- - Flags to enable motion support in an acceleration structure +-- +-- - Support for time-varying vertex positions in a geometry +-- +-- - Motion instances to move existing instances over time +-- +-- The motion represented here is parameterized across a normalized +-- timestep between 0.0 and 1.0. A motion trace using OpTraceRaysMotionNV +-- provides a time within that normalized range to be used when +-- intersecting that ray with geometry. The geometry can be provided with +-- motion by a combination of adding a second vertex position for time of +-- 1.0 using 'AccelerationStructureGeometryMotionTrianglesDataNV' and +-- providing multiple transforms in the instance using +-- 'AccelerationStructureMotionInstanceNV'. +-- +-- == New Structures +-- +-- - 'AccelerationStructureMatrixMotionInstanceNV' +-- +-- - 'AccelerationStructureMotionInstanceNV' +-- +-- - 'AccelerationStructureSRTMotionInstanceNV' +-- +-- - 'SRTDataNV' +-- +-- - Extending +-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureCreateInfoKHR': +-- +-- - 'AccelerationStructureMotionInfoNV' +-- +-- - Extending +-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureGeometryTrianglesDataKHR': +-- +-- - 'AccelerationStructureGeometryMotionTrianglesDataNV' +-- +-- - Extending +-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2', +-- 'Vulkan.Core10.Device.DeviceCreateInfo': +-- +-- - 'PhysicalDeviceRayTracingMotionBlurFeaturesNV' +-- +-- == New Unions +-- +-- - 'AccelerationStructureMotionInstanceDataNV' +-- +-- == New Enums +-- +-- - 'AccelerationStructureMotionInstanceTypeNV' +-- +-- == New Bitmasks +-- +-- - 'AccelerationStructureMotionInfoFlagsNV' +-- +-- - 'AccelerationStructureMotionInstanceFlagsNV' +-- +-- == New Enum Constants +-- +-- - 'NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME' +-- +-- - 'NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION' +-- +-- - Extending +-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.AccelerationStructureCreateFlagBitsKHR': +-- +-- - 'Vulkan.Extensions.VK_KHR_acceleration_structure.ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV' +-- +-- - Extending +-- 'Vulkan.Extensions.VK_KHR_acceleration_structure.BuildAccelerationStructureFlagBitsKHR': +-- +-- - 'Vulkan.Extensions.VK_KHR_acceleration_structure.BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV' +-- +-- - Extending +-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits': +-- +-- - 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV' +-- +-- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType': +-- +-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV' +-- +-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV' +-- +-- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV' +-- +-- == Issues +-- +-- (1) What size is VkAccelerationStructureMotionInstanceNV? +-- +-- - Added a note on the structure size and made the stride explicit in +-- the language. +-- +-- (2) Allow arrayOfPointers for motion TLAS? +-- +-- - Yes, with a packed encoding to minimize the amount of data sent for +-- metadata. +-- +-- == Version History +-- +-- - Revision 1, 2020-06-16 (Eric Werness, Ashwin Lele) +-- +-- - Initial external release +-- +-- = See Also +-- +-- 'AccelerationStructureGeometryMotionTrianglesDataNV', +-- 'AccelerationStructureMatrixMotionInstanceNV', +-- 'AccelerationStructureMotionInfoFlagsNV', +-- 'AccelerationStructureMotionInfoNV', +-- 'AccelerationStructureMotionInstanceDataNV', +-- 'AccelerationStructureMotionInstanceFlagsNV', +-- 'AccelerationStructureMotionInstanceNV', +-- 'AccelerationStructureMotionInstanceTypeNV', +-- 'AccelerationStructureSRTMotionInstanceNV', +-- 'PhysicalDeviceRayTracingMotionBlurFeaturesNV', 'SRTDataNV' +-- +-- = Document Notes +-- +-- For more information, see the +-- +-- +-- This page is a generated document. Fixes and changes should be made to +-- the generator scripts, not directly. +module Vulkan.Extensions.VK_NV_ray_tracing_motion_blur ( AccelerationStructureGeometryMotionTrianglesDataNV + , AccelerationStructureMatrixMotionInstanceNV + , AccelerationStructureMotionInfoNV + , AccelerationStructureMotionInstanceNV + , AccelerationStructureSRTMotionInstanceNV + , PhysicalDeviceRayTracingMotionBlurFeaturesNV + , SRTDataNV + ) where + +import Vulkan.CStruct (FromCStruct) +import Vulkan.CStruct (ToCStruct) +import Data.Kind (Type) + +data AccelerationStructureGeometryMotionTrianglesDataNV + +instance ToCStruct AccelerationStructureGeometryMotionTrianglesDataNV +instance Show AccelerationStructureGeometryMotionTrianglesDataNV + + +data AccelerationStructureMatrixMotionInstanceNV + +instance ToCStruct AccelerationStructureMatrixMotionInstanceNV +instance Show AccelerationStructureMatrixMotionInstanceNV + +instance FromCStruct AccelerationStructureMatrixMotionInstanceNV + + +data AccelerationStructureMotionInfoNV + +instance ToCStruct AccelerationStructureMotionInfoNV +instance Show AccelerationStructureMotionInfoNV + +instance FromCStruct AccelerationStructureMotionInfoNV + + +data AccelerationStructureMotionInstanceNV + +instance ToCStruct AccelerationStructureMotionInstanceNV +instance Show AccelerationStructureMotionInstanceNV + + +data AccelerationStructureSRTMotionInstanceNV + +instance ToCStruct AccelerationStructureSRTMotionInstanceNV +instance Show AccelerationStructureSRTMotionInstanceNV + +instance FromCStruct AccelerationStructureSRTMotionInstanceNV + + +data PhysicalDeviceRayTracingMotionBlurFeaturesNV + +instance ToCStruct PhysicalDeviceRayTracingMotionBlurFeaturesNV +instance Show PhysicalDeviceRayTracingMotionBlurFeaturesNV + +instance FromCStruct PhysicalDeviceRayTracingMotionBlurFeaturesNV + + +data SRTDataNV + +instance ToCStruct SRTDataNV +instance Show SRTDataNV + +instance FromCStruct SRTDataNV + diff --git a/src/Vulkan/Version.hs b/src/Vulkan/Version.hs index 9bb15f2d8..de62dbc72 100644 --- a/src/Vulkan/Version.hs +++ b/src/Vulkan/Version.hs @@ -19,11 +19,11 @@ import Data.Bits (shiftR) import Data.Word (Word32) pattern HEADER_VERSION :: Word32 -pattern HEADER_VERSION = 181 +pattern HEADER_VERSION = 182 pattern HEADER_VERSION_COMPLETE :: Word32 -pattern HEADER_VERSION_COMPLETE = MAKE_API_VERSION 1 2 181 +pattern HEADER_VERSION_COMPLETE = MAKE_API_VERSION 1 2 182 pattern MAKE_API_VERSION :: Word32 -> Word32 -> Word32 -> Word32 diff --git a/utils/changelog.md b/utils/changelog.md index 2574cc5c0..b9ea966d3 100644 --- a/utils/changelog.md +++ b/utils/changelog.md @@ -2,6 +2,9 @@ ## WIP +## [0.5.0.2] - 2021-06-22 +- Relax bounds on `vulkan` + ## [0.5.0.1] - 2021-06-09 - Squash warning diff --git a/utils/package.yaml b/utils/package.yaml index 251220664..644308f22 100644 --- a/utils/package.yaml +++ b/utils/package.yaml @@ -1,5 +1,5 @@ name: vulkan-utils -version: 0.5.0.1 +version: "0.5.0.2" synopsis: Utils for the vulkan package category: Graphics maintainer: Joe Hermaszewski @@ -39,7 +39,7 @@ library: - typed-process - unordered-containers - vector - - vulkan >= 3.6.14 && < 3.11 + - vulkan >= 3.6.14 && < 3.12 tests: doctests: diff --git a/utils/vulkan-utils.cabal b/utils/vulkan-utils.cabal index 35115a871..6ab39af07 100644 --- a/utils/vulkan-utils.cabal +++ b/utils/vulkan-utils.cabal @@ -5,7 +5,7 @@ cabal-version: 1.24 -- see: https://github.com/sol/hpack name: vulkan-utils -version: 0.5.0.1 +version: 0.5.0.2 synopsis: Utils for the vulkan package category: Graphics homepage: https://github.com/expipiplus1/vulkan#readme @@ -113,7 +113,7 @@ library , typed-process , unordered-containers , vector - , vulkan >=3.6.14 && <3.11 + , vulkan >=3.6.14 && <3.12 default-language: Haskell2010 test-suite doctests diff --git a/vulkan.cabal b/vulkan.cabal index 8e4b3f38c..8eebf5a7b 100644 --- a/vulkan.cabal +++ b/vulkan.cabal @@ -5,7 +5,7 @@ cabal-version: 2.2 -- see: https://github.com/sol/hpack name: vulkan -version: 3.10.4 +version: 3.11 synopsis: Bindings to the Vulkan graphics API. category: Graphics homepage: https://github.com/expipiplus1/vulkan#readme @@ -277,6 +277,7 @@ library Vulkan.Extensions.VK_AMD_texture_gather_bias_lod Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer Vulkan.Extensions.VK_EXT_4444_formats + Vulkan.Extensions.VK_EXT_acquire_drm_display Vulkan.Extensions.VK_EXT_acquire_xlib_display Vulkan.Extensions.VK_EXT_astc_decode_mode Vulkan.Extensions.VK_EXT_blend_operation_advanced @@ -320,7 +321,9 @@ library Vulkan.Extensions.VK_EXT_memory_budget Vulkan.Extensions.VK_EXT_memory_priority Vulkan.Extensions.VK_EXT_metal_surface + Vulkan.Extensions.VK_EXT_multi_draw Vulkan.Extensions.VK_EXT_pci_bus_info + Vulkan.Extensions.VK_EXT_physical_device_drm Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control Vulkan.Extensions.VK_EXT_pipeline_creation_feedback Vulkan.Extensions.VK_EXT_post_depth_coverage @@ -473,6 +476,7 @@ library Vulkan.Extensions.VK_NV_inherited_viewport_scissor Vulkan.Extensions.VK_NV_mesh_shader Vulkan.Extensions.VK_NV_ray_tracing + Vulkan.Extensions.VK_NV_ray_tracing_motion_blur Vulkan.Extensions.VK_NV_representative_fragment_test Vulkan.Extensions.VK_NV_sample_mask_override_coverage Vulkan.Extensions.VK_NV_scissor_exclusive