Register new GL_NV_conservative_raster* extensions
diff --git a/api/GL/glcorearb.h b/api/GL/glcorearb.h index 3136f37..5835ab6 100755 --- a/api/GL/glcorearb.h +++ b/api/GL/glcorearb.h
@@ -4923,6 +4923,11 @@ #endif #endif /* GL_NV_conservative_raster_dilate */ +#ifndef GL_NV_conservative_raster_pre_snap +#define GL_NV_conservative_raster_pre_snap 1 +#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV 0x9550 +#endif /* GL_NV_conservative_raster_pre_snap */ + #ifndef GL_NV_conservative_raster_pre_snap_triangles #define GL_NV_conservative_raster_pre_snap_triangles 1 #define GL_CONSERVATIVE_RASTER_MODE_NV 0x954D @@ -4934,6 +4939,10 @@ #endif #endif /* GL_NV_conservative_raster_pre_snap_triangles */ +#ifndef GL_NV_conservative_raster_underestimation +#define GL_NV_conservative_raster_underestimation 1 +#endif /* GL_NV_conservative_raster_underestimation */ + #ifndef GL_NV_draw_vulkan_image #define GL_NV_draw_vulkan_image 1 typedef void (APIENTRY *GLVULKANPROCNV)(void);
diff --git a/api/GL/glext.h b/api/GL/glext.h index 67ebeef..a65746d 100644 --- a/api/GL/glext.h +++ b/api/GL/glext.h
@@ -51,7 +51,7 @@ #define GLAPI extern #endif -#define GL_GLEXT_VERSION 20171125 +#define GL_GLEXT_VERSION 20171212 /* Generated C header for: * API: gl @@ -9580,6 +9580,11 @@ #endif #endif /* GL_NV_conservative_raster_dilate */ +#ifndef GL_NV_conservative_raster_pre_snap +#define GL_NV_conservative_raster_pre_snap 1 +#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV 0x9550 +#endif /* GL_NV_conservative_raster_pre_snap */ + #ifndef GL_NV_conservative_raster_pre_snap_triangles #define GL_NV_conservative_raster_pre_snap_triangles 1 #define GL_CONSERVATIVE_RASTER_MODE_NV 0x954D @@ -9591,6 +9596,10 @@ #endif #endif /* GL_NV_conservative_raster_pre_snap_triangles */ +#ifndef GL_NV_conservative_raster_underestimation +#define GL_NV_conservative_raster_underestimation 1 +#endif /* GL_NV_conservative_raster_underestimation */ + #ifndef GL_NV_copy_depth_to_color #define GL_NV_copy_depth_to_color 1 #define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E
diff --git a/api/GL/glxext.h b/api/GL/glxext.h index 2e89419..f759af3 100755 --- a/api/GL/glxext.h +++ b/api/GL/glxext.h
@@ -34,7 +34,7 @@ ** https://github.com/KhronosGroup/OpenGL-Registry */ -#define GLX_GLXEXT_VERSION 20171125 +#define GLX_GLXEXT_VERSION 20171212 /* Generated C header for: * API: glx
diff --git a/api/GLES/gl.h b/api/GLES/gl.h index 4d11f42..07f9173 100644 --- a/api/GLES/gl.h +++ b/api/GLES/gl.h
@@ -36,7 +36,7 @@ #include <GLES/glplatform.h> -/* Generated on date 20171125 */ +/* Generated on date 20171212 */ /* Generated C header for: * API: gles1
diff --git a/api/GLES/glext.h b/api/GLES/glext.h index 0100f35..02fe695 100644 --- a/api/GLES/glext.h +++ b/api/GLES/glext.h
@@ -38,7 +38,7 @@ #define GL_APIENTRYP GL_APIENTRY* #endif -/* Generated on date 20171125 */ +/* Generated on date 20171212 */ /* Generated C header for: * API: gles1
diff --git a/api/GLES2/gl2.h b/api/GLES2/gl2.h index b7c107a..24a312f 100644 --- a/api/GLES2/gl2.h +++ b/api/GLES2/gl2.h
@@ -44,7 +44,7 @@ #define GL_GLES_PROTOTYPES 1 #endif -/* Generated on date 20171125 */ +/* Generated on date 20171212 */ /* Generated C header for: * API: gles2
diff --git a/api/GLES2/gl2ext.h b/api/GLES2/gl2ext.h index c424181..f64ebbb 100644 --- a/api/GLES2/gl2ext.h +++ b/api/GLES2/gl2ext.h
@@ -38,7 +38,7 @@ #define GL_APIENTRYP GL_APIENTRY* #endif -/* Generated on date 20171125 */ +/* Generated on date 20171212 */ /* Generated C header for: * API: gles2 @@ -2517,6 +2517,11 @@ #endif #endif /* GL_NV_conservative_raster */ +#ifndef GL_NV_conservative_raster_pre_snap +#define GL_NV_conservative_raster_pre_snap 1 +#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV 0x9550 +#endif /* GL_NV_conservative_raster_pre_snap */ + #ifndef GL_NV_conservative_raster_pre_snap_triangles #define GL_NV_conservative_raster_pre_snap_triangles 1 #define GL_CONSERVATIVE_RASTER_MODE_NV 0x954D
diff --git a/api/GLES3/gl3.h b/api/GLES3/gl3.h index e5fac38..cac3b87 100644 --- a/api/GLES3/gl3.h +++ b/api/GLES3/gl3.h
@@ -44,7 +44,7 @@ #define GL_GLES_PROTOTYPES 1 #endif -/* Generated on date 20171125 */ +/* Generated on date 20171212 */ /* Generated C header for: * API: gles2
diff --git a/extensions/NV/NV_conservative_raster_pre_snap.txt b/extensions/NV/NV_conservative_raster_pre_snap.txt new file mode 100644 index 0000000..bbb0aaf --- /dev/null +++ b/extensions/NV/NV_conservative_raster_pre_snap.txt
@@ -0,0 +1,151 @@ +Name + + NV_conservative_raster_pre_snap + +Name Strings + + GL_NV_conservative_raster_pre_snap + +Contact + + Kedarnath Thangudu, NVIDIA Corporation (kthangudu 'at' nvidia.com) + +Contributors + + Eric Werness, NVIDIA Corporation + +Status + + Shipping in NVIDIA release 388.XX drivers and up + +Version + + Last Modified Date: November 15, 2017 + Revision: 1 + +Number + + OpenGL Extension #517 + OpenGL ES Extension #297 + +Dependencies + + This extension is written against the NV_conservative_raster_pre_snap- + _triangles 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 + + NV_conservative_raster_pre_snap_triangles provides a new mode to achieve + rasterization of triangles that is conservative w.r.t the triangle at + infinite precision i.e. before it is snapped to the sub-pixel grid. This + extension provides a new mode that expands this functionality to lines and + points. + +New Procedures and Functions + + None. + +New Tokens + + Accepted by the <param> parameter of ConservativeRasterParameteriNV: + CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV 0x9550 + +Additions to Chapter 14 of the OpenGL 4.3 (Compatibility Profile) Specification +(Fixed-Function Primitive Assembly and Rasterization) + + Modify the paragraph describing ConservativeRasterParameteriNV in the + subsection 14.6.X "Conservative Rasterization" added by NV_conservative_- + raster_pre_snap_triangles + + ... 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_NV the fragments generated for a primitive will be conservative + w.r.t the primitive at infinite precision. Since non-degenerate + primitives may become degenerate due to vertex snapping, this mode will + generate fragments for zero length lines and zero area triangles which are + otherwise culled in the CONSERVATIVE_RASTER_MODE_POST_SNAP_NV. This mode + may also generate fragments for pixels that are within half a sub-pixel + distance away from the primitive at infinite precision. If the mode is + set to CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV, the pre-snap + conservative raster behavior described would apply only to triangles. The + default mode is set to CONSERVATIVE_RASTER_MODE_POST_SNAP_NV. + + Modify the paragraphs describing conservative rasterization behavior for + points, lines and polygons added by NV_conservative_raster as follows: + + If CONSERVATIVE_RASTERIZATION_NV is enabled, points are rasterized + according to point rasterization rules (section 14.4), except that a + fragment will be generated for a framebuffer pixel if the point's region + (a circle when MULTISAMPLING is enabled and POINT_SPRITE is disabled, or a + square otherwise) covers any portion of the pixel, including its edges or + points. While conservative raster mode PRE_SNAP_NV respects the + MULTISAMPLE state, modes POST_SNAP_NV and PRE_SNAP_TRIANGLES_NV always use + point multisample rasterization rules (section 14.4.3), whether or not + MULTISAMPLE is actually enabled. When performing conservative + rasterization of points, the POINT_SMOOTH enable is ignored and treated as + disabled. + + If CONSERVATIVE_RASTERIZATION_NV is enabled, lines are rasterized + according to line rasterization rules (section 14.5), except that the + LINE_STIPPLE and LINE_SMOOTH enables are ignored and treated as disabled. + When the conservative raster mode is POST_SNAP or PRE_SNAP_TRIANGLES, + lines with zero length generate no fragments, while a fragment for the + pixel that contains the end points will be generated when the mode is + PRE_SNAP_NV. Also, conservative raster mode PRE_SNAP_NV respects the + MULTISAMPLE state, while modes POST_SNAP_NV and PRE_SNAP_TRIANGLES_NV + always use line multisample rasterization rules (section 14.5.4), whether + or not MULTISAMPLE is actually enabled. + + If CONSERVATIVE_RASTERIZATION_NV is enabled, polygons are rasterized + according to polygon rasterization rules (section 14.6), except that + the POLYGON_SMOOTH enable is ignored and treated as disabled. + When the conservative raster mode is POST_SNAP_NV, polygons with + an area of zero generate no fragments, even for pixels that contain a + vertex or edge of the zero-area polygon, while modes PRE_SNAP_TRIANGLES + and PRE_SNAP_NV generate them. Also, conservative raster mode PRE_SNAP_NV + respects the MULTISAMPLE state, while modes POST_SNAP_NV and + PRE_SNAP_TRIANGLES_NV always use polygon multisample rasterization rules + (section 14.6.6), whether or not MULTISAMPLE is actually enabled. + +New State + + None. + +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, CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV or CONSERVATIVE_- + RASTER_MODE_PRE_SNAP_TRIANGLES_NV. + +Issues + + (1) Would MODE_PRE_SNAP_NV generate fragments for zero width lines and + zero diameter points? + + RESOLVED. No. Vertex snapping to the sub-pixel grid may cause in a line + to become zero length, so, MODE_PRE_SNAP will generate fragments for + zero length lines. Zero width lines and zero diameter points are culled as + normal in both MODE_PRE_SNAP or MODE_POST_SNAP modes. + +Revision History + + Revision 1 + - Internal revisions. +
diff --git a/extensions/NV/NV_conservative_raster_underestimation.txt b/extensions/NV/NV_conservative_raster_underestimation.txt new file mode 100644 index 0000000..c5f4611 --- /dev/null +++ b/extensions/NV/NV_conservative_raster_underestimation.txt
@@ -0,0 +1,186 @@ +Name + + NV_conservative_raster_underestimation + +Name Strings + + GL_NV_conservative_raster_underestimation + +Contact + + Kedarnath Thangudu, NVIDIA Corporation (kthangudu 'at' nvidia.com) + +Contributors + + Mark Kilgard, NVIDIA + +Status + + Shipping in NVIDIA release 388.XX drivers and up + +Version + + Last Modified Date: November 15, 2017 + Revision: 1 + +Number + + OpenGL Extension #518 + +Dependencies + + This extension is written against NV_conservative_raster as applied to + OpenGL 4.3 specification (Core Profile). + + This extension interacts with NV_gpu_program4 and NV_gpu_program5. + +Overview + + The extension NV_conservative_raster provides a new rasterization mode + known as "Overestimated Conservative Rasterization", where any pixel that + is partially covered, even if no sample location is covered, is treated as + fully covered and a corresponding fragment will be shaded. There is also + an "Underestimated Conservative Rasterization" variant, where only the + pixels that are completely covered by the primitive are rasterized. + + This extension provides the underestimated conservative rasterization + information for each fragment in the fragment shader through a new + built-in gl_FragFullyCoveredNV. + +New Procedures and Functions + + None. + +New Tokens + + None. + +Additions to Chapter 14 of the OpenGL 4.3 (Compatibility Profile) Specification +(Fixed-Function Primitive Assembly and Rasterization) + + Add a new paragraph at the end of subsection 14.6.X "Conservative + Rasterization" (added by NV_conservative_raster) + + When CONSERVATIVE_RASTERIZATION_NV is enabled, the fragment shader built-in + input boolean variable gl_FragFullyCoveredNV will indicate if the fragment + being shaded is completely covered by the primitive. + +Additions to Chapter 15 of the OpenGL 4.3 (Compatibility Profile) Specification +(Programmable Fragment Processing) + + Add to the Section 15.2.2 (Shader Inputs) + + When CONSERVATIVE_RASTERIZATION_NV is enabled, the built-in read-only + variable gl_FragFullyCoveredNV is set to TRUE if the fragment is fully + covered by the generating primitive, and FALSE otherwise. + +New State + + None. + +Additions to the AGL/GLX/WGL Specifications + + None. + +GLX Protocol + + None. + +Modifications to the OpenGL Shading Language Specification, Version 4.30 + + Including the following line in a shader can be used to control the + language features described in this extension: + + #extension GL_NV_conservative_raster_underestimation : <behavior> + + where <behavior> is as specified in section 3.3. + + New preprocessor #defines are added to the OpenGL Shading Language: + + #define GL_NV_conservative_raster_underestimation 1 + + Modify Section 7.1 (Built-In Language Variables), p. 113 + + Add to the list of fragment shader built-ins: + + in bool gl_FragFullyCoveredNV; + + Add the following descriptions for gl_FragFullyCoveredNV: + + The built-in variable gl_FragFullyCoveredNV is a fragment-shader input + variable which is set to TRUE, when CONSERVATIVE_RASTERIZATION_NV is + enabled and the fragment is fully covered by the generating primitive, and + FALSE otherwise. + +Errors + + None. + +Interactions with NV_gpu_program4 and NV_gpu_program5 + + If NV_gpu_program4 or NV_gpu_program5 is supported and the + "NV_conservative_raster_underestimation" program option is specified, + fragment programs can read the "fragment.fullycovered" attribute to + determine if the fragment is fully covered by the primitive. + + (Add the following rule to the NV_fragment_program4 grammar) + + <attribBasic> ::= ... + | <fragPrefix> "fullycovered" + + (Add the following to the Table X.X Fragment Attribute Bindings) + + Fragment Attribute Binding Components Underlying State + -------------------------- ---------- ---------------------------- + * fragment.fullycovered (c,-,-,-) fragment fully covered. + + (Add the following to the Section 2.X.2, Program Grammar) + + If a fragment attribute binding matches "fragment.fullycovered", the "x" + component of the fragment attribute variable is set to either 0 or 1, + depending on how the fragment is covered by the primitive. If + CONSERVATIVE_RASTERIZATION is enabled and the fragment is completely + covered by the primitive, the fullycovered attribute is set to 1; + otherwise, it is set to 0. The "y", "z", and "w" coordinates are + undefined. + + If the "NV_conservative_raster_underestimation" program option is not + specified, "fragment.fullycovered" binding is unavailable. + +Issues + + (1) Do you need a new rasterization mode for underestimated conservative + rasterization? + + RESOLVED: Enabling CONSERVATIVE_RASTERIZATION will compute both + overestimated and underestimated coverage for a primitive. A fragment will + be shaded for each pixel that is covered under overestimation and the + underestimation information is provided as a fragment shader input. By + simply discarding fragments that are not fully covered in the fragment + shader, an application can achieve underestimated rasterization of a + primitive in the final image. + + (2) Should the y, z, and w components of the fragment.fullycovered + state for NV_gpu_program4 and NV_gpu_program5 be undefined? + + RESOLVED: Yes. + + The (c,-,-,-) is consistent with all the other scalar attributes in + NV_gpu_program*. + + This undefined behavior is limited to the assembly interface and + not exposed in GLSL. + + (3) How does having CONSERVATIVE_RASTERIZATION enabled affect the sample + mask (gl_SampleMask) visible in the fragment shader? + + RESOLVED: When you have CONSERVATIVE_RASTERIZATION enabled on, the + gl_SampleMask will unconditionally show all 1's for valid samples. + + Even with all 1's in gl_SampleMask doesn't imply that a fragment is + fully covered. + +Revision History + + Revision 1 + - Internal revisions.
diff --git a/extensions/esext.php b/extensions/esext.php index 33c7d52..ae6bd70 100644 --- a/extensions/esext.php +++ b/extensions/esext.php
@@ -615,4 +615,8 @@ </li> <li value=296><a href="extensions/NV/NV_stereo_view_rendering.txt">GL_NV_stereo_view_rendering</a> </li> +<li value=297><a href="extensions/NV/NV_conservative_raster_pre_snap.txt">GL_NV_conservative_raster_pre_snap</a> +</li> +<li value=298><a href="extensions/NV/NV_conservative_raster_underestimation.txt">GL_NV_conservative_raster_underestimation</a> +</li> </ol>
diff --git a/extensions/glext.php b/extensions/glext.php index ddf3b43..d5fa9b1 100644 --- a/extensions/glext.php +++ b/extensions/glext.php
@@ -969,4 +969,8 @@ </li> <li value=516><a href="extensions/MESA/MESA_program_binary_formats.txt">GL_MESA_program_binary_formats</a> </li> +<li value=517><a href="extensions/NV/NV_conservative_raster_pre_snap.txt">GL_NV_conservative_raster_pre_snap</a> +</li> +<li value=518><a href="extensions/NV/NV_conservative_raster_underestimation.txt">GL_NV_conservative_raster_underestimation</a> +</li> </ol>
diff --git a/extensions/registry.py b/extensions/registry.py index 2039a12..7381a72 100644 --- a/extensions/registry.py +++ b/extensions/registry.py
@@ -3082,12 +3082,23 @@ 'flags' : { 'public' }, 'url' : 'extensions/NV/NV_conservative_raster_dilate.txt', }, + 'GL_NV_conservative_raster_pre_snap' : { + 'number' : 517, + 'esnumber' : 297, + 'flags' : { 'public' }, + 'url' : 'extensions/NV/NV_conservative_raster_pre_snap.txt', + }, 'GL_NV_conservative_raster_pre_snap_triangles' : { 'number' : 487, 'esnumber' : 262, 'flags' : { 'public' }, 'url' : 'extensions/NV/NV_conservative_raster_pre_snap_triangles.txt', }, + 'GL_NV_conservative_raster_underestimation' : { + 'number' : 518, + 'flags' : { 'public' }, + 'url' : 'extensions/NV/NV_conservative_raster_underestimation.txt', + }, 'GLX_NV_copy_buffer' : { 'number' : 457, 'flags' : { 'public' },
diff --git a/xml/gl.xml b/xml/gl.xml index af2bca1..9f2b544 100644 --- a/xml/gl.xml +++ b/xml/gl.xml
@@ -9979,7 +9979,7 @@ <enum value="0x954D" name="GL_CONSERVATIVE_RASTER_MODE_NV"/> <enum value="0x954E" name="GL_CONSERVATIVE_RASTER_MODE_POST_SNAP_NV"/> <enum value="0x954F" name="GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV"/> - <unused start="0x9550" vendor="NV"/> + <enum value="0x9550" name="GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV"/> <enum value="0x9551" name="GL_SHADER_BINARY_FORMAT_SPIR_V"/> <enum value="0x9551" name="GL_SHADER_BINARY_FORMAT_SPIR_V_ARB" alias="GL_SHADER_BINARY_FORMAT_SPIR_V"/> <enum value="0x9552" name="GL_SPIR_V_BINARY"/> @@ -46030,6 +46030,11 @@ <command name="glConservativeRasterParameterfNV"/> </require> </extension> + <extension name="GL_NV_conservative_raster_pre_snap" supported="gl|glcore|gles2"> + <require> + <enum name="GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV"/> + </require> + </extension> <extension name="GL_NV_conservative_raster_pre_snap_triangles" supported="gl|glcore|gles2"> <require> <enum name="GL_CONSERVATIVE_RASTER_MODE_NV"/> @@ -46039,6 +46044,7 @@ <command name="glConservativeRasterParameteriNV"/> </require> </extension> + <extension name="GL_NV_conservative_raster_underestimation" supported="gl|glcore"/> <extension name="GL_NV_copy_buffer" supported="gles2"> <require> <enum name="GL_COPY_READ_BUFFER_NV"/>