Vulkan-Docs/doc/specs/vulkan/appendices/VK_AMD_rasterization_order.txt
Jon Leech ca4abe0d34 Change log for January 23, 2017 Vulkan 1.0.39 spec update:
* Bump API patch number and header version number to 39 for this update.

Github Issues:

  * Clarified that only accesses via the specified buffer/image subresource
    ranges are included in the access scopes (public issue 306).
  * Add missing valid usage statements for flink:vkCreateComputePipelines
    and flink:vkCreateGraphicsPipelines (public issue 427).

Internal Issues:

  * Add a Note to the <<invariance,Invariance>> appendix about a difference
    between OpenGL and Vulkan with regards to how primitives derived from
    offsets are handled (internal issue 355).
  * Add the +<<VK_KHR_get_physical_device_properties2>>+,
    +<<VK_KHR_maintenance1>>+, and +<<VK_KHR_shader_draw_parameters>>+
    extensions (internal issue 448).
  * Add the +<<VK_EXT_shader_subgroup_vote>>+ and
    +<<VK_EXT_shader_subgroup_ballot>>+ extensions (internal issue 449).
  * Update the texture level-of-detail equation in the
    <<textures-scale-factor,Scale Factor Operation>> section to better
    approximate the ellipse major and minor axes (internal issue 547).
  * Forbid non-explicitly allowed uses of interface decorations in the
    introduction to the <<interfaces,Shader Interfaces>> chapter (internal
    issue 607).
  * Replace use of MathJax with KaTeX, for improved load-time performance as
    well as avoiding the scrolling-and-scrolling behavior due to MathJax
    asynchronous rendering when loading at an anchor inside the spec. This
    change also requires moving to HTML5 output for the spec instead of
    XHTML, and there is a visible difference in that the chapter navigation
    index is now in a scrollable sidebar instead of at the top of the
    document. We may or may not retain the nav sidebar based on feedback
    (internal issue 613).
  * Improve consistency of markup and formatting in extension appendices
    (internal issue 631).

Other Issues:

  * Add explicit valid usage statements to slink:VkImageCopy requiring that
    the source and destination layer ranges be contained in their respective
    source and destination images.
  * Add valid usage language for swapchain of flink:vkAcquireNextImage. If
    the swapchain has been replaced, then it should not be passed to
    flink:vkAcquireNextImage.
  * Add a valid usage statement to flink:vkCreateImageView, that the image
    must have been created with an appropriate usage bit set.
  * Noted that slink:VkDisplayPresentInfoKHR is a valid extension of
    slink:VkPresentInfoKHR in the <<wsi_swapchain,WSI Swapchain>> section.
  * Update valid usage for flink:vkCmdSetViewport and flink:vkCmdSetScissor
    to account for the multiple viewport feature. If the feature is not
    enabled, the parameters for these functions have required values that
    are defined in the <<features-features-multiViewport,multiple
    viewports>> section of the spec but were not reflected in the valid
    usage text for these functions.
  * Add the +<<VK_EXT_swapchain_colorspace>>+ extension defining common
    color spaces.
2017-01-17 20:11:25 -08:00

124 lines
3.7 KiB
Plaintext

[[VK_AMD_rasterization_order]]
== VK_AMD_rasterization_order
*Name String*::
+VK_AMD_rasterization_order+
*Extension Type*::
Device extension
*Registered Extension Number*::
19
*Last Modified Date*::
2016-04-25
*Revision*::
1
*IP Status*::
No known IP claims.
*Dependencies*::
- This extension is written against version 1.0.11 of the Vulkan API.
*Contributors*::
- Matthaeus G.
Chajdas, AMD
- Jaakko Konttinen, AMD
- Daniel Rakos, AMD
- Graham Sellers, AMD
- Dominik Witczak, AMD
*Contacts*::
- Daniel Rakos, AMD
This extension introduces the possibility for the application to control the
order of primitive rasterization.
In unextended Vulkan, the following stages are guaranteed to execute in _API
order_:
* depth bounds test
* stencil test, stencil op, and stencil write
* depth test and depth write
* occlusion queries
* blending, logic op, and color write
This extension enables applications to opt into a relaxed, implementation
defined primitive rasterization order that may allow better parallel
processing of primitives and thus enabling higher primitive throughput.
It is applicable in cases where the primitive rasterization order is known
to not affect the output of the rendering or any differences caused by a
different rasterization order are not a concern from the point of view of
the application's purpose.
A few examples of cases when using the relaxed primitive rasterization order
would not have an effect on the final rendering:
* If the primitives rendered are known to not overlap in framebuffer
space.
* If depth testing is used with a comparison operator of
ename:VK_COMPARE_OP_LESS, ename:VK_COMPARE_OP_LESS_OR_EQUAL,
ename:VK_COMPARE_OP_GREATER, or ename:VK_COMPARE_OP_GREATER_OR_EQUAL,
and the primitives rendered are known to not overlap in clip space.
* If depth testing is not used and blending is enabled for all attachments
with a commutative blend operator.
=== New Object Types
None
=== New Enum Constants
* Extending elink:VkStructureType:
** ename:VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD
=== New Enums
* elink:VkRasterizationOrderAMD
=== New Structures
* slink:VkPipelineRasterizationStateRasterizationOrderAMD
=== New Functions
None
=== Issues
1) How is this extension useful to application developers?
*RESOLVED*: Allows them to increase primitive throughput for cases when
strict API order rasterization is not important due to the nature of the
content, the configuration used, or the requirements towards the output of
the rendering.
2) How does this extension interact with content optimizations aiming to
reduce overdraw by appropriately ordering the input primitives?
*RESOLVED*: While the relaxed rasterization order might somewhat limit the
effectiveness of such content optimizations, most of the benefits of it are
expected to be retained even when the relaxed rasterization order is used so
applications are still recommended to apply these optimizations even if they
intend to use the extension.
3) Are there any guarantees about the primitive rasterization order when
using the new relaxed mode?
*RESOLVED*: No.
The rasterization order is completely implementation dependent in this case
but in practice it is expected to partially still follow the order of
incoming primitives.
4) Does the new relaxed rasterization order have any adverse effect on
repeatability and other invariance rules of the API?
*RESOLVED*: Yes, in the sense that it extends the list of exceptions when
the repeatability requirement does not apply.
=== Examples
None
=== Issues
None
=== Version History
* Revision 1, 2016-04-25 (Daniel Rakos)
- Initial draft.