HORIZON HASKELLDocslts/ghc-9.14.x45dd5372026-10-11Search names, modules, packages, or :: a typeCtrl K

GHC 9.14.1 · lts/ghc-9.14.x · 45dd537 · 2026-10-11

Modulevulkan-3.27GHC2021

Vulkan.Extensions.VK_EXT_mesh_shader

Name

VK_EXT_mesh_shader - device extension

VK_EXT_mesh_shader

Name String

VK_EXT_mesh_shader

Extension Type

Device extension

Registered Extension Number

329

Revision

1

Ratification Status

Ratified

Extension and Version Dependencies

VK_KHR_spirv_1_4

or

Vulkan Version 1.2

API Interactions
  • Interacts with VK_VERSION_1_2

  • Interacts with VK_AMD_draw_indirect_count

  • Interacts with VK_EXT_device_generated_commands

  • Interacts with VK_KHR_draw_indirect_count

  • Interacts with VK_KHR_fragment_shading_rate

  • Interacts with VK_NV_device_generated_commands

  • Interacts with VkPhysicalDeviceMeshShaderFeaturesEXT::primitiveFragmentShadingRateMeshShader

SPIR-V Dependencies
Contact
Extension Proposal

VK_EXT_mesh_shader

Other Extension Metadata

Last Modified Date

2022-01-20

Interactions and External Dependencies
  • This extension provides API support for GLSL_EXT_mesh_shader

  • Interacts with Vulkan 1.1

  • Interacts with VK_KHR_multiview

  • Interacts with VK_KHR_fragment_shading_rate

Contributors
  • Christoph Kubisch, NVIDIA

  • Pat Brown, NVIDIA

  • Jeff Bolz, NVIDIA

  • Daniel Koch, NVIDIA

  • Piers Daniell, NVIDIA

  • Pierre Boudier, NVIDIA

  • Patrick Mours, NVIDIA

  • David Zhao Akeley, NVIDIA

  • Kedarnath Thangudu, NVIDIA

  • Timur Kristóf, Valve

  • Hans-Kristian Arntzen, Valve

  • Philip Rebohle, Valve

  • Mike Blumenkrantz, Valve

  • Slawomir Grajewski, Intel

  • Michal Pietrasiuk, Intel

  • Mariusz Merecki, Intel

  • Tom Olson, ARM

  • Jan-Harald Fredriksen, ARM

  • Sandeep Kakarlapudi, ARM

  • Ruihao Zhang, QUALCOMM

  • Ricardo Garcia, Igalia, S.L.

  • Tobias Hector, AMD

  • Stu Smith, AMD

Description

This extension provides a new mechanism allowing applications to generate collections of geometric primitives via programmable mesh shading. It is an alternative to the existing programmable primitive shading pipeline, which relied on generating input primitives by a fixed function assembler as well as fixed function vertex fetch.

This extension also adds support for the following SPIR-V extension in Vulkan:

New Commands

If Vulkan Version 1.2 or VK_KHR_draw_indirect_count or VK_AMD_draw_indirect_count is supported:

New Structures

New Enum Constants

If VK_EXT_device_generated_commands is supported:

If VK_NV_device_generated_commands is supported:

New or Modified Built-In Variables

  • PrimitivePointIndicesEXT

  • PrimitiveLineIndicesEXT

  • PrimitiveTriangleIndicesEXT

  • (modified)Position

  • (modified)PointSize

  • (modified)ClipDistance

  • (modified)CullDistance

  • (modified)PrimitiveId

  • (modified)Layer

  • (modified)ViewportIndex

  • (modified)NumWorkgroups

  • (modified)WorkgroupSize

  • (modified)WorkgroupId

  • (modified)LocalInvocationId

  • (modified)GlobalInvocationId

  • (modified)LocalInvocationIndex

  • (modified)NumSubgroups

  • (modified)SubgroupId

  • (modified)DrawIndex

  • (modified)PrimitiveShadingRateKHR

  • (modified)ViewIndex

New SPIR-V Capability

Version History

  • Revision 1, 2022-03-08 (Christoph Kubisch, Daniel Koch, Patrick Mours)

    • Initial revision

See Also

No cross-references are available

Document Notes

For more information, see the Vulkan Specification.

This page is a generated document. Fixes and changes should be made to the generator scripts, not directly.

  • 7 types
  • 3 values
  • Packagevulkan-3.27
  • Exports41
  • LanguageGHC2021
  • LicenceBSD-3-Clause
  • SourceVK_EXT_mesh_shader.hs
