Vulkan-Docs/appendices/VK_EXT_transform_feedback.txt
Jon Leech b557dd2167 Change log for December 16, 2018 Vulkan 1.1.96 spec update:
* 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).
2018-12-16 22:22:53 -08:00

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