Name NV_conservative_raster_pre_snap_triangles Name Strings GL_NV_conservative_raster_pre_snap_triangles Contact Kedarnath Thangudu, NVIDIA Corporation (kthangudu 'at' nvidia.com) Contributors Pat Brown, NVIDIA Corporation David P Gould, NVIDIA Corporation Eric Werness, NVIDIA Corporation Status Shipping in NVIDIA release 367.XX drivers and up. Version Last Modified Date: February 11, 2016 Revision: 1 Number OpenGL Extension #487 OpenGL ES Extension #262 Dependencies This extension is written against the NV_conservative_raster extension as applied to OpenGL 4.3 specification (Compatibility Profile) but may be used with the Core profile or OpenGL ES 2.0 or later. Overview When CONSERVATIVE_RASTERIZATION_NV is enabled, the fragments generated for a primitive are conservative with respect to the primitive after snapping to sub-pixel grid. This extension provides a new mode of rasterization for triangles where the fragments generated are conservative with respect to the primitive at infinite precision before vertex snapping. When the conservative raster mode is set to CONSERVATIVE_RASTER_MODE_PRE_- SNAP_TRIANGLES, triangles are rasterized more conservatively, and may generate fragments not generated when the mode is CONSERVATIVE_RASTER_MODE_- POST_SNAP (default). In particular it may generate fragments for pixels covered by triangles with zero area, or for pixels that are adjacent to but not covered by any triangle. This modified behavior may be useful in compensating for rounding errors caused by snapping vertex positions to a sub-pixel grid during rasterization. It's possible that a non-degenerate triangle becomes degenerate due to snapping. It's additionally possible that rounding errors in computing the position of a vertex or from snapping may cause a primitive that would cover a pixel at infinite precision to fail to cover the pixel post-snap. Rasterizing such primitives more conservatively may be useful for "binning" algorithms described in NV_conservative_raster. New Procedures and Functions void ConservativeRasterParameteriNV(enum pname, int param); New Tokens Accepted by the parameter of ConservativeRasterParameteriNV: CONSERVATIVE_RASTER_MODE_NV 0x954D Accepted by the parameter of ConservativeRasterParameteriNV: CONSERVATIVE_RASTER_MODE_POST_SNAP_NV 0x954E CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV 0x954F Accepted by the parameter of GetBooleanv, GetIntegerv, GetInteger64v, GetFloatv, and GetDoublev: CONSERVATIVE_RASTER_MODE_NV 0x954D Additions to Chapter 14 of the OpenGL 4.3 (Compatibility Profile) Specification (Fixed-Function Primitive Assembly and Rasterization) Add the following paragraph to the end of the new subsection 14.6.X "Conservative Rasterization" added by NV_conservative_raster When CONSERVATIVE_RASTERIZATION_NV is enabled, the rasterization behavior may be controlled by calling the following command void ConservativeRasterParameteriNV(enum pname, int param); with set to CONSERVATIVE_RASTER_MODE_NV. The parameter specifies the conservative raster mode to be used. If the mode is set to CONSERVATIVE_RASTER_MODE_POST_SNAP_NV, the generated fragments are conservative w.r.t the primitive after it is snapped to sub-pixel grid. If the mode is set to CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV the fragments generated for triangles will be conservative w.r.t the triangle at infinite precision. Since non-degenerate triangles may become degenerate due to vertex snapping, this mode will generate fragments for zero area triangles that are otherwise culled when the mode is CONSERVATIVE_RASTER_MODE_POST_SNAP_NV. This mode may also generate fragments for pixels that are within half a sub-pixel distance away from a triangle's infinite precision boundary. The default mode is set to CONSERVATIVE_RASTER_MODE_- POST_SNAP_NV. New State Get Value Get Command Type Initial Value Description Sec. Attribute --------- ----------- ---- ------------- ----------- ---- --------- CONSERVATIVE_RASTER_MODE_NV GetIntegerv E CONSERVATIVE_RASTER_- Control conservative 14.6.X - MODE_POST_SNAP rasterization mode. Additions to the AGL/GLX/WGL Specifications None. GLX Protocol None. Modifications to the OpenGL Shading Language Specification, Version 4.30 None. Errors INVALID_ENUM is generated by ConservativeRasterParameteriNV if is not CONSERVATIVE_RASTER_MODE_NV, or if is not CONSERVATIVE_RASTER_- MODE_POST_SNAP_NV or CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV. Issues (1) How does this extension interact with snap control? RESOLVED: When the conservative raster mode is set to CONSERVATIVE_RASTER_- MODE_PRE_SNAP_TRIANGLES the generated fragments are conservative w.r.t triangle at infinite precision i.e. before snapping to the sub-pixel grid. To achieve this implementations may augment/dilate the triangle edges by an amount (proportional to the sub-pixel precision) to compensate for rounding errors caused by snapping vertex positions to a sub-pixel grid. The amount of dilation is implementation dependent. (2) Which way do the fragments generated for zero-area triangles face? RESOLVED: Setting the conservative raster mode to CONSERVATIVE_RASTER_- MODE_PRE_SNAP_TRIANGLES generates fragments for zero-area (degenerate) triangles that are otherwise culled. Since degenerate triangles don't have a normal and therefore no theoretical facing, all the degenerate triangles will be considered back-facing. Degenerate triangles will be culled when back-face culling is enabled in GL. (3) How are the attributes computed for the fragments generated for zero- area triangles? RESOLVED: Since extrapolation/interpolation is not defined for degenerate triangles, the provoking vertex's attributes and z are used for all the fragments of such triangles. Revision History Revision 1 - Internal revisions.