valuecmdDrawMeshTasksEXT
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command will be recorded.

  3. -> "groupCountX" ::: Word32

    groupCountX is the number of local workgroups to dispatch in the X dimension.

  4. -> "groupCountY" ::: Word32

    groupCountY is the number of local workgroups to dispatch in the Y dimension.

  5. -> "groupCountZ" ::: Word32

    groupCountZ is the number of local workgroups to dispatch in the Z dimension.

  6. -> io ()
#

vkCmdDrawMeshTasksEXT - Draw mesh task work items

Description

When the command is executed, a global workgroup consisting of groupCountX × groupCountY × groupCountZ local workgroups is assembled.

Valid Usage

Valid Usage (Implicit)

  • commandBuffer must be in the recording state

  • The CommandPool that commandBuffer was allocated from must support QUEUE_GRAPHICS_BIT operations

  • This command must only be called inside of a render pass instance

  • This command must not be called between suspended render pass instances

  • This command must only be called outside of a video coding scope

Host Synchronization

  • Host access to commandBuffer must be externally synchronized

  • Host access to the CommandPool that commandBuffer was allocated from must be externally synchronized

Command Properties

'

Command Buffer Levels

Render Pass Scope

Video Coding Scope

Supported Queue Types

Command Type

Primary Secondary

Inside

Outside

VK_QUEUE_GRAPHICS_BIT

Action

Conditional Rendering

vkCmdDrawMeshTasksEXT is affected by conditional rendering

See Also

VK_EXT_mesh_shader, CommandBuffer

valuecmdDrawMeshTasksIndirectEXT
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command is recorded.

  3. -> Buffer

    buffer is the buffer containing draw parameters.

  4. -> "offset" ::: DeviceSize

    offset is the byte offset into buffer where parameters begin.

  5. -> "drawCount" ::: Word32

    drawCount is the number of draws to execute, and can be zero.

  6. -> "stride" ::: Word32

    stride is the byte stride between successive sets of draw parameters.

  7. -> io ()
#

vkCmdDrawMeshTasksIndirectEXT - Issue an indirect mesh tasks draw into a command buffer

Description

cmdDrawMeshTasksIndirectEXT behaves similarly to cmdDrawMeshTasksEXT except that the parameters are read by the device from a buffer during execution. drawCount draws are executed by the command, with parameters taken from buffer starting at offset and increasing by stride bytes for each successive draw. The parameters of each draw are encoded in an array of DrawMeshTasksIndirectCommandEXT structures. If drawCount is less than or equal to one, stride is ignored.

Valid Usage

Valid Usage (Implicit)

  • buffer must be a valid Buffer handle

  • commandBuffer must be in the recording state

  • The CommandPool that commandBuffer was allocated from must support QUEUE_GRAPHICS_BIT operations

  • This command must only be called inside of a render pass instance

  • This command must not be called between suspended render pass instances

  • This command must only be called outside of a video coding scope

  • Both of buffer, and commandBuffer must have been created, allocated, or retrieved from the same Device

Host Synchronization

  • Host access to commandBuffer must be externally synchronized

  • Host access to the CommandPool that commandBuffer was allocated from must be externally synchronized

Command Properties

'

Command Buffer Levels

Render Pass Scope

Video Coding Scope

Supported Queue Types

Command Type

Primary Secondary

Inside

Outside

VK_QUEUE_GRAPHICS_BIT

Action

Conditional Rendering

vkCmdDrawMeshTasksIndirectEXT is affected by conditional rendering

See Also

VK_EXT_mesh_shader, Buffer, CommandBuffer, DeviceSize

valuecmdDrawMeshTasksIndirectCountEXT
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command is recorded.

  3. -> Buffer

    buffer is the buffer containing draw parameters.

  4. -> "offset" ::: DeviceSize

    offset is the byte offset into buffer where parameters begin.

  5. -> "countBuffer" ::: Buffer

    countBuffer is the buffer containing the draw count.

  6. -> "countBufferOffset" ::: DeviceSize

    countBufferOffset is the byte offset into countBuffer where the draw count begins.

  7. -> "maxDrawCount" ::: Word32

    maxDrawCount specifies the maximum number of draws that will be executed. The actual number of executed draw calls is the minimum of the count specified in countBuffer and maxDrawCount.

  8. -> "stride" ::: Word32

    stride is the byte stride between successive sets of draw parameters.

  9. -> io ()
#

