| 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 <pname> parameter of ConservativeRasterParameteriNV: |
| CONSERVATIVE_RASTER_MODE_NV 0x954D |
| |
| Accepted by the <param> parameter of ConservativeRasterParameteriNV: |
| CONSERVATIVE_RASTER_MODE_POST_SNAP_NV 0x954E |
| CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV 0x954F |
| |
| Accepted by the <pname> 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 <pname> set to CONSERVATIVE_RASTER_MODE_NV. The <param> 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 <pname> is |
| not CONSERVATIVE_RASTER_MODE_NV, or if <param> 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. |