Merge pull request #259 from pknowlesnv/nv_various

Adds ES support to some NV extensions
diff --git a/extensions/NV/NV_mesh_shader.txt b/extensions/NV/NV_mesh_shader.txt
index bd0c56c..7914378 100644
--- a/extensions/NV/NV_mesh_shader.txt
+++ b/extensions/NV/NV_mesh_shader.txt
@@ -15,6 +15,7 @@
 
     Yury Uralsky, NVIDIA
     Tyson Smith, NVIDIA
+    Pyarelal Knowles, NVIDIA
 
 Status
 
@@ -22,19 +23,20 @@
 
 Version
 
-    Last Modified Date:     January 14, 2019
-    NVIDIA Revision:        3
+    Last Modified Date:     February 7, 2019
+    NVIDIA Revision:        4
 
 Number
 
     OpenGL Extension #527
+    OpenGL ES Extension #312
 
 Dependencies
 
     This extension is written against the OpenGL 4.5 Specification
     (Compatibility Profile), dated June 29, 2017.
 
-    OpenGL 4.5 is required.
+    OpenGL 4.5 or OpenGL ES 3.2 is required.
 
     This extension requires support for the OpenGL Shading Language (GLSL)
     extension "NV_mesh_shader", which can be found at the Khronos Group Github
@@ -42,11 +44,11 @@
 
         https://github.com/KhronosGroup/GLSL
 
-    This extension interacts with ARB_indirect_parameters.
+    This extension interacts with ARB_indirect_parameters and OpenGL 4.6.
 
     This extension interacts with NV_command_list.
 
-    This extension interacts with ARB_draw_indirect, EXT_draw_indirect, and
+    This extension interacts with ARB_draw_indirect and
     NV_vertex_buffer_unified_memory.
 
     This extension interacts with OVR_multiview
@@ -178,9 +180,8 @@
     (insert at the end of the section after Figure 3.1, p. 35)
 
     Figure 3.2 shows a block diagram of the alternate mesh processing pipeline
-    of the GL.  The mesh processing pipeline produces a set of output
-    primitives similar to the primitives produced by the conventional GL
-    vertex processing pipeline.
+    of GL.  This pipeline produces a set of output primitives similar to the
+    primitives produced by the conventional GL vertex processing pipeline.
 
     Work on the mesh pipeline is initiated by the application drawing a
     set of mesh tasks via an API command.  If an optional task shader is
@@ -243,7 +244,7 @@
       object can contain all of these shaders, or any subset thereof.")
 
     Mesh and Task shaders affect the assembly of primitives from
-    groups of shader invocations (see section 13).
+    groups of shader invocations (see chapter X).
     A single program object cannot mix mesh and task shader stages
     with vertex, tessellation or geometry shader stages. Furthermore
     a task shader stage cannot be combined with a fragment shader stage
@@ -263,12 +264,12 @@
 
     (add to the list of reasons why LinkProgram can fail, p. 92)
 
-    * program contains objects to form either a mesh or task shader (see
-      section 13), and
+    * <program> contains objects to form either a mesh or task shader (see
+      chapter X), and
       - the program also contains objects to form vertex, tessellation
         control, tessellation evaluation, or geometry shaders.
 
-    * program contains objects to form a task shader (see section 13), and
+    * <program> contains objects to form a task shader (see chapter X), and
       - the program is not separable and contains no objects to form a mesh
         shader.
 
@@ -323,7 +324,7 @@
      and task shaders)
 
     The bits set in <stages> indicate the program stages for which the program
-    object named by program becomes current.  These stages may include
+    object named by <program> becomes current.  These stages may include
     compute, vertex, tessellation control, tessellation evaluation, geometry,
     fragment, mesh, and task shaders, indicated respectively by
     COMPUTE_SHADER_BIT, VERTEX_SHADER_BIT, TESS_CONTROL_SHADER_BIT,
@@ -346,19 +347,19 @@
 
     (add entries to table 7.4, p. 126)
 
