| // Copyright 2017-2021 The Khronos Group Inc. |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| include::{generated}/meta/{refprefix}VK_EXT_conservative_rasterization.txt[] |
| |
| === Other Extension Metadata |
| |
| *Last Modified Date*:: |
| 2020-06-09 |
| *Interactions and External Dependencies*:: |
| - This extension requires |
| {spirv}/EXT/SPV_EXT_fragment_fully_covered.html[`SPV_EXT_fragment_fully_covered`] |
| if the |
| sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:fullyCoveredFragmentShaderInputVariable |
| feature is used. |
| - This extension requires |
| {spirv}/KHR/SPV_KHR_post_depth_coverage.html[`SPV_KHR_post_depth_coverage`]if |
| the |
| sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:conservativeRasterizationPostDepthCoverage |
| feature is used. |
| - This extension provides API support for |
| https://www.khronos.org/registry/OpenGL/extensions/NV/NV_conservative_raster_underestimation.txt[`GL_NV_conservative_raster_underestimation`] |
| if the |
| sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:fullyCoveredFragmentShaderInputVariable |
| feature is used. |
| *Contributors*:: |
| - Daniel Koch, NVIDIA |
| - Daniel Rakos, AMD |
| - Jeff Bolz, NVIDIA |
| - Slawomir Grajewski, Intel |
| - Stu Smith, Imagination Technologies |
| |
| === Description |
| |
| This extension adds a new rasterization mode called conservative |
| rasterization. |
| There are two modes of conservative rasterization; overestimation and |
| underestimation. |
| |
| When overestimation is enabled, if any part of the primitive, including its |
| edges, covers any part of the rectangular pixel area, including its sides, |
| then a fragment is generated with all coverage samples turned on. |
| This extension allows for some variation in implementations by accounting |
| for differences in overestimation, where the generating primitive size is |
| increased at each of its edges by some sub-pixel amount to further increase |
| conservative pixel coverage. |
| Implementations can allow the application to specify an extra overestimation |
| beyond the base overestimation the implementation already does. |
| It also allows implementations to either cull degenerate primitives or |
| rasterize them. |
| |
| When underestimation is enabled, fragments are only generated if the |
| rectangular pixel area is fully covered by the generating primitive. |
| If supported by the implementation, when a pixel rectangle is fully covered |
| the fragment shader input variable builtin called FullyCoveredEXT is set to |
| true. |
| The shader variable works in either overestimation or underestimation mode. |
| |
| Implementations can process degenerate triangles and lines by either |
| discarding them or generating conservative fragments for them. |
| Degenerate triangles are those that end up with zero area after the |
| rasterizer quantizes them to the fixed-point pixel grid. |
| Degenerate lines are those with zero length after quantization. |
| |
| include::{generated}/interfaces/VK_EXT_conservative_rasterization.txt[] |
| |
| === Version History |
| |
| * Revision 1.1, 2020-09-06 (Piers Daniell) |
| - Add missing SPIR-V and GLSL dependencies. |
| |
| * Revision 1, 2017-08-28 (Piers Daniell) |
| - Internal revisions |