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