-      Shader Stage              | pname for querying default uniform
-                                | block storage, in components
-      ==========================|=========================================
-      Task (see section 13)     | MAX_TASK_UNIFORM_COMPONENTS_NV
-      Mesh (see section 13)     | MAX_MESH_UNIFORM_COMPONENTS_NV
+      Shader Stage         | pname for querying default uniform
+                           | block storage, in components
+      =====================|=====================================
+      Task (see chapter X) | MAX_TASK_UNIFORM_COMPONENTS_NV
+      Mesh (see chapter X) | MAX_MESH_UNIFORM_COMPONENTS_NV
 
     (add entries to table 7.5, p. 127)
 
-      Shader Stage              | pname for querying combined uniform
-                                | block storage, in components
-      ==========================|=========================================
-      Task (see section 13)     | MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV
-      Mesh (see section 13)     | MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV
+      Shader Stage         | pname for querying combined uniform
+                           | block storage, in components
+      =====================|========================================
+      Task (see chapter X) | MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV
+      Mesh (see chapter X) | MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV
 
     (add entries to table 7.7, p. 131)
 
@@ -422,16 +423,14 @@
 
       If <pname> is TASK_WORK_GROUP_SIZE_NV, an array of three integers
     containing the local work group size of the task shader
-    (see chapter 13), as specified by its input layout qualifier(s), is
-    returned.
+    (see chapter X), as specified by its input layout qualifier(s), is returned.
       If <pname> is MESH_WORK_GROUP_SIZE_NV, an array of three integers
     containing the local work group size of the mesh shader
-    (see chapter 13), as specified by its input layout qualifier(s), is
-    returned.
+    (see chapter X), as specified by its input layout qualifier(s), is returned.
       If <pname> is MESH_VERTICES_OUT_NV, the maximum number of vertices the
-    mesh shader (see section 13) will output is returned.
+    mesh shader (see chapter X) will output is returned.
       If <pname> is MESH_PRIMITIVES_OUT_NV, the maximum number of primitives
-    the mesh shader (see section 13) will output is returned.
+    the mesh shader (see chapter X) will output is returned.
       If <pname> is MESH_OUTPUT_TYPE_NV, the mesh shader output type,
     which must be one of POINTS, LINES or TRIANGLES, is returned.
 
@@ -452,7 +451,7 @@
     enabled:
 
     When multiview rendering is enabled, the DrawMeshTasks* commands (section
-    13.6) will not spawn separate task and mesh shader invocations for each
+    X.6) will not spawn separate task and mesh shader invocations for each
     view.  Instead, the primitives produced by each mesh shader local work
     group will be processed separately for each view.  For per-vertex and
     per-primitive mesh shader outputs not qualified with "perviewNV", the
@@ -469,7 +468,7 @@
     (after "and to DispatchComputeIndirect (see section 19)" add)
 
     and to DrawMeshTasksIndirectNV, MultiDrawMeshTasksIndirectNV,
-    MultiDrawMeshTasksIndirectCountNV (see section 13)
+    MultiDrawMeshTasksIndirectCountNV (see chapter X)
 
     (add following entries to the table 10.7)
 
@@ -487,7 +486,7 @@
     If there is an active program object present for the task or
     mesh shader stages, the executable code for these
     active programs is used to process incoming work groups (see
-    chapter 13).
+    chapter X).
 
     (add to the list of constants, 11.1.3.5 Texture Access, p. 441)
 
@@ -520,10 +519,10 @@
 
 
 
-    Insert new chapter before Chapter 13, Fixed-Function Vertex
+    Insert a new chapter X before Chapter 13, Fixed-Function Vertex
     Post-Processing, p. 505
 