vkCmdDrawMeshTasksIndirectCountEXT - Perform an indirect mesh tasks draw with the draw count sourced from a buffer

Description

cmdDrawMeshTasksIndirectCountEXT behaves similarly to cmdDrawMeshTasksIndirectEXT except that the draw count is read by the device from a buffer during execution. The command will read an unsigned 32-bit integer from countBuffer located at countBufferOffset and use this as the draw count.

Valid Usage

Valid Usage (Implicit)

  • buffer must be a valid Buffer handle

  • countBuffer must be a valid Buffer handle

  • commandBuffer must be in the recording state

  • The CommandPool that commandBuffer was allocated from must support QUEUE_GRAPHICS_BIT operations

  • This command must only be called inside of a render pass instance

  • This command must not be called between suspended render pass instances

  • This command must only be called outside of a video coding scope

  • Each of buffer, commandBuffer, and countBuffer must have been created, allocated, or retrieved from the same Device

Host Synchronization

  • Host access to commandBuffer must be externally synchronized

  • Host access to the CommandPool that commandBuffer was allocated from must be externally synchronized

Command Properties

'

Command Buffer Levels

Render Pass Scope

Video Coding Scope

Supported Queue Types

Command Type

Primary Secondary

Inside

Outside

VK_QUEUE_GRAPHICS_BIT

Action

Conditional Rendering

vkCmdDrawMeshTasksIndirectCountEXT is affected by conditional rendering

See Also

VK_AMD_draw_indirect_count, VK_EXT_mesh_shader, VK_KHR_draw_indirect_count, VK_VERSION_1_2, Buffer, CommandBuffer, DeviceSize

VkPhysicalDeviceMeshShaderFeaturesEXT - Structure describing mesh shading features that can be supported by an implementation

Description

If the PhysicalDeviceMeshShaderFeaturesEXT structure is included in the pNext chain of the PhysicalDeviceFeatures2 structure passed to getPhysicalDeviceFeatures2, it is filled in to indicate whether each corresponding feature is supported. If the application wishes to use a Device with any features described by PhysicalDeviceMeshShaderFeaturesEXT, it must add an instance of the structure, with the desired feature members set to TRUE, to the pNext chain of DeviceCreateInfo when creating the Device.

The corresponding features of the PhysicalDeviceMeshShaderFeaturesNV structure must match those in PhysicalDeviceMeshShaderFeaturesEXT.

Valid Usage

Valid Usage (Implicit)

Structure Chaining

Extends the structures

See Also

VK_EXT_mesh_shader, Bool32, StructureType

Constructors

Instances6Eq, Show, Storable, FromCStruct, ToCStruct, Zero

VkPhysicalDeviceMeshShaderPropertiesEXT - Structure describing mesh shading properties

Members

The members of the PhysicalDeviceMeshShaderPropertiesEXT structure describe the following implementation-dependent limits:

Description

If the PhysicalDeviceMeshShaderPropertiesEXT structure is included in the pNext chain of PhysicalDeviceProperties2, it is filled with the implementation-dependent limits.

Structure Chaining

Extends the structure

See Also

VK_EXT_mesh_shader, Bool32, StructureType

