2018-09-16 01:35:16 +00:00
|
|
|
include::meta/VK_NV_representative_fragment_test.txt[]
|
|
|
|
|
|
|
|
*Last Modified Date*::
|
|
|
|
2018-09-13
|
|
|
|
*Contributors*::
|
|
|
|
- Kedarnath Thangudu, NVIDIA
|
|
|
|
- Christoph Kubisch, NVIDIA
|
|
|
|
- Pierre Boudier, NVIDIA
|
|
|
|
- Pat Brown, NVIDIA
|
|
|
|
- Jeff Bolz, NVIDIA
|
|
|
|
- Eric Werness, NVIDIA
|
|
|
|
|
|
|
|
This extension provides a new representative fragment test that allows
|
|
|
|
implementations to reduce the amount of rasterization and fragment
|
|
|
|
processing work performed for each point, line, or triangle primitive.
|
|
|
|
For any primitive that produces one or more fragments that pass all other
|
|
|
|
early fragment tests, the implementation is permitted to choose one or more
|
2018-10-08 23:12:09 +00:00
|
|
|
"`representative`" fragments for processing and discard all other fragments.
|
2018-09-16 01:35:16 +00:00
|
|
|
For draw calls rendering multiple points, lines, or triangles arranged in
|
|
|
|
lists, strips, or fans, the representative fragment test is performed
|
|
|
|
independently for each of those primitives.
|
|
|
|
|
|
|
|
This extension is useful for applications that use an early render pass to
|
|
|
|
determine the full set of primitives that would be visible in the final
|
|
|
|
scene.
|
|
|
|
In this render pass, such applications would set up a fragment shader that
|
|
|
|
enables early fragment tests and writes to an image or shader storage buffer
|
|
|
|
to record the ID of the primitive that generated the fragment.
|
|
|
|
Without this extension, the shader would record the ID separately for each
|
|
|
|
visible fragment of each primitive.
|
|
|
|
With this extension, fewer stores will be performed, particularly for large
|
|
|
|
primitives.
|
|
|
|
|
|
|
|
The representative fragment test has no effect if early fragment tests are
|
|
|
|
not enabled via the fragment shader.
|
|
|
|
The set of fragments discarded by the representative fragment test is
|
|
|
|
implementation-dependent and may vary from frame to frame.
|
|
|
|
In some cases, the representative fragment test may not discard any
|
|
|
|
fragments for a given primitive.
|
|
|
|
|
|
|
|
=== New Object Types
|
|
|
|
|
|
|
|
None.
|
|
|
|
|
|
|
|
=== New Enum Constants
|
|
|
|
|
|
|
|
* Extending elink:VkStructureType
|
|
|
|
|
|
|
|
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV
|
|
|
|
** ename:VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV
|
|
|
|
|
|
|
|
|
|
|
|
=== New Enums
|
|
|
|
|
|
|
|
None.
|
|
|
|
|
|
|
|
=== New Structures
|
|
|
|
|
|
|
|
* slink:VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV
|
|
|
|
* slink:VkPipelineRepresentativeFragmentTestStateCreateInfoNV
|
|
|
|
|
|
|
|
=== New Functions
|
|
|
|
|
|
|
|
None.
|
|
|
|
|
|
|
|
=== Issues
|
|
|
|
|
|
|
|
(1) Is the representative fragment test guaranteed to have any effect?
|
|
|
|
|
Change log for October 7, 2018 Vulkan 1.1.87 spec update:
* Update release number to 87.
Public Issues:
* Merge flink:vkCmdPipelineBarrier self-dependency barrier VUs referring
to the same subpass dependency (public pull request 756).
* Describe default value of `"optional"` attribute in the registry schema
document (public issue 769)
* Fix links in <<VK_NVX_raytracing>> extension (public pull request 805).
* Mark the <<VK_KHR_mir_surface>> extension obsolete (see public issue 814
- does not close this, however).
* Fix missing endif in Image Creation block (public issue 817).
Internal Issues:
* Clarify that the compressed texture formats corresponding to
<<features-features-textureCompressionETC2>>,
<<features-features-textureCompressionASTC_LDR>>, and
<<features-features-textureCompressionBC>> is not contingent on the
feature bits, and may be supported even if the features are not enabled
(internal issue 663).
* Clarify that code:FragStencilRefEXT is output only in the
<<interfaces-builtin-variables, Built-In Variables>> section (internal
issue 1173).
* Identify and correct many overly-aggressive uses of "`undefined`", and
narrow them down, where straightforward to do so. Mark such resolved
uses of "`undefined`" with the custom undefined: macro. Add a new
<<writing-undefined, Describing Undefined Behavior>> section (internal
issue 1267).
* Don't require code:inline_uniform_block descriptors to be populated
before use in the flink:vkAllocateDescriptorSets section (internal issue
1380).
* Allow suppressing inline SVG images by controlling this with an
attribute set in the Makefile, rather than the explicit [%inline]
directive (internal issue 1391).
* Mark 'Khronos' as a registered trademark in several places, now that it
is one.
* Fix typo in the <<VK_KHR_shader_atomic_int64>> appendix using the GLSL
naming of the compare exchange op when referring to the SPIR-V op.
* Specify in the flink:vkGetPhysicalDeviceQueueFamilyProperties section
that all implementations must support at least one queue family, and
that every queue family must contain at least one queue.
* Make slink:VkPipelineDynamicStateCreateInfo::pname:dynamicStateCount,
slink:VkSampleLocationsInfoEXT::pname:sampleLocationsPerPixel, and
slink:VkSampleLocationsInfoEXT::pname:sampleLocationsCount optional, to
fix bogus implicit valid usage checks that were causing failures in the
conformance tests.
* Fix vendor tag in reserved extension 237 constants. Does not affect
anything since it's just a placeholder, but this should avoid further
comments.
* Minor markup fixes in some extension appendices.
New Extensions:
* `<<VK_FUCHSIA_imagepipe_surface>>`
2018-10-07 13:10:21 +00:00
|
|
|
*RESOLVED*: No.
|
2018-09-16 01:35:16 +00:00
|
|
|
As specified, we only guarantee that each primitive with at least one
|
|
|
|
fragment that passes prior tests will have one fragment passing the
|
|
|
|
representative fragment tests.
|
|
|
|
We don't guarantee that any particular fragment will fail the test.
|
|
|
|
|
|
|
|
In the initial implementation of this extension, the representative fragment
|
|
|
|
test is treated as an optimization that may be completely disabled for some
|
|
|
|
pipeline states.
|
|
|
|
This feature was designed for a use case where the fragment shader records
|
|
|
|
information on individual primitives using shader storage buffers or storage
|
|
|
|
images, with no writes to color or depth buffers.
|
|
|
|
|
|
|
|
(2) Will the set of fragments that pass the representative fragment test be
|
|
|
|
repeatable if you draw the same scene over and over again?
|
|
|
|
|
Change log for October 7, 2018 Vulkan 1.1.87 spec update:
* Update release number to 87.
Public Issues:
* Merge flink:vkCmdPipelineBarrier self-dependency barrier VUs referring
to the same subpass dependency (public pull request 756).
* Describe default value of `"optional"` attribute in the registry schema
document (public issue 769)
* Fix links in <<VK_NVX_raytracing>> extension (public pull request 805).
* Mark the <<VK_KHR_mir_surface>> extension obsolete (see public issue 814
- does not close this, however).
* Fix missing endif in Image Creation block (public issue 817).
Internal Issues:
* Clarify that the compressed texture formats corresponding to
<<features-features-textureCompressionETC2>>,
<<features-features-textureCompressionASTC_LDR>>, and
<<features-features-textureCompressionBC>> is not contingent on the
feature bits, and may be supported even if the features are not enabled
(internal issue 663).
* Clarify that code:FragStencilRefEXT is output only in the
<<interfaces-builtin-variables, Built-In Variables>> section (internal
issue 1173).
* Identify and correct many overly-aggressive uses of "`undefined`", and
narrow them down, where straightforward to do so. Mark such resolved
uses of "`undefined`" with the custom undefined: macro. Add a new
<<writing-undefined, Describing Undefined Behavior>> section (internal
issue 1267).
* Don't require code:inline_uniform_block descriptors to be populated
before use in the flink:vkAllocateDescriptorSets section (internal issue
1380).
* Allow suppressing inline SVG images by controlling this with an
attribute set in the Makefile, rather than the explicit [%inline]
directive (internal issue 1391).
* Mark 'Khronos' as a registered trademark in several places, now that it
is one.
* Fix typo in the <<VK_KHR_shader_atomic_int64>> appendix using the GLSL
naming of the compare exchange op when referring to the SPIR-V op.
* Specify in the flink:vkGetPhysicalDeviceQueueFamilyProperties section
that all implementations must support at least one queue family, and
that every queue family must contain at least one queue.
* Make slink:VkPipelineDynamicStateCreateInfo::pname:dynamicStateCount,
slink:VkSampleLocationsInfoEXT::pname:sampleLocationsPerPixel, and
slink:VkSampleLocationsInfoEXT::pname:sampleLocationsCount optional, to
fix bogus implicit valid usage checks that were causing failures in the
conformance tests.
* Fix vendor tag in reserved extension 237 constants. Does not affect
anything since it's just a placeholder, but this should avoid further
comments.
* Minor markup fixes in some extension appendices.
New Extensions:
* `<<VK_FUCHSIA_imagepipe_surface>>`
2018-10-07 13:10:21 +00:00
|
|
|
*RESOLVED*: No.
|
2018-09-16 01:35:16 +00:00
|
|
|
The set of fragments that pass the representative fragment test is
|
|
|
|
implementation-dependent and may vary due to the timing of operations
|
|
|
|
performed by the GPU.
|
|
|
|
|
|
|
|
(3) What happens if you enable the representative fragment test with writes
|
|
|
|
to color and/or depth render targets enabled?
|
|
|
|
|
Change log for October 7, 2018 Vulkan 1.1.87 spec update:
* Update release number to 87.
Public Issues:
* Merge flink:vkCmdPipelineBarrier self-dependency barrier VUs referring
to the same subpass dependency (public pull request 756).
* Describe default value of `"optional"` attribute in the registry schema
document (public issue 769)
* Fix links in <<VK_NVX_raytracing>> extension (public pull request 805).
* Mark the <<VK_KHR_mir_surface>> extension obsolete (see public issue 814
- does not close this, however).
* Fix missing endif in Image Creation block (public issue 817).
Internal Issues:
* Clarify that the compressed texture formats corresponding to
<<features-features-textureCompressionETC2>>,
<<features-features-textureCompressionASTC_LDR>>, and
<<features-features-textureCompressionBC>> is not contingent on the
feature bits, and may be supported even if the features are not enabled
(internal issue 663).
* Clarify that code:FragStencilRefEXT is output only in the
<<interfaces-builtin-variables, Built-In Variables>> section (internal
issue 1173).
* Identify and correct many overly-aggressive uses of "`undefined`", and
narrow them down, where straightforward to do so. Mark such resolved
uses of "`undefined`" with the custom undefined: macro. Add a new
<<writing-undefined, Describing Undefined Behavior>> section (internal
issue 1267).
* Don't require code:inline_uniform_block descriptors to be populated
before use in the flink:vkAllocateDescriptorSets section (internal issue
1380).
* Allow suppressing inline SVG images by controlling this with an
attribute set in the Makefile, rather than the explicit [%inline]
directive (internal issue 1391).
* Mark 'Khronos' as a registered trademark in several places, now that it
is one.
* Fix typo in the <<VK_KHR_shader_atomic_int64>> appendix using the GLSL
naming of the compare exchange op when referring to the SPIR-V op.
* Specify in the flink:vkGetPhysicalDeviceQueueFamilyProperties section
that all implementations must support at least one queue family, and
that every queue family must contain at least one queue.
* Make slink:VkPipelineDynamicStateCreateInfo::pname:dynamicStateCount,
slink:VkSampleLocationsInfoEXT::pname:sampleLocationsPerPixel, and
slink:VkSampleLocationsInfoEXT::pname:sampleLocationsCount optional, to
fix bogus implicit valid usage checks that were causing failures in the
conformance tests.
* Fix vendor tag in reserved extension 237 constants. Does not affect
anything since it's just a placeholder, but this should avoid further
comments.
* Minor markup fixes in some extension appendices.
New Extensions:
* `<<VK_FUCHSIA_imagepipe_surface>>`
2018-10-07 13:10:21 +00:00
|
|
|
*RESOLVED*: If writes to the color or depth buffer are enabled, they will be
|
|
|
|
performed for any fragments that survive the relevant tests.
|
2018-09-16 01:35:16 +00:00
|
|
|
Any fragments that fail the representative fragment test will not update
|
|
|
|
color buffers.
|
|
|
|
For the use cases intended for this feature, we don't expect color or depth
|
|
|
|
writes to be enabled.
|
|
|
|
|
|
|
|
(4) How do derivatives and automatic texture level of detail computations
|
|
|
|
work with the representative fragment test enabled?
|
|
|
|
|
Change log for October 7, 2018 Vulkan 1.1.87 spec update:
* Update release number to 87.
Public Issues:
* Merge flink:vkCmdPipelineBarrier self-dependency barrier VUs referring
to the same subpass dependency (public pull request 756).
* Describe default value of `"optional"` attribute in the registry schema
document (public issue 769)
* Fix links in <<VK_NVX_raytracing>> extension (public pull request 805).
* Mark the <<VK_KHR_mir_surface>> extension obsolete (see public issue 814
- does not close this, however).
* Fix missing endif in Image Creation block (public issue 817).
Internal Issues:
* Clarify that the compressed texture formats corresponding to
<<features-features-textureCompressionETC2>>,
<<features-features-textureCompressionASTC_LDR>>, and
<<features-features-textureCompressionBC>> is not contingent on the
feature bits, and may be supported even if the features are not enabled
(internal issue 663).
* Clarify that code:FragStencilRefEXT is output only in the
<<interfaces-builtin-variables, Built-In Variables>> section (internal
issue 1173).
* Identify and correct many overly-aggressive uses of "`undefined`", and
narrow them down, where straightforward to do so. Mark such resolved
uses of "`undefined`" with the custom undefined: macro. Add a new
<<writing-undefined, Describing Undefined Behavior>> section (internal
issue 1267).
* Don't require code:inline_uniform_block descriptors to be populated
before use in the flink:vkAllocateDescriptorSets section (internal issue
1380).
* Allow suppressing inline SVG images by controlling this with an
attribute set in the Makefile, rather than the explicit [%inline]
directive (internal issue 1391).
* Mark 'Khronos' as a registered trademark in several places, now that it
is one.
* Fix typo in the <<VK_KHR_shader_atomic_int64>> appendix using the GLSL
naming of the compare exchange op when referring to the SPIR-V op.
* Specify in the flink:vkGetPhysicalDeviceQueueFamilyProperties section
that all implementations must support at least one queue family, and
that every queue family must contain at least one queue.
* Make slink:VkPipelineDynamicStateCreateInfo::pname:dynamicStateCount,
slink:VkSampleLocationsInfoEXT::pname:sampleLocationsPerPixel, and
slink:VkSampleLocationsInfoEXT::pname:sampleLocationsCount optional, to
fix bogus implicit valid usage checks that were causing failures in the
conformance tests.
* Fix vendor tag in reserved extension 237 constants. Does not affect
anything since it's just a placeholder, but this should avoid further
comments.
* Minor markup fixes in some extension appendices.
New Extensions:
* `<<VK_FUCHSIA_imagepipe_surface>>`
2018-10-07 13:10:21 +00:00
|
|
|
*RESOLVED*: If a fragment shader uses derivative functions or texture
|
2018-09-16 01:35:16 +00:00
|
|
|
lookups using automatic level of detail computation, derivatives will be
|
|
|
|
computed identically whether or not the representative fragment test is
|
|
|
|
enabled.
|
|
|
|
For the use cases intended for this feature, we don't expect the use of
|
|
|
|
derivatives in the fragment shader.
|
|
|
|
|
|
|
|
=== Version History
|
|
|
|
|
|
|
|
* Revision 2, 2018-09-13 (pbrown)
|
|
|
|
- Add issues.
|
|
|
|
* Revision 1, 2018-08-22 (Kedarnath Thangudu)
|
|
|
|
- Internal Revisions
|