| Name |
| |
| ARB_ES3_2_compatibility |
| |
| Name Strings |
| |
| GL_ARB_ES3_2_compatibility |
| |
| Contact |
| |
| Piers Daniell, NVIDIA Corporation (pdaniell 'at' nvidia.com) |
| |
| Contributors |
| |
| Daniel Koch, NVIDIA Corporation (dkoch 'at' nvidia.com) |
| |
| and contributors to the OpenGL ES 3.2 specification |
| |
| Notice |
| |
| Copyright (c) 2015 The Khronos Group Inc. Copyright terms at |
| http://www.khronos.org/registry/speccopyright.html |
| |
| Specification Update Policy |
| |
| Khronos-approved extension specifications are updated in response to |
| issues and bugs prioritized by the Khronos OpenGL Working Group. For |
| extensions which have been promoted to a core Specification, fixes will |
| first appear in the latest version of that core Specification, and will |
| eventually be backported to the extension document. This policy is |
| described in more detail at |
| https://www.khronos.org/registry/OpenGL/docs/update_policy.php |
| |
| Status |
| |
| Complete. Approved by the ARB on June 26, 2015. |
| Ratified by the Khronos Board of Promoters on August 7, 2015. |
| |
| Version |
| |
| Last Modified Date: June 25, 2015 |
| Revision: 8 |
| |
| Number |
| |
| ARB Extension #177 |
| |
| Dependencies |
| |
| OpenGL 4.5, ARB_ES2_compatibility, ARB_ES3_compatibility and |
| ARB_ES3_1_compatibility are required. |
| |
| KHR_blend_equation_advanced and KHR_texture_compression_astc_ldr are |
| recommended to support the full OpenGL ES 3.2 feature set, but not |
| required for this extension. |
| |
| This extension is written against The OpenGL 4.5 (Compatibility Profile) |
| specification. |
| |
| Overview |
| |
| This extension adds support for features of OpenGL ES 3.2 that are |
| missing from OpenGL 4.5. Enabling these features will ease the process |
| of porting applications from OpenGL ES 3.2 to OpenGL. |
| |
| In particular this adds the following features: |
| |
| - Bounding box used to optimization tessellation processing |
| (OES_primitive_bounding_box) |
| - query for MULTISAMPLE_LINE_WIDTH_RANGE_ARB |
| - support for the OpenGL ES 3.20 shading language |
| |
| For full OpenGL ES 3.2 compatibility the implementation must support |
| KHR_blend_equation_advanced and KHR_texture_compression_astc_ldr. Those |
| features are not defined in this extension spec since they are already |
| defined at the KHR level. |
| |
| New Procedures and Functions |
| |
| void PrimitiveBoundingBoxARB(float minX, float minY, float minZ, float minW, |
| float maxX, float maxY, float maxZ, float maxW); |
| |
| New Tokens |
| |
| Accepted by the <pname> parameter of GetBooleanv, GetFloatv, GetIntegerv, |
| and GetInteger64v: |
| |
| PRIMITIVE_BOUNDING_BOX_ARB 0x92BE |
| MULTISAMPLE_LINE_WIDTH_RANGE_ARB 0x9381 |
| MULTISAMPLE_LINE_WIDTH_GRANULARITY_ARB 0x9382 |
| |
| Additions to Chapter 11 of the 4.5 Specification (Programmable Vertex |
| Processing) |
| |
| -- OpenGL: Section 11.2, Tessellation |
| |
| Modify section 11.2.1.2.3, "Tessellation Control Shader Outputs": |
| |
| In the second paragraph, add gl_BoundingBox[] to the list of built-in |
| per-patch output arrays: |
| |
| Tessellation shaders additionally have three built-in per-patch output |
| arrays, gl_TessLevelOuter[], gl_TessLevelInner[], and gl_BoundingBox[]. |
| These arrays ... as discussed in the following section. gl_BoundingBox[] |
| is an array of two vec4 values that should be used instead of the value of |
| PRIMITIVE_BOUNDING_BOX_ARB as the primitive bounding box (see Section |
| 14.1pbb) for primitives generated from the output patch. |
| |
| Modify the sixth paragraph of the section to state that gl_BoundingBox[] |
| counts against the per-patch limit: |
| |
| ... The built-in outputs gl_TessLevelOuter[] and gl_TessLevelInner[] are not |
| counted against the per-patch limit. The built-in output |
| gl_BoundingBox[], if statically assigned by the shader, is counted |
| against the per-patch limit. The total number of components... |
| |
| |
| Modify section 11.2.3.3, "Tessellation Evaluation Shader Inputs": |
| |
| Insert a new paragraph after the list of special input variables in |
| paragraph 2: |
| |
| The special tessellation control shader output gl_BoundingBox[] is |
| consumed by the tessellation primitive generator, and is not available as an |
| input to the tessellation evaluation shader. |
| |
| |
| Add new section 14.1pbb following section 14.1, "Discarding Primitives |
| Before Rasterization" on p. 525: |
| |
| 14.1pbb, Primitive Bounding Box |
| |
| Implementations may be able to optimize performance if the application |
| provides bounds of primitives that will be generated by the tessellation |
| primitive generator or the geometry shader prior to executing those stages. |
| If the provided bounds are incorrect and primitives extend beyond them, the |
| rasterizer may or may not generate fragments for the portions of primitives |
| outside the bounds. |
| |
| The primitive bounding box is specified using |
| |
| void PrimitiveBoundingBoxARB(float minX, float minY, float minZ, float minW, |
| float maxX, float maxY, float maxZ, float maxW); |
| |
| where <minX>, <minY>, <minZ>, and <minW> specify the minimum clip space |
| coordinate of the bounding box and <maxX>, <maxY>, <maxZ>, and <maxW> |
| specify the maximum coordinate. |
| |
| If tessellation is active, each invocation of the tessellation control |
| shader may re-specify the bounding box by writing to the built-in |
| gl_BoundingBox[] variable. If the shader statically assigns a value to |
| any part of this variable, then gl_BoundingBox[0] is used instead of |
| <minX>, <minY>, <minZ>, <minW>, and gl_BoundingBox[1] is used instead of |
| <maxX>, <maxY>, <maxZ>, <maxW>. If the shader contains a static assignment |
| to gl_BoundingBox[] and there is an execution path through the shader |
| that does not write all components of gl_BoundingBox[], the value of |
| unwritten components and corresponding bounding box coordinates is undefined |
| for executions of the shader that take that path. |
| |
| If the tessellation control shader re-specifies the bounding box, the re- |
| specified value is used for primitives generated from the output patch by |
| the primitive generator, any primitives emitted by the geometry shader |
| invocations for those generated primitives, and any primitives further |
| introduced during clipping. |
| |
| The bounding box in clip space is composed of 16 vertices formed by all |
| combinations of the minimum and maximum values for each dimension. This |
| bounding box is clipped against w_c > 0, and projected to three dimensions |
| by dividing x_c, y_c, and z_c by w_c for each vertex. The viewport transform |
| is then applied to each vertex to produce a three-dimensional bounding |
| volume in window coordinates. |
| |
| The window space bounding volume is expanded in the X and Y dimensions to |
| accomodate the rasterization rules for the primitive type, and to fall on |
| fragment boundaries: |
| min_wc' = floor(min_wc - size/2.0) |
| max_wc' = ceil(max_wc + size/2.0) |
| where the min_wc rule is used for x and y window coordinates of bounding |
| volume vertices formed from minX and minY respectively, and the max_wc rule |
| is used for x and y window coordinates of bounding volume vertices formed |
| from maxX and maxY respectively. For point primitives, size is the per- |
| primitive point size after clamping to the implementation-defined maximum |
| point size as described in section 13.3. For line primitives, size is the |
| line width, after rounding and clamping as described in section 13.4.2.1. |
| For triangle primitives, size is zero. |
| |
| During rasterization, the rasterizer will generate fragments with |
| window coordinates inside the windows space bounding volume, but may or may |
| not generate fragments with window coordinates outside the bounding volume. |
| |
| |
| Modify section 14.5.4, "Line Multisample Rasterization": |
| |
| Replace the last paragraph with: |
| |
| Line width range and number of gradations are equivalent to those supported |
| for antialiased lines. The supported [min, max] range of multisampled line |
| widths, and the width of evenly-space graduations within that range are |
| implementation-dependent and may be queried as |
| MULTISAMPLE_LINE_WIDTH_RANGE_ARB and MULTISAMPLE_LINE_WIDTH_GRANULARITY_ARB |
| respectively, as described in table 23.54. If, for instance the width range |
| is from 0.1 to 2.0 and the gradation width is 0.1 then the widths 0.1, 0.2, |
| ..., 1.9, 2.0 are supported. Additional line widths may also be supported; |
| there is no requirement that these widths be evenly space. If an |
| unsupported width is requested, the nearest supported width is used |
| instead. |
| |
| Additions to the OpenGL Shading Language |
| |
| Including the following line in a shader can be used to control the |
| language features described in this extension: |
| |
| #extension GL_ARB_ES3_2_compatibility : <behavior> |
| |
| where <behavior> is as specified in section 3.3. |
| |
| New preprocessor #defines are added to the OpenGL Shading Language: |
| |
| #define GL_ARB_ES3_2_compatibility 1 |
| |
| |
| Additions to Chapter 3 of the OpenGL Shading Language 4.50.5 Specification |
| (Basics) |
| |
| Modify the paragraph at the bottom of page 16 in Section 3.3 |
| (Preprocessor) as follows: |
| |
| "... Shaders that specify #version 100 will be treated as targeting |
| version 1.00 of the OpenGL ES Shading Language. Shaders that specify |
| #version 300 will be treated as targeting version 3.00 of the OpenGL |
| ES Shading Language. Shaders that specify #version 310 will be treated |
| as targeting version 3.10 of the OpenGL ES Shading Language. Shaders |
| that specify #version 320 will be treated as targeting version 3.20 |
| of the OpenGL ES Shading Language...." |
| |
| Modify the 3rd paragraph at the top of p16 as follows: |
| |
| A <profile> argument ... |
| If version 300, 310 or 320 is specified, the profile argument is not |
| optional and must be "es", or a compile-time error results. The Language |
| Specification ... |
| |
| |
| Additions to Chapter 7 of the OpenGL Shading Language 4.50.5 Specification |
| (Built-in Variables) |
| |
| Add a new built-in variable intrinsic declaration after the |
| gl_TessLevelOuter and gl_TessLevelInner declarations: |
| |
| patch out highp vec4 gl_BoundingBox[2]; |
| |
| |
| Additions to the AGL/GLX/WGL Specifications |
| |
| None |
| |
| Errors |
| |
| TBD |
| |
| New State |
| |
| Add to state values in Table 23.10, Transformation State: |
| |
| Default |
| Get Value Type Get Command Value Description Sec. |
| -------------------------- ---- ----------- ------------ ----------------- -------- |
| PRIMITIVE_BOUNDING_BOX_ARB 8xR GetFloatv -1,-1,-1, 1, Default primitive 14.1pbb |
| 1, 1, 1, 1 bounding box |
| |
| Add to state values in Table 23.54, Implementation Dependent Values: |
| |
| Minimum |
| Get Value Type Get Command Value Description Sec. |
| -------------------------------- ---- ----------- ------- ------------------- -------- |
| MULTISAMPLE_LINE_WIDTH_RANGE_ARB 2xR+ GetFloatv 1,1 Range (lo to hi) of 14.5.4 |
| multisampled line widths |
| MULTISAMPLE_LINE_WIDTH_GRANULARITY_ARB R+ GetFloatv - Multisampled line 14.5.4 |
| width granularity |
| |
| |
| Issues |
| |
| 1) With this extension, is OpenGL 4.5 a complete superset of OpenGL ES 3.2? |
| |
| RESOLVED: No. This extension does not include KHR_blend_equation_advanced or |
| KHR_texture_compression_astc_ldr even though these are part of OpenGL ES 3.2. |
| These continue to be optional extensions for OpenGL. Otherwise OpenGL 4.5 |
| plus this extension is a superset of OpenGL ES 3.2. |
| |
| Revision History |
| |
| Rev. Date Author Changes |
| ---- -------- -------- ----------------------------------------------- |
| |
| 1 04/19/15 pdaniell Initial draft with incomplete text. |
| |
| 2 04/29/15 pdaniell Remove EXT_texture_sRGB_decode which is no longer |
| in OpenGL ES 3.2. |
| |
| 3 05/07/15 dkoch Add MULTISAMPLED_LINE_WIDTH_RANGE_ARB query |
| (Bug 13828). |
| Remove ASTC interaction with SRGB_DECODE. |
| |
| 4 05/07/15 Jon Leech Assign enum for MULTISAMPLED_LINE_WIDTH_RANGE_ARB. |
| |
| 5 05/21/15 pdaniell Allow KHR_blend_equation_advanced and |
| KHR_texture_compression_astc_ldr to be optional |
| for this extension. |
| |
| 6 06/18/15 pdaniell Fix resolution of issue (1). |
| |
| 7 06/24/15 Jon Leech Correct MULTISAMPLE_LINE_WIDTH_RANGE_ARB |
| spelling (drop 'D') |
| |
| 8 06/25/15 dkoch Add MULTISAMPLE_LINE_WIDTH_GRANULARITY_ARB |
| query per bug 13828. |
| |