-    Chapter 13, Programmable Mesh Processing
+    Chapter X, Programmable Mesh Processing
 
     In addition to the programmable vertex processing pipeline described in
     Chapters 10 and 11 [[compatibility profile only:  and the fixed-function
@@ -544,7 +543,7 @@
     Language Specification) and issue memory and control barriers to
     synchronize with other members of the same work group.
 
-    13.1 Task Shader Variables
+    X.1 Task Shader Variables
 
     Task shaders can access uniform variables belonging to the current
     program object. Limits on uniform storage and methods for manipulating
@@ -555,7 +554,7 @@
     basic machine units, may be queried by calling GetIntegerv with the value
     MAX_TASK_TOTAL_MEMORY_SIZE_NV.
 
-    13.2 Task Shader Outputs
+    X.2 Task Shader Outputs
 
     Each task shader work group can define how many mesh work groups
     should be generated by writing to gl_TaskCountNV. The maximum
@@ -564,7 +563,7 @@
     Furthermore the task work group can output data (qualified with "taskNV")
     that can be accessed by to the generated mesh work groups.
 
-    13.3 Mesh Shader Variables
+    X.3 Mesh Shader Variables
 
     Mesh shaders can access uniform variables belonging to the current
     program object. Limits on uniform storage and methods for manipulating
@@ -574,7 +573,7 @@
     in units of basic machine units, may be queried as the value of
     MAX_MESH_TOTAL_MEMORY_SIZE_NV.
 
-    13.4 Mesh Shader Inputs
+    X.4 Mesh Shader Inputs
 
     When each mesh shader work group runs, its invocations have access to
     built-in variables describing the work group and invocation and also the
@@ -582,7 +581,7 @@
     generated the work group.  When no task shader is active, the mesh shader
     has no access to task shader outputs.
 
-    13.5 Mesh Shader Outputs
+    X.5 Mesh Shader Outputs
 
     When each mesh shader work group completes, it emits an output mesh
     consisting of
@@ -623,7 +622,7 @@
     memory consumed by the gl_PrimitiveIndicesNV[] array does not count
     against this limit.
 
-    13.6 Mesh Tasks Drawing Commands
+    X.6 Mesh Tasks Drawing Commands
 
     One or more work groups is launched by calling
 
@@ -815,10 +814,10 @@
     +------------------------------------------+-----------+---------------+---------------------+-----------------------------------------------------------------------+--------+
     | Get Value                                | Type      | Get Command   | Minimum Value       | Description                                                           | Sec.   |
     +------------------------------------------+-----------+---------------+---------------------+-----------------------------------------------------------------------+--------+
-    | MAX_DRAW_MESH_TASKS_COUNT_NV             | Z+        | GetIntegerv   | 2^32 - 1            | Maximum number of work groups that may be drawn by a single           | 13.6   |
+    | MAX_DRAW_MESH_TASKS_COUNT_NV             | Z+        | GetIntegerv   | 2^32 - 1            | Maximum number of work groups that may be drawn by a single           | X.6    |
     |                                          |           |               |                     | draw mesh tasks command                                               |        |
-    | MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV    | Z+        | GetIntegerv   | -                   | Per-vertex output allocation granularity for mesh shaders             | 13.3   |
-    | MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV | Z+        | GetIntegerv   | -                   | Per-primitive output allocation granularity for mesh shaders          | 13.3   |
+    | MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV    | Z+        | GetIntegerv   | -                   | Per-vertex output allocation granularity for mesh shaders             | X.3    |
+    | MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV | Z+        | GetIntegerv   | -                   | Per-primitive output allocation granularity for mesh shaders          | X.3    |
     +------------------------------------------+-----------+---------------+---------------------+-----------------------------------------------------------------------+--------+
 
     Insert Table 23.75, "Implementation Dependent Task Shader Limits"
@@ -826,8 +825,8 @@
     +-----------------------------------------+-----------+---------------+---------------------+-----------------------------------------------------------------------+----------+
     | Get Value                               | Type      | Get Command   | Minimum Value       | Description                                                           | Sec.     |
     +-----------------------------------------+-----------+---------------+---------------------+-----------------------------------------------------------------------+----------+
-    | MAX_TASK_WORK_GROUP_SIZE_NV             | 3 x Z+    | GetIntegeri_v | 32     (x), 1 (y,z) | Maximum local size of a task work group (per dimension)               | 13.6     |
-    | MAX_TASK_WORK_GROUP_INVOCATIONS_NV      | Z+        | GetIntegerv   | 32                  | Maximum total task shader invocations in a single local work group    | 13.6     |
+    | MAX_TASK_WORK_GROUP_SIZE_NV             | 3 x Z+    | GetIntegeri_v | 32     (x), 1 (y,z) | Maximum local size of a task work group (per dimension)               | X.6      |
+    | MAX_TASK_WORK_GROUP_INVOCATIONS_NV      | Z+        | GetIntegerv   | 32                  | Maximum total task shader invocations in a single local work group    | X.6      |
     | MAX_TASK_UNIFORM_BLOCKS_NV              | Z+        | GetIntegerv   | 12                  | Maximum number of uniform blocks per task program                     | 7.6.2    |
     | MAX_TASK_TEXTURE_IMAGE_UNITS_NV         | Z+        | GetIntegerv   | 16                  | Maximum number of texture image units accessible by a task program    | 11.1.3.5 |
     | MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV      | Z+        | GetIntegerv   | 8                   | Number of atomic counter buffers accessed by a task program           | 7.7      |
@@ -837,9 +836,9 @@
     | MAX_TASK_UNIFORM_COMPONENTS_NV          | Z+        | GetIntegerv   | 512                 | Number of components for task shader uniform variables                | 7.6      |
     | MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV | Z+        | GetIntegerv   | *                   | Number of words for task shader uniform variables in all uniform      | 7.6      |
     |                                         |           |               |                     | blocks, including the default                                         |          |
-    | MAX_TASK_TOTAL_MEMORY_SIZE_NV           | Z+        | GetIntegerv   | 16384               | Maximum total storage size of all variables declared as <shared> and  | 13.1     |
+    | MAX_TASK_TOTAL_MEMORY_SIZE_NV           | Z+        | GetIntegerv   | 16384               | Maximum total storage size of all variables declared as <shared> and  | X.1      |
     |                                         |           |               |                     | <out> in all task shaders linked into a single program object         |          |
-    | MAX_TASK_OUTPUT_COUNT_NV                | Z+        | GetIntegerv   | 65535               | Maximum number of child mesh work groups a single task shader         | 13.2     |
+    | MAX_TASK_OUTPUT_COUNT_NV                | Z+        | GetIntegerv   | 65535               | Maximum number of child mesh work groups a single task shader         | X.2      |
     |                                         |           |               |                     | work group can emit                                                   |          |
     +-----------------------------------------+-----------+---------------+---------------------+-----------------------------------------------------------------------+----------+
 
@@ -849,8 +848,8 @@
     +-----------------------------------------+-----------+---------------+---------------------+-----------------------------------------------------------------------+----------+
     | Get Value                               | Type      | Get Command   | Minimum Value       | Description                                                           | Sec.     |
     +-----------------------------------------+-----------+---------------+---------------------+-----------------------------------------------------------------------+----------+
-    | MAX_MESH_WORK_GROUP_SIZE_NV             | 3 x Z+    | GetIntegeri_v | 32     (x), 1 (y,z) | Maximum local size of a mesh work group (per dimension)               | 13.6     |
-    | MAX_MESH_WORK_GROUP_INVOCATIONS_NV      | Z+        | GetIntegerv   | 32                  | Maximum total mesh shader invocations in a single local work group    | 13.6     |
+    | MAX_MESH_WORK_GROUP_SIZE_NV             | 3 x Z+    | GetIntegeri_v | 32     (x), 1 (y,z) | Maximum local size of a mesh work group (per dimension)               | X.6      |
+    | MAX_MESH_WORK_GROUP_INVOCATIONS_NV      | Z+        | GetIntegerv   | 32                  | Maximum total mesh shader invocations in a single local work group    | X.6      |
     | MAX_MESH_UNIFORM_BLOCKS_NV              | Z+        | GetIntegerv   | 12                  | Maximum number of uniform blocks per mesh program                     | 7.6.2    |
     | MAX_MESH_TEXTURE_IMAGE_UNITS_NV         | Z+        | GetIntegerv   | 16                  | Maximum number of texture image units accessible by a mesh shader     | 11.1.3.5 |
     | MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV      | Z+        | GetIntegerv   | 8                   | Number of atomic counter buffers accessed by a mesh shader            | 7.7      |
@@ -860,17 +859,17 @@
     | MAX_MESH_UNIFORM_COMPONENTS_NV          | Z+        | GetIntegerv   | 512                 | Number of components for mesh shader uniform variables                | 7.6      |
     | MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV | Z+        | GetIntegerv   | *                   | Number of words for mesh shader uniform variables in all uniform      | 7.6      |
     |                                         |           |               |                     | blocks, including the default                                         |          |
-    | MAX_MESH_TOTAL_MEMORY_SIZE_NV           | Z+        | GetIntegerv   | 16384               | Maximum total storage size of all variables declared as <shared> and  | 13.3     |
+    | MAX_MESH_TOTAL_MEMORY_SIZE_NV           | Z+        | GetIntegerv   | 16384               | Maximum total storage size of all variables declared as <shared> and  | X.3      |
     |                                         |           |               |                     | <out> in all mesh shaders linked into a single program object         |          |
-    | MAX_MESH_OUTPUT_PRIMITIVES_NV           | Z+        | GetIntegerv   | 256                 | Maximum number of primitives a single mesh work group can emit        | 13.5     |
-    | MAX_MESH_OUTPUT_VERTICES_NV             | Z+        | GetIntegerv   | 256                 | Maximum number of vertices a single mesh work group can emit          | 13.5     |
+    | MAX_MESH_OUTPUT_PRIMITIVES_NV           | Z+        | GetIntegerv   | 256                 | Maximum number of primitives a single mesh work group can emit        | X.5      |
+    | MAX_MESH_OUTPUT_VERTICES_NV             | Z+        | GetIntegerv   | 256                 | Maximum number of vertices a single mesh work group can emit          | X.5      |
     | MAX_MESH_VIEWS_NV                       | Z+        | GetIntegerv   | 1                   | Maximum number of multi-view views that can be used in a mesh shader  |          |
     +-----------------------------------------+-----------+---------------+---------------------+-----------------------------------------------------------------------+----------+
 
 
-Interactions with ARB_indirect_parameters
+Interactions with ARB_indirect_parameters and OpenGL 4.6
 
-    If ARB_indirect_parameters is not supported, remove the
+    If none of ARB_indirect_parameters or OpenGL 4.6 are supported, remove the
     MultiDrawMeshTasksIndirectCountNV function.
 
 Interactions with NV_command_list
@@ -898,15 +897,14 @@
 
       DrawMeshTasksNV(cmd->first, cmd->count);
 
-Interactions with ARB_draw_indirect, EXT_draw_indirect, and
-NV_vertex_buffer_unified_memory
+Interactions with ARB_draw_indirect and NV_vertex_buffer_unified_memory
 
-    When the ARB_draw_indirect or EXT_draw_indirect extension is supported in
-    addition to NV_vertex_buffer_unified_memory, applications can enable
-    DRAW_INDIRECT_UNIFIED_NV to specify that indirect draw data are sourced
-    from a pre-programmed memory range.  For such implementations, we add a
-    paragraph to spec language for DrawMeshTasksIndirectNV, also inherited by
-    MultiDrawMeshTasksIndirectNV and MultiDrawMeshTasksIndirectCountNV:
+    When the ARB_draw_indirect and NV_vertex_buffer_unified_memory extensions
+    are supported, applications can enable DRAW_INDIRECT_UNIFIED_NV to specify
+    that indirect draw data are sourced from a pre-programmed memory range.  For
+    such implementations, we add a paragraph to spec language for
+    DrawMeshTasksIndirectNV, also inherited by MultiDrawMeshTasksIndirectNV and
+    MultiDrawMeshTasksIndirectCountNV:
 
         While DRAW_INDIRECT_UNIFIED_NV is enabled, DrawMeshTasksIndirectNV
         sources its arguments from the address specified by the command
@@ -941,6 +939,31 @@
      - in mesh shaders only the appropriate per-view outputs are
        used.
 
+Interactions with OpenGL ES 3.2
+
+    If implemented in OpenGL ES, remove all references to
+    MESH_SUBROUTINE_NV, TASK_SUBROUTINE_NV, MESH_SUBROUTINE_UNIFORM_NV,
+    TASK_SUBROUTINE_UNIFORM_NV,
+    ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV,
+    ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV, GetDoublev, GetDoublei_v
+    and MultiDrawMeshTasksIndirectCountNV.
+
+    Modify Section 7.3, Program Objects, p. 71 ES 3.2
+
+    (replace the reason why LinkProgram can fail with "program contains objects
+    to form either a vertex shader or fragment shader", p. 73 ES 3.2)
+
+    * <program> contains objects to form either a vertex shader or fragment
+      shader but not a mesh shader, and
+
+      - <program> is not separable, and does not contain objects to form both a
+        vertex shader and fragment shader.
+
+    (add to the list of reasons why LinkProgram can fail, p. 74 ES 3.2)
+
+    * program contains objects to form either a mesh or task shader (see
+      chapter X) but no fragment shader.
+
 Issues
 
     (1) Should we use a new command to specify work to be processed by task
@@ -1075,6 +1098,9 @@
 
 Revision History
 
+    Revision 4 (pknowles)
+    - Add ES interactions.
+
     Revision 3, January 14, 2019 (pbrown)
     - Fix a typo in language prohibiting use of a task shader without a mesh
       shader.
diff --git a/extensions/NV/NV_representative_fragment_test.txt b/extensions/NV/NV_representative_fragment_test.txt
index 7b13a8a..1927a38 100644
--- a/extensions/NV/NV_representative_fragment_test.txt
+++ b/extensions/NV/NV_representative_fragment_test.txt
@@ -16,6 +16,7 @@
     Jeff Bolz, NVIDIA Corporation
     Pat Brown, NVIDIA Corporation
     Eric Werness, NVIDIA Corporation
+    Pyarelal Knowles, NVIDIA Corporation
 
 Status
 
@@ -23,19 +24,20 @@
 
 Version
 
-    Last Modified Date:     September 15, 2018
-    NVIDIA Revision:        2
+    Last Modified Date:     March 7, 2019
+    NVIDIA Revision:        3
 
 Number
 
     OpenGL Extension #528
+    OpenGL ES Extension #314
 
 Dependencies
 
     This extension is written against the OpenGL 4.6 Specification
     (Compatibility Profile), dated May 14, 2018.
 
-    OpenGL 4.5 is required.
+    OpenGL 4.5 or OpenGL ES 3.2 is required.
 
 Overview
 
@@ -148,6 +150,10 @@
 
     None
 
+Interactions with OpenGL ES
+
+    If implemented with OpenGL ES, ignore references to GetDoublev.
+
 Issues
 
     (1) Since the representative fragment test does not have guaranteed
@@ -173,6 +179,9 @@
 
 Revision History
 
+    Revision 3, March 7, 2019 (pknowles)
+    - Add ES interactions.
+
     Revision 2, September 15, 2018 (pbrown)
     - Prepare specification for publication.
 
diff --git a/extensions/NV/NV_shader_texture_footprint.txt b/extensions/NV/NV_shader_texture_footprint.txt
index b6bc1f3..7322358 100644
--- a/extensions/NV/NV_shader_texture_footprint.txt
+++ b/extensions/NV/NV_shader_texture_footprint.txt
@@ -22,19 +22,20 @@
 
 Version
 
-    Last Modified Date:         September 15, 2018
-    NVIDIA Revision:            1
+    Last Modified Date:         February 8, 2018
+    NVIDIA Revision:            2
 
 Number
 
     OpenGL Extension #530
+    OpenGL ES Extension #313
 
 Dependencies
 
     This extension is written against the OpenGL 4.6 Specification
     (Compatibility Profile), dated July 30, 2017.
 
-    OpenGL 4.5 is required.
+    OpenGL 4.5 or OpenGL ES 3.2 is required.
 
     This extension requires support for the OpenGL Shading Language (GLSL)
     extension "NV_shader_texture_footprint", which can be found at the Khronos
@@ -319,5 +320,8 @@
 
 Revision History
 
+    Revision 2 (pknowles)
+    - Add ES interactions.
+
     Revision 1 (clentini, pbrown)
     - Internal revisions.
diff --git a/extensions/esext.php b/extensions/esext.php
index 571b1ea..8b6369f 100644
--- a/extensions/esext.php
+++ b/extensions/esext.php
@@ -647,4 +647,10 @@
 </li>
 <li value=311><a href="extensions/NV/NV_scissor_exclusive.txt">GL_NV_scissor_exclusive</a>
 </li>
+<li value=312><a href="extensions/NV/NV_mesh_shader.txt">GL_NV_mesh_shader</a>
+</li>
+<li value=313><a href="extensions/NV/NV_shader_texture_footprint.txt">GL_NV_shader_texture_footprint</a>
+</li>
+<li value=314><a href="extensions/NV/NV_representative_fragment_test.txt">GL_NV_representative_fragment_test</a>
+</li>
 </ol>
diff --git a/extensions/registry.py b/extensions/registry.py
index 5f5d40b..214fac2 100644
--- a/extensions/registry.py
+++ b/extensions/registry.py
@@ -3450,6 +3450,7 @@
     },
     'GL_NV_mesh_shader' : {
         'number' : 527,
+        'esnumber' : 312,
         'flags' : { 'public' },
         'supporters' : { 'NVIDIA' },
         'url' : 'extensions/NV/NV_mesh_shader.txt',
@@ -3594,6 +3595,7 @@
     },
     'GL_NV_representative_fragment_test' : {
         'number' : 528,
+        'esnumber' : 314,
         'flags' : { 'public' },
         'supporters' : { 'NVIDIA' },
         'url' : 'extensions/NV/NV_representative_fragment_test.txt',
@@ -3681,6 +3683,7 @@
     },
     'GL_NV_shader_texture_footprint' : {
         'number' : 530,
+        'esnumber' : 313,
         'flags' : { 'public' },
         'supporters' : { 'NVIDIA' },
         'url' : 'extensions/NV/NV_shader_texture_footprint.txt',
diff --git a/xml/gl.xml b/xml/gl.xml
index 8f68681..ba46600 100644
--- a/xml/gl.xml
+++ b/xml/gl.xml
@@ -47096,7 +47096,7 @@
                 <command name="glNamedBufferAttachMemoryNV"/>
             </require>
         </extension>
-        <extension name="GL_NV_mesh_shader" supported="gl|glcore">
+        <extension name="GL_NV_mesh_shader" supported="gl|glcore|gles2">
             <require>
                 <enum name="GL_MESH_SHADER_NV"/>
                 <enum name="GL_TASK_SHADER_NV"/>
@@ -47136,14 +47136,8 @@
                 <enum name="GL_MESH_OUTPUT_TYPE_NV"/>
                 <enum name="GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV"/>
                 <enum name="GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV"/>
-                <enum name="GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV"/>
-                <enum name="GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV"/>
                 <enum name="GL_REFERENCED_BY_MESH_SHADER_NV"/>
                 <enum name="GL_REFERENCED_BY_TASK_SHADER_NV"/>
-                <enum name="GL_MESH_SUBROUTINE_NV"/>
-                <enum name="GL_TASK_SUBROUTINE_NV"/>
-                <enum name="GL_MESH_SUBROUTINE_UNIFORM_NV"/>
-                <enum name="GL_TASK_SUBROUTINE_UNIFORM_NV"/>
                 <enum name="GL_MESH_SHADER_BIT_NV"/>
                 <enum name="GL_TASK_SHADER_BIT_NV"/>
                 <command name="glDrawMeshTasksNV"/>
@@ -47151,6 +47145,14 @@
                 <command name="glMultiDrawMeshTasksIndirectNV"/>
                 <command name="glMultiDrawMeshTasksIndirectCountNV"/>
             </require>
+            <require comment="Supported only in OpenGL">
+                <enum name="GL_MESH_SUBROUTINE_NV"/>
+                <enum name="GL_TASK_SUBROUTINE_NV"/>
+                <enum name="GL_MESH_SUBROUTINE_UNIFORM_NV"/>
+                <enum name="GL_TASK_SUBROUTINE_UNIFORM_NV"/>
+                <enum name="GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV"/>
+                <enum name="GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV"/>
+            </require>
         </extension>
         <extension name="GL_NV_multisample_coverage" supported="gl">
             <require>
@@ -47649,7 +47651,7 @@
                 <command name="glGetCombinerStageParameterfvNV"/>
             </require>
         </extension>
-        <extension name="GL_NV_representative_fragment_test" supported="gl|glcore">
+        <extension name="GL_NV_representative_fragment_test" supported="gl|glcore|gles2">
             <require>
                 <enum name="GL_REPRESENTATIVE_FRAGMENT_TEST_NV"/>
             </require>
@@ -47732,7 +47734,7 @@
         </extension>
         <extension name="GL_NV_shader_noperspective_interpolation" supported="gles2"/>
         <extension name="GL_NV_shader_storage_buffer_object" supported="gl"/>
-        <extension name="GL_NV_shader_texture_footprint" supported="gl|glcore"/>
+        <extension name="GL_NV_shader_texture_footprint" supported="gl|glcore|gles2"/>
         <extension name="GL_NV_shader_thread_group" supported="gl|glcore">
             <require>
                 <enum name="GL_WARP_SIZE_NV"/>