Constructors

  • PhysicalDeviceMeshShaderPropertiesEXT
    • maxTaskWorkGroupTotalCount :: Word32

      maxTaskWorkGroupTotalCount is the maximum number of local workgroups that can be launched for a task shader by a mesh tasks drawing command.

    • maxTaskWorkGroupCount :: (Word32, Word32, Word32)

      maxTaskWorkGroupCount[3] is the maximum number of local workgroups that can be launched for a task shader in each dimension by a mesh tasks drawing command. These three values represent the maximum number of local workgroups for the X, Y, and Z dimensions, respectively. The workgroup count parameters to the drawing commands must be less than or equal to the corresponding limit. The product of these dimensions must be less than or equal to maxTaskWorkGroupTotalCount.

    • maxTaskWorkGroupInvocations :: Word32

      maxTaskWorkGroupInvocations is the maximum total number of task shader invocations in a single local workgroup. The product of the X, Y, and Z sizes, as specified by the LocalSize or LocalSizeId execution mode in shader modules or by the object decorated by the WorkgroupSize decoration, must be less than or equal to this limit.

    • maxTaskWorkGroupSize :: (Word32, Word32, Word32)

      maxTaskWorkGroupSize[3] is the maximum size of a local workgroup for a task shader in each dimension. These three values represent the maximum local workgroup size in the X, Y, and Z dimensions, respectively. The x, y, and z sizes, as specified by the LocalSize or LocalSizeId execution mode or by the object decorated by the WorkgroupSize decoration in shader modules, must be less than or equal to the corresponding limit.

    • maxTaskPayloadSize :: Word32

      maxTaskPayloadSize is the maximum total storage size, in bytes, available for variables declared with the TaskPayloadWorkgroupEXT storage class in shader modules in the task shader stage.

    • maxTaskSharedMemorySize :: Word32

      maxTaskSharedMemorySize is the maximum total storage size, in bytes, available for variables declared with the Workgroup storage class in shader modules in the task shader stage.

    • maxTaskPayloadAndSharedMemorySize :: Word32

      maxTaskPayloadAndSharedMemorySize is the maximum total storage size, in bytes, available for variables that are declared with the TaskPayloadWorkgroupEXT or Workgroup storage class, in shader modules in the task shader stage.

    • maxMeshWorkGroupTotalCount :: Word32

      maxMeshWorkGroupTotalCount is the maximum number of local workgroups that can be launched for a mesh shader, either directly by a mesh tasks drawing command, or emitted by a single task shader workgroup.

    • maxMeshWorkGroupCount :: (Word32, Word32, Word32)

      maxMeshWorkGroupCount[3] is the maximum number of local workgroups that can be launched for a mesh shader in each dimension, either directly by a mesh tasks drawing command, or emitted by a single task shader workgroup. These three values represent the maximum number of local output tasks for the X, Y, and Z dimensions, respectively. The workgroup count parameters to the OpEmitMeshTasksEXT must be less than or equal to the corresponding limit. The product of these dimensions must be less than or equal to maxMeshWorkGroupTotalCount.

    • maxMeshWorkGroupInvocations :: Word32

      maxMeshWorkGroupInvocations is the maximum total number of mesh shader invocations in a single local workgroup. The product of the X, Y, and Z sizes, as specified by the LocalSize or LocalSizeId execution mode in shader modules or by the object decorated by the WorkgroupSize decoration, must be less than or equal to this limit.

    • maxMeshWorkGroupSize :: (Word32, Word32, Word32)

      maxMeshWorkGroupSize[3] is the maximum size of a local workgroup for a mesh shader in each dimension. These three values represent the maximum local workgroup size in the X, Y, and Z dimensions, respectively. The x, y, and z sizes, as specified by the LocalSize or LocalSizeId execution mode or by the object decorated by the WorkgroupSize decoration in shader modules, must be less than or equal to the corresponding limit.

    • maxMeshSharedMemorySize :: Word32

      maxMeshSharedMemorySize is the maximum total storage size, in bytes, available for variables declared with the Workgroup storage class in shader modules in the mesh shader stage.

    • maxMeshPayloadAndSharedMemorySize :: Word32

      maxMeshPayloadAndSharedMemorySize is the maximum total storage size, in bytes, available for variables that are declared with the TaskPayloadWorkgroupEXT or Workgroup storage class in shader modules in the mesh shader stage.

    • maxMeshOutputMemorySize :: Word32

      maxMeshOutputMemorySize is the maximum total storage size, in bytes, available for output variables in shader modules in the mesh shader stage, according to the formula in Mesh Shader Output.

    • maxMeshPayloadAndOutputMemorySize :: Word32

      maxMeshPayloadAndOutputMemorySize is the maximum total storage size, in bytes, available for variables that are declared with the TaskPayloadWorkgroupEXT storage class, or output variables in shader modules in the mesh shader stage, according to the formula in Mesh Shader Output.

    • maxMeshOutputComponents :: Word32

      maxMeshOutputComponents is the maximum number of components of output variables which can be output from the mesh shader stage.

    • maxMeshOutputVertices :: Word32

      maxMeshOutputVertices is the maximum number of vertices which can be emitted by a single mesh shader workgroup.

    • maxMeshOutputPrimitives :: Word32

      maxMeshOutputPrimitives is the maximum number of primitives which can be emitted by a single mesh shader workgroup.

    • maxMeshOutputLayers :: Word32

      maxMeshOutputLayers is one greater than the maximum layer index that can be output from the mesh shader stage.

    • maxMeshMultiviewViewCount :: Word32

      maxMeshMultiviewViewCount is one greater than the maximum view index that can be used by any mesh shader.

    • meshOutputPerVertexGranularity :: Word32

      meshOutputPerVertexGranularity is the granularity of vertex allocation. The number of output vertices allocated for the mesh shader stage is padded to a multiple of this number. The value can be used to calculate the required storage size for output variables in shader modules in the mesh shader stage, which must be less than or equal to maxMeshOutputMemorySize.

    • meshOutputPerPrimitiveGranularity :: Word32

      meshOutputPerPrimitiveGranularity is the granularity of primitive allocation. The number of output primitives allocated for the mesh shader stage is padded to a multiple of this number. The value can be used to calculate the required storage size for output variables in shader modules in the mesh shader stage, which must be less than or equal to maxMeshOutputMemorySize.

    • maxPreferredTaskWorkGroupInvocations :: Word32

      maxPreferredTaskWorkGroupInvocations is the maximum number of task shader invocations in a single workgroup that is preferred by the implementation for optimal performance. The value is guaranteed to be a multiple of a supported subgroup size for the task shader stage.

    • maxPreferredMeshWorkGroupInvocations :: Word32

      maxPreferredMeshWorkGroupInvocations is the maximum number of mesh shader invocations in a single workgroup that is preferred by the implementation for optimal performance. The value is guaranteed to be a multiple of a supported subgroup size for the mesh shader stage.

    • prefersLocalInvocationVertexOutput :: Bool

      prefersLocalInvocationVertexOutput specifies whether writes to the vertex output array in a mesh shader yield best performance when the array index matches LocalInvocationIndex.

    • prefersLocalInvocationPrimitiveOutput :: Bool

      prefersLocalInvocationPrimitiveOutput specifies whether writes to the primitive output array in a mesh shader yield best performance when the array index matches LocalInvocationIndex.

    • prefersCompactVertexOutput :: Bool

      prefersCompactVertexOutput specifies whether output vertices should be compacted after custom culling in the mesh shader for best performance, otherwise keeping the vertices at their original location may be better.

    • prefersCompactPrimitiveOutput :: Bool

      prefersCompactPrimitiveOutput specifies whether output primitives should be compacted after custom culling in the mesh shader for best performance, otherwise the use of CullPrimitiveEXT may be better.

