• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2017-2022 The Khronos Group Inc.
2//
3// SPDX-License-Identifier: CC-BY-4.0
4
5include::{generated}/meta/{refprefix}VK_EXT_conservative_rasterization.adoc[]
6
7=== Other Extension Metadata
8
9*Last Modified Date*::
10    2020-06-09
11*Interactions and External Dependencies*::
12  - This extension requires
13    {spirv}/EXT/SPV_EXT_fragment_fully_covered.html[`SPV_EXT_fragment_fully_covered`]
14    if the
15    sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:fullyCoveredFragmentShaderInputVariable
16    feature is used.
17  - This extension requires
18    {spirv}/KHR/SPV_KHR_post_depth_coverage.html[`SPV_KHR_post_depth_coverage`]if
19    the
20    sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:conservativeRasterizationPostDepthCoverage
21    feature is used.
22  - This extension provides API support for
23    {GLregistry}/NV/NV_conservative_raster_underestimation.txt[`GL_NV_conservative_raster_underestimation`]
24    if the
25    sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:fullyCoveredFragmentShaderInputVariable
26    feature is used.
27*Contributors*::
28  - Daniel Koch, NVIDIA
29  - Daniel Rakos, AMD
30  - Jeff Bolz, NVIDIA
31  - Slawomir Grajewski, Intel
32  - Stu Smith, Imagination Technologies
33
34=== Description
35
36This extension adds a new rasterization mode called conservative
37rasterization.
38There are two modes of conservative rasterization; overestimation and
39underestimation.
40
41When overestimation is enabled, if any part of the primitive, including its
42edges, covers any part of the rectangular pixel area, including its sides,
43then a fragment is generated with all coverage samples turned on.
44This extension allows for some variation in implementations by accounting
45for differences in overestimation, where the generating primitive size is
46increased at each of its edges by some sub-pixel amount to further increase
47conservative pixel coverage.
48Implementations can allow the application to specify an extra overestimation
49beyond the base overestimation the implementation already does.
50It also allows implementations to either cull degenerate primitives or
51rasterize them.
52
53When underestimation is enabled, fragments are only generated if the
54rectangular pixel area is fully covered by the generating primitive.
55If supported by the implementation, when a pixel rectangle is fully covered
56the fragment shader input variable builtin called FullyCoveredEXT is set to
57true.
58The shader variable works in either overestimation or underestimation mode.
59
60Implementations can process degenerate triangles and lines by either
61discarding them or generating conservative fragments for them.
62Degenerate triangles are those that end up with zero area after the
63rasterizer quantizes them to the fixed-point pixel grid.
64Degenerate lines are those with zero length after quantization.
65
66include::{generated}/interfaces/VK_EXT_conservative_rasterization.adoc[]
67
68=== New Built-In Variables
69
70  * <<interfaces-builtin-variables-fullycoveredext,FullyCoveredEXT>>
71
72=== New SPIR-V Capabilities
73
74  * <<spirvenv-capabilities-table-FragmentFullyCoveredEXT,
75    FragmentFullyCoveredEXT>>
76
77=== Version History
78
79  * Revision 1.1, 2020-09-06 (Piers Daniell)
80  ** Add missing SPIR-V and GLSL dependencies.
81
82  * Revision 1, 2017-08-28 (Piers Daniell)
83  ** Internal revisions
84