// Copyright (c) 2018-2020 NVIDIA Corporation
//
// SPDX-License-Identifier: CC-BY-4.0

include::{generated}/meta/{refprefix}VK_NV_representative_fragment_test.txt[]

=== Other Extension Metadata

*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

=== Description

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
"`representative`" fragments for processing and discard all other fragments.
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.

include::{generated}/interfaces/VK_NV_representative_fragment_test.txt[]

=== Issues

(1) Is the representative fragment test guaranteed to have any effect?

*RESOLVED*: No.
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 do not 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?

*RESOLVED*: No.
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?

*RESOLVED*: If writes to the color or depth buffer are enabled, they will be
performed for any fragments that survive the relevant tests.
Any fragments that fail the representative fragment test will not update
color buffers.
For the use cases intended for this feature, we do not 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?

*RESOLVED*: If a fragment shader uses derivative functions or texture
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 do not 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