Instances6Eq, Show, Storable, FromCStruct, ToCStruct, Zero

VkDrawMeshTasksIndirectCommandEXT - Structure specifying a mesh tasks draw indirect command

Description

The members of DrawMeshTasksIndirectCommandEXT have the same meaning as the similarly named parameters of cmdDrawMeshTasksEXT.

Valid Usage

See Also

VK_EXT_mesh_shader, cmdDrawMeshTasksIndirectEXT

Constructors

Instances6Eq, Show, Storable, FromCStruct, ToCStruct, Zero
newtypenewtype IndirectCommandsTokenTypeNV
#
Instances6Eq, Ord, Read, Show, Storable, Zero
newtypenewtype IndirectCommandsTokenTypeEXT
#

VkIndirectCommandsTokenTypeEXT - Enum specifying token commands

Description

'

Common Tokens

Command Data

INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT

u32[]

array of indices into the indirect execution set

INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT

u32[]

raw data

INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_DATA_EXT

u8[]

raw data

INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT

u32

placeholder data (not accessed by shader)

INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_DATA_SEQUENCE_INDEX_EXT

u32

placeholder data (not accessed by shader)

Compute Tokens

INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT

DispatchIndirectCommand

Ray Tracing Tokens

INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT

TraceRaysIndirectCommand2KHR

Graphics State Tokens

INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT

BindIndexBufferIndirectCommandEXT

INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT

BindVertexBufferIndirectCommandEXT

Graphics Draw Tokens

INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_EXT

DrawIndexedIndirectCommand

INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_EXT

DrawIndirectCommand

INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXT

DrawMeshTasksIndirectCommandEXT

INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXT

DrawMeshTasksIndirectCommandNV

Graphics Draw Count Tokens

INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_COUNT_EXT

DrawIndirectCountIndirectCommandEXT

with VkDrawIndexedIndirectCommand

INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_COUNT_EXT

DrawIndirectCountIndirectCommandEXT

with VkDrawIndirectCommand

INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT

DrawIndirectCountIndirectCommandEXT

with VkDrawMeshTasksIndirectCommandEXT

INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT

DrawIndirectCountIndirectCommandEXT

with VkDrawMeshTasksIndirectCommandNV

Supported Indirect Command Tokens

See Also

VK_EXT_device_generated_commands, IndirectCommandsLayoutTokenEXT

Instances6Eq, Ord, Read, Show, Storable, Zero