mirror of
https://github.com/status-im/Vulkan-Docs.git
synced 2025-02-25 12:35:11 +00:00
* Update release number to 96. Public Issues: * Fix typo in `vk.xml` for `structextends` attribute of slink:VkPhysicalDeviceShadingRateImagePropertiesNV (public PR 870). * Fix links in optimized PDF output (public PR 879). Internal Issues: * Add a link to GitHub contributors in the <<credits, Other Credits>> section (internal issue 808). * Clarify the behavior of command aliases described in the <<versions,Core Revisions>> and <<initialization-functionpointers, Command Function Pointers>> sections and the registry schema document with respect to whether they are or are not the same entry point, and what the behaviour of the ftext:vkGet*ProcAddr commands is for each alias (internal issue 1462). * Update slink:VkPipelineShaderStageCreateInfo valid usage statements for writing to code:Layer and code:viewportIndex to apply to any vertex processing stage (internal issue 1475). * Make sparse image creation optional for Y'C~B~C~R~ formats in the <<features-required-format-support, Required Format Support>> section and the <<features-formats-requiring-sampler-ycbcr-conversion, Formats requiring sampler Y'C~B~C~R~ conversion for ename:VK_IMAGE_ASPECT_COLOR_BIT image views>> table (internal issue 1476). * Modify the valid usage statement for flink:vkCmdDrawIndirectByteCountEXT::pname:vertexStride to use the pname:maxTransformFeedbackBufferDataStride limit rather than the pname:maxVertexInputBindingStride limit, which is a better match for transform feedback related operations (internal issue 1487). * Changed all members of slink:VkPhysicalDevicePCIBusInfoPropertiesEXT to have the `uint32_t` type. This is an imcompatible change to an EXT that's very recently released; although this is against usual Vulkan WG policy, we discussed and consider this an acceptable risk, but have polled the mesa-dev list in case there are use cases we missed (internal issue 1492). * Set spec vetsion to 1 for `VK_GOOGLE_hlsl_functionality1` and `VK_GOOGLE_decorate_string` in `vk.xml` (internal MR 2948). * Remove redundant valid usage statement `VkImageCreateInfo-pNext-02395` (internal MR 2950). * Add `check_spec_links.py` script, use it in Gitlab CI, and fix many minor markup issues discovered by the script (internal MR 2955). * Update `BUILD.md` to the current Ruby version (2.5.3), and make some corresponding updates to per-platform build instructions (internal MR 2956). * Fix binding numbers and other details in flink:vkUpdateDescriptorSetWithTemplate.txt example code blocks (internal MR 2960). * Remove some nautovalidity="true" in `vk.xml` for NV extensions where it's clearly wrong (internal MR 2970).
142 lines
4.9 KiB
Plaintext
142 lines
4.9 KiB
Plaintext
include::meta/VK_EXT_transform_feedback.txt[]
|
|
|
|
*Last Modified Data*::
|
|
2018-10-09
|
|
*Contributors*::
|
|
- Baldur Karlsson, Valve
|
|
- Boris Zanin, Mobica
|
|
- Daniel Rakos, AMD
|
|
- Donald Scorgie, Imagination
|
|
- Henri Verbeet, CodeWeavers
|
|
- Jan-Harald Fredriksen, Arm
|
|
- Jason Ekstrand, Intel
|
|
- Jeff Bolz, NVIDIA
|
|
- Jesse Barker, Unity
|
|
- Jesse Hall, Google
|
|
- Pierre-Loup Griffais, Valve
|
|
- Philip Rebohle, DXVK
|
|
- Ruihao Zhang, Qualcomm
|
|
- Samuel Pitoiset, Valve
|
|
- Slawomir Grajewski, Intel
|
|
- Stu Smith, Imagination Technologies
|
|
|
|
|
|
This extension adds transform feedback to the Vulkan API by exposing the
|
|
SPIR-V code:TransformFeedback and code:GeometryStreams capabilities to
|
|
capture vertex, tessellation or geometry shader outputs to one or more
|
|
buffers.
|
|
It adds API functionality to bind transform feedback buffers to capture the
|
|
primitives emitted by the graphics pipeline from SPIR-V outputs decorated
|
|
for transform feedback.
|
|
The transform feedback capture can be paused and resumed by way of storing
|
|
and retrieving a byte counter.
|
|
The captured data can be drawn again where the vertex count is derived from
|
|
the byte counter without CPU intervention.
|
|
If the implementation is capable, a vertex stream other than zero can be
|
|
rasterized.
|
|
|
|
All these features are designed to match the full capabilities of OpenGL
|
|
core transform feedback functionality and beyond.
|
|
Many of the features are optional to allow base OpenGL ES GPUs to also
|
|
implement this extension.
|
|
|
|
The primary purpose of the functionality exposed by this extension is to
|
|
support translation layers from other 3D APIs.
|
|
This functionality is not considered forward looking, and is not expected to
|
|
be promoted to a KHR extension or to core Vulkan.
|
|
Unless this is needed for translation, it is recommended that developers use
|
|
alternative techniques of using the GPU to process and capture vertex data.
|
|
|
|
=== New Object Types
|
|
|
|
None.
|
|
|
|
=== New Enum Constants
|
|
|
|
* Extending elink:VkStructureType:
|
|
|
|
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT
|
|
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT
|
|
** ename:VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT
|
|
|
|
* Extending elink:VkQueryType:
|
|
|
|
** ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT
|
|
|
|
* Extending elink:VkBufferUsageFlagBits:
|
|
|
|
** ename:VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT
|
|
** ename:VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT
|
|
|
|
* Extending elink:VkAccessFlagBits:
|
|
|
|
** ename:VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT
|
|
** ename:VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT
|
|
** ename:VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT
|
|
|
|
* Extending elink:VkPipelineStageFlagBits:
|
|
|
|
** ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
|
|
|
|
=== New Enums
|
|
|
|
* tlink:VkPipelineRasterizationStateStreamCreateFlagsEXT
|
|
|
|
=== New Structures
|
|
|
|
* Extending slink:VkPhysicalDeviceFeatures2:
|
|
** slink:VkPhysicalDeviceTransformFeedbackFeaturesEXT
|
|
* Extending slink:VkPhysicalDeviceProperties2:
|
|
** slink:VkPhysicalDeviceTransformFeedbackPropertiesEXT
|
|
* Extending slink:VkPipelineRasterizationStateCreateInfo
|
|
** slink:VkPipelineRasterizationStateStreamCreateInfoEXT
|
|
|
|
=== New Functions
|
|
|
|
* flink:vkCmdBindTransformFeedbackBuffersEXT
|
|
* flink:vkCmdBeginTransformFeedbackEXT
|
|
* flink:vkCmdEndTransformFeedbackEXT
|
|
* flink:vkCmdBeginQueryIndexedEXT
|
|
* flink:vkCmdEndQueryIndexedEXT
|
|
* flink:vkCmdDrawIndirectByteCountEXT
|
|
|
|
=== Issues
|
|
|
|
1) Should we include pause/resume functionality?
|
|
|
|
*RESOLVED*: Yes, this is needed to ease layering other APIs which have this
|
|
functionality.
|
|
To pause use fname:vkCmdEndTransformFeedbackEXT and provide valid buffer
|
|
handles in the pname:pCounterBuffers array and offsets in the
|
|
pname:pCounterBufferOffsets array for the implementation to save the resume
|
|
points.
|
|
Then to resume use fname:vkCmdBeginTransformFeedbackEXT with the previous
|
|
pname:pCounterBuffers and pname:pCounterBufferOffsets values.
|
|
Between the pause and resume there needs to be a memory barrier for the
|
|
counter buffers with a source access of
|
|
ename:VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT at pipeline stage
|
|
ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT to a destination access
|
|
of ename:VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT at pipeline stage
|
|
ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT.
|
|
|
|
2) How does this interact with multiview?
|
|
|
|
*RESOLVED*: Transform feedback cannot be made active in a render pass with
|
|
multiview enabled.
|
|
|
|
3) How should queries be done?
|
|
|
|
*RESOLVED*: There is a new query type
|
|
ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT.
|
|
A query pool created with this type will capture 2 integers -
|
|
numPrimitivesWritten and numPrimitivesNeeded - for the specified vertex
|
|
stream output from the last vertex processing stage.
|
|
The vertex stream output queried is zero by default, but can be specified
|
|
with the new fname:vkCmdBeginQueryIndexedEXT and
|
|
fname:vkCmdEndQueryIndexedEXT commands.
|
|
|
|
=== Version History
|
|
|
|
* Revision 1, 2018-10-09 (Piers Daniell)
|
|
- Internal revisions
|