1Name
2
3    NV_conservative_raster_pre_snap
4
5Name Strings
6
7    GL_NV_conservative_raster_pre_snap
8
9Contact
10
11    Kedarnath Thangudu, NVIDIA Corporation (kthangudu 'at' nvidia.com)
12
13Contributors
14
15    Eric Werness, NVIDIA Corporation
16
17Status
18
19    Shipping in NVIDIA release 388.XX drivers and up
20
21Version
22
23    Last Modified Date:         November 15, 2017
24    Revision:                   1
25
26Number
27
28    OpenGL Extension #517
29    OpenGL ES Extension #297
30
31Dependencies
32
33    This extension is written against the NV_conservative_raster_pre_snap-
34    _triangles extension as applied to OpenGL 4.3 specification 
35    (Compatibility Profile) but may be used with the Core profile or OpenGL ES 
36    2.0 or later.
37    
38Overview
39
40    NV_conservative_raster_pre_snap_triangles provides a new mode to achieve
41    rasterization of triangles that is conservative w.r.t the triangle at 
42    infinite precision i.e. before it is snapped to the sub-pixel grid.  This
43    extension provides a new mode that expands this functionality to lines and 
44    points.
45
46New Procedures and Functions
47
48    None.
49    
50New Tokens
51
52    Accepted by the <param> parameter of ConservativeRasterParameteriNV:
53        CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV            0x9550
54    
55Additions to Chapter 14 of the OpenGL 4.3 (Compatibility Profile) Specification
56(Fixed-Function Primitive Assembly and Rasterization)
57
58    Modify the paragraph describing ConservativeRasterParameteriNV in the 
59    subsection 14.6.X "Conservative Rasterization" added by NV_conservative_-
60    raster_pre_snap_triangles
61
62    ... The <param> parameter specifies the conservative raster mode to be 
63    used. If the mode is set to CONSERVATIVE_RASTER_MODE_POST_SNAP_NV, the 
64    generated fragments are conservative w.r.t the primitive after it is 
65    snapped to sub-pixel grid.  If the mode is set to CONSERVATIVE_RASTER_MODE_-
66    PRE_SNAP_NV the fragments generated for a primitive will be conservative 
67    w.r.t the primitive at infinite precision. Since non-degenerate 
68    primitives may become degenerate due to vertex snapping, this mode will 
69    generate fragments for zero length lines and zero area triangles which are 
70    otherwise culled in the CONSERVATIVE_RASTER_MODE_POST_SNAP_NV. This mode 
71    may also generate fragments for pixels that are within half a sub-pixel 
72    distance away from the primitive at infinite precision.  If the mode is 
73    set to CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV, the pre-snap 
74    conservative raster behavior described would apply only to triangles.  The 
75    default mode is set to CONSERVATIVE_RASTER_MODE_POST_SNAP_NV.
76
77    Modify the paragraphs describing conservative rasterization behavior for
78    points, lines and polygons added by NV_conservative_raster as follows:
79
80    If CONSERVATIVE_RASTERIZATION_NV is enabled, points are rasterized 
81    according to point rasterization rules (section 14.4), except that a 
82    fragment will be generated for a framebuffer pixel if the point's region 
83    (a circle when MULTISAMPLING is enabled and POINT_SPRITE is disabled, or a 
84    square otherwise) covers any portion of the pixel, including its edges or 
85    points.  While conservative raster mode PRE_SNAP_NV respects the 
86    MULTISAMPLE state, modes POST_SNAP_NV and PRE_SNAP_TRIANGLES_NV always use 
87    point multisample rasterization rules (section 14.4.3), whether or not 
88    MULTISAMPLE is actually enabled.  When performing conservative 
89    rasterization of points, the POINT_SMOOTH enable is ignored and treated as
90    disabled.
91
92    If CONSERVATIVE_RASTERIZATION_NV is enabled, lines are rasterized 
93    according to line rasterization rules (section 14.5), except that the 
94    LINE_STIPPLE and LINE_SMOOTH enables are ignored and treated as disabled.  
95    When the conservative raster mode is POST_SNAP or PRE_SNAP_TRIANGLES, 
96    lines with zero length generate no fragments, while a fragment for the 
97    pixel that contains the end points will be generated when the mode is 
98    PRE_SNAP_NV.  Also, conservative raster mode PRE_SNAP_NV respects the 
99    MULTISAMPLE state, while modes POST_SNAP_NV and PRE_SNAP_TRIANGLES_NV 
100    always use line multisample rasterization rules (section 14.5.4), whether 
101    or not MULTISAMPLE is actually enabled.
102
103    If CONSERVATIVE_RASTERIZATION_NV is enabled, polygons are rasterized 
104    according to polygon rasterization rules (section 14.6), except that 
105    the POLYGON_SMOOTH enable is ignored and treated as disabled. 
106    When the conservative raster mode is POST_SNAP_NV, polygons with 
107    an area of zero generate no fragments, even for pixels that contain a 
108    vertex or edge of the zero-area polygon, while modes PRE_SNAP_TRIANGLES 
109    and PRE_SNAP_NV generate them.  Also, conservative raster mode PRE_SNAP_NV 
110    respects the MULTISAMPLE state, while modes POST_SNAP_NV and 
111    PRE_SNAP_TRIANGLES_NV always use polygon multisample rasterization rules 
112    (section 14.6.6), whether or not MULTISAMPLE is actually enabled.
113
114New State
115
116    None.
117
118Additions to the AGL/GLX/WGL Specifications
119
120    None.
121
122GLX Protocol
123
124    None.
125    
126Modifications to the OpenGL Shading Language Specification, Version 4.30
127
128    None.
129
130Errors
131
132    INVALID_ENUM is generated by ConservativeRasterParameteriNV if <pname> is
133    not CONSERVATIVE_RASTER_MODE_NV, or if <param> is not CONSERVATIVE_RASTER_-
134    MODE_POST_SNAP_NV, CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV or CONSERVATIVE_-
135    RASTER_MODE_PRE_SNAP_TRIANGLES_NV.
136
137Issues
138
139    (1) Would MODE_PRE_SNAP_NV generate fragments for zero width lines and
140    zero diameter points?
141
142    RESOLVED. No. Vertex snapping to the sub-pixel grid may cause in a line 
143    to become zero length, so, MODE_PRE_SNAP will generate fragments for 
144    zero length lines. Zero width lines and zero diameter points are culled as
145    normal in both MODE_PRE_SNAP or MODE_POST_SNAP modes.
146
147Revision History
148
149    Revision 1
150      - Internal revisions.
151
152