mirror of
https://github.com/status-im/Vulkan-Docs.git
synced 2025-01-11 14:34:08 +00:00
9858c1e89e
* Update release number to 85. Public Issues: * Add self-dependency ename:VK_DEPENDENCY_BY_REGION_BIT valid usage statements for slink:VkSubpassDependency(public pull request 778). * Apply fix from pull request 742 to slink:VkSubpassDependency and slink:VkSubpassDependency2 (public pull request 779). * Specify the units of slink:VkBufferImageCopy::pname:bufferRowLength and pname:bufferImageHeight as texels (public pull request 781). * Better specify promoted parameter mapping in the `<<VK_KHR_create_renderpass2>>` appendix (public pull request 782). Internal Issues: * Only include the <<fundamentals-validusage-versions, Valid Usage for Newer Core Versions>> section in Vulkan 1.1 or later (internal issue 1381). Other Issues: * Clean up redundant valid usage language for the `VK_ANDROID_external_memory_android_hardware_buffer` extension interaction with slink:VkImageCreateInfo. * Fix error in a flag name within valid usage statements for slink:VkMemoryAllocateInfo. * Clarify that memory types are not totally ordered in slink:VkPhysicalDeviceMemoryProperties. * For slink:VkWriteDescriptorSetInlineUniformBlockEXT, set structextends="VkWriteDescriptorSet" in `vk.xml`, and make slink:VkDescriptorSetLayoutBindingFlagsCreateInfoEXT::pname:pBindingFlags optional. * Add documentation of 'provisional' XML attribute to registry.txt. New Extensions: * `VK_NV_compute_shader_derivatives` * `VK_NV_corner_sampled_image` * `VK_NV_fragment_shader_barycentric` * `VK_NV_mesh_shader` * `VK_NV_representative_fragment_test` * `VK_NV_scissor_exclusive` * `VK_NV_shader_image_footprint` * `VK_NV_shading_rate_image` * `VK_NVX_raytracing`
169 lines
4.6 KiB
Plaintext
169 lines
4.6 KiB
Plaintext
include::meta/VK_NV_mesh_shader.txt[]
|
|
|
|
*Last Modified Date*::
|
|
2018-07-19
|
|
|
|
*Contributors*::
|
|
- Pat Brown, NVIDIA
|
|
- Jeff Bolz, NVIDIA
|
|
- Daniel Koch, NVIDIA
|
|
- Piers Daniell, NVIDIA
|
|
- Pierre Boudier, NVIDIA
|
|
|
|
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.
|
|
|
|
There are new programmable shader types -- the task and mesh shader -- to
|
|
generate these collections to be processed by fixed-function primitive
|
|
assembly and rasterization logic.
|
|
When the task and mesh shaders are dispatched, they replace the standard
|
|
programmable vertex processing pipeline, including vertex array attribute
|
|
fetching, vertex shader processing, tessellation, and the geometry shader
|
|
processing.
|
|
|
|
This extension also adds support for the following SPIR-V extension in
|
|
Vulkan:
|
|
* SPV_NV_mesh_shader
|
|
|
|
=== New Object Types
|
|
|
|
None.
|
|
|
|
=== New Enum Constants
|
|
|
|
* Extending elink:VkStructureType:
|
|
|
|
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV
|
|
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV
|
|
|
|
* Extending elink:VkShaderStageFlagBits
|
|
|
|
** ename:VK_SHADER_STAGE_TASK_BIT_NV
|
|
** ename:VK_SHADER_STAGE_MESH_BIT_NV
|
|
|
|
* Extending elink:VkPipelineStageFlagBits
|
|
|
|
** ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV
|
|
** ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV
|
|
|
|
=== New Enums
|
|
|
|
None.
|
|
|
|
=== New Structures
|
|
|
|
* slink:VkPhysicalDeviceMeshShaderFeaturesNV
|
|
* slink:VkPhysicalDeviceMeshShaderPropertiesNV
|
|
* slink:VkDrawMeshTasksIndirectCommandNV
|
|
|
|
=== New Functions
|
|
|
|
* flink:vkCmdDrawMeshTasksNV
|
|
* flink:vkCmdDrawMeshTasksIndirectNV
|
|
* flink:vkCmdDrawMeshTasksIndirectCountNV
|
|
|
|
=== New or Modified Built-In Variables
|
|
|
|
* <<interfaces-builtin-variables-taskcount,TaskCountNV>>
|
|
* <<interfaces-builtin-variables-primitivecount,PrimitiveCountNV>>
|
|
* <<interfaces-builtin-variables-primitiveindices,PrimitiveIndicesNV>>
|
|
* <<interfaces-builtin-variables-clipdistancepv,ClipDistancePerViewNV>>
|
|
* <<interfaces-builtin-variables-culldistancepv,CullDistancePerViewNV>>
|
|
* <<interfaces-builtin-variables-layerpv,LayerPerViewNV>>
|
|
* <<interfaces-builtin-variables-meshviewcount,MeshViewCountNV>>
|
|
* <<interfaces-builtin-variables-meshviewindices,MeshViewIndicesNV>>
|
|
* (modified)code:Position
|
|
* (modified)code:PointSize
|
|
* (modified)code:ClipDistance
|
|
* (modified)code:CullDistance
|
|
* (modified)code:PrimitiveId
|
|
* (modified)code:Layer
|
|
* (modified)code:ViewportIndex
|
|
* (modified)code:WorkgroupSize
|
|
* (modified)code:WorkgroupId
|
|
* (modified)code:LocalInvocationId
|
|
* (modified)code:GlobalInvocationId
|
|
* (modified)code:LocalInvocationIndex
|
|
* (modified)code:DrawIndex
|
|
* (modified)code:ViewportMaskNV
|
|
* (modified)code:PositionPerViewNV
|
|
* (modified)code:ViewportMaskPerViewNV
|
|
|
|
=== New SPIR-V Capability
|
|
|
|
* <<spirvenv-capabilities-table-meshshading,MeshShadingNV>>
|
|
|
|
=== Issues
|
|
|
|
. How to name this extension?
|
|
+
|
|
--
|
|
RESOLVED: VK_NV_mesh_shader
|
|
|
|
Other options considered:
|
|
|
|
* VK_NV_mesh_shading
|
|
* VK_NV_programmable_mesh_shading
|
|
* VK_NV_primitive_group_shading
|
|
* VK_NV_grouped_drawing
|
|
--
|
|
|
|
. Do we need a new VkPrimitiveTopology?
|
|
+
|
|
--
|
|
RESOLVED: NO, we skip the InputAssembler stage
|
|
--
|
|
|
|
. Should we allow Instancing?
|
|
+
|
|
--
|
|
RESOLVED: NO, there is no fixed function input, other than the IDs.
|
|
However, allow offsetting with a "first" value.
|
|
--
|
|
|
|
. Should we use existing vkCmdDraw or introduce new functions?
|
|
+
|
|
--
|
|
RESOLVED: Introduce new functions.
|
|
|
|
New functions make it easier to separate from "programmable primitive
|
|
shading" chapter, less "dual use" language about existing functions having
|
|
alternative behavior.
|
|
The text around the existing "draws" is heavily based around emitting
|
|
vertices.
|
|
--
|
|
|
|
. If new functions, how to name?
|
|
+
|
|
--
|
|
RESOLVED: CmdDrawMeshTasks*
|
|
|
|
Other options considered:
|
|
|
|
* CmdDrawMeshed
|
|
* CmdDrawTasked
|
|
* CmdDrawGrouped
|
|
--
|
|
|
|
. Should VK_SHADER_STAGE_ALL_GRAPHICS be updated to include the new stages?
|
|
+
|
|
--
|
|
RESOLVED: No.
|
|
If an application were to be recompiled with headers that include additional
|
|
shader stage bits in VK_SHADER_STAGE_ALL_GRAPHICS, then the previously valid
|
|
application would no longer be valid on implementations that don't support
|
|
mesh or task shaders.
|
|
This means the change would not be backwards compatible.
|
|
It's too bad VkShaderStageFlagBits doesn't have a dedicated "all supported
|
|
graphics stages" bit like VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, which would
|
|
have avoided this problem.
|
|
--
|
|
|
|
=== Version History
|
|
|
|
* Revision 1, 2018-07-19 (Christoph Kubisch, Daniel Koch)
|
|
- Internal revisions
|