Add fix for glext.h - should compile with khrplatform.h included now.

Merge branch 'master' into 184-xml-fixes
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..a11610b
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1 @@
+A reminder that this issue tracker is managed by the Khronos Group. Interactions here should follow the Khronos Code of Conduct (https://www.khronos.org/developers/code-of-conduct), which prohibits aggressive or derogatory language. Please keep the discussion friendly and civil.
diff --git a/api/GL/glcorearb.h b/api/GL/glcorearb.h
index 22d4bc4..33b01e2 100755
--- a/api/GL/glcorearb.h
+++ b/api/GL/glcorearb.h
@@ -3337,6 +3337,25 @@
 #ifndef GL_ARB_internalformat_query2
 #define GL_ARB_internalformat_query2 1
 #define GL_SRGB_DECODE_ARB                0x8299
+#define GL_VIEW_CLASS_EAC_R11             0x9383
+#define GL_VIEW_CLASS_EAC_RG11            0x9384
+#define GL_VIEW_CLASS_ETC2_RGB            0x9385
+#define GL_VIEW_CLASS_ETC2_RGBA           0x9386
+#define GL_VIEW_CLASS_ETC2_EAC_RGBA       0x9387
+#define GL_VIEW_CLASS_ASTC_4x4_RGBA       0x9388
+#define GL_VIEW_CLASS_ASTC_5x4_RGBA       0x9389
+#define GL_VIEW_CLASS_ASTC_5x5_RGBA       0x938A
+#define GL_VIEW_CLASS_ASTC_6x5_RGBA       0x938B
+#define GL_VIEW_CLASS_ASTC_6x6_RGBA       0x938C
+#define GL_VIEW_CLASS_ASTC_8x5_RGBA       0x938D
+#define GL_VIEW_CLASS_ASTC_8x6_RGBA       0x938E
+#define GL_VIEW_CLASS_ASTC_8x8_RGBA       0x938F
+#define GL_VIEW_CLASS_ASTC_10x5_RGBA      0x9390
+#define GL_VIEW_CLASS_ASTC_10x6_RGBA      0x9391
+#define GL_VIEW_CLASS_ASTC_10x8_RGBA      0x9392
+#define GL_VIEW_CLASS_ASTC_10x10_RGBA     0x9393
+#define GL_VIEW_CLASS_ASTC_12x10_RGBA     0x9394
+#define GL_VIEW_CLASS_ASTC_12x12_RGBA     0x9395
 #endif /* GL_ARB_internalformat_query2 */
 
 #ifndef GL_ARB_invalidate_subdata
@@ -3921,6 +3940,22 @@
 #define GL_KHR_texture_compression_astc_sliced_3d 1
 #endif /* GL_KHR_texture_compression_astc_sliced_3d */
 
+#ifndef GL_AMD_framebuffer_multisample_advanced
+#define GL_AMD_framebuffer_multisample_advanced 1
+#define GL_RENDERBUFFER_STORAGE_SAMPLES_AMD 0x91B2
+#define GL_MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD 0x91B3
+#define GL_MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD 0x91B4
+#define GL_MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD 0x91B5
+#define GL_NUM_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B6
+#define GL_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B7
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glRenderbufferStorageMultisampleAdvancedAMD (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleAdvancedAMD (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_AMD_framebuffer_multisample_advanced */
+
 #ifndef GL_AMD_performance_monitor
 #define GL_AMD_performance_monitor 1
 #define GL_COUNTER_TYPE_AMD               0x8BC0
@@ -4880,6 +4915,10 @@
 #endif
 #endif /* GL_NV_command_list */
 
+#ifndef GL_NV_compute_shader_derivatives
+#define GL_NV_compute_shader_derivatives 1
+#endif /* GL_NV_compute_shader_derivatives */
+
 #ifndef GL_NV_conditional_render
 #define GL_NV_conditional_render 1
 #define GL_QUERY_WAIT_NV                  0x8E13
@@ -4969,6 +5008,10 @@
 #endif
 #endif /* GL_NV_fragment_coverage_to_color */
 
+#ifndef GL_NV_fragment_shader_barycentric
+#define GL_NV_fragment_shader_barycentric 1
+#endif /* GL_NV_fragment_shader_barycentric */
+
 #ifndef GL_NV_fragment_shader_interlock
 #define GL_NV_fragment_shader_interlock 1
 #endif /* GL_NV_fragment_shader_interlock */
@@ -5122,6 +5165,96 @@
 #endif
 #endif /* GL_NV_internalformat_sample_query */
 
+#ifndef GL_NV_memory_attachment
+#define GL_NV_memory_attachment 1
+#define GL_ATTACHED_MEMORY_OBJECT_NV      0x95A4
+#define GL_ATTACHED_MEMORY_OFFSET_NV      0x95A5
+#define GL_MEMORY_ATTACHABLE_ALIGNMENT_NV 0x95A6
+#define GL_MEMORY_ATTACHABLE_SIZE_NV      0x95A7
+#define GL_MEMORY_ATTACHABLE_NV           0x95A8
+#define GL_DETACHED_MEMORY_INCARNATION_NV 0x95A9
+#define GL_DETACHED_TEXTURES_NV           0x95AA
+#define GL_DETACHED_BUFFERS_NV            0x95AB
+#define GL_MAX_DETACHED_TEXTURES_NV       0x95AC
+#define GL_MAX_DETACHED_BUFFERS_NV        0x95AD
+typedef void (APIENTRYP PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC) (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params);
+typedef void (APIENTRYP PFNGLRESETMEMORYOBJECTPARAMETERNVPROC) (GLuint memory, GLenum pname);
+typedef void (APIENTRYP PFNGLTEXATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLBUFFERATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXTUREATTACHMEMORYNVPROC) (GLuint texture, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERATTACHMEMORYNVPROC) (GLuint buffer, GLuint memory, GLuint64 offset);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetMemoryObjectDetachedResourcesuivNV (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params);
+GLAPI void APIENTRY glResetMemoryObjectParameterNV (GLuint memory, GLenum pname);
+GLAPI void APIENTRY glTexAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glBufferAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTextureAttachMemoryNV (GLuint texture, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glNamedBufferAttachMemoryNV (GLuint buffer, GLuint memory, GLuint64 offset);
+#endif
+#endif /* GL_NV_memory_attachment */
+
+#ifndef GL_NV_mesh_shader
+#define GL_NV_mesh_shader 1
+#define GL_MESH_SHADER_NV                 0x9559
+#define GL_TASK_SHADER_NV                 0x955A
+#define GL_MAX_MESH_UNIFORM_BLOCKS_NV     0x8E60
+#define GL_MAX_MESH_TEXTURE_IMAGE_UNITS_NV 0x8E61
+#define GL_MAX_MESH_IMAGE_UNIFORMS_NV     0x8E62
+#define GL_MAX_MESH_UNIFORM_COMPONENTS_NV 0x8E63
+#define GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV 0x8E64
+#define GL_MAX_MESH_ATOMIC_COUNTERS_NV    0x8E65
+#define GL_MAX_MESH_SHADER_STORAGE_BLOCKS_NV 0x8E66
+#define GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV 0x8E67
+#define GL_MAX_TASK_UNIFORM_BLOCKS_NV     0x8E68
+#define GL_MAX_TASK_TEXTURE_IMAGE_UNITS_NV 0x8E69
+#define GL_MAX_TASK_IMAGE_UNIFORMS_NV     0x8E6A
+#define GL_MAX_TASK_UNIFORM_COMPONENTS_NV 0x8E6B
+#define GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV 0x8E6C
+#define GL_MAX_TASK_ATOMIC_COUNTERS_NV    0x8E6D
+#define GL_MAX_TASK_SHADER_STORAGE_BLOCKS_NV 0x8E6E
+#define GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV 0x8E6F
+#define GL_MAX_MESH_WORK_GROUP_INVOCATIONS_NV 0x95A2
+#define GL_MAX_TASK_WORK_GROUP_INVOCATIONS_NV 0x95A3
+#define GL_MAX_MESH_TOTAL_MEMORY_SIZE_NV  0x9536
+#define GL_MAX_TASK_TOTAL_MEMORY_SIZE_NV  0x9537
+#define GL_MAX_MESH_OUTPUT_VERTICES_NV    0x9538
+#define GL_MAX_MESH_OUTPUT_PRIMITIVES_NV  0x9539
+#define GL_MAX_TASK_OUTPUT_COUNT_NV       0x953A
+#define GL_MAX_DRAW_MESH_TASKS_COUNT_NV   0x953D
+#define GL_MAX_MESH_VIEWS_NV              0x9557
+#define GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV 0x92DF
+#define GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV 0x9543
+#define GL_MAX_MESH_WORK_GROUP_SIZE_NV    0x953B
+#define GL_MAX_TASK_WORK_GROUP_SIZE_NV    0x953C
+#define GL_MESH_WORK_GROUP_SIZE_NV        0x953E
+#define GL_TASK_WORK_GROUP_SIZE_NV        0x953F
+#define GL_MESH_VERTICES_OUT_NV           0x9579
+#define GL_MESH_PRIMITIVES_OUT_NV         0x957A
+#define GL_MESH_OUTPUT_TYPE_NV            0x957B
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV 0x959C
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV 0x959D
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV 0x959E
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV 0x959F
+#define GL_REFERENCED_BY_MESH_SHADER_NV   0x95A0
+#define GL_REFERENCED_BY_TASK_SHADER_NV   0x95A1
+#define GL_MESH_SUBROUTINE_NV             0x957C
+#define GL_TASK_SUBROUTINE_NV             0x957D
+#define GL_MESH_SUBROUTINE_UNIFORM_NV     0x957E
+#define GL_TASK_SUBROUTINE_UNIFORM_NV     0x957F
+#define GL_MESH_SHADER_BIT_NV             0x00000040
+#define GL_TASK_SHADER_BIT_NV             0x00000080
+typedef void (APIENTRYP PFNGLDRAWMESHTASKSNVPROC) (GLuint first, GLuint count);
+typedef void (APIENTRYP PFNGLDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect);
+typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect, GLsizei drawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC) (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawMeshTasksNV (GLuint first, GLuint count);
+GLAPI void APIENTRY glDrawMeshTasksIndirectNV (GLintptr indirect);
+GLAPI void APIENTRY glMultiDrawMeshTasksIndirectNV (GLintptr indirect, GLsizei drawcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawMeshTasksIndirectCountNV (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+#endif
+#endif /* GL_NV_mesh_shader */
+
 #ifndef GL_NV_path_rendering
 #define GL_NV_path_rendering 1
 #define GL_PATH_FORMAT_SVG_NV             0x9070
@@ -5400,6 +5533,11 @@
 #define GL_SHARED_EDGE_NV                 0xC0
 #endif /* GL_NV_path_rendering_shared_edge */
 
+#ifndef GL_NV_representative_fragment_test
+#define GL_NV_representative_fragment_test 1
+#define GL_REPRESENTATIVE_FRAGMENT_TEST_NV 0x937F
+#endif /* GL_NV_representative_fragment_test */
+
 #ifndef GL_NV_sample_locations
 #define GL_NV_sample_locations 1
 #define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D
@@ -5424,6 +5562,18 @@
 #define GL_NV_sample_mask_override_coverage 1
 #endif /* GL_NV_sample_mask_override_coverage */
 
+#ifndef GL_NV_scissor_exclusive
+#define GL_NV_scissor_exclusive 1
+#define GL_SCISSOR_TEST_EXCLUSIVE_NV      0x9555
+#define GL_SCISSOR_BOX_EXCLUSIVE_NV       0x9556
+typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVENVPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVEARRAYVNVPROC) (GLuint first, GLsizei count, const GLint *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glScissorExclusiveNV (GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glScissorExclusiveArrayvNV (GLuint first, GLsizei count, const GLint *v);
+#endif
+#endif /* GL_NV_scissor_exclusive */
+
 #ifndef GL_NV_shader_atomic_counters
 #define GL_NV_shader_atomic_counters 1
 #endif /* GL_NV_shader_atomic_counters */
@@ -5486,6 +5636,10 @@
 #define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010
 #endif /* GL_NV_shader_buffer_store */
 
+#ifndef GL_NV_shader_texture_footprint
+#define GL_NV_shader_texture_footprint 1
+#endif /* GL_NV_shader_texture_footprint */
+
 #ifndef GL_NV_shader_thread_group
 #define GL_NV_shader_thread_group 1
 #define GL_WARP_SIZE_NV                   0x9339
@@ -5497,6 +5651,47 @@
 #define GL_NV_shader_thread_shuffle 1
 #endif /* GL_NV_shader_thread_shuffle */
 
+#ifndef GL_NV_shading_rate_image
+#define GL_NV_shading_rate_image 1
+#define GL_SHADING_RATE_IMAGE_NV          0x9563
+#define GL_SHADING_RATE_NO_INVOCATIONS_NV 0x9564
+#define GL_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV 0x9565
+#define GL_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV 0x9566
+#define GL_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV 0x9567
+#define GL_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV 0x9568
+#define GL_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV 0x9569
+#define GL_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV 0x956A
+#define GL_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV 0x956B
+#define GL_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV 0x956C
+#define GL_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV 0x956D
+#define GL_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV 0x956E
+#define GL_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV 0x956F
+#define GL_SHADING_RATE_IMAGE_BINDING_NV  0x955B
+#define GL_SHADING_RATE_IMAGE_TEXEL_WIDTH_NV 0x955C
+#define GL_SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV 0x955D
+#define GL_SHADING_RATE_IMAGE_PALETTE_SIZE_NV 0x955E
+#define GL_MAX_COARSE_FRAGMENT_SAMPLES_NV 0x955F
+#define GL_SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV 0x95AE
+#define GL_SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV 0x95AF
+#define GL_SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV 0x95B0
+typedef void (APIENTRYP PFNGLBINDSHADINGRATEIMAGENVPROC) (GLuint texture);
+typedef void (APIENTRYP PFNGLGETSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint entry, GLenum *rate);
+typedef void (APIENTRYP PFNGLGETSHADINGRATESAMPLELOCATIONIVNVPROC) (GLenum rate, GLuint samples, GLuint index, GLint *location);
+typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEBARRIERNVPROC) (GLboolean synchronize);
+typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates);
+typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERNVPROC) (GLenum order);
+typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC) (GLenum rate, GLuint samples, const GLint *locations);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindShadingRateImageNV (GLuint texture);
+GLAPI void APIENTRY glGetShadingRateImagePaletteNV (GLuint viewport, GLuint entry, GLenum *rate);
+GLAPI void APIENTRY glGetShadingRateSampleLocationivNV (GLenum rate, GLuint samples, GLuint index, GLint *location);
+GLAPI void APIENTRY glShadingRateImageBarrierNV (GLboolean synchronize);
+GLAPI void APIENTRY glShadingRateImagePaletteNV (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates);
+GLAPI void APIENTRY glShadingRateSampleOrderNV (GLenum order);
+GLAPI void APIENTRY glShadingRateSampleOrderCustomNV (GLenum rate, GLuint samples, const GLint *locations);
+#endif
+#endif /* GL_NV_shading_rate_image */
+
 #ifndef GL_NV_stereo_view_rendering
 #define GL_NV_stereo_view_rendering 1
 #endif /* GL_NV_stereo_view_rendering */
diff --git a/api/GL/glext.h b/api/GL/glext.h
index fe39deb..c452a05 100644
--- a/api/GL/glext.h
+++ b/api/GL/glext.h
@@ -51,7 +51,9 @@
 #define GLAPI extern
 #endif
 
-#define GL_GLEXT_VERSION 20180604
+#define GL_GLEXT_VERSION 20181031
+
+#include <KHR/khrplatform.h>
 
 /* Generated C header for:
  * API: gl
@@ -3628,6 +3630,25 @@
 #ifndef GL_ARB_internalformat_query2
 #define GL_ARB_internalformat_query2 1
 #define GL_SRGB_DECODE_ARB                0x8299
+#define GL_VIEW_CLASS_EAC_R11             0x9383
+#define GL_VIEW_CLASS_EAC_RG11            0x9384
+#define GL_VIEW_CLASS_ETC2_RGB            0x9385
+#define GL_VIEW_CLASS_ETC2_RGBA           0x9386
+#define GL_VIEW_CLASS_ETC2_EAC_RGBA       0x9387
+#define GL_VIEW_CLASS_ASTC_4x4_RGBA       0x9388
+#define GL_VIEW_CLASS_ASTC_5x4_RGBA       0x9389
+#define GL_VIEW_CLASS_ASTC_5x5_RGBA       0x938A
+#define GL_VIEW_CLASS_ASTC_6x5_RGBA       0x938B
+#define GL_VIEW_CLASS_ASTC_6x6_RGBA       0x938C
+#define GL_VIEW_CLASS_ASTC_8x5_RGBA       0x938D
+#define GL_VIEW_CLASS_ASTC_8x6_RGBA       0x938E
+#define GL_VIEW_CLASS_ASTC_8x8_RGBA       0x938F
+#define GL_VIEW_CLASS_ASTC_10x5_RGBA      0x9390
+#define GL_VIEW_CLASS_ASTC_10x6_RGBA      0x9391
+#define GL_VIEW_CLASS_ASTC_10x8_RGBA      0x9392
+#define GL_VIEW_CLASS_ASTC_10x10_RGBA     0x9393
+#define GL_VIEW_CLASS_ASTC_12x10_RGBA     0x9394
+#define GL_VIEW_CLASS_ASTC_12x12_RGBA     0x9395
 #endif /* GL_ARB_internalformat_query2 */
 
 #ifndef GL_ARB_invalidate_subdata
@@ -5402,6 +5423,22 @@
 #endif
 #endif /* GL_AMD_draw_buffers_blend */
 
+#ifndef GL_AMD_framebuffer_multisample_advanced
+#define GL_AMD_framebuffer_multisample_advanced 1
+#define GL_RENDERBUFFER_STORAGE_SAMPLES_AMD 0x91B2
+#define GL_MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD 0x91B3
+#define GL_MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD 0x91B4
+#define GL_MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD 0x91B5
+#define GL_NUM_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B6
+#define GL_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B7
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glRenderbufferStorageMultisampleAdvancedAMD (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleAdvancedAMD (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_AMD_framebuffer_multisample_advanced */
+
 #ifndef GL_AMD_framebuffer_sample_positions
 #define GL_AMD_framebuffer_sample_positions 1
 #define GL_SUBSAMPLE_DISTANCE_AMD         0x883F
@@ -9540,6 +9577,10 @@
 #define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC
 #endif /* GL_NV_compute_program5 */
 
+#ifndef GL_NV_compute_shader_derivatives
+#define GL_NV_compute_shader_derivatives 1
+#endif /* GL_NV_compute_shader_derivatives */
+
 #ifndef GL_NV_conditional_render
 #define GL_NV_conditional_render 1
 #define GL_QUERY_WAIT_NV                  0x8E13
@@ -9838,6 +9879,10 @@
 #define GL_NV_fragment_program_option 1
 #endif /* GL_NV_fragment_program_option */
 
+#ifndef GL_NV_fragment_shader_barycentric
+#define GL_NV_fragment_shader_barycentric 1
+#endif /* GL_NV_fragment_shader_barycentric */
+
 #ifndef GL_NV_fragment_shader_interlock
 #define GL_NV_fragment_shader_interlock 1
 #endif /* GL_NV_fragment_shader_interlock */
@@ -10122,6 +10167,96 @@
 #define GL_MAX_SPOT_EXPONENT_NV           0x8505
 #endif /* GL_NV_light_max_exponent */
 
+#ifndef GL_NV_memory_attachment
+#define GL_NV_memory_attachment 1
+#define GL_ATTACHED_MEMORY_OBJECT_NV      0x95A4
+#define GL_ATTACHED_MEMORY_OFFSET_NV      0x95A5
+#define GL_MEMORY_ATTACHABLE_ALIGNMENT_NV 0x95A6
+#define GL_MEMORY_ATTACHABLE_SIZE_NV      0x95A7
+#define GL_MEMORY_ATTACHABLE_NV           0x95A8
+#define GL_DETACHED_MEMORY_INCARNATION_NV 0x95A9
+#define GL_DETACHED_TEXTURES_NV           0x95AA
+#define GL_DETACHED_BUFFERS_NV            0x95AB
+#define GL_MAX_DETACHED_TEXTURES_NV       0x95AC
+#define GL_MAX_DETACHED_BUFFERS_NV        0x95AD
+typedef void (APIENTRYP PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC) (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params);
+typedef void (APIENTRYP PFNGLRESETMEMORYOBJECTPARAMETERNVPROC) (GLuint memory, GLenum pname);
+typedef void (APIENTRYP PFNGLTEXATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLBUFFERATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXTUREATTACHMEMORYNVPROC) (GLuint texture, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERATTACHMEMORYNVPROC) (GLuint buffer, GLuint memory, GLuint64 offset);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetMemoryObjectDetachedResourcesuivNV (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params);
+GLAPI void APIENTRY glResetMemoryObjectParameterNV (GLuint memory, GLenum pname);
+GLAPI void APIENTRY glTexAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glBufferAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTextureAttachMemoryNV (GLuint texture, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glNamedBufferAttachMemoryNV (GLuint buffer, GLuint memory, GLuint64 offset);
+#endif
+#endif /* GL_NV_memory_attachment */
+
+#ifndef GL_NV_mesh_shader
+#define GL_NV_mesh_shader 1
+#define GL_MESH_SHADER_NV                 0x9559
+#define GL_TASK_SHADER_NV                 0x955A
+#define GL_MAX_MESH_UNIFORM_BLOCKS_NV     0x8E60
+#define GL_MAX_MESH_TEXTURE_IMAGE_UNITS_NV 0x8E61
+#define GL_MAX_MESH_IMAGE_UNIFORMS_NV     0x8E62
+#define GL_MAX_MESH_UNIFORM_COMPONENTS_NV 0x8E63
+#define GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV 0x8E64
+#define GL_MAX_MESH_ATOMIC_COUNTERS_NV    0x8E65
+#define GL_MAX_MESH_SHADER_STORAGE_BLOCKS_NV 0x8E66
+#define GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV 0x8E67
+#define GL_MAX_TASK_UNIFORM_BLOCKS_NV     0x8E68
+#define GL_MAX_TASK_TEXTURE_IMAGE_UNITS_NV 0x8E69
+#define GL_MAX_TASK_IMAGE_UNIFORMS_NV     0x8E6A
+#define GL_MAX_TASK_UNIFORM_COMPONENTS_NV 0x8E6B
+#define GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV 0x8E6C
+#define GL_MAX_TASK_ATOMIC_COUNTERS_NV    0x8E6D
+#define GL_MAX_TASK_SHADER_STORAGE_BLOCKS_NV 0x8E6E
+#define GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV 0x8E6F
+#define GL_MAX_MESH_WORK_GROUP_INVOCATIONS_NV 0x95A2
+#define GL_MAX_TASK_WORK_GROUP_INVOCATIONS_NV 0x95A3
+#define GL_MAX_MESH_TOTAL_MEMORY_SIZE_NV  0x9536
+#define GL_MAX_TASK_TOTAL_MEMORY_SIZE_NV  0x9537
+#define GL_MAX_MESH_OUTPUT_VERTICES_NV    0x9538
+#define GL_MAX_MESH_OUTPUT_PRIMITIVES_NV  0x9539
+#define GL_MAX_TASK_OUTPUT_COUNT_NV       0x953A
+#define GL_MAX_DRAW_MESH_TASKS_COUNT_NV   0x953D
+#define GL_MAX_MESH_VIEWS_NV              0x9557
+#define GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV 0x92DF
+#define GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV 0x9543
+#define GL_MAX_MESH_WORK_GROUP_SIZE_NV    0x953B
+#define GL_MAX_TASK_WORK_GROUP_SIZE_NV    0x953C
+#define GL_MESH_WORK_GROUP_SIZE_NV        0x953E
+#define GL_TASK_WORK_GROUP_SIZE_NV        0x953F
+#define GL_MESH_VERTICES_OUT_NV           0x9579
+#define GL_MESH_PRIMITIVES_OUT_NV         0x957A
+#define GL_MESH_OUTPUT_TYPE_NV            0x957B
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV 0x959C
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV 0x959D
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV 0x959E
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV 0x959F
+#define GL_REFERENCED_BY_MESH_SHADER_NV   0x95A0
+#define GL_REFERENCED_BY_TASK_SHADER_NV   0x95A1
+#define GL_MESH_SUBROUTINE_NV             0x957C
+#define GL_TASK_SUBROUTINE_NV             0x957D
+#define GL_MESH_SUBROUTINE_UNIFORM_NV     0x957E
+#define GL_TASK_SUBROUTINE_UNIFORM_NV     0x957F
+#define GL_MESH_SHADER_BIT_NV             0x00000040
+#define GL_TASK_SHADER_BIT_NV             0x00000080
+typedef void (APIENTRYP PFNGLDRAWMESHTASKSNVPROC) (GLuint first, GLuint count);
+typedef void (APIENTRYP PFNGLDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect);
+typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect, GLsizei drawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC) (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawMeshTasksNV (GLuint first, GLuint count);
+GLAPI void APIENTRY glDrawMeshTasksIndirectNV (GLintptr indirect);
+GLAPI void APIENTRY glMultiDrawMeshTasksIndirectNV (GLintptr indirect, GLsizei drawcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawMeshTasksIndirectCountNV (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+#endif
+#endif /* GL_NV_mesh_shader */
+
 #ifndef GL_NV_multisample_coverage
 #define GL_NV_multisample_coverage 1
 #endif /* GL_NV_multisample_coverage */
@@ -10667,6 +10802,11 @@
 #endif
 #endif /* GL_NV_register_combiners2 */
 
+#ifndef GL_NV_representative_fragment_test
+#define GL_NV_representative_fragment_test 1
+#define GL_REPRESENTATIVE_FRAGMENT_TEST_NV 0x937F
+#endif /* GL_NV_representative_fragment_test */
+
 #ifndef GL_NV_robustness_video_memory_purge
 #define GL_NV_robustness_video_memory_purge 1
 #define GL_PURGED_CONTEXT_RESET_NV        0x92BB
@@ -10696,6 +10836,18 @@
 #define GL_NV_sample_mask_override_coverage 1
 #endif /* GL_NV_sample_mask_override_coverage */
 
+#ifndef GL_NV_scissor_exclusive
+#define GL_NV_scissor_exclusive 1
+#define GL_SCISSOR_TEST_EXCLUSIVE_NV      0x9555
+#define GL_SCISSOR_BOX_EXCLUSIVE_NV       0x9556
+typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVENVPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVEARRAYVNVPROC) (GLuint first, GLsizei count, const GLint *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glScissorExclusiveNV (GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glScissorExclusiveArrayvNV (GLuint first, GLsizei count, const GLint *v);
+#endif
+#endif /* GL_NV_scissor_exclusive */
+
 #ifndef GL_NV_shader_atomic_counters
 #define GL_NV_shader_atomic_counters 1
 #endif /* GL_NV_shader_atomic_counters */
@@ -10760,6 +10912,10 @@
 #define GL_NV_shader_storage_buffer_object 1
 #endif /* GL_NV_shader_storage_buffer_object */
 
+#ifndef GL_NV_shader_texture_footprint
+#define GL_NV_shader_texture_footprint 1
+#endif /* GL_NV_shader_texture_footprint */
+
 #ifndef GL_NV_shader_thread_group
 #define GL_NV_shader_thread_group 1
 #define GL_WARP_SIZE_NV                   0x9339
@@ -10771,6 +10927,47 @@
 #define GL_NV_shader_thread_shuffle 1
 #endif /* GL_NV_shader_thread_shuffle */
 
+#ifndef GL_NV_shading_rate_image
+#define GL_NV_shading_rate_image 1
+#define GL_SHADING_RATE_IMAGE_NV          0x9563
+#define GL_SHADING_RATE_NO_INVOCATIONS_NV 0x9564
+#define GL_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV 0x9565
+#define GL_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV 0x9566
+#define GL_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV 0x9567
+#define GL_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV 0x9568
+#define GL_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV 0x9569
+#define GL_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV 0x956A
+#define GL_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV 0x956B
+#define GL_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV 0x956C
+#define GL_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV 0x956D
+#define GL_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV 0x956E
+#define GL_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV 0x956F
+#define GL_SHADING_RATE_IMAGE_BINDING_NV  0x955B
+#define GL_SHADING_RATE_IMAGE_TEXEL_WIDTH_NV 0x955C
+#define GL_SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV 0x955D
+#define GL_SHADING_RATE_IMAGE_PALETTE_SIZE_NV 0x955E
+#define GL_MAX_COARSE_FRAGMENT_SAMPLES_NV 0x955F
+#define GL_SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV 0x95AE
+#define GL_SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV 0x95AF
+#define GL_SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV 0x95B0
+typedef void (APIENTRYP PFNGLBINDSHADINGRATEIMAGENVPROC) (GLuint texture);
+typedef void (APIENTRYP PFNGLGETSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint entry, GLenum *rate);
+typedef void (APIENTRYP PFNGLGETSHADINGRATESAMPLELOCATIONIVNVPROC) (GLenum rate, GLuint samples, GLuint index, GLint *location);
+typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEBARRIERNVPROC) (GLboolean synchronize);
+typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates);
+typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERNVPROC) (GLenum order);
+typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC) (GLenum rate, GLuint samples, const GLint *locations);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindShadingRateImageNV (GLuint texture);
+GLAPI void APIENTRY glGetShadingRateImagePaletteNV (GLuint viewport, GLuint entry, GLenum *rate);
+GLAPI void APIENTRY glGetShadingRateSampleLocationivNV (GLenum rate, GLuint samples, GLuint index, GLint *location);
+GLAPI void APIENTRY glShadingRateImageBarrierNV (GLboolean synchronize);
+GLAPI void APIENTRY glShadingRateImagePaletteNV (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates);
+GLAPI void APIENTRY glShadingRateSampleOrderNV (GLenum order);
+GLAPI void APIENTRY glShadingRateSampleOrderCustomNV (GLenum rate, GLuint samples, const GLint *locations);
+#endif
+#endif /* GL_NV_shading_rate_image */
+
 #ifndef GL_NV_stereo_view_rendering
 #define GL_NV_stereo_view_rendering 1
 #endif /* GL_NV_stereo_view_rendering */
@@ -11081,6 +11278,14 @@
 #endif
 #endif /* GL_NV_vdpau_interop */
 
+#ifndef GL_NV_vdpau_interop2
+#define GL_NV_vdpau_interop2 1
+typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACEWITHPICTURESTRUCTURENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames, GLboolean isFrameStructure);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceWithPictureStructureNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames, GLboolean isFrameStructure);
+#endif
+#endif /* GL_NV_vdpau_interop2 */
+
 #ifndef GL_NV_vertex_array_range
 #define GL_NV_vertex_array_range 1
 #define GL_VERTEX_ARRAY_RANGE_NV          0x851D
diff --git a/api/GL/glxext.h b/api/GL/glxext.h
index 4c984ef..966409b 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 20180525
+#define GLX_GLXEXT_VERSION 20181031
 
 /* Generated C header for:
  * API: glx
diff --git a/api/GL/wgl.h b/api/GL/wgl.h
index f424bf9..3d0c92b 100644
--- a/api/GL/wgl.h
+++ b/api/GL/wgl.h
@@ -1,12 +1,12 @@
-#ifndef __wgl_h_
-#define __wgl_h_ 1
+#ifndef __wgl_wgl_h_
+#define __wgl_wgl_h_ 1
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 /*
-** Copyright (c) 2013-2017 The Khronos Group Inc.
+** Copyright (c) 2013-2018 The Khronos Group Inc.
 **
 ** Permission is hereby granted, free of charge, to any person obtaining a
 ** copy of this software and/or associated documentation files (the
@@ -39,7 +39,7 @@
 #include <windows.h>
 #endif
 
-/* Generated on date 20170121 */
+/* Generated on date 20181031 */
 
 /* Generated C header for:
  * API: wgl
@@ -181,6 +181,11 @@
 #endif
 #endif /* WGL_ARB_create_context */
 
+#ifndef WGL_ARB_create_context_no_error
+#define WGL_ARB_create_context_no_error 1
+#define WGL_CONTEXT_OPENGL_NO_ERROR_ARB   0x31B3
+#endif /* WGL_ARB_create_context_no_error */
+
 #ifndef WGL_ARB_create_context_profile
 #define WGL_ARB_create_context_profile 1
 #define WGL_CONTEXT_PROFILE_MASK_ARB      0x9126
@@ -430,9 +435,14 @@
 #define WGL_TYPE_RGBA_FLOAT_ATI           0x21A0
 #endif /* WGL_ATI_pixel_format_float */
 
+#ifndef WGL_ATI_render_texture_rectangle
+#define WGL_ATI_render_texture_rectangle 1
+#define WGL_TEXTURE_RECTANGLE_ATI         0x21A5
+#endif /* WGL_ATI_render_texture_rectangle */
+
 #ifndef WGL_EXT_colorspace
 #define WGL_EXT_colorspace 1
-#define WGL_COLORSPACE_EXT                0x3087
+#define WGL_COLORSPACE_EXT                0x309D
 #define WGL_COLORSPACE_SRGB_EXT           0x3089
 #define WGL_COLORSPACE_LINEAR_EXT         0x308A
 #endif /* WGL_EXT_colorspace */
diff --git a/api/GL/wglext.h b/api/GL/wglext.h
index 2d528f7..48e4de2 100755
--- a/api/GL/wglext.h
+++ b/api/GL/wglext.h
@@ -39,7 +39,7 @@
 #include <windows.h>
 #endif
 
-#define WGL_WGLEXT_VERSION 20180525
+#define WGL_WGLEXT_VERSION 20181031
 
 /* Generated C header for:
  * API: wgl
@@ -344,9 +344,14 @@
 #define WGL_TYPE_RGBA_FLOAT_ATI           0x21A0
 #endif /* WGL_ATI_pixel_format_float */
 
+#ifndef WGL_ATI_render_texture_rectangle
+#define WGL_ATI_render_texture_rectangle 1
+#define WGL_TEXTURE_RECTANGLE_ATI         0x21A5
+#endif /* WGL_ATI_render_texture_rectangle */
+
 #ifndef WGL_EXT_colorspace
 #define WGL_EXT_colorspace 1
-#define WGL_COLORSPACE_EXT                0x3087
+#define WGL_COLORSPACE_EXT                0x309D
 #define WGL_COLORSPACE_SRGB_EXT           0x3089
 #define WGL_COLORSPACE_LINEAR_EXT         0x308A
 #endif /* WGL_EXT_colorspace */
diff --git a/api/GLES/gl.h b/api/GLES/gl.h
index 7bf13bf..e3303b6 100644
--- a/api/GLES/gl.h
+++ b/api/GLES/gl.h
@@ -36,7 +36,7 @@
 
 #include <GLES/glplatform.h>
 
-/* Generated on date 20180604 */
+/* Generated on date 20181031 */
 
 /* Generated C header for:
  * API: gles1
diff --git a/api/GLES/glext.h b/api/GLES/glext.h
index 7d56ed3..040bba6 100644
--- a/api/GLES/glext.h
+++ b/api/GLES/glext.h
@@ -38,7 +38,7 @@
 #define GL_APIENTRYP GL_APIENTRY*
 #endif
 
-/* Generated on date 20180604 */
+/* Generated on date 20181031 */
 
 /* Generated C header for:
  * API: gles1
diff --git a/api/GLES2/gl2.h b/api/GLES2/gl2.h
index bd0ec69..996fcd5 100644
--- a/api/GLES2/gl2.h
+++ b/api/GLES2/gl2.h
@@ -44,7 +44,7 @@
 #define GL_GLES_PROTOTYPES 1
 #endif
 
-/* Generated on date 20180604 */
+/* Generated on date 20181031 */
 
 /* Generated C header for:
  * API: gles2
diff --git a/api/GLES2/gl2ext.h b/api/GLES2/gl2ext.h
index 263edc6..ab1ddb8 100644
--- a/api/GLES2/gl2ext.h
+++ b/api/GLES2/gl2ext.h
@@ -38,7 +38,7 @@
 #define GL_APIENTRYP GL_APIENTRY*
 #endif
 
-/* Generated on date 20180604 */
+/* Generated on date 20181031 */
 
 /* Generated C header for:
  * API: gles2
@@ -801,6 +801,22 @@
 #define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE
 #endif /* GL_AMD_compressed_ATC_texture */
 
+#ifndef GL_AMD_framebuffer_multisample_advanced
+#define GL_AMD_framebuffer_multisample_advanced 1
+#define GL_RENDERBUFFER_STORAGE_SAMPLES_AMD 0x91B2
+#define GL_MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD 0x91B3
+#define GL_MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD 0x91B4
+#define GL_MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD 0x91B5
+#define GL_NUM_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B6
+#define GL_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B7
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAdvancedAMD (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glNamedRenderbufferStorageMultisampleAdvancedAMD (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_AMD_framebuffer_multisample_advanced */
+
 #ifndef GL_AMD_performance_monitor
 #define GL_AMD_performance_monitor 1
 #define GL_COUNTER_TYPE_AMD               0x8BC0
@@ -2395,6 +2411,11 @@
 #endif
 #endif /* GL_INTEL_performance_query */
 
+#ifndef GL_MESA_framebuffer_flip_y
+#define GL_MESA_framebuffer_flip_y 1
+#define GL_FRAMEBUFFER_FLIP_Y_MESA        0x8BBB
+#endif /* GL_MESA_framebuffer_flip_y */
+
 #ifndef GL_MESA_program_binary_formats
 #define GL_MESA_program_binary_formats 1
 #define GL_PROGRAM_BINARY_FORMAT_MESA     0x875F
@@ -2897,6 +2918,34 @@
 #endif
 #endif /* GL_NV_internalformat_sample_query */
 
+#ifndef GL_NV_memory_attachment
+#define GL_NV_memory_attachment 1
+#define GL_ATTACHED_MEMORY_OBJECT_NV      0x95A4
+#define GL_ATTACHED_MEMORY_OFFSET_NV      0x95A5
+#define GL_MEMORY_ATTACHABLE_ALIGNMENT_NV 0x95A6
+#define GL_MEMORY_ATTACHABLE_SIZE_NV      0x95A7
+#define GL_MEMORY_ATTACHABLE_NV           0x95A8
+#define GL_DETACHED_MEMORY_INCARNATION_NV 0x95A9
+#define GL_DETACHED_TEXTURES_NV           0x95AA
+#define GL_DETACHED_BUFFERS_NV            0x95AB
+#define GL_MAX_DETACHED_TEXTURES_NV       0x95AC
+#define GL_MAX_DETACHED_BUFFERS_NV        0x95AD
+typedef void (GL_APIENTRYP PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC) (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLRESETMEMORYOBJECTPARAMETERNVPROC) (GLuint memory, GLenum pname);
+typedef void (GL_APIENTRYP PFNGLTEXATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset);
+typedef void (GL_APIENTRYP PFNGLBUFFERATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset);
+typedef void (GL_APIENTRYP PFNGLTEXTUREATTACHMEMORYNVPROC) (GLuint texture, GLuint memory, GLuint64 offset);
+typedef void (GL_APIENTRYP PFNGLNAMEDBUFFERATTACHMEMORYNVPROC) (GLuint buffer, GLuint memory, GLuint64 offset);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glGetMemoryObjectDetachedResourcesuivNV (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params);
+GL_APICALL void GL_APIENTRY glResetMemoryObjectParameterNV (GLuint memory, GLenum pname);
+GL_APICALL void GL_APIENTRY glTexAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset);
+GL_APICALL void GL_APIENTRY glBufferAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset);
+GL_APICALL void GL_APIENTRY glTextureAttachMemoryNV (GLuint texture, GLuint memory, GLuint64 offset);
+GL_APICALL void GL_APIENTRY glNamedBufferAttachMemoryNV (GLuint buffer, GLuint memory, GLuint64 offset);
+#endif
+#endif /* GL_NV_memory_attachment */
+
 #ifndef GL_NV_non_square_matrices
 #define GL_NV_non_square_matrices 1
 #define GL_FLOAT_MAT2x3_NV                0x8B65
@@ -3441,6 +3490,10 @@
 #endif
 #endif /* GL_OVR_multiview_multisampled_render_to_texture */
 
+#ifndef GL_QCOM_YUV_texture_gather
+#define GL_QCOM_YUV_texture_gather 1
+#endif /* GL_QCOM_YUV_texture_gather */
+
 #ifndef GL_QCOM_alpha_test
 #define GL_QCOM_alpha_test 1
 #define GL_ALPHA_TEST_QCOM                0x0BC0
@@ -3547,6 +3600,10 @@
 #endif
 #endif /* GL_QCOM_shader_framebuffer_fetch_noncoherent */
 
+#ifndef GL_QCOM_shader_framebuffer_fetch_rate
+#define GL_QCOM_shader_framebuffer_fetch_rate 1
+#endif /* GL_QCOM_shader_framebuffer_fetch_rate */
+
 #ifndef GL_QCOM_texture_foveated
 #define GL_QCOM_texture_foveated 1
 #define GL_TEXTURE_FOVEATED_FEATURE_BITS_QCOM 0x8BFB
@@ -3560,6 +3617,12 @@
 #endif
 #endif /* GL_QCOM_texture_foveated */
 
+#ifndef GL_QCOM_texture_foveated_subsampled_layout
+#define GL_QCOM_texture_foveated_subsampled_layout 1
+#define GL_FOVEATION_SUBSAMPLED_LAYOUT_METHOD_BIT_QCOM 0x00000004
+#define GL_MAX_SHADER_SUBSAMPLED_IMAGE_UNITS_QCOM 0x8FA1
+#endif /* GL_QCOM_texture_foveated_subsampled_layout */
+
 #ifndef GL_QCOM_tiled_rendering
 #define GL_QCOM_tiled_rendering 1
 #define GL_COLOR_BUFFER_BIT0_QCOM         0x00000001
diff --git a/api/GLES3/gl3.h b/api/GLES3/gl3.h
index 7263b08..6b3f320 100644
--- a/api/GLES3/gl3.h
+++ b/api/GLES3/gl3.h
@@ -44,7 +44,7 @@
 #define GL_GLES_PROTOTYPES 1
 #endif
 
-/* Generated on date 20180604 */
+/* Generated on date 20181031 */
 
 /* Generated C header for:
  * API: gles2
diff --git a/extensions/AMD/AMD_framebuffer_multisample_advanced.txt b/extensions/AMD/AMD_framebuffer_multisample_advanced.txt
new file mode 100644
index 0000000..6ecb717
--- /dev/null
+++ b/extensions/AMD/AMD_framebuffer_multisample_advanced.txt
@@ -0,0 +1,444 @@
+Name
+
+    AMD_framebuffer_multisample_advanced
+
+Name Strings
+
+    GL_AMD_framebuffer_multisample_advanced
+
+Contact
+
+    Marek Olsak, AMD (marek.olsak 'at' amd.com)
+
+Status
+
+    Complete.
+
+Version
+
+    Last Modified Date:  June 28, 2018
+    Revision #1
+
+Number
+
+    OpenGL Extension #523
+    OpenGL ES Extension #303
+
+Dependencies
+
+    OpenGL dependencies:
+
+        Requires GL_ARB_framebuffer_object.
+
+    OpenGL ES dependencies:
+
+        Requires OpenGL ES 3.0.
+
+    This extension is written against the OpenGL 4.5 (Core Profile)
+    specification.
+
+Overview
+
+    This extension extends ARB_framebuffer_object by allowing compromises
+    between image quality and memory footprint of multisample
+    antialiasing.
+
+    ARB_framebuffer_object introduced RenderbufferStorageMultisample
+    as a method of defining the parameters for a multisample render
+    buffer. This function takes a <samples> parameter that has strict
+    requirements on behavior such that no compromises in the final image
+    quality are allowed. Additionally, ARB_framebuffer_object requires
+    that all framebuffer attachments have the same number of samples.
+
+    This extension extends ARB_framebuffer_object by providing a new
+    function, RenderbufferStorageMultisampleAdvancedAMD, that
+    distinguishes between samples and storage samples for color
+    renderbuffers where the number of storage samples can be less than
+    the number of samples. This extension also allows non-matching sample
+    counts between color and depth/stencil renderbuffers.
+
+    This extension does not require any specific combination of sample
+    counts to be supported.
+
+IP Status
+
+    No known IP issues.
+
+New Procedures and Functions
+
+    void RenderbufferStorageMultisampleAdvancedAMD(
+             enum target, sizei samples, sizei storageSamples,
+             enum internalformat, sizei width, sizei height );
+
+    void NamedRenderbufferStorageMultisampleAdvancedAMD(
+             uint renderbuffer, sizei samples, sizei storageSamples,
+             enum internalformat, sizei width, sizei height );
+
+New Tokens
+
+    Accepted by the <pname> parameter of GetRenderbufferParameteriv:
+
+        RENDERBUFFER_STORAGE_SAMPLES_AMD            0x91B2
+
+    Accepted by the <pname> parameter of GetBooleanv, GetIntegerv,
+    GetInteger64v, GetFloatv, GetDoublev:
+
+        MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD           0x91B3
+        MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD   0x91B4
+        MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD   0x91B5
+        NUM_SUPPORTED_MULTISAMPLE_MODES_AMD         0x91B6
+        SUPPORTED_MULTISAMPLE_MODES_AMD             0x91B7
+
+Additions to Chapter 9 of the OpenGL 4.5 (Core Profile) Specification
+(Framebuffers and Framebuffer Objects)
+
+    In section 9.2.3.1, "Multisample Queries", remove the last paragraph
+    beginning with "Otherwise" and add:
+
+    Otherwise, the value of SAMPLES is equal to the value of
+    RENDERBUFFER_SAMPLES or TEXTURE_SAMPLES (depending on the type of
+    attachments) of color attachments if any is present. If there is no
+    color attachment, SAMPLES is equal to the same value from the depth or
+    stencil attachment, whichever is present.
+
+    An implementation may only support a subset of the possible
+    combinations of sample counts of textures and renderbuffers attached
+    to a framebuffer object. The number of supported combinations is
+    NUM_SUPPORTED_MULTISAMPLE_MODES_AMD. SUPPORTED_MULTISAMPLE_MODES_AMD
+    is an array of NUM_SUPPORTED_MULTISAMPLE_MODES_AMD triples of integers
+    where each triple contains a valid combination of sample counts in
+    the form {color samples, color storage samples, depth and stencil
+    samples}. The first element in each triple is at least 2. The second
+    and third element in each triple are at least 1 and are not greater
+    than the first element.
+
+    In section 9.2.4, "Renderbuffer Objects", replace the description of
+    (Named)RenderbufferStorageMultisample:
+
+    The data storage, format, dimensions, number of samples, and number of
+    storage samples of a renderbuffer object’s image are established with
+    the commands
+
+      void RenderbufferStorageMultisampleAdvancedAMD( enum target,
+          sizei samples, sizei storageSamples, enum internalformat,
+          sizei width, sizei height );
+
+      void NamedRenderbufferStorageMultisampleAdvancedAMD(
+          uint renderbuffer, sizei samples, sizei storageSamples,
+          enum internalformat, sizei width, sizei height );
+
+    For RenderbufferStorageMultisampleAdvancedAMD, the renderbuffer object
+    is that bound to <target>, which must be RENDERBUFFER.
+    For NamedRenderbufferStorageMultisampleAdvancedAMD, <renderbuffer> is
+    the name of the renderbuffer object.
+
+    <internalformat> must be color-renderable, depth-renderable, or
+    stencil-renderable (as defined in section 9.4). <width> and <height>
+    are the dimensions in pixels of the renderbuffer.
+
+    Upon success, *RenderbufferStorageMultisampleAdvancedAMD deletes any
+    existing data store for the renderbuffer image, and the contents of
+    the data store are undefined. RENDERBUFFER_WIDTH is set to <width>,
+    RENDERBUFFER_HEIGHT is set to <height>, and RENDERBUFFER_INTERNAL_-
+    FORMAT is set to <internalformat>.
+
+    If <samples> is zero, then <storageSamples> must be zero, and
+    RENDERBUFFER_SAMPLES and RENDERBUFFER_STORAGE_SAMPLES_AMD are set to
+    zero. Otherwise <samples> represents a request for a desired minimum
+    number of samples and <storageSamples> represents a request for
+    a desired minimum number of storage samples, where <storageSamples>
+    must not be greater than <samples>. Since different implementations
+    may support different sample counts for multisampled rendering,
+    the actual number of samples and the actual number of storage samples
+    allocated for the renderbuffer image are implementation-dependent.
+    However, the resulting value for RENDERBUFFER_SAMPLES is guaranteed
+    to be greater than or equal to <samples> and no more than the next
+    larger sample count supported by the implementation, and the resulting
+    value for RENDERBUFFER_STORAGE_SAMPLES_AMD is guaranteed to be greater
+    than or equal to <storageSamples>, no more than the next larger
+    storage sample count supported by the implementation, and no more than
+    RENDERBUFFER_SAMPLES.
+
+    A GL implementation may vary its allocation of internal component
+    resolution based on any *RenderbufferStorageMultisampleAdvancedAMD
+    parameter (except <target> and <renderbuffer>), but the allocation and
+    chosen internal format must not be a function of any other state and
+    cannot be changed once they are established.
+
+    Remove the first 4 errors and add these errors:
+
+    An INVALID_ENUM error is generated by RenderbufferStorageMultisample-
+    AdvancedAMD if <target> is not RENDERBUFFER.
+
+    An INVALID_OPERATION error is generated by NamedRenderbufferStorage-
+    MultisampleAdvancedAMD if <renderbuffer> is not the name of
+    an existing renderbuffer object.
+
+    An INVALID_VALUE error is generated if <samples>, <storageSamples>,
+    <width>, or <height> is negative.
+
+    An INVALID_OPERATION error is generated if <internalformat> is a color
+    format and <samples> is greater than the implementation-dependent
+    limit MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD.
+
+    An INVALID_OPERATION error is generated if <internalformat> is a color
+    format and <storageSamples> is greater than the implementation-
+    dependent limit MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD.
+
+    An INVALID_OPERATION error is generated if <storageSamples> is greater
+    than <samples>.
+
+    An INVALID_OPERATION error is generated if <internalformat> is a depth
+    or stencil format and <samples> is greater than the maximum number of
+    samples supported for <internalformat> (see GetInternalformativ
+    in section 22.3).
+
+    An INVALID_OPERATION error is generated if <internalformat> is a depth
+    or stencil format and <storageSamples> is not equal to <samples>.
+
+    Finish the section as follows:
+
+    The commands
+
+        void RenderbufferStorageMultisample( enum target,
+            sizei samples, enum internalformat, sizei width,
+            sizei height );
+        void RenderbufferStorage( enum target, enum internalformat,
+            sizei width, sizei height );
+
+    are equivalent to
+
+        RenderbufferStorageMultisampleAdvancedAMD(target, samples,
+            samples, internalformat, width, height);
+
+    and
+
+        RenderbufferStorageMultisampleAdvancedAMD(target, 0, 0,
+            internalformat, width, height);
+
+    respectively.
+
+    The commands
+
+        void NamedRenderbufferStorageMultisample( uint renderbuffer,
+            sizei samples, enum internalformat, sizei width,
+            sizei height );
+        void NamedRenderbufferStorage( uint renderbuffer,
+            enum internalformat, sizei width, sizei height );
+
+    are equivalent to
+
+        NamedRenderbufferStorageMultisampleAdvancedAMD(renderbuffer,
+            samples, samples, internalformat, width, height);
+
+    and
+
+        NamedRenderbufferStorageMultisampleAdvancedAMD(renderbuffer,
+            0, 0, internalformat, width, height);
+
+    respectively.
+
+    In section 9.2.5, "Required Renderbuffer Formats", replace the last
+    paragraph with:
+
+    Implementations must support creation of renderbuffers in these
+    required formats with sample counts up to and including:
+    * MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD as color renderbuffer samples
+    * MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD as color renderbuffer
+      storage samples
+    * MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD as depth and stencil
+      samples
+
+    with the exception that the signed and unsigned integer formats are
+    required only to support creation of renderbuffers with up to
+    the value of MAX_INTEGER_SAMPLES samples and storage samples, which
+    must be at least one.
+
+    In section 9.2.6, "Renderbuffer Object Queries", replace the paragraph
+    mentioning RENDERBUFFER_SAMPLES with:
+
+    If <pname> is RENDERBUFFER_WIDTH, RENDERBUFFER_HEIGHT,
+    RENDERBUFFER_INTERNAL_FORMAT, RENDERBUFFER_SAMPLES, or
+    RENDERBUFFER_STORAGE_SAMPLES_AMD then <params> will contain the width
+    in pixels, height in pixels, internal format, number of samples, or
+    number of storage samples, respectively, of the image of
+    the renderbuffer object.
+
+    In section 9.4.1, "Framebuffer Attachment Completeness", remove
+    the bullet beginning with "If <image> has multisample samples" and
+    replace the last 3 bullets about <attachment> with:
+
+    If <attachment> is COLOR_ATTACHMENTi, then <image> must have a color-
+    renderable internal format, the sample count must be less than or
+    equal to the value of the implementation-dependent limit
+    MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD, and the storage sample count must
+    be less than or equal to the value of the implementation-dependent
+    limit MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD.
+
+    If <attachment> is DEPTH_ATTACHMENT, then <image> must have a depth-
+    renderable internal format, and its sample count must be less than or
+    equal to the value of the implementation-dependent limit
+    MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD.
+
+    If <attachment> is STENCIL_ATTACHMENT, then <image> must have
+    a stencil-renderable internal format, and its sample count must be
+    less than or equal to the value of the implementation-dependent limit
+    MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD.
+
+    In section 9.4.2, replace the bullet mentioning RENDERBUFFER_SAMPLES
+    with:
+
+    * The value of RENDERBUFFER_SAMPLES of a color attachment defines its
+    <number of color samples>; the value of RENDERBUFFER_STORAGE_SAMPLES
+    of a color attachment defines its <number of color storage samples>;
+    the value of RENDERBUFFER_SAMPLES of a depth or stencil attachment
+    defines its <number of depth-stencil samples> for each separately;
+    the value of TEXTURE_SAMPLES of a color attachment defines both its
+    <number of color samples> and its <number of color storage samples>;
+    the value of TEXTURE_SAMPLES of a depth or stencil attachment defines
+    its <number of depth-stencil samples> for each separately. If any of
+    the defined values is 0, it is treated as 1. Any undefined value is
+    treated as equal to any number. For all attachment values that are
+    defined, all values of <number of color samples> must be equal, all
+    values of <number of color storage samples> must be equal, all values
+    of <number of depth-stencil samples> must be equal, and the triple
+    {<number of color samples>, <number of color storage samples>, <number
+    of depth-stencil samples>} must be in SUPPORTED_MULTISAMPLE_MODES_AMD
+    or must be equal to {1, 1, 1}.
+
+    { FRAMEBUFFER_INCOMPLETE_MULTISAMPLE }
+
+Additions to Chapter 17 of the OpenGL 4.5 (Core Profile) Specification
+(Writing Fragments and Samples to the Framebuffer)
+
+    In section 17.3.10, "Additional Multisample Fragment Operations", add
+    this paragraph after the "If MULTISAMPLE is enabled" paragraph:
+
+    If there are fewer color storage samples (see section 9.2.4) than
+    the value of SAMPLES, the number of color storage samples determines
+    the number of unique color values that can be stored per pixel.
+    The implementation must determine which samples within a pixel share
+    the same color value, write that value into 1 color storage sample,
+    and remember a mapping between color samples and color storage
+    samples to be able to map color storage samples back to color samples.
+    The color value equality determination is done in an implementation-
+    specific manner, but the implementation must at least recognize a set
+    of color samples coming from the same primitive as 1 storage sample if
+    sample shading (see section 14.3.1.1) is disabled. If there are not
+    enough color storage samples per pixel to store all incoming color
+    values, the excessive color values are not stored and the color samples
+    with unstored values are marked as having an unknown value. Color
+    samples with an unknown value will not contribute to the final color
+    value of the pixel when all color samples are resolved by
+    BlitFramebuffer (see section 18.3.1).
+
+    If there are fewer depth and stencil samples than the value of SAMPLES
+    and implementation-specific optimizations are unable to represent more
+    depth and stencil samples within the given storage, the missing depth
+    and stencil values should be pulled from or derived from the nearest
+    existing depth and stencil samples within the same pixel. The mapping
+    from missing to existing depth and stencil samples is implementation-
+    specific, but the mapping must be at least:
+    * injective if missing samples < existing samples
+    * bijective if missing samples = existing samples
+    * surjective if missing samples > existing samples
+    Depth and stencil tests operate as if the number of depth and stencil
+    samples was equal to the value of SAMPLES.
+
+Errors
+
+    An INVALID_ENUM error is generated by RenderbufferStorageMultisample-
+    AdvancedAMD if <target> is not RENDERBUFFER.
+
+    An INVALID_OPERATION error is generated by NamedRenderbufferStorage-
+    MultisampleAdvancedAMD if <renderbuffer> is not the name of
+    an existing renderbuffer object.
+
+    An INVALID_VALUE error is generated if <samples>, <storageSamples>,
+    <width>, or <height> is negative.
+
+    An INVALID_OPERATION error is generated if <internalformat> is a color
+    format and <samples> is greater than the implementation-dependent
+    limit MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD.
+
+    An INVALID_OPERATION error is generated if <internalformat> is a color
+    format and <storageSamples> is greater than the implementation-
+    dependent limit MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD.
+
+    An INVALID_OPERATION error is generated if <storageSamples> is greater
+    than <samples>.
+
+    An INVALID_OPERATION error is generated if <internalformat> is a depth
+    or stencil format and <samples> is greater than the maximum number of
+    samples supported for <internalformat> (see GetInternalformativ
+    in section 22.3).
+
+    An INVALID_OPERATION error is generated if <internalformat> is a depth
+    or stencil format and <storageSamples> is not equal to <samples>.
+
+New State
+
+    Add to Table 23.27, "Renderbuffer (state per renderbuffer object)"
+                                                                        Initial
+    Get Value                         Type  Get Command                 Value    Description             Section
+    --------------------------------  ----  --------------------------  -------  ----------------------  -------
+    RENDERBUFFER_STORAGE_SAMPLES_AMD   Z+   GetRenderbufferParameteriv  0        No. of storage samples  9.2.4
+
+New Implementation Dependent Values
+                                                                       Minimum
+    Get Value                                 Type        Get Command  Value    Description                             Section
+    ----------------------------------------  ----------  -----------  -------  ---------------------------------------  -------
+    MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD             Z+      GetIntegerv  4        Max. no. of color samples supported by   9.2.4
+                                                                                framebuffer objects.
+    MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD     Z+      GetIntegerv  4        Max. no. of color storage samples        9.2.4
+                                                                                supported by framebuffer objects.
+    MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD     Z+      GetIntegerv  4        Max. no. of depth and stencil samples    9.2.4
+                                                                                supported by framebuffer objects.
+    NUM_SUPPORTED_MULTISAMPLE_MODES_AMD           Z+      GetIntegerv  1        No. of supported combinations of color   9.2.4
+                                                                                samples, color storage samples, and
+                                                                                depth-stencil samples by framebuffer
+                                                                                objects.
+    SUPPORTED_MULTISAMPLE_MODES_AMD           n * 3 x Z+  GetIntegerv  -        NUM_SUPPORTED_MULTISAMPLE_MODES_AMD (n)  9.2.4
+                                                                                triples of integers. Each triple is
+                                                                                a unique combination of color samples,
+                                                                                color storage samples, and depth-stencil
+                                                                                samples supported by framebuffer objects.
+
+AMD Implementation Details
+
+    The following multisample modes are supported by AMD's open source
+    OpenGL driver:
+
+                 Color    Depth &
+        Color    storage  stencil
+        samples  samples  samples
+        =======  =======  =======
+        16       8        8
+        16       4        8
+        16       2        8
+        16       4        4
+        16       2        4
+        16       2        2
+        -------  -------  -------
+        8        8        8
+        8        4        8
+        8        2        8
+        8        4        4
+        8        2        4
+        8        2        2
+        -------  -------  -------
+        4        4        4
+        4        2        4
+        4        2        2
+        -------  -------  -------
+        2        2        2
+
+Issues
+
+    None.
+
+Revision History
+
+    Rev.    Date    Author    Changes
+    ----  --------  --------  --------------------------------------------
+     1    06/28/18  mareko    Initial version
diff --git a/extensions/ARB/ARB_direct_state_access.txt b/extensions/ARB/ARB_direct_state_access.txt
index 3abb181..df8d13e 100644
--- a/extensions/ARB/ARB_direct_state_access.txt
+++ b/extensions/ARB/ARB_direct_state_access.txt
@@ -36,8 +36,8 @@
 
 Version
 
-    Last Modified Date:         July 23, 2017
-    Author Revision:            49
+    Last Modified Date:         June 14, 2018
+    Author Revision:            50
 
 Number
 
@@ -3051,7 +3051,7 @@
         void streamChunks(const Chunks & chunks)
         {
             GLuint restore = 0;
-            glGetIntegerv(GL_ARRAY_BUFFER_BINDING, restaure)
+            glGetIntegerv(GL_ARRAY_BUFFER_BINDING, restore)
             glBindBuffer(GL_ARRAY_BUFFER, chunks.buffer());
 
             uint8* pointer = reinterpret_cast<uint8*>(glMapBufferRange(
@@ -3173,8 +3173,8 @@
           GLuint vertexArrayName = 0;
           glCreateVertexArrays(1, &vertexArrayName);
 
-          glEnableVertexAttribArray(VertexArrayName, semantic::attr::POSITION);
-          glEnableVertexAttribArray(VertexArrayName, semantic::attr::TEXCOORD);
+          glEnableVertexArrayAttrib(VertexArrayName, semantic::attr::POSITION);
+          glEnableVertexArrayAttrib(VertexArrayName, semantic::attr::TEXCOORD);
 
           glVertexArrayAttribBinding(VertexArrayName, semantic::attr::POSITION, 0);
           glVertexArrayAttribFormat(VertexArrayName, semantic::attr::POSITION, 2, GL_FLOAT, GL_FALSE, 0);
@@ -3560,12 +3560,12 @@
         Is the logical equivalent to:
 
         // Bind to Edit
-        uint restaureBuffer;
-        GetIntegerv(ARRAY_BUFFER_BINDING, &restaureBuffer);
+        uint restoreBuffer;
+        GetIntegerv(ARRAY_BUFFER_BINDING, &restoreBuffer);
         uint buffer;
         GenBuffers(1, &buffer);
         BindBuffer(ARRAY_BUFFER, buffer);
-        BindBuffer(ARRAY_BUFFER, restaureBuffer);
+        BindBuffer(ARRAY_BUFFER, restoreBuffer);
 
         Typically with DSA objects are created with [Create] while [Gen+Bind]
         is used to create the objects with B2E. Unfortunately, [Gen+Bind]
@@ -4146,6 +4146,9 @@
 
     Rev.    Date        Author    Changes
     ----  -----------   --------- ---------------------------------------------
+    50    14 Jun 2018   T. Karras Use English variable names and fix API usage
+                                  in examples.
+
     49    23 Jul 2017   Jon Leech Replace the long list of valid <target>
                                   parameters for BeginQueryIndexed,
                                   EndQueryIndexed, and GetQueryIndexediv
diff --git a/extensions/ARB/ARB_gl_spirv.txt b/extensions/ARB/ARB_gl_spirv.txt
index e01c0be..8fb28a5 100644
--- a/extensions/ARB/ARB_gl_spirv.txt
+++ b/extensions/ARB/ARB_gl_spirv.txt
@@ -29,8 +29,8 @@
 
 Version
 
-    Last Modified Date: 25-Apr-2018
-    Revision: 39
+    Last Modified Date: 29-May-2018
+    Revision: 40
 
 Number
 
@@ -358,7 +358,7 @@
       NA                    -> OpAtomicCompareExchangeWeak
 
       atomicCounterIncrement -> OpAtomicIIncrement
-      atomicCounterDecrement -> OpAtomicIDecrement
+      atomicCounterDecrement -> OpAtomicIDecrement (with post decrement)
       atomicCounter          -> OpAtomicLoad
 
     Mapping of other instructions
@@ -2077,6 +2077,8 @@
 
     Rev.    Date         Author         Changes
     ----  -----------    ------------   ---------------------------------
+    40    29-May-2018    dgkoch         note post decrement for atomicCounterDecrement
+                                        mapping
     39    25-Apr-2018    JohnK          add mappings of barriers and atomics
     38    10-Apr-2018    dgkoch         OpImageQuerySizeLod and OpImageQuerylevels
                                         only work with Sampled images
diff --git a/extensions/ARB/ARB_internalformat_query2.txt b/extensions/ARB/ARB_internalformat_query2.txt
index 065fc2f..79337c8 100644
--- a/extensions/ARB/ARB_internalformat_query2.txt
+++ b/extensions/ARB/ARB_internalformat_query2.txt
@@ -33,8 +33,8 @@
 
 Version
 
-    Last Modified Date: February 14, 2018
-    Revision: 19
+    Last Modified Date: October 12, 2018
+    Revision: 20
 
 Number
 
@@ -42,7 +42,7 @@
 
 Dependencies
 
-    OpenGL 2.0 or OpenGL ES 2.0 is required.
+    OpenGL 2.0 is required.
 
     ARB_internalformat_query is required.
 
@@ -61,7 +61,8 @@
     ARB_depth_texture, OES_depth_texture, ARB_texture_view,
     ARB_texture_storage, ARB_texture_storage_multisample,
     ARB_shader_image_load_store, EXT_direct_state_access,
-    EXT_texture_compression_s3tc, and core specifications
+    EXT_texture_compression_s3tc, ARB_ES3_compatibility,
+    KHR_texture_compression_astc_ldr, and core specifications
     that incorporate these extensions affect the definition
     of this extension.
 
@@ -252,7 +253,28 @@
         VIEW_CLASS_RGTC1_RED                            0x82D0  
         VIEW_CLASS_RGTC2_RG                             0x82D1  
         VIEW_CLASS_BPTC_UNORM                           0x82D2  
-        VIEW_CLASS_BPTC_FLOAT                           0x82D3  
+        VIEW_CLASS_BPTC_FLOAT                           0x82D3
+    [interactions with ARB_ES3_compatibility]
+        VIEW_CLASS_EAC_R11                              0x9383
+        VIEW_CLASS_EAC_RG11                             0x9384
+        VIEW_CLASS_ETC2_RGB                             0x9385
+        VIEW_CLASS_ETC2_RGBA                            0x9386
+        VIEW_CLASS_ETC2_EAC_RGBA                        0x9387
+    [interactions with KHR_texture_compression_astc_ldr]
+        VIEW_CLASS_ASTC_4x4_RGBA                        0x9388
+        VIEW_CLASS_ASTC_5x4_RGBA                        0x9389
+        VIEW_CLASS_ASTC_5x5_RGBA                        0x938A
+        VIEW_CLASS_ASTC_6x5_RGBA                        0x938B
+        VIEW_CLASS_ASTC_6x6_RGBA                        0x938C
+        VIEW_CLASS_ASTC_8x5_RGBA                        0x938D
+        VIEW_CLASS_ASTC_8x6_RGBA                        0x938E
+        VIEW_CLASS_ASTC_8x8_RGBA                        0x938F
+        VIEW_CLASS_ASTC_10x5_RGBA                       0x9390
+        VIEW_CLASS_ASTC_10x6_RGBA                       0x9391
+        VIEW_CLASS_ASTC_10x8_RGBA                       0x9392
+        VIEW_CLASS_ASTC_10x10_RGBA                      0x9393
+        VIEW_CLASS_ASTC_12x10_RGBA                      0x9394
+        VIEW_CLASS_ASTC_12x12_RGBA                      0x9395
 
 
 Additions to Chapter 2 of the OpenGL 4.2 (Core Profile) Specification
@@ -828,7 +850,8 @@
  
     - VIEW_COMPATIBILITY_CLASS: The compatibility class of the resource when
       used as a texture view is returned in <params>. The compatibility
-      class is one of the values from the /Class/ column of Table 3.X.2. If
+      class is one of the values from the /Class/ column of Table 3.X.2
+      (added by the ARB_texture_view extension). If
       the resource has no other formats that are compatible, the resource
       does not support views, or if texture views are not supported, NONE is
       returned.
@@ -1059,6 +1082,21 @@
     supported, ignore all references to VIEW_CLASS_RGTC1_RED and
     VIEW_CLASS_RGTC2_RG.
 
+Dependencies on ARB_ES3_compatibility
+    If ARB_ES3_compatibility or equivalent functionality is not supported,
+    ingore all references to VIEW_CLASS_EAC_R11, VIEW_CLASS_EAC_RG11,
+    VIEW_CLASS_ETC2_RGB, VIEW_CLASS_ETC2_RGBA, and VIEW_CLASS_ETC2_EAC_RGBA.
+
+Dependencies on KHR_texture_compression_astc_ldr
+    If KHR_texture_compression_astc_ldr or equivalent functionality is not
+    supported, ignore all references to VIEW_CLASS_ASTC_4x4_RGBA,
+    VIEW_CLASS_ASTC_5x4_RGBA, VIEW_CLASS_ASTC_5x5_RGBA,
+    VIEW_CLASS_ASTC_6x5_RGBA, VIEW_CLASS_ASTC_6x6_RGBA,
+    VIEW_CLASS_ASTC_8x5_RGBA, VIEW_CLASS_ASTC_8x6_RGBA, VIEW_CLASS_ASTC_8x8_RGBA,
+    VIEW_CLASS_ASTC_10x5_RGBA, VIEW_CLASS_ASTC_10x6_RGBA,
+    VIEW_CLASS_ASTC_10x8_RGBA, VIEW_CLASS_ASTC_10x10_RGBA,
+    VIEW_CLASS_ASTC_12x10_RGBA, and VIEW_CLASS_ASTC_12x12_RGBA.
+
 Dependencies on ARB_stencil_texturing
     If ARB_stencil_texturing or equivalent functionality is not supported,
     ignore all references to stencil texturing.
@@ -1339,6 +1377,9 @@
 
     Rev.  Date        Author    Changes
     ----  ----------  --------  --------------------------------------------
+     20   10/12/2018  dgkoch    Add tokens for ETC2/EAC and ASTC VIEW_CLASSES
+                                as interactions with ARB_ES3_compatibility
+                                and KHR_texture_compression_astc_ldr.
      19   02/14/2018  dgkoch    Add issue 16, clarify references to
                                 GetTexLevelParameter (gitlab/opengl/api/65)
      18   07/15/2013  Jon Leech Remove redundant list of VIEW_CLASS_* tokens 
diff --git a/extensions/ATI/WGL_ATI_render_texture_rectangle.txt b/extensions/ATI/WGL_ATI_render_texture_rectangle.txt
new file mode 100644
index 0000000..d996d78
--- /dev/null
+++ b/extensions/ATI/WGL_ATI_render_texture_rectangle.txt
@@ -0,0 +1,227 @@
+Name
+
+    ATI_render_texture_rectangle
+
+Name Strings
+
+    WGL_ATI_render_texture_rectangle
+
+Contact
+
+    Rob Mace, ATI Research (mace 'at' ati.com)
+
+Status
+
+    Complete.
+
+Version
+
+    Last Modified Date: September 27, 2018
+    Revision: 3
+
+Number
+
+    OpenGL Extension #532
+
+Dependencies
+
+    OpenGL 1.1 is required.
+    WGL_ARB_render_texture is required.
+    GL_ARB_texture_rectangle or GL_EXT_texture_rectangle is required.
+
+    The extension is written against the OpenGL 1.5 Specification
+    and the WGL_ARB_render_texture 7/16/01 Specification.
+
+Overview
+
+    This extension builds upon WGL_ARB_render_texture and allows a
+    pbuffer to be bound to a texture rectangle target.
+
+
+Issues
+
+    1. Are separate BIND_TO_TEXTURE_RECTANGLE enums needed, or are the
+       BIND_TO_TEXTURE enums defined in WGL_ARB_render_texture
+       sufficient?
+
+       RESOLUTION: The BIND_TO_TEXTURE enums defined in
+       WGL_ARB_render_texture are sufficient.  WGL_ARB_render_texture
+       does not have BIND_TO_TEXTURE_2D, BIND_TO_TEXTURE_CUBE_MAP, etc.
+       enums.  It just has the BIND_TO_TEXTURE enums.
+
+
+New Procedures and Functions
+
+   None
+
+
+New Tokens
+
+    Accepted as a value in the <piAttribList> parameter of
+    wglCreatePbufferARB and returned in the value parameter of
+    wglQueryPbufferARB when <iAttribute> is WGL_TEXTURE_TARGET_ARB:
+
+        WGL_TEXTURE_RECTANGLE_ATI       0x21A5
+
+
+Additions to Chapter 2 of the OpenGL 1.5 Specification (OpenGL
+Operation)
+
+    None
+
+
+Additions to Chapter 3 of the OpenGL 1.5 Specification (Rasterization)
+
+    None
+
+
+Additions to Chapter 4 of the OpenGL 1.5 Specification (Per-Fragment
+Operations and the Frame Buffer)
+
+    None
+
+
+Additions to Chapter 5 of the OpenGL 1.5 Specification (Special
+Functions)
+
+    None
+
+
+Additions to Chapter 6 of the OpenGL 1.5 Specification (State and
+State Requests)
+
+    None
+
+
+Additions to the WGL Specification
+
+    Modify wglCreatePbufferARB:
+
+        HPBUFFERARB wglCreatePbufferARB (HDC hDC, int iPixelFormat,
+            int iWidth, int iHeight, const int *piAttribList);
+
+        ...
+
+        WGL_TEXTURE_TARGET_ARB
+
+        This attribute indicates the target for the texture that will be
+        created when the pbuffer is created with a texture format of
+        WGL_TEXTURE_RGB_ARB or WGL_TEXTURE_RGBA_ARB.  This attribute can
+        be set to WGL_NO_TEXTURE_ARB, WGL_TEXTURE_1D_ARB,
+        WGL_TEXTURE_2D_ARB, WGL_TEXTURE_CUBE_MAP_ARB, or
+        WGL_TEXTURE_RECTANGLE_ATI.  The default value is
+        WGL_NO_TEXTURE_ARB.
+
+        ...
+
+        WGL_PBUFFER_LARGEST_ARB
+
+        If this attribute is set to a non-zero value, the largest
+        available pbuffer is allocated when the allocation of the
+        pbuffer would otherwise fail due to insufficient resources.  The
+        width or height of the allocated pbuffer never exceeds <iWidth>
+        and <iHeight>, respectively.  Also, if the pbuffer will be used
+        as a texture (i.e., the value of the WGL_TEXTURE_TARGET_ARB
+        attribute is WGL_TEXTURE_1D_ARB, WGL_TEXTURE_2D_ARB,
+        WGL_TEXTURE_CUBE_MAP_ARB, or WGL_TEXTURE_RECTANGLE_ATI and
+        texture format is WGL_TEXTURE_RGB_ARB or WGL_TEXTURE_RGBA_ARB),
+        then the aspect ratio will be preserved and the new width and
+        height will be valid sizes for the corresponding texture target.
+        (e.g. Both the width and height will be a power of 2 if the
+        implementation only supports power of 2 textures.  Similarly,
+        the width and height will be equal for a cube map texture).  Use
+        wglQueryPbufferARB to retrieve the dimensions of the allocated
+        pbuffer.  The default value for this attribute is FALSE.
+
+        ...
+
+        ERROR_INVALID_DATA          The pixel format attribute
+                                    WGL_TEXTURE_FORMAT_ARB is
+                                    WGL_TEXTURE_RGB_ARB or
+                                    WGL_TEXTURE_RGBA_ARB
+                                    and WGL_PBUFFER_WIDTH and/or
+                                    WGL_PBUFFER_HEIGHT specify an
+                                    invalid size for the implementation
+                                    (e.g., the texture size is not a
+                                    power of 2 and
+                                    WGL_TEXTURE_TARGET_ARB is
+                                    WGL_TEXTURE_1D_ARB,
+                                    WGL_TEXTURE_2D_ARB, or
+                                    WGL_TEXTURE_CUBE_MAP_ARB).
+
+        ERROR_INVALID_DATA          WGL_TEXTURE_TARGET_ARB is
+                                    WGL_TEXTURE_RECTANGLE_ATI
+                                    and WGL_MIPMAP_TEXTURE_ARB is
+                                    non-zero.
+
+        ....
+
+    Modify wglBindTexImageARB
+
+        The command
+
+        BOOL wglBindTexImageARB (HPBUFFERARB hPbuffer, int iBuffer)
+
+        defines a one-dimensional texture image, two-dimensional
+        texture image, rectangle texture image, or a set of
+        two-dimensional cube map texture images.  The texture image or
+        images consist of the image data in <iBuffer> for the specified
+        pbuffer, <hPbuffer>, and need not be copied.  The texture
+        target, the texture format and the size of the texture
+        components are derived from attributes of pbuffer specified by
+        <hPbuffer>.
+
+        ...
+
+        The texture targets are derived from the WGL_TEXTURE_TARGET_ARB
+        attribute of <hPbuffer>.  If the texture target for the pbuffer
+        is WGL_TEXTURE_CUBE_MAP_ARB then <iBuffer> defines a set of
+        cubemap images for the cube map texture objects which are bound
+        to the current context (hereafter referred to as the current
+        texture object).  Note that when the texture target is
+        WGL_TEXTURE_CUBE_MAP_ARB, all cube map texture targets are
+        defined by a single call to wglBindTexImageARB. If the texture
+        target is WGL_TEXTURE_2D_ARB, then <iBuffer> defines a 2D
+        texture for the current 2D texture object.  If the texture
+        target is WGL_TEXTURE_1D_ARB, then <iBuffer> defines a 1D
+        texture for the current 1D texture object.  If the texture
+        target is WGL_TEXTURE_RECTANGLE_ATI, then <iBuffer> defines a
+        rectangle texture for the current rectangle texture object.
+
+        ....
+
+
+Errors
+
+    None
+
+
+New State
+
+    None
+
+
+New Implementation Dependent State
+
+    None
+
+
+Revision History
+
+   Date: 09/27/2018
+   Revision: 3
+      - Assigned extension number & registered the spec (see
+        github.com/KhronosGroup/OpenGL-Registry/issues/192)
+      - For reasons lost to history, the enum value 0x21A5 duplicates the
+        entirely unrelated WGL_GPU_NUM_PIPES_AMD.
+      - This will probably set the alltime record for the time between an
+        extension being created and being registered.
+
+   Date: 10/11/2004
+   Revision: 2
+      - Minor cleanup.
+      - Changed status to Complete.
+
+   Date: 8/16/2004
+   Revision: 1
+      - First draft.
diff --git a/extensions/EXT/EXT_external_objects.txt b/extensions/EXT/EXT_external_objects.txt
index a6d0ee1..2f08164 100644
--- a/extensions/EXT/EXT_external_objects.txt
+++ b/extensions/EXT/EXT_external_objects.txt
@@ -26,8 +26,8 @@
 
 Version
 
-    Last Modified Date: September 26, 2017
-    Revision: 13
+    Last Modified Date: July 18, 2018
+    Revision: 14
 
 Number
 
@@ -663,7 +663,7 @@
 
         "For BufferStorage and BufferStorageMemEXT, the buffer object is
         that bound to <target>, which must be one of the values listed
-        in table 6.1.  For NamedBufferStroage and
+        in table 6.1.  For NamedBufferStorage and
         NamedBufferStorageMemEXT, <buffer> is the name of the buffer
         object.  For all the above commands, <size> is the size of the
         data store in basic machine units.  For BufferStorageMemEXT and
@@ -1122,6 +1122,9 @@
 
 Revision History
 
+    Revision 14, 2018-07-18 (James Jones)
+        - Fixed a typo: Replace NamedBufferStroage with NamedBufferStorage
+
     Revision 13, 2017-09-26 (James Jones)
         - Added new image layouts corresponding to those from
           VK_KHR_maintenance2.
diff --git a/extensions/EXT/EXT_shader_framebuffer_fetch.txt b/extensions/EXT/EXT_shader_framebuffer_fetch.txt
index b3d3947..443f512 100644
--- a/extensions/EXT/EXT_shader_framebuffer_fetch.txt
+++ b/extensions/EXT/EXT_shader_framebuffer_fetch.txt
@@ -21,8 +21,8 @@
 
 Version
 
-    Last Modified Date: November 13, 2017
-    Author Revision: 7
+    Last Modified Date: September 6, 2018
+    Author Revision: 8
 
 Number
 
@@ -638,7 +638,7 @@
 
     "A helper invocation is a fragment shader invocation that is created solely
     for the purposes of evaluating derivatives for the built-in functions
-    texture() (section 8.9 “Texture Functions”), dFdx(), dFdy(), and fwidth()
+    texture() (section 8.9 "Texture Functions"), dFdx(), dFdy(), and fwidth()
     for other non-helper fragment shader invocations.
 
     Fragment shader helper invocations execute the same shader code as
@@ -740,6 +740,7 @@
 
 Revision History
 
+    Version 8, 2018/09/06 - Replace non-ASCII quote characters.
     Version 7, 2017/11/13 - Specify interactions with desktop OpenGL APIs.
                           - Specify interaction with ARB/OES_sample_shading
                             and unextended GL versions that provide the same
diff --git a/extensions/EXT/EXT_texture_filter_anisotropic.txt b/extensions/EXT/EXT_texture_filter_anisotropic.txt
index 456e856..798f6a6 100644
--- a/extensions/EXT/EXT_texture_filter_anisotropic.txt
+++ b/extensions/EXT/EXT_texture_filter_anisotropic.txt
@@ -13,7 +13,7 @@
 
 Version
 
-    Last updated November 12, 2014
+    Last updated May 23, 2018
 
 Number
 
@@ -275,8 +275,21 @@
                                                                     maximum degree
                                                                     of anisotropy
 
+Issues
+
+  1) Should TEXTURE_MAX_ANISOTROPY_EXT be accepted by SamplerParameter*?
+
+  Yes, for implementations supporting sampler objects. The per-texture sampling
+  state is overridden by the sampler object state, if present. The anisotropy
+  parameter should not be an exception, as this would reduce the usefulness of
+  sampler objects when anisotropic filtering is supported. This also matches
+  the interaction described in ARB_sampler_objects, and the same behavior is
+  still expected for API versions with core support for sampler objects.
+
 Revision History
 
+  2018-05-23 (Nicolas Capens) - clarify interaction with sampler objects.
+
   11/12/14 (Jon Leech) - Fix spelling of TEXTURE_MAX_ANISOTROPY 
   (public Bug 1263).
 
diff --git a/extensions/MESA/MESA_framebuffer_flip_y.txt b/extensions/MESA/MESA_framebuffer_flip_y.txt
new file mode 100644
index 0000000..d160232
--- /dev/null
+++ b/extensions/MESA/MESA_framebuffer_flip_y.txt
@@ -0,0 +1,83 @@
+Name
+
+    MESA_framebuffer_flip_y
+
+Name Strings
+
+    GL_MESA_framebuffer_flip_y
+
+Contact
+
+    Fritz Koenig <frkoenig@google.com>
+
+Contributors
+
+    Fritz Koenig, Google
+    Kristian Høgsberg, Google
+    Chad Versace, Google
+
+Status
+
+    Proposal
+
+Version
+
+    Version 1, June 7, 2018
+
+Number
+
+    OpenGL ES Extension #302
+
+Dependencies
+
+    OpenGL ES 3.1 is required, for FramebufferParameteri.
+
+Overview
+
+    This extension defines a new framebuffer parameter,
+    GL_FRAMEBUFFER_FLIP_Y_MESA, that changes the behavior of the reads and
+    writes to the framebuffer attachment points. When GL_FRAMEBUFFER_FLIP_Y_MESA
+    is GL_TRUE, render commands and pixel transfer operations access the
+    backing store of each attachment point with an y-inverted coordinate
+    system. This y-inversion is relative to the coordinate system set when
+    GL_FRAMEBUFFER_FLIP_Y_MESA is GL_FALSE.
+
+    Access through TexSubImage2D and similar calls will notice the effect of
+    the flip when they are not attached to framebuffer objects because
+    GL_FRAMEBUFFER_FLIP_Y_MESA is associated with the framebuffer object and
+    not the attachment points.
+
+IP Status
+
+    None
+
+Issues
+
+    None
+
+New Procedures and Functions
+
+    None
+
+New Types
+
+    None
+
+New Tokens
+
+    Accepted by the <pname> argument of FramebufferParameteri and
+    GetFramebufferParameteriv:
+
+        GL_FRAMEBUFFER_FLIP_Y_MESA                      0x8BBB
+
+Errors
+
+    An INVALID_OPERATION error is generated by GetFramebufferParameteriv if the
+    default framebuffer is bound to <target> and <pname> is FRAMEBUFFER_FLIP_Y_MESA.
+
+
+
+Revision History
+
+    Version 1, June, 2018
+        Initial draft (Fritz Koenig)
diff --git a/extensions/NV/NV_compute_shader_derivatives.txt b/extensions/NV/NV_compute_shader_derivatives.txt
new file mode 100644
index 0000000..9c4ef8e
--- /dev/null
+++ b/extensions/NV/NV_compute_shader_derivatives.txt
@@ -0,0 +1,92 @@
+Name
+
+    NV_compute_shader_derivatives
+
+Name Strings
+
+    GL_NV_compute_shader_derivatives
+
+Contact
+
+    Pat Brown, NVIDIA (pbrown 'at' nvidia.com)
+
+Contributors
+
+    Ashwin Lele, NVIDIA
+    Jeff Bolz, NVIDIA
+
+Status
+
+    Shipping
+
+Version
+
+    Last Modified:      September 15, 2018
+    Revision:           1
+
+Number
+
+    OpenGL Extension #525
+
+Dependencies
+
+    This extension is written against the OpenGL 4.6 Specification
+    (Compatibility Profile), dated October 24, 2016.
+
+    OpenGL 4.5 is required.
+
+    This extension requires support for the OpenGL Shading Language (GLSL)
+    extension "NV_compute_shader_derivatives", which can be found at the
+    Khronos Group Github site here:
+
+        https://github.com/KhronosGroup/GLSL
+
+Overview
+
+    This extension adds OpenGL API support for the OpenGL Shading Language
+    (GLSL) extension "NV_compute_shader_derivatives".
+
+    That extension, when enabled, allows applications to use derivatives in
+    compute shaders.  It adds compute shader support for explicit derivative
+    built-in functions like dFdx(), automatic derivative computation in
+    texture lookup functions like texture(), use of the optional LOD bias
+    parameter to adjust the computed level of detail values in texture lookup
+    functions, and the texture level of detail query function
+    textureQueryLod().
+
+New Procedures and Functions
+
+    None
+
+New Tokens
+
+    None
+
+Modifications to the OpenGL 4.6 Specification (Compatibility Profile)
+
+    None
+
+Additions to the AGL/GLX/WGL Specifications
+
+    None
+
+Errors
+
+    None
+
+New State
+
+    None
+
+New Implementation Dependent State
+
+    None
+
+Issues
+
+    None, but please refer to issues in the GLSL extension specification.
+
+Revision History
+
+    Revision 1 (pbrown)
+    - Internal revisions.
diff --git a/extensions/NV/NV_fragment_shader_barycentric.txt b/extensions/NV/NV_fragment_shader_barycentric.txt
new file mode 100644
index 0000000..d3c171f
--- /dev/null
+++ b/extensions/NV/NV_fragment_shader_barycentric.txt
@@ -0,0 +1,247 @@
+Name
+
+    NV_fragment_shader_barycentric
+
+Name Strings
+
+    GL_NV_fragment_shader_barycentric
+
+Contact
+
+    Pat Brown, NVIDIA (pbrown 'at' nvidia.com)
+
+Contributors
+
+    Ashwin Lele, NVIDIA
+    Jeff Bolz, NVIDIA
+
+Status
+
+    Shipping
+
+Version
+
+    Last Modified:      September 15, 2018
+    Revision:           1
+
+Number
+
+    OpenGL Extension #526
+
+Dependencies
+
+    This extension is written against the OpenGL 4.6 Specification
+    (Compatibility Profile), dated July 30, 2017.
+
+    OpenGL 4.5 is required.
+
+    This extension requires support for the OpenGL Shading Language (GLSL)
+    extension "NV_fragment_shader_barycentric", which can be found at the
+    Khronos Group Github site here:
+
+        https://github.com/KhronosGroup/GLSL
+
+Overview
+
+    This extension advertises OpenGL support for the OpenGL Shading Language
+    (GLSL) extension "NV_fragment_shader_barycentric", which provides fragment
+    shader built-in variables holding barycentric weight vectors that identify
+    the location of the fragment within its primitive.  Additionally, the GLSL
+    extension allows fragment the ability to read raw attribute values for
+    each of the vertices of the primitive that produced the fragment.
+
+New Procedures and Functions
+
+    None
+
+New Tokens
+
+    None
+
+Modifications to the OpenGL 4.6 Specification (Compatibility Profile)
+
+    Modify Section 15.2.2, Shader Inputs (p. 586)
+
+    (insert new paragraphs after the first paragraph, p. 589)
+
+    Fragment shader input variables can be declared as per-vertex inputs using
+    the GLSL interpolation qualifier "pervertexNV".  Such inputs are not
+    produced by attribute interpolation, but are instead taken directly from
+    corresponding output variables written by the previous shader stage, prior
+    to primitive clipping and rasterization.  When reading per-vertex inputs,
+    a fragment shader specifies a vertex number (0, 1, or 2) that identifies a
+    specific vertex in the point, line, or triangle primitive that produced
+    the vertex.
+
+    When no tessellation or geometry shader is active, the vertices passed to
+    each draw call are arranged into point, line, or triangle primitives as
+    described in Section 10.1.  If the <n> vertices passed to a draw call are
+    numbered 0 through <n>-1, and the point, line, and triangle primitives
+    produced by the draw call are numbered with consecutive integers beginning
+    with zero, Table X.1 and Table X.2 indicate the original vertex numbers
+    used as vertex 0, vertex 1, and vertex 2 when sourcing per-vertex
+    attributes for fragments produced by the primitive numbered <i>.  Table
+    X.1 applies when the provoking vertex convention is
+    FIRST_VERTEX_CONVENTION, while Table X.2 applies when the provoking vertex
+    convention is LAST_VERTEX_CONVENTION.
+
+        Primitive Type                  Vertex 0    Vertex 1    Vertex 2
+        ------------------------        --------    --------    --------
+        POINTS                          i           -           -
+        LINES                           2i          2i+1        -
+        LINE_STRIP                      i           i+1         -
+        LINE_LOOP                       i           i+1         -
+        LINE_LOOP (last segment)        n-1         0           -
+        TRIANGLES                       3i          3i+1        3i+2
+        TRIANGLE_STRIP (even)           i           i+1         i+2
+        TRIANGLE_STRIP (odd)            i           i+2         i+1
+        TRIANGLE_FAN                    i+1         i+2         0
+        POLYGON                         0           i           i+1
+        LINES_ADJACENCY                 4i+1        4i+2        -
+        LINES_STRIP_ADJACENCY           i+1         i+2         -
+        TRIANGLES_ADJACENCY             6i          6i+2        6i+4
+        TRIANGLE_STRIP_ADJACENCY (even) 2i          2i+2        2i+4
+        TRIANGLE_STRIP_ADJACENCY (odd)  2i          2i+4        2i+2
+
+        Table X.1, Vertex Order for per-vertex attributes, using the provoking
+        vertex convention FIRST_VERTEX_CONVENTION.
+
+        Primitive Type                  Vertex 0    Vertex 1    Vertex 2
+        ------------------------        --------    --------    --------
+        POINTS                          i           -           -
+        LINES                           2i          2i+1        -
+        LINE_STRIP                      i           i+1         -
+        LINE_LOOP                       i           i+1         -
+        LINE_LOOP (last segment)        n-1         0           -
+        TRIANGLES                       3i          3i+1        3i+2
+        TRIANGLE_STRIP (even)           i           i+1         i+2
+        TRIANGLE_STRIP (odd)            i+1         i           i+2
+        TRIANGLE_FAN                    0           i+1         i+2
+        POLYGON                         0           i           i+1
+        LINES_ADJACENCY                 4i+1        4i+2
+        LINES_STRIP_ADJACENCY           i+1         i+2
+        TRIANGLES_ADJACENCY             6i          6i+2        6i+4
+        TRIANGLE_STRIP_ADJACENCY (even) 2i          2i+2        2i+4
+        TRIANGLE_STRIP_ADJACENCY (odd)  2i+2        2i          2i+4
+
+        Table X.2, Vertex Order for per-vertex attributes, using the provoking
+        vertex convention LAST_VERTEX_CONVENTION.
+
+    When using geometry shaders, vertices used for per-vertex fragment shader
+    inputs are determined using Table X.1 or X.2 by treating the primitive(s)
+    produced by the geometry shader as though they were passed to a DrawArrays
+    calls.  When using a tessellation evaluation shader, or when using QUADS
+    or QUAD_STRIP primitives, the vertices used for reading per-vertex
+    fragment shader inputs are assigned in an implementation-dependent order.
+
+    The built-in variables gl_BaryCoordNV and gl_BaryCoordNoPerspNV are
+    three-component floating-point vectors holding barycentric coordinates for
+    the fragment.  These built-ins are computed by clipping (Section 13.6.1)
+    and interpolating (Sections 14.5.1 and 14.6.1) a three-component vector
+    attribute.  The vertices that are numbered 0, 1, and 2 for the purposes of
+    reading per-vertex fragment shader inputs are assigned values of (1,0,0),
+    (0,1,0), and (0,0,1), respectively.  For gl_BaryCoordNV, these values are
+    clipped and interpolated using perspective correction.  For
+    gl_BaryCoordNoPerspNV, these values are clipped and interpolated without
+    perspective correction, like other fragment shader inputs qualified with
+    "noperspective".
+
+
+Additions to the AGL/GLX/WGL Specifications
+
+    None
+
+Errors
+
+    None
+
+New State
+
+    None
+
+New Implementation Dependent State
+
+    None
+
+Issues
+
+    (1) Can applications use the original order of vertices in a draw call to
+        determine the order of the three vertices used when reading per-vertex
+        fragment shader inputs?
+
+      RESOLVED:  Yes, in most cases.
+
+      This extension allows fragment shaders to read inputs qualified with
+      "pervertexNV" using a vertex number 0, 1, or 2.  For most primitive
+      types, the OpenGL Specification already specifies how the original
+      vertices passed to a draw call are assigned to individual point, line,
+      or triangle primitives.  The extension extends that language to define a
+      specific vertex order that will be used for sourcing per-vertex
+      attributes.  In some cases, this vertex order depends on the provoking
+      vertex convention.
+
+      When using a tessellation evaluation shader, QUADS primitives, or
+      QUAD_STRIP primitives, the OpenGL Specification already indicates that
+      patches or quadrilaterals can be decomposed into finer primitives in an
+      implementation-dependent order.  In these cases, we do not guarantee a
+      specific vertex order.  However, we still guarantee that the vertices
+      numbered 0, 1, 2 have corresponding barycentric weights (gl_BaryCoordNV)
+      of (1,0,0), (0,1,0), and (0,0,1), respectively.  With this guarantee,
+      interpolating attributes manually in a fragment shader with code like:
+
+        float value = (gl_BaryCoordNV.x * v[0].attrib +
+                       gl_BaryCoordNV.y * v[1].attrib +
+                       gl_BaryCoordNV.z * v[2].attrib);
+
+      should produce results approximately equal to those that would be
+      obtained via conventional attribute interpolation.
+
+    (2) How are clipped primitives handled when using "pervertexNV"
+        fragment shader inputs?
+
+      RESOLVED:  In the OpenGL pipeline, clipped primitives are normally
+      handled by having the clipper remove one of the original vertices,
+      introduce one or more new vertices, and process the result as an
+      unclipped primitive.  In this model, the provoking vertex still needs to
+      be maintained because inputs qualified with "flat" use the values from
+      that vertex even if the provoking vertex is clipped.
+
+      In this extension, we guarantee that the three sets of per-vertex values
+      available as fragment shader inputs are those of the original primitive
+      vertices prior to clipping.  To ensure consistent attribute handling,
+      the barycentric weights are computed relative to the original primitive,
+      not the clipped one.  For example, if the left half of triangle ABC
+      below is clipped away, the clipper introduces a new vertex D and
+      rasterizes triangle DBC instead.
+
+                          + B (0,1,0)
+                         /|\
+                        / | \
+                       /  |  \
+                      /   |   \
+                     /    |    \
+                    /     |     \
+         (1,0,0) A +------+------+ C (0,0,1)
+                          D
+
+      When we process the clipped triangle, the three vertices available for
+      "pervertexNV" inputs are actually A, B, and C (in undefined order).
+      If vertices "v[0]", "v[1]", and "v[2]" are assigned to A, B, and C,
+      respectively, fragments at A, B, and C will have barycentric coordinates
+      of (1,0,0), (0,1,0), and (0,0,1), respectively.  A fragment at the
+      vertex D introduced by the clipper will have a weight like (0.5, 0.0,
+      0.5) -- exactly the same value it would have if ABC were unclipped.
+
+    (3) Should we have any program interface query API support where
+        application code can inspect the active fragment shader inputs and
+        determine which ones were declared with "pervertexNV"?
+
+      RESOLVED:  No.  We don't have this for other interpolation qualifiers
+      like "flat" or "noperspective".
+
+    Also, please refer to issues in the GLSL extension specification.
+
+Revision History
+
+    Revision 1 (pbrown)
+    - Internal revisions.
diff --git a/extensions/NV/NV_memory_attachment.txt b/extensions/NV/NV_memory_attachment.txt
new file mode 100755
index 0000000..4d13094
--- /dev/null
+++ b/extensions/NV/NV_memory_attachment.txt
@@ -0,0 +1,427 @@
+Name
+
+    NV_memory_attachment
+
+Name Strings
+
+    GL_NV_memory_attachment
+
+Contributors
+
+    Carsten Rohde, NVIDIA
+    Christoph Kubisch, NVIDIA
+    James Jones, NVIDIA
+
+Contact
+
+    Carsten Rohde, NVIDIA (crohde 'at' nvidia.com)
+
+Status
+
+    Complete
+
+Version
+
+    Last Modified Date: Aug 27, 2018
+    Revision: 2
+
+Number
+
+    524
+    OpenGL ES Extension #305
+
+Dependencies
+
+    Requires GL_EXT_memory_object and ARB_texture_storage or a version of
+    OpenGL or OpenGL ES that incorporates it.
+
+    Written against the OpenGL 4.6 and OpenGL ES 3.2 specifications.
+
+    Interacts with ARB_direct_state_access (OpenGL) when OpenGL < 4.5 is used.
+
+    Interacts with NV_shader_buffer_load.
+
+    Interacts with NV_bindless_texture and ARB_bindless_texture.
+
+Overview
+
+    This extension extends the memory objects introduced with EXT_memory_object
+    to allow existing textures and buffers to be migrated to an imported memory
+    allocation.  The primary use-case of this extension is plug-in development
+    where resource management (creation, deletion, sizing etc.) is handled by
+    inaccessible host application code.
+
+New Procedures and Functions
+
+    If the GL_NV_memory_attachment string is reported, the following
+    commands are added:
+
+        void GetMemoryObjectDetachedResourcesuivNV(uint memory,
+                                                   enum pname,
+                                                   int first,
+                                                   sizei count,
+                                                   uint *params)
+
+        void ResetMemoryObjectParameterNV(uint memory,
+                                          enum pname);
+
+        void TexAttachMemoryNV(enum target,
+                               uint memory,
+                               uint64 offset);
+
+        void BufferAttachMemoryNV(enum target,
+                                  uint memory,
+                                  uint64 offset);
+
+        [[ The following are added if direct state access is supported ]]
+
+        void TextureAttachMemoryNV(uint texture,
+                                   uint memory,
+                                   uint64 offset);
+
+        void NamedBufferAttachMemoryNV(uint buffer,
+                                       uint memory,
+                                       uint64 offset);
+
+New Tokens
+
+    If the GL_NV_memory_attachment string is reported, the following tokens
+    are added:
+
+    Accepted by the <pname> parameter of TexParameter{ifx}{v},
+    TexParameterI{i ui}v, TextureParameter{if}{v}, TextureParameterI{i ui}v,
+    GetTexParameter{if}v, GetTexParameterI{i ui}v, GetTextureParameter{if}v,
+    GetTextureParameterI{i ui}v, GetBufferParameter{i|i64}v and
+    GetNamedBufferParameter{i|i64}v:
+
+      ATTACHED_MEMORY_OBJECT_NV           0x95A4
+      ATTACHED_MEMORY_OFFSET_NV           0x95A5
+      MEMORY_ATTACHABLE_ALIGNMENT_NV      0x95A6
+      MEMORY_ATTACHABLE_SIZE_NV           0x95A7
+      MEMORY_ATTACHABLE_NV                0x95A8
+
+    Accepted by the <pname> parameter of GetBooleanv, GetDoublev, GetFloatv,
+    GetIntegerv, GetInteger64v, GetUnsignedBytevEXT,
+    GetMemoryObjectParameterivEXT, and the <target> parameter of GetBooleani_v,
+    GetIntegeri_v,GetFloati_v, GetDoublei_v, GetInteger64i_v and
+    GetUnsignedBytei_vEXT:
+
+      DETACHED_MEMORY_INCARNATION_NV      0x95A9
+
+    Accepted by the <pname> parameter of GetMemoryObjectParameterivEXT,
+    GetMemoryObjectDetachedResourcesuivNV and ResetMemoryObjectParameterNV:
+
+      DETACHED_TEXTURES_NV                0x95AA
+      DETACHED_BUFFERS_NV                 0x95AB
+
+    Accepted by the <pname> parameter of MemoryObjectParameterivEXT,
+    GetMemoryObjectParameterivEXT:
+
+      MAX_DETACHED_TEXTURES_NV            0x95AC
+      MAX_DETACHED_BUFFERS_NV             0x95AD
+
+
+Additions to Chapter 6 of the EXT_external_objects Specification
+(Memory Objects)
+
+    Add a new sections after 6.2 (Memory object parameters)
+
+        6.3 Attaching memory to existing resources
+
+        MEMORY_ATTACHABLE_NV should be used to query if it is valid to attach
+        a memory object to an existing resource (buffer or texture).  The
+        memory region size and offset alignment required by a resource can be
+        queried using MEMORY_ATTACHABLE_SIZE_NV and
+        MEMORY_ATTACHABLE_ALIGNMENT_NV respectively.  The current attached
+        memory object and the used offset for a resource can be queried by
+        ATTACHED_MEMORY_OBJECT_NV and ATTACHED_MEMORY_OFFSET_NV.
+
+        If a resource which has memory attached is resized, the attached memory
+        will be detached and a new data store will be allocated.  If a resource
+        which has memory attached is deleted, the attached memory will first be
+        detached.  If any such detachment occurs, a global incarnation counter
+        will be increased and the current value will be stored in the detached
+        memory object.  The incarnation counter can be queried by
+        DETACHED_MEMORY_INCARNATION_EXT either globally or for a specific
+        memory object.
+
+        The command
+
+            void GetMemoryObjectDetachedResourcesuivNV(uint memory,
+                                                       enum pname,
+                                                       int first,
+                                                       sizei count,
+                                                       uint *params)
+
+        will return a list of detached buffers (if <pname> is
+        DETACHED_BUFFERS_NV) or textures (if <pname> is DETACHED_TEXTURES_NV)
+        in <params> for memory object <memory>.  It will return <count> items
+        beginning with <first> item.  The number of available items can be
+        queried by calling GetMemoryObjectParameterivEXT with <pname> set to
+        DETACHED_TEXTURES_NV or DETACHED_BUFFERS_NV.  An INVALID_VALUE error is
+        generated by GetMemoryObjectDetachedResourcesuivNV if <memory> is 0.
+        An INVALID_OPERATION error is generated if <memory> names a valid
+        memory object which has no associated memory.  An INVALID_VALUE error
+        is generated if <pname> is neither DETACHED_BUFFERS_NV nor
+        DETACHED_TEXTURES_NV.  An INVALID_VALUE error is generated if
+        <first> + <count> is greater than the number of available items in the
+        list.  An INVALID_VALUE error is generated if <params> is NULL.
+        MemoryObjectParameterivEXT must be called with <pname> set to
+        MAX_DETACHED_TEXTURES_NV or MAX_DETACHED_BUFFERS_NV before calling
+        GetMemoryObjectDetachedResourcesuivNV to set the maximum number of
+        items in the list of detached textures or buffers.  The default values
+        are 0 which means that tracking of detached textures and buffers is
+        disabled by default.
+
+        The command
+
+        void ResetMemoryObjectParameterNV(uint memory,
+                                          enum pname);
+
+        will reset the list of detached buffers (if <pname> is
+        DETACHED_BUFFERS_NV) or textures (if <pname> is DETACHED_TEXTURES_NV)
+        for memory object <memory>.  An INVALID_VALUE error is generated by
+        ResetMemoryObjectParameterNV if <memory> is 0.  An INVALID_OPERATION
+        error is generated if <memory> names a valid memory object which has
+        no associated memory.  An INVALID_VALUE error is generated if <pname>
+        is neither DETACHED_BUFFERS_NV nor DETACHED_TEXTURES_NV.
+
+
+Additions to Chapter 6 of the OpenGL 4.6 Specification (Buffer Objects)
+
+    Add a new section after 6.2.1 (Clearing Buffer Object Data Stores)
+
+        6.2.2 Attaching a memory object to a buffer object
+
+        The commands
+
+            void BufferAttachMemoryNV(enum target,
+                                      uint memory,
+                                      uint64 offset);
+
+            void NamedBufferAttachMemoryNV(uint buffer,
+                                           uint memory,
+                                           uint64 offset);
+
+        will attach a region of a memory object to a buffer object.  For
+        BufferAttachMemoryNV, the buffer object is that bound to <target>,
+        which must be one of the values listed in table 6.1.  For
+        NamedBufferAttachMemoryNV, <buffer> is the name of the buffer
+        object.  <memory> and <offset> define a region of memory that will
+        replace the data store for <buffer>. The content of the original data
+        store will be preserved by a server side copy and the original data
+        store will be deleted after that copy.  The implementation may restrict
+        which values of <offset> are valid for a given memory object and buffer
+        parameter combination.  These restrictions are outside the scope of
+        this extension and must be determined by querying the API or mechanism
+        which created the resource which <memory> refers to.  If an invalid
+        offset is specified an INVALID_VALUE error is generated.  An
+        INVALID_VALUE error is generated by BufferAttachMemoryNV and
+        NamedBufferAttachMemoryNV if <memory> is 0. An INVALID_OPERATION error
+        is generated if <memory> names a valid memory object which has no
+        associated memory.  An INVALID_OPERATION error is generated if the
+        specified buffer was created with MAP_PERSISTENT_BIT flag.  An
+        INVALID_OPERATION error is generated if the specified buffer is
+        currently mapped by client.
+
+Additions to Chapter 8 of the OpenGL 4.6 Specification (Textures and
+Samplers)
+
+    Add a new section between sections 8.19, "Immutable-Format Texture Images"
+    and section 8.20, "Invalidating Texture Image Data"
+
+        8.20 Attaching a memory object to a texture image
+
+        The commands
+
+            void TexAttachMemoryNV(enum target,
+                                   uint memory,
+                                   uint64 offset);
+
+            void TextureAttachMemoryNV(uint texture,
+                                       uint memory,
+                                       uint64 offset);
+
+        will attach a region of a memory object to a texture.  For
+        TexAttachMemoryNV, the texture is that bound to <target>, which must be
+        one of TEXTURE_1D, TEXTURE_2D, TEXTURE_3D, TEXTURE_1D_ARRAY,
+        TEXTURE_2D_ARRAY, TEXTURE_RECTANGLE, TEXTURE_CUBE_MAP,
+        TEXTURE_CUBE_MAP_ARRAY, TEXTURE_2D_MULTISAMPLE, or
+        TEXTURE_2D_MULTISAMPLE_ARRAY.  For TextureAttachMemoryNV, <texture> is
+        the name of the texture.  <memory> and <offset> define a region of
+        memory that will replace the data store for <texture>. The content of
+        the original data store will be preserved by a server side copy and the
+        original data store will be deleted after that copy.  The
+        implementation may restrict which values of <offset> are valid for a
+        given memory object and texture parameter combination.  These
+        restrictions are outside the scope of this extension and must be
+        determined by querying the API or mechanism which created the resource
+        which <memory> refers to.  If an invalid offset is specified an
+        INVALID_VALUE error is generated.  An INVALID_VALUE error is generated
+        by TexAttachMemoryNV and TextureAttachMemoryNV if <memory> is 0.  An
+        INVALID_OPERATION error is generated if <memory> names a valid memory
+        object which has no associated memory.
+
+Errors
+
+New State
+
+Sample
+
+    // host: code not visible to the plug-in developer
+    // plug-in: code written by plug-in developer
+
+    uint tex0;
+    uint tex1;
+
+    // host
+    {
+        // sets up textures as usual
+    }
+
+    // plug-in
+    {
+        int attachable0;
+        int attachable1;
+        GetTextureParameteriv(tex0, MEMORY_ATTACHABLE_NV, &attachable0);
+        GetTextureParameteriv(tex1, MEMORY_ATTACHABLE_NV, &attachable1);
+
+        if (attachable0 && attachable1){
+
+            // allocate memory within vulkan and import it as specified in
+            // EXT_memory_object
+
+            // attach imported vulkan memory
+            TextureAttachMemoryNV(tex0, memobj, memoffset0);
+
+            // ... do same for tex1
+            TextureAttachMemoryNV(tex1, memobj, memoffset1);
+        }
+    }
+
+    ///////////////////////////////
+    // Querying mutations by host
+
+    int incarnationExpected;
+
+    // plug-in
+    {
+        // global query
+        GetIntegerv(DETACHED_MEMORY_INCARNATION_NV, &incarnationExpected);
+
+        // if we have multiple memory objects
+        for each memobj {
+          GetMemoryObjectParameterivEXT(memobj.id,
+                                        DETACHED_MEMORY_INCARNATION_NV,
+                                        &memobj.incarnation);
+          GLint maxDetachedTextures = 64;
+          MemoryObjectParameterivEXT(memobj.id,
+                                     MAX_DETACHED_TEXTURES_NV,
+                                     &maxDetachedTextures);
+        }
+    }
+
+    // host
+    {
+        // deletion triggers a detach
+        glDeleteTextures(1, &tex1);
+    }
+
+    // plug-in
+    {
+        // global query if resources of context were affected
+        int incarnation;
+        GetIntegerv(DETACHED_MEMORY_INCARNATION_NV, &incarnation);
+
+        if (incarnation != incarnationExpected) {
+            incarnationExpected = incarnation;
+
+            // narrow down search which memory object was affected
+            for each memobj {
+                GetMemoryObjectParameterivEXT(memobj.id,
+                                              DETACHED_MEMORY_INCARNATION_NV,
+                                              &incarnation);
+
+                if (incarnation != memobj.incarnation) {
+                    memobj.incarnation = incarnation;
+
+                    int removedTexCount;
+                    GetMemoryObjectParameterivEXT(memobj.id,
+                                                  DETACHED_TEXTURES_NV,
+                                                  &removedTexCount);
+
+                    std::vector<uint> removedTexs(removedTexCount);
+
+                    GetMemoryObjectDetachedResourcesuivNV(
+                        memobj.id,
+                        DETACHED_TEXTURES_NV,
+                        0, removedTexCount,
+                        removedTexs.data());
+
+                    for (int i = 0; i < removedTexCount; i++) {
+                        uint tex = removedTexs[i];
+                        // look up tex in custom allocator and
+                        // mark its memory as available again
+                    }
+
+                    ResetMemoryObjectParameter(memobj.id,
+                                               DETACHED_TEXTURES_NV);
+                }
+            }
+        }
+    }
+
+Issues
+
+    1)  Do we need to introduce allocation done within OpenGL
+        or is attaching existing resources to imported allocation
+        sufficient?
+
+        RESOLVED: No.  No need to duplicate work which has already been done
+        in Vulkan.
+
+    2)  Should binding memory only work on immutable resources?
+
+        RESOLVED: No.  To improve compatibility with existing GL resources,
+        allow mutable resources as well. A global and local incarnation counter
+        was introduced to test against changes, as well as detecting the
+        detached resources.
+
+    3)  Do we support client-mappable resources?
+
+        RESOLVED: Yes.  Client-mappable resources are supported but not
+        when they are persistent. When memory is attached resource must be
+        unmapped.
+
+    4)  What are the affects on TextureViews?
+
+        RESOLVED: TextureViews inherit the memory state.
+
+    5)  Do bindless resources change?
+
+        RESOLVED: Yes.  The existing handles and GPU addresses become invalid
+        when memory is attached and must be queried afterwards.
+
+    6)  Should we support resources that were migrated to host memory by driver?
+
+        RESOLVED: Yes, but the attached memory is independ from this state.
+
+    7)  Do we need an "attachable" per-resource state?
+
+        RESOLVED: Yes.
+
+    8)  How is bindless residency affected?
+
+        RESOLVED: A memory object becomes resident if at least one attached
+        resource is resident.
+
+
+Revision History
+
+    Revision 2, 2018-08-20 (Carsten Rohde, Christoph Kubisch)
+        - Added spec body describing new commands.
+        - Added non-DSA functions
+        - Resolve issues
+
+    Revision 1, 2018-05-07 (Carsten Rohde, Christoph Kubisch)
+        - Initial draft.
diff --git a/extensions/NV/NV_mesh_shader.txt b/extensions/NV/NV_mesh_shader.txt
new file mode 100644
index 0000000..f415821
--- /dev/null
+++ b/extensions/NV/NV_mesh_shader.txt
@@ -0,0 +1,1082 @@
+Name
+
+    NV_mesh_shader
+
+Name String
+
+    GL_NV_mesh_shader
+
+Contact
+
+    Christoph Kubisch, NVIDIA (ckubisch 'at' nvidia.com)
+    Pat Brown, NVIDIA (pbrown 'at' nvidia.com)
+
+Contributors
+
+    Yury Uralsky, NVIDIA
+    Tyson Smith, NVIDIA
+
+Status
+
+    Shipping
+
+Version
+
+    Last Modified Date:     September 17, 2018
+    NVIDIA Revision:        2
+
+Number
+
+    OpenGL Extension #527
+
+Dependencies
+
+    This extension is written against the OpenGL 4.5 Specification
+    (Compatibility Profile), dated June 29, 2017.
+
+    OpenGL 4.5 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
+    site here:
+
+        https://github.com/KhronosGroup/GLSL
+
+    This extension interacts with ARB_indirect_parameters.
+
+    This extension interacts with NV_command_list.
+
+    This extension interacts with ARB_draw_indirect, EXT_draw_indirect, and
+    NV_vertex_buffer_unified_memory.
+
+    This extension interacts with OVR_multiview
+
+
+Overview
+
+    This extension provides a new mechanism allowing applications to use two
+    new programmable shader types -- the task and mesh shader -- to generate
+    collections of geometric primitives to be processed by fixed-function
+    primitive assembly and rasterization logic.  When the task and mesh
+    shaders are drawn, they replace the standard programmable vertex
+    processing pipeline, including vertex array attribute fetching, vertex
+    shader processing, tessellation, and the geometry shader processing.
+
+New Procedures and Functions
+
+      void DrawMeshTasksNV(uint first, uint count);
+
+      void DrawMeshTasksIndirectNV(intptr indirect);
+
+      void MultiDrawMeshTasksIndirectNV(intptr indirect,
+                                        sizei drawcount,
+                                        sizei stride);
+
+      void MultiDrawMeshTasksIndirectCountNV( intptr indirect,
+                                              intptr drawcount,
+                                              sizei maxdrawcount,
+                                              sizei stride);
+
+New Tokens
+
+    Accepted by the <type> parameter of CreateShader and returned by the
+    <params> parameter of GetShaderiv:
+
+        MESH_SHADER_NV                                      0x9559
+        TASK_SHADER_NV                                      0x955A
+
+    Accepted by the <pname> parameter of GetIntegerv, GetBooleanv, GetFloatv,
+    GetDoublev and GetInteger64v:
+
+        MAX_MESH_UNIFORM_BLOCKS_NV                          0x8E60
+        MAX_MESH_TEXTURE_IMAGE_UNITS_NV                     0x8E61
+        MAX_MESH_IMAGE_UNIFORMS_NV                          0x8E62
+        MAX_MESH_UNIFORM_COMPONENTS_NV                      0x8E63
+        MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV                  0x8E64
+        MAX_MESH_ATOMIC_COUNTERS_NV                         0x8E65
+        MAX_MESH_SHADER_STORAGE_BLOCKS_NV                   0x8E66
+        MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV             0x8E67
+
+        MAX_TASK_UNIFORM_BLOCKS_NV                          0x8E68
+        MAX_TASK_TEXTURE_IMAGE_UNITS_NV                     0x8E69
+        MAX_TASK_IMAGE_UNIFORMS_NV                          0x8E6A
+        MAX_TASK_UNIFORM_COMPONENTS_NV                      0x8E6B
+        MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV                  0x8E6C
+        MAX_TASK_ATOMIC_COUNTERS_NV                         0x8E6D
+        MAX_TASK_SHADER_STORAGE_BLOCKS_NV                   0x8E6E
+        MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV             0x8E6F
+
+        MAX_MESH_WORK_GROUP_INVOCATIONS_NV                  0x95A2
+        MAX_TASK_WORK_GROUP_INVOCATIONS_NV                  0x95A3
+
+        MAX_MESH_TOTAL_MEMORY_SIZE_NV                       0x9536
+        MAX_TASK_TOTAL_MEMORY_SIZE_NV                       0x9537
+
+        MAX_MESH_OUTPUT_VERTICES_NV                         0x9538
+        MAX_MESH_OUTPUT_PRIMITIVES_NV                       0x9539
+
+        MAX_TASK_OUTPUT_COUNT_NV                            0x953A
+
+        MAX_DRAW_MESH_TASKS_COUNT_NV                        0x953D
+
+        MAX_MESH_VIEWS_NV                                   0x9557
+
+        MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV               0x92DF
+        MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV            0x9543
+
+
+    Accepted by the <pname> parameter of GetIntegeri_v, GetBooleani_v,
+    GetFloati_v, GetDoublei_v and GetInteger64i_v:
+
+        MAX_MESH_WORK_GROUP_SIZE_NV                         0x953B
+        MAX_TASK_WORK_GROUP_SIZE_NV                         0x953C
+
+
+    Accepted by the <pname> parameter of GetProgramiv:
+
+        MESH_WORK_GROUP_SIZE_NV                             0x953E
+        TASK_WORK_GROUP_SIZE_NV                             0x953F
+
+        MESH_VERTICES_OUT_NV                                0x9579
+        MESH_PRIMITIVES_OUT_NV                              0x957A
+        MESH_OUTPUT_TYPE_NV                                 0x957B
+
+    Accepted by the <pname> parameter of GetActiveUniformBlockiv:
+
+        UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV          0x959C
+        UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV          0x959D
+
+    Accepted by the <pname> parameter of GetActiveAtomicCounterBufferiv:
+
+        ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV  0x959E
+        ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV  0x959F
+
+    Accepted in the <props> array of GetProgramResourceiv:
+
+        REFERENCED_BY_MESH_SHADER_NV                        0x95A0
+        REFERENCED_BY_TASK_SHADER_NV                        0x95A1
+
+    Accepted by the <programInterface> parameter of GetProgramInterfaceiv,
+    GetProgramResourceIndex, GetProgramResourceName, GetProgramResourceiv,
+    GetProgramResourceLocation, and GetProgramResourceLocationIndex:
+
+        MESH_SUBROUTINE_NV                                  0x957C
+        TASK_SUBROUTINE_NV                                  0x957D
+
+        MESH_SUBROUTINE_UNIFORM_NV                          0x957E
+        TASK_SUBROUTINE_UNIFORM_NV                          0x957F
+
+    Accepted by the <stages> parameter of UseProgramStages:
+
+        MESH_SHADER_BIT_NV                                  0x00000040
+        TASK_SHADER_BIT_NV                                  0x00000080
+
+Modifications to the OpenGL 4.5 Specification (Compatibility Profile)
+
+    Modify Chapter 3, Dataflow Model, p. 33
+
+    (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.
+
+    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
+    active, each task triggers the execution of a task shader work group that
+    will generate a new set of tasks upon completion.  Each of these spawned
+    tasks, or each of the original drawn tasks if no task shader is
+    present, triggers the execution of a mesh shader work group that produces
+    an output mesh with a variable-sized number of primitives assembled from
+    vertices in the output mesh.  The primitives from these output meshes are
+    processed by the rasterization, fragment shader, per-fragment-operations,
+    and framebuffer pipeline stages in the same manner as primitives produced
+    from draw calls sent to the conventional vertex processing pipeline
+    depicted in Figure 3.1.
+
+       Conventional   From Application
+         Vertex             |
+        Pipeline            v
+                       Draw Mesh Tasks     <----- Draw Indirect Buffer
+        (Fig 3.1)           |
+            |           +---+-----+
+            |           |         |
+            |           |         |
+            |           |    Task Shader ---+
+            |           |         |         |
+            |           |         v         |
+            |           |  Task Generation  |     Image Load/Store
+            |           |         |         |     Atomic Counter
+            |           +---+-----+         |<--> Shader Storage
+            |               |               |     Texture Fetch
+            |               v               |     Uniform Block
+            |         Mesh Shader ----------+
+            |               |               |
+            +-------------> +               |
+                            |               |
+                            v               |
+                       Rasterization        |
+                            |               |
+                            v               |
+                      Fragment Shader ------+
+                            |
+                            v
+                  Per-Fragment Operations
+                            |
+                            v
+                      Framebuffer
+
+      Figure 3.2, GL Mesh Processing Pipeline
+
+
+    Modify Chapter 7, Programs and Shaders, p. 84
+
+    (Change the sentence starting with "Shader stages including vertex shaders")
+
+    Shader stages including vertex shaders, tessellation control shaders,
+    tessellation evaluation shaders, geometry shaders, mesh shaders, task
+    shaders, fragment shaders, and compute shaders can be created, compiled, and
+    linked into program objects
+
+    (replace the sentence starting with "A single program
+      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).
+    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
+    when the task shader stage is omitted. Other combinations as well
+    as their subsets are possible.
+
+    Modify Section 7.1, Shader Objects, p. 85
+
+    (add following entries to table 7.1)
+
+        type            | Shader Stage
+       =================|===============
+       TASK_SHADER_NV   | Task shader
+       MESH_SHADER_NV   | Mesh shader
+
+    Modify Section 7.3, Program Objects, p.89
+
+    (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
+      - 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
+      - the program is not separable and contains no objects to form a mesh
+        shader.
+
+    Modify Section 7.3.1 Program Interfaces, p.96
+
+    (add to the list starting with VERTEX_SUBROUTINE, after GEOMETRY_SUBROUTINE)
+
+    TASK_SUBROUTINE_NV, MESH_SUBROUTINE_NV,
+
+    (add to the list starting with VERTEX_SUBROUTINE_UNIFORM, after
+    GEOMETRY_SUBROUTINE_UNIFORM)
+
+    TASK_SUBROUTINE_UNIFORM_NV, MESH_SUBROUTINE_UNIFORM_NV,
+
+    (add to the list of errors for GetProgramInterfaceiv, p 102,
+    after GEOMETRY_SUBROUTINE_UNIFORM)
+
+    TASK_SUBROUTINE_UNIFORM_NV, MESH_SUBROUTINE_UNIFORM_NV,
+
+    (modify entries for table 7.2 for GetProgramResourceiv, p. 105)
+
+      Property                          |   Supported Interfaces
+      ==================================|=================================
+      ARRAY_SIZE                        | ..., TASK_SUBROUTINE_UNIFORM_NV,
+                                        | MESH_SUBROUTINE_UNIFORM_NV
+      ----------------------------------|-----------------------------
+      NUM_COMPATIBLE_SUBROUTINES,       | ..., TASK_SUBROUTINE_UNIFORM_NV,
+      COMPATIBLE_SUBROUTINES            | MESH_SUBROUTINE_UNIFORM_NV
+      ----------------------------------|-----------------------------
+      LOCATION                          |
+      ----------------------------------|-----------------------------
+      REFERENCED_BY_VERTEX_SHADER, ...  | ATOMIC_COUNTER_BUFFER, ...
+      REFERENCED_BY_TASK_SHADER_NV,     |
+      REFERENCED_BY_MESH_SHADER_NV      |
+      ----------------------------------|-----------------------------
+
+    (add to list of the sentence starting with "For the properties
+    REFERENCED_BY_VERTEX_SHADER", after REFERENCED_BY_GEOMETRY_SHADER, p. 108)
+
+    REFERENCED_BY_TASK_SHADER_NV, REFERENCED_BY_MESH_SHADER_NV
+
+    (for the description of GetProgramResourceLocation and
+    GetProgramResourceLocationIndex, add to the list of the sentence
+    starting with "For GetProgramResourceLocation, programInterface must
+    be one of UNIFORM,", after GEOMETRY_SUBROUTINE_UNIFORM, p. 114)
+
+    TASK_SUBROUTINE_UNIFORM_NV, MESH_SUBROUTINE_UNIFORM_NV,
+
+    Modify Section 7.4, Program Pipeline Objects, p. 115
+
+    (modify the first paragraph, p. 118, to add new shader stage bits for mesh
+     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
+    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,
+    TESS_EVALUATION_SHADER_BIT, GEOMETRY_SHADER_BIT, FRAGMENT_SHADER_BIT,
+    MESH_SHADER_BIT_NV, and TASK_SHADER_BIT_NV, respectively.  The constant
+    ALL_SHADER_BITS indicates <program> is to be made current for all shader
+    stages.
+
+    (modify the first error in "Errors" for UseProgramStages, p. 118 to allow
+     the use of mesh and task shader bits)
+
+      An INVALID_VALUE error is generated if stages is not the special value
+      ALL_SHADER_BITS, and has any bits set other than VERTEX_SHADER_BIT,
+      COMPUTE_SHADER_BIT, TESS_CONTROL_SHADER_BIT, TESS_EVALUATION_SHADER_BIT,
+      GEOMETRY_SHADER_BIT, FRAGMENT_SHADER_BIT, MESH_SHADER_BIT_NV, and
+      TASK_SHADER_BIT_NV.
+
+
+    Modify Section 7.6, Uniform Variables, p. 125
+
+    (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
+
+    (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
+
+    (add entries to table 7.7, p. 131)
+
+      pname                                      | prop
+      ===========================================|=============================
+      UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV | REFERENCED_BY_TASK_SHADER_NV
+      UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV | REFERENCED_BY_MESH_SHADER_NV
+
+    (add entries to table 7.8, p. 132)
+
+      pname                                      | prop
+      ===========================================|=============================
+      ATOMIC_COUNTER_BUFFER_REFERENCED_-         | REFERENCED_BY_TASK_SHADER_NV
+      BY_TASK_SHADER_NV                          |
+      -------------------------------------------|-----------------------------
+      ATOMIC_COUNTER_BUFFER_REFERENCED_-         | REFERENCED_BY_MESH_SHADER_NV
+      BY_MESH_SHADER_NV                          |
+
+    (modify the sentence starting with "The limits for vertex" in 7.6.2
+    Uniform Blocks, p. 136)
+    ... geometry, task, mesh, fragment...
+    MAX_GEOMETRY_UNIFORM_BLOCKS, MAX_TASK_UNIFORM_BLOCKS_NV, MAX_MESH_UNIFORM_-
+    BLOCKS_NV, MAX_FRAGMENT_UNIFORM_BLOCKS...
+
+    (modify the sentence starting with "The limits for vertex", in
+    7.7 Atomic Counter Buffers, p. 141)
+
+    ... geometry, task, mesh, fragment...
+    MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS, MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV,
+    MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV, MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS, ...
+
+
+    Modify Section 7.8 Shader Buffer Variables and Shader Storage Blocks, p. 142
+
+    (modify the sentences starting with "The limits for vertex", p. 143)
+
+    ... geometry, task, mesh, fragment...
+    MAX_GEOMETRY_SHADER_STORAGE_BLOCKS, MAX_TASK_SHADER_STORAGE_BLOCKS_NV,
+    MAX_MESH_SHADER_STORAGE_BLOCKS_NV, MAX_FRAGMENT_SHADER_STORAGE_BLOCKS,...
+
+    Modify Section 7.9 Subroutine Uniform Variables, p. 144
+
+    (modify table 7.9, p. 145)
+
+      Interface           | Shader Type
+      ====================|===============
+      TASK_SUBROUTINE_NV  | TASK_SHADER_NV
+      MESH_SUBROUTINE_NV  | MESH_SHADER_NV
+
+    (modify table 7.10, p. 146)
+
+      Interface                   | Shader Type
+      ============================|===============
+      TASK_SUBROUTINE_UNIFORM_NV  | TASK_SHADER_NV
+      MESH_SUBROUTINE_UNIFORM_NV  | MESH_SHADER_NV
+
+
+    Modify Section 7.13 Shader, Program, and Program Pipeline Queries, p. 157
+
+    (add to the list of queries for GetProgramiv, p. 157)
+
+      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.
+      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.
+      If <pname> is MESH_VERTICES_OUT_NV, the maximum number of vertices the
+    mesh shader (see section 13) 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.
+      If <pname> is MESH_OUTPUT_TYPE_NV, the mesh shader output type,
+    which must be one of POINTS, LINES or TRIANGLES, is returned.
+
+    (add to the list of errors for GetProgramiv, p. 159)
+
+      An INVALID_OPERATION error is generated if TASK_WORK_-
+    GROUP_SIZE is queried for a program which has not been linked successfully,
+    or which does not contain objects to form a task shader.
+      An INVALID_OPERATION error is generated if MESH_VERTICES_OUT_NV,
+    MESH_PRIMITIVES_OUT_NV, MESH_OUTPUT_TYPE_NV, or MESH_WORK_GROUP_SIZE_NV
+    are queried for a program which has not been linked
+    successfully, or which does not contain objects to form a mesh shader.
+
+
+    Add new language extending the edits to Section 9.2.8 (Attaching Textures
+    to a Framebuffer) from the OVR_multiview extension that describe how
+    various drawing commands are processed for when multiview rendering is
+    enabled:
+
+    When multiview rendering is enabled, the DrawMeshTasks* commands (section
+    13.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
+    single value written for each vertex or primitive will be used for the
+    output when processing each view.  For mesh shader outputs qualified with
+    "perviewNV", the output is arrayed and the mesh shader is responsible for
+    writing separate values for each view.  When processing output primitives
+    for a view numbered <V>, outputs qualified with "perviewNV" will assume
+    the values for array element <V>.
+
+
+    Modify Section 10.3.11 Indirect Commands in Buffer Objects, p. 400
+
+    (after "and to DispatchComputeIndirect (see section 19)" add)
+
+    and to DrawMeshTasksIndirectNV, MultiDrawMeshTasksIndirectNV,
+    MultiDrawMeshTasksIndirectCountNV (see section 13)
+
+    (add following entries to the table 10.7)
+
+      Indirect Command Name               | Indirect Buffer target
+      ====================================|========================
+      DrawMeshTasksIndirectNV             | DRAW_INDIRECT_BUFFER
+      MultiDrawMeshTasksIndirectNV        | DRAW_INDIRECT_BUFFER
+      MultiDrawMeshTasksIndirectCountNV   | DRAW_INDIRECT_BUFFER
+
+
+    Modify Section 11.1.3 Shader Execution, p. 437
+
+    (add after the first paragraph in section 11.1.3, p 437)
+
+    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).
+
+    (add to the list of constants, 11.1.3.5 Texture Access, p. 441)
+
+    * MAX_TASK_TEXTURE_IMAGE_UNITS_NV (for task shaders)
+
+    * MAX_MESH_TEXTURE_IMAGE_UNITS_NV (for mesh shaders)
+
+    (add to the list of constants, 11.1.3.6 Atomic Counter Access, p. 443)
+
+    * MAX_TASK_ATOMIC_COUNTERS_NV (for task shaders)
+
+    * MAX_MESH_ATOMIC_COUNTERS_NV (for mesh shaders)
+
+    (add to the list of constants, 11.1.3.7 Image Access, p. 444)
+
+    * MAX_TASK_IMAGE_UNIFORMS_NV (for task shaders)
+
+    * MAX_MESH_IMAGE_UNIFORMS_NV (for mesh shaders)
+
+    (add to the list of constants, 11.1.3.8 Shader Storage Buffer Access,
+     p. 444)
+
+    * MAX_TASK_SHADER_STORAGE_BLOCKS_NV (for task shaders)
+
+    * MAX_MESH_SHADER_STORAGE_BLOCKS_NV (for mesh shaders)
+
+    (modify the sentence of 11.3.10 Shader Outputs, p. 445)
+
+    A vertex and mesh shader can write to ...
+
+
+
+    Insert new chapter before Chapter 13, Fixed-Function Vertex
+    Post-Processing, p. 505
+
+    Chapter 13, Programmable Mesh Processing
+
+    In addition to the programmable vertex processing pipeline described in
+    Chapters 10 and 11 [[compatibility profile only:  and the fixed-function
+    vertex processing pipeline in Chapter 12]], applications may use the mesh
+    pipeline to generate primitives for rasterization.  The mesh pipeline
+    generates a collection of meshes using the programmable task and mesh
+    shaders.  Task and mesh shaders are created as described in section 7.1
+    using a type parameter of TASK_SHADER_NV and MESH_SHADER_NV, respectively.
+    They are attached to and used in program objects as described in section
+    7.3.
+
+    Mesh and task shader workloads are formed from groups of work items called
+    work groups and processed by the executable code for a mesh or task shader
+    program.  A work group is a collection of shader invocations that execute
+    the same code, potentially in parallel.  An invocation within a work group
+    may share data with other members of the same work group through shared
+    variables (see section 4.3.8, "Shared Variables", of the OpenGL Shading
+    Language Specification) and issue memory and control barriers to
+    synchronize with other members of the same work group.
+
+    13.1 Task Shader Variables
+
+    Task shaders can access uniform variables belonging to the current
+    program object. Limits on uniform storage and methods for manipulating
+    uniforms are described in section 7.6.
+
+    There is a limit to the total amount of memory consumed by output
+    variables in a single task shader work group.  This limit, expressed in
+    basic machine units, may be queried by calling GetIntegerv with the value
+    MAX_TASK_TOTAL_MEMORY_SIZE_NV.
+
+    13.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
+    number can be queried by GetIntergev using MAX_TASK_OUTPUT_COUNT_NV.
+
+    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
+
+    Mesh shaders can access uniform variables belonging to the current
+    program object. Limits on uniform storage and methods for manipulating
+    uniforms are described in section 7.6.
+    There is a limit to the total size of all variables declared as shared
+    as well as output attributes in a single mesh stage. This limit, expressed
+    in units of basic machine units, may be queried as the value of
+    MAX_MESH_TOTAL_MEMORY_SIZE_NV.
+
+    13.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
+    task shader outputs (qualified with "taskNV") written the task shader that
+    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
+
+    When each mesh shader work group completes, it emits an output mesh
+    consisting of
+
+    * a primitive count, written to the built-in output gl_PrimitiveCountNV;
+
+    * a collection of vertex attributes, where each vertex in the mesh has a
+      set of built-in and user-defined per-vertex output variables and blocks;
+
+    * a collection of per-primitive attributes, where each of the
+      gl_PrimitiveCountNV primitives in the mesh has a set of built-in and
+      user-defined per-primitive output variables and blocks; and
+
+    * an array of vertex index values written to the built-in output array
+      gl_PrimitiveIndicesNV, where each output primitive has a set of one,
+      two, or three indices that identify the output vertices in the mesh used
+      to form the primitive.
+
+    This data is used to generate primitives of one of three types. The
+    supported output primitive types are points (POINTS), lines (LINES), and
+    triangles (TRIANGLES). The vertices output by the mesh shader are assembled
+    into points, lines, or triangles based on the output primitive type in the
+    DrawElements manner described in section 10.4, with the
+    gl_PrimitiveIndicesNV array content serving as index values, and the
+    local vertex attribute arrays as vertex arrays.
+
+    The output arrays are sized depending on the compile-time provided
+    values ("max_vertices" and "max_primitives"), which must be below
+    their appropriate maxima that can be queried via GetIntegerv and
+    MAX_MESH_OUTPUT_PRIMITIVES_NV as well as MAX_MESH_OUTPUT_VERTICES_NV.
+
+    The output attributes are allocated at an implementation-dependent
+    granularity that can be queried via MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV
+    and MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV.  The total amount of memory
+    consumed for per-vertex and per-primitive output variables must not exceed
+    an implementation-dependent total memory limit that can be queried by
+    calling GetIntegerv with the enum MAX_MESH_TOTAL_MEMORY_SIZE_NV.  The
+    memory consumed by the gl_PrimitiveIndicesNV[] array does not count
+    against this limit.
+
+    13.6 Mesh Tasks Drawing Commands
+
+    One or more work groups is launched by calling
+
+      void DrawMeshTasksNV( uint first, uint count );
+
+    If there is an active program object for the task shader stage,
+    <count> work groups are processed by the active program for the task
+    shader stage. If there is no active program object for the task shader
+    stage, <count> work groups are instead processed by the active
+    program for the mesh shader stage.  The active program for both shader
+    stages will be determined in the same manner as the active program for other
+    pipeline stages, as described in section 7.3. While the individual shader
+    invocations within a work group are executed as a unit, work groups are
+    executed completely independently and in unspecified order.
+    The x component of gl_WorkGroupID of the first active stage  will be within
+    the range of [<first> , <first + count - 1>]. The y and z component of
+    gl_WorkGroupID within all stages will be set to zero.
+
+    The maximum number of task or mesh shader work groups that
+    may be dispatched at one time may be determined by calling GetIntegerv
+    with <target> set to MAX_DRAW_MESH_TASKS_COUNT_NV.
+
+    The local work size in each dimension is specified at compile time using
+    an input layout qualifier in one or more of the task or mesh shaders
+    attached to the program; see the OpenGL Shading Language Specification for
+    more information.  After the program has been linked, the local work group
+    size of the task or mesh shader may be queried by calling GetProgramiv
+    with <pname> set to TASK_WORK_GROUP_SIZE_NV or MESH_WORK_GROUP_SIZE_NV, as
+    described in section 7.13.
+
+    The maximum size of a task or mesh shader local work group may be
+    determined by calling GetIntegeri_v with <target> set to
+    MAX_TASK_WORK_GROUP_SIZE_NV or MAX_MESH_WORK_GROUP_SIZE_NV, and <index>
+    set to 0, 1, or 2 to retrieve the maximum work size in the X, Y and Z
+    dimension, respectively.  Furthermore, the maximum number of invocations
+    in a single local work group (i.e., the product of the three dimensions)
+    may be determined by calling GetIntegerv with pname set to
+    MAX_TASK_WORK_GROUP_INVOCATIONS_NV or MAX_MESH_WORK_GROUP_INVOCATIONS_NV.
+
+      Errors
+
+        An INVALID_OPERATION error is generated if there is no active
+        program for the mesh shader stage.
+
+        An INVALID_VALUE error is generated if <count> exceeds
+        MAX_DRAW_MESH_TASKS_COUNT_NV.
+
+
+    If there is an active program on the task shader stage, each task shader
+    work group writes a task count to the built-in task shader output
+    gl_TaskCountNV.  If this count is non-zero upon completion of the task
+    shader, then gl_TaskCountNV work groups are generated and processed by the
+    active program for the mesh shader stage.  If this count is zero, no work
+    groups are generated.  If the count is greater than MAX_TASK_OUTPUT_COUNT_NV
+    the number of mesh shader work groups generated is undefined.
+    The built-in variables available to the generated mesh shader work groups
+    are identical to those that would be generated if DrawMeshTasksNV were
+    called with no task shader active and with a <count> of gl_TaskCountNV.
+
+    The primitives of the mesh are then processed by the pipeline stages
+    described in subsequent chapters in the same manner as primitives produced
+    by the conventional vertex processing pipeline described in previous
+    chapters.
+
+    The command
+
+      void DrawMeshTasksIndirectNV(intptr indirect);
+
+      typedef struct {
+        uint count;
+        uint first;
+      } DrawMeshTasksIndirectCommandNV;
+
+    is equivalent to calling DrawMeshTasksNV with the parameters sourced from a
+    a DrawMeshTasksIndirectCommandNV struct stored in the buffer currently
+    bound to the DRAW_INDIRECT_BUFFER binding at an offset, in basic machine
+    units, specified by <indirect>.  If the <count> read from the indirect
+    draw buffer is greater than MAX_DRAW_MESH_TASKS_COUNT_NV, then the results
+    of this command are undefined.
+
+      Errors
+
+        An INVALID_OPERATION error is generated if there is no active program
+        for the mesh shader stage.
+
+        An INVALID_VALUE error is generated if <indirect> is negative or is
+        not a multiple of the size, in basic machine units, of uint.
+
+        An INVALID_OPERATION error is generated if the command would source
+        data beyond the end of the buffer object.
+
+        An INVALID_OPERATION error is generated if zero is bound to the
+        DRAW_INDIRECT_BUFFER binding.
+
+    The command
+
+      void MultiDrawMeshTasksIndirectNV(intptr indirect,
+                                        sizei drawcount,
+                                        sizei stride);
+
+    behaves identically to DrawMeshTasksIndirectNV, except that <indirect> is
+    treated as an array of <drawcount> DrawMeshTasksIndirectCommandNV
+    structures.    <indirect> contains the offset of the first element of the
+    array within the buffer currently bound to the DRAW_INDIRECT buffer
+    binding. <stride> specifies the distance, in basic machine units, between
+    the elements of the array. If <stride> is zero, the array elements are
+    treated as tightly packed. <stride> must be a multiple of four, otherwise
+    an INVALID_VALUE error is generated.
+
+    <drawcount> must be positive, otherwise an INVALID_VALUE error will be
+    generated.
+
+      Errors
+
+        In addition to errors that would be generated by
+        DrawMeshTasksIndirect:
+
+        An INVALID_VALUE error is generated if <stride> is neither zero nor a
+        multiple of four.
+
+        An INVALID_VALUE error is generated if <stride> is non-zero and less
+        than the size of DrawMeshTasksIndirectCommandNV.
+
+        An INVALID_VALUE error is generated if <drawcount> is not positive.
+
+    The command
+
+      void MultiDrawMeshTasksIndirectCountNV( intptr indirect,
+                                              intptr drawcount,
+                                              sizei maxdrawcount,
+                                              sizei stride);
+
+    behaves similarly to MultiDrawMeshTasksIndirectNV, except that <drawcount>
+    defines an offset (in bytes) into the buffer object bound to the
+    PARAMETER_BUFFER_ARB binding point at which a single <sizei> typed value
+    is stored, which contains the draw count. <maxdrawcount> specifies the
+    maximum number of draws that are expected to be stored in the buffer.
+    If the value stored at <drawcount> into the buffer is greater than
+    <maxdrawcount>, an implementation stop processing draws after
+    <maxdrawcount> parameter sets.
+
+      Errors
+
+        In addition to errors that would be generated by
+        MultiDrawMeshTasksIndirectNV:
+
+        An INVALID_OPERATION error is generated if no buffer is bound to the
+        PARAMETER_BUFFER binding point.
+
+        An INVALID_VALUE error is generated if <drawcount> (the offset of the
+        memory holding the actual draw count) is not a multiple of four.
+
+        An INVALID_OPERATION error is generated if reading a sizei typed value
+        from the buffer bound to the PARAMETER_BUFFER target at the offset
+        specified by drawcount would result in an out-of-bounds access.
+
+
+New Implementation Dependent State
+
+    Add to Table 23.43, "Program Object State"
+
+    +----------------------------------------------------+-----------+-------------------------+---------------+--------------------------------------------------------+---------+
+    | Get Value                                          | Type      | Get Command             | Initial Value | Description                                            | Sec.    |
+    +----------------------------------------------------+-----------+-------------------------+---------------+--------------------------------------------------------+---------+
+    | TASK_WORK_GROUP_SIZE_NV                            | 3 x Z+    | GetProgramiv            | { 0, ... }    | Local work size of a linked mesh stage                 | 7.13    |
+    | MESH_WORK_GROUP_SIZE_NV                            | 3 x Z+    | GetProgramiv            | { 0, ... }    | Local work size of a linked task stage                 | 7.13    |
+    | MESH_VERTICES_OUT_NV                               | Z+        | GetProgramiv            | 0             | max_vertices size of a linked mesh stage               | 7.13    |
+    | MESH_PRIMITIVES_OUT_NV                             | Z+        | GetProgramiv            | 0             | max_primitives size of a linked mesh stage             | 7.13    |
+    | MESH_OUTPUT_TYPE_NV                                | Z+        | GetProgramiv            | POINTS        | Primitive output type of a linked mesh stage           | 7.13    |
+    | UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV         | B         | GetActiveUniformBlockiv | FALSE         | True if uniform block is referenced by the task stage  | 7.6.2   |
+    | UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV         | B         | GetActiveUniformBlockiv | FALSE         | True if uniform block is referenced by the mesh stage  | 7.6.2   |
+    | ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV | B         | GetActiveAtomicCounter- | FALSE         | AACB has a counter used by task shaders                | 7.7     |
+    |                                                    |           | Bufferiv                |               |                                                        |         |
+    | ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV | B         | GetActiveAtomicCounter- | FALSE         | AACB has a counter used by mesh shaders                | 7.7     |
+    |                                                    |           | Bufferiv                |               |                                                        |         |
+    +----------------------------------------------------+-----------+-------------------------+---------------+--------------------------------------------------------+---------+
+
+    Add to Table 23.53, "Program Object Resource State"
+
+    +----------------------------------------------------+-----------+-------------------------+---------------+--------------------------------------------------------+---------+
+    | Get Value                                          | Type      | Get Command             | Initial Value | Description                                            | Sec.    |
+    +----------------------------------------------------+-----------+-------------------------+---------------+--------------------------------------------------------+---------+
+    | REFERENCED_BY_TASK_SHADER_NV                       | Z+        | GetProgramResourceiv    | -             | Active resource used by task shader                    |  7.3.1  |
+    | REFERENCED_BY_MESH_SHADER_NV                       | Z+        | GetProgramResourceiv    | -             | Active resource used by mesh shader                    |  7.3.1  |
+    +----------------------------------------------------+-----------+-------------------------+---------------+--------------------------------------------------------+---------+
+
+    Add to Table 23.67, "Implementation Dependent Values"
+
+    +------------------------------------------+-----------+---------------+---------------------+-----------------------------------------------------------------------+--------+
+    | 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   |
+    |                                          |           |               |                     | 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   |
+    +------------------------------------------+-----------+---------------+---------------------+-----------------------------------------------------------------------+--------+
+
+    Insert Table 23.75, "Implementation Dependent Task Shader Limits"
+
+    +-----------------------------------------+-----------+---------------+---------------------+-----------------------------------------------------------------------+----------+
+    | 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_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      |
+    | MAX_TASK_ATOMIC_COUNTERS_NV             | Z+        | GetIntegerv   | 8                   | Number of atomic counters accessed by a task program                  | 11.1.3.6 |
+    | MAX_TASK_IMAGE_UNIFORMS_NV              | Z+        | GetIntegerv   | 8                   | Number of image variables in task program                             | 11.1.3.7 |
+    | MAX_TASK_SHADER_STORAGE_BLOCKS_NV       | Z+        | GetIntegerv   | 12                  | Maximum number of storage buffer blocks per task program              | 7.8      |
+    | 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     |
+    |                                         |           |               |                     | <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     |
+    |                                         |           |               |                     | work group can emit                                                   |          |
+    +-----------------------------------------+-----------+---------------+---------------------+-----------------------------------------------------------------------+----------+
+
+    Insert Table 23.76, "Implementation Dependent Mesh Shader Limits",
+    renumber subsequent tables.
+
+    +-----------------------------------------+-----------+---------------+---------------------+-----------------------------------------------------------------------+----------+
+    | 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_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      |
+    | MAX_MESH_ATOMIC_COUNTERS_NV             | Z+        | GetIntegerv   | 8                   | Number of atomic counters accessed by a mesh shader                   | 11.1.3.6 |
+    | MAX_MESH_IMAGE_UNIFORMS_NV              | Z+        | GetIntegerv   | 8                   | Number of image variables in mesh shaders                             | 11.1.3.7 |
+    | MAX_MESH_SHADER_STORAGE_BLOCKS_NV       | Z+        | GetIntegerv   | 12                  | Maximum number of storage buffer blocks per task program              | 7.8      |
+    | 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     |
+    |                                         |           |               |                     | <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_VIEWS_NV                       | Z+        | GetIntegerv   | 1                   | Maximum number of multi-view views that can be used in a mesh shader  |          |
+    +-----------------------------------------+-----------+---------------+---------------------+-----------------------------------------------------------------------+----------+
+
+
+Interactions with ARB_indirect_parameters
+
+    If ARB_indirect_parameters is not supported, remove the
+    MultiDrawMeshTasksIndirectCountNV function.
+
+Interactions with NV_command_list
+
+    Modify the subsection 10.X.1 State Objects
+
+    (add after the first paragraph of the description of the StateCaptureNV
+    command)
+
+    When programs with active mesh or task stages are used, the
+    base primitive mode must be set to GL_POINTS.
+
+    (add to the list of errors)
+
+    INVALID_OPERATION is generated if <basicmode> is not GL_POINTS
+    when the mesh or task shaders are active.
+
+    Modify subsection 10.X.2 Drawing with Commands
+
+    (add a new paragraph before "None of the commands called by")
+
+    When mesh or task shaders are active the DRAW_ARRAYS_COMMAND_NV
+    must be used to draw mesh tasks. The fields of the
+    DrawArraysCommandNV will be interpreted as follows:
+
+      DrawMeshTasksNV(cmd->first, cmd->count);
+
+Interactions with ARB_draw_indirect, EXT_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:
+
+        While DRAW_INDIRECT_UNIFIED_NV is enabled, DrawMeshTasksIndirectNV
+        sources its arguments from the address specified by the command
+        BufferAddressRange where <pname> is DRAW_INDIRECT_ADDRESS_NV and
+        <index> is zero, added to the <indirect> parameter.   If the draw
+        indirect address range does not belong to a buffer object that is
+        resident at the time of the Draw, undefined results, possibly
+        including program termination, may occur.
+
+    Additionally, the errors specified for DRAW_INDIRECT_BUFFER accesses for
+    DrawMeshTasksIndirectNV are modified as follows:
+
+        An INVALID_OPERATION error is generated if DRAW_INDIRECT_UNIFIED_NV is
+        disabled and zero is bound to the DRAW_INDIRECT_BUFFER binding.
+
+        An INVALID_OPERATION error is generated if DRAW_INDIRECT_UNIFIED_NV is
+        disabled and the command would source data beyond the end of the
+        DRAW_INDIRECT_BUFFER binding.
+
+        An INVALID_OPERATION error is generated if DRAW_INDIRECT_UNIFIED_NV is
+        enabled and the command would source data beyond the end of the
+        DRAW_INDIRECT_ADDRESS_NV buffer address range.
+
+
+Interactions with OVR_multiview
+
+    Modify the new section "9.2.2.2 (Multiview Images)"
+
+    (insert a new entry to the list following
+     "In this mode there are several restrictions:")
+
+     - in mesh shaders only the appropriate per-view outputs are
+       used.
+
+Issues
+
+    (1) Should we use a new command to specify work to be processed by task
+        and mesh shaders?
+
+      RESOLVED:  Yes.  Using a separate draw call helps to clearly
+      differentiate task and mesh shader processing for the existing vertex
+      processing performed by the standard OpenGL vertex processing pipeline
+      with its vertex, tessellation, and geometry shaders.
+
+    (2) What name should we use for the draw calls that spawn task and mesh
+    shaders?
+
+      RESOLVED:  For basic draws, we use the following command:
+
+        void DrawMeshTasksNV(uint first, uint count);
+
+      The first <first> and <count> parameters specifying a range of mesh task
+      numbers to process by the task and/or mesh shaders.
+
+      Since the programming model of mesh and task shaders is very similar to
+      that of compute shaders, we considered using an interface similar to
+      DispatchCompute(), such as:
+
+        void DrawWorkGroupsNV(uint num_groups_x, uint num_groups_y,
+                              uint num_groups_z);
+
+      We ultimately decided to not use such a generic name.  It might be
+      useful in the future to give compute shaders the ability to spawn
+      "draws" in the future, and it's not clear that the programming model for
+      such a design would look anything like mesh and task shaders.
+
+      The existing graphics draw calls DrawArrays() and DrawElements()
+      directly or indirectly refer to elements of a vertex array.  Since the
+      programming model here spawns generic work that ultimately produces a
+      set of (likely connected) output primitives, we use the word "mesh" to
+      refer to the output of this pipeline and "tasks" to refer to the fact
+      that the draw call is spawning generic work groups to produce such these
+      "meshes".
+
+      NOTE:  In order to minimize divergence from the programming model for
+      compute shaders, mesh shaders use the same three-dimensional local work
+      group concept used by compute shaders.  However, the hardware used for
+      task and mesh shaders is more limited and supports only one-dimensional
+      work groups.  We decided to only use one "dimension" in the draw call to
+      keep the API simple and reflect the limitation.
+
+    (3) Should we be able to dispatch a range of work groups that doesn't
+        start at zero?
+
+      RESOLVED:  Yes.  When porting application code from using regular vertex
+      processing to mesh shader processing, the use of an implicit offset via
+      the <first> parameter should be helpful as it is in standard DrawArrays
+      calls.  We think it's likely that applications will store information
+      about tasks to process in a single array with global task numbers.  In
+      this case, the draw call with an offset allows applications to specify a
+      range of this array of tasks to process.
+
+    (4) Should we support separable program objects with mesh and task
+        shaders, where one program provides a task shader and a second
+        program provides a mesh shader that interfaces with it?
+
+      RESOLVED:  Yes.  Supporting separable program objects is not difficult
+      and may be useful in some cases.  For example, one might use a single
+      task shader that could be used for common processing of different types
+      of geometry (e.g., evaluating visibililty via a bounding box) while
+      using different mesh shaders to generate different types of primitives.
+
+    (5) Should we have queryable limits on the total amount of output memory
+        consumed by mesh or task shaders?
+
+      RESOLVED:  Yes.  We have implementation-dependent limits on the total
+      amount of output memory consumed by mesh and task shaders that can be
+      queried using MAX_MESH_TOTAL_MEMORY_SIZE_NV and
+      MAX_TASK_TOTAL_MEMORY_SIZE_NV.  For each per-vertex or per-primitive
+      output attribute in a mesh shader, memory is allocated separately for
+      each vertex or primitive allocated by the shader.  The total number of
+      vertices or primitives used for this allocation is determined by taking
+      the maximum vertex and primitive counts declared in the mesh shader and
+      padding to implementation-dependent granularities that can be queried
+      using MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV and
+      MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV.
+
+    (6) Should we have any MultiDrawMeshTasksIndirectNV, to draw
+        multiple sets of mesh tasks in one call?
+
+      RESOLVED:   Yes, we support "multi-draw" APIs to for consistency with
+      the standard vertex pipeline.  When using these APIs, each individual
+      "draw" has its own structure stored in a buffer object.  If mesh or task
+      shaders need to determine which draw is being processed, the built-in
+      gl_DrawIDARB can be used for that purpose.
+
+    (7) Do we support transform feedback with mesh shaders?
+
+      RESOLVED:  No.  In the initial implementation of this extension, the
+      hardware doesn't support it.
+
+    (8) When using multi-view (OVR_multiview), how do we broadcast the
+        primitive to multiple layers or viewports?
+
+      RESOLVED:  When the OVR_multiview extension is enabled in a vertex
+      shader, the layout qualifier:
+
+          layout(num_views = 2) in;
+
+      indicates that the vertex shader should be run separately for two views,
+      where the shader can use the built-in input gl_ViewIDOVR to determine
+      which view is being processed.  A separate set of primitives is
+      generated for each view, and each is rasterized into a separate
+      framebuffer layer.
+
+      When the "num_views" layout qualifier for the OVR_multiview extension is
+      enabled in a mesh shader, the semantics are slightly different.  Instead
+      of running a separate mesh shader invocation for each view, a single
+      invocation is generated to process all views.  The view count from the
+      layout qualifier indicates the size of the extra array dimension for
+      "arrayed" per-vertex and per-primitive outputs qualified with
+      "perviewNV".  The set of primitives generated by the mesh shader will be
+      broadcast separately to each view.  For per-vertex or per-primitive
+      outputs not qualified with "perviewNV", the single value written by the
+      mesh shader for each vertex/primitive will be used for each view.  For
+      outputs qualified with "perviewNV", each view will use a separate value
+      from the corresponding "arrayed" output.
+
+    (9) Should we support NV_gpu_program5-style assembly programs for mesh
+        and task shaders?
+
+      RESOLVED:  No.  We do provide a GLSL extension, also called
+      "GL_NV_mesh_shader".
+
+    Also, please refer to issues in the GLSL extension specification.
+
+Revision History
+
+    Revision 2, September 17, 2018 (pbrown)
+    - Prepare specification for publication.
+
+    Revision 1 (ckubsich)
+    - Internal revisions.
diff --git a/extensions/NV/NV_representative_fragment_test.txt b/extensions/NV/NV_representative_fragment_test.txt
new file mode 100644
index 0000000..7b13a8a
--- /dev/null
+++ b/extensions/NV/NV_representative_fragment_test.txt
@@ -0,0 +1,180 @@
+Name
+
+    NV_representative_fragment_test
+
+Name Strings
+
+    GL_NV_representative_fragment_test
+
+Contacts
+
+    Christoph Kubisch, NVIDIA Corporation (ckubisch 'at' nvidia.com)
+    Kedarnath Thangudu, NVIDIA Corporation (kthangudu 'at' nvidia.com)
+
+Contributors
+
+    Jeff Bolz, NVIDIA Corporation
+    Pat Brown, NVIDIA Corporation
+    Eric Werness, NVIDIA Corporation
+
+Status
+
+    Shipping
+
+Version
+
+    Last Modified Date:     September 15, 2018
+    NVIDIA Revision:        2
+
+Number
+
+    OpenGL Extension #528
+
+Dependencies
+
+    This extension is written against the OpenGL 4.6 Specification
+    (Compatibility Profile), dated May 14, 2018.
+
+    OpenGL 4.5 is required.
+
+Overview
+
+    This extension provides a new _representative fragment test_ that allows
+    implementations to reduce the amount of rasterization and fragment
+    processing work performed for each point, line, or triangle primitive. For
+    any primitive that produces one or more fragments that pass all other
+    early fragment tests, the implementation is permitted to choose one or
+    more "representative" fragments for processing and discard all other
+    fragments. For draw calls rendering multiple points, lines, or triangles
+    arranged in lists, strips, or fans, the representative fragment test is
+    performed independently for each of those primitives.
+
+    This extension is useful for applications that use an early render pass
+    to determine the full set of primitives that would be visible in the final
+    scene. In this render pass, such applications would set up a fragment
+    shader that enables early fragment tests and writes to an image or shader
+    storage buffer to record the ID of the primitive that generated the
+    fragment. Without this extension, the shader would record the ID
+    separately for each visible fragment of each primitive. With this
+    extension, fewer stores will be performed, particularly for large
+    primitives.
+
+    The representative fragment test has no effect if early fragment tests are
+    not enabled via the fragment shader. The set of fragments discarded by the
+    representative fragment test is implementation-dependent and may vary from
+    frame to frame. In some cases, the representative fragment test may not
+    discard any fragments for a given primitive.
+
+
+New Procedures and Functions
+
+    None
+
+New Tokens
+
+    Accepted by the <cap> parameter of Enable, Disable, and IsEnabled,
+    and by the <pname> parameter of GetBooleanv, GetIntegerv,
+    GetFloatv, and GetDoublev:
+
+        REPRESENTATIVE_FRAGMENT_TEST_NV       0x937F
+
+Modifications to the OpenGL 4.6 Specification (Compatibility Profile)
+
+    Modify Section 14.9, Early Per-Fragment Tests (p. 578)
+
+    (modify second pararaph of the section, p. 578, to document that there are
+     now four optional early fragment tests)
+
+    Three fragment operations are performed, and a further four are
+    optionally performed on each fragment, ...
+
+    (modify the last paragraph, p. 578, to list the new early fragment test)
+
+    If early per-fragment operations are enabled, these tests are also
+    performed:
+
+        * the stencil test (see section 17.3.3);
+        * the depth buffer test (see section 17.3.4); and
+        * the representative fragment test (see section 17.3.X)
+        * occlusion query sample counting (see section 17.3.5)
+
+
+    Modify Section 14.9.4, The Early Fragment Test Qualifier, p. 582
+
+    (modify the first paragraph of the section, p. 582, to enumerate the new
+     test)
+
+    The stencil test, depth buffer test, representative fragment test, and
+    occlusion query sample counting are performed if and only if early
+    fragment tests are enabled in the active fragment shader (see section
+    15.2.4). ...
+
+
+    Insert new section before Section 17.3.5, Occlusion Queries (p. 614)
+
+    Section 17.3.X, Representative Fragment Test
+
+    The representative fragment test allows implementations to reduce the
+    amount of rasterization and fragment processing work performed for each
+    point, line, or triangle primitive. For any primitive that produces one or
+    more fragments that pass all prior early fragment tests, the
+    implementation is permitted to choose one or more "representative"
+    fragments for processing and discard all other fragments. For draw calls
+    rendering multiple points, lines, or triangles arranged in lists, strips,
+    or fans, the representative fragment test is performed independently for
+    each of those primitives. The set of fragments discarded by the
+    representative fragment test is implementation-dependent. In some cases,
+    the representative fragment test may not discard any fragments for a given
+    primitive.
+
+    This test is enabled or disabled using Enable or Disable with the target
+    REPRESENTATIVE_FRAGMENT_NV. If early fragment tests (section 15.2.4) are
+    not enabled in the active fragment shader, the representative fragment
+    test has no effect, even if enabled.
+
+
+Additions to the AGL/GLX/WGL Specifications
+
+    None.
+
+New State
+
+    Get Value                              Type    Get Command   Initial Value   Description                Sec    Attribute
+    ------------------------------------   ----    -----------   -------------   -------------------------  ------ --------------
+    REPRESENTATIVE_FRAGMENT_TEST_NV          B      IsEnabled     GL_FALSE       Representative fragment    17.3.X enable
+                                                                                 test
+
+New Implementation Dependent State
+
+    None
+
+Issues
+
+    (1) Since the representative fragment test does not have guaranteed
+        behavior, it is sort of a hint.  Should we use the existing hint
+        mechanisms for this extension or simply add an enable?
+
+    RESOLVED:  Use an enable.  Hints are rarely used in OpenGL, and the
+    "FASTEST" vs. "NICEST" vs. "DONT_CARE" doesn't map reasonably to the
+    representative fragment test.
+
+    (2) Should this functionality be exposed as a sub-feature of the depth or
+        stencil tests, as its own separate per-fragment test, or as some piece
+        of state controlling primitive rasterization?
+
+    RESOLVED:  Expose as a per-fragment test.  This test is largely orthogonal
+    to depth testing, other than it is supposed to run after the depth
+    testing.  So coupling it to the depth test doesn't make sense.  Coupling
+    the feature to rasterization also doesn't make too much sense, because the
+    rasterization pipeline stage discarding fragments for this test would
+    depend on a later pipeline stages performing other per-fragment tests
+    (such as the depth test).
+
+
+Revision History
+
+    Revision 2, September 15, 2018 (pbrown)
+    - Prepare specification for publication.
+
+    Revision 1 (ckubisch and kthangudu)
+    - Internal Revisions
diff --git a/extensions/NV/NV_sample_locations.txt b/extensions/NV/NV_sample_locations.txt
index ef9eedb..dafb8c9 100644
--- a/extensions/NV/NV_sample_locations.txt
+++ b/extensions/NV/NV_sample_locations.txt
@@ -76,7 +76,7 @@
     void NamedFramebufferSampleLocationsfvNV(uint framebuffer, uint start,
                                              sizei count, const float *v);
 
-    void ResolveDepthValuesNV();
+    void ResolveDepthValuesNV(void);
 
 New Tokens
 
diff --git a/extensions/NV/NV_scissor_exclusive.txt b/extensions/NV/NV_scissor_exclusive.txt
new file mode 100644
index 0000000..d8cf838
--- /dev/null
+++ b/extensions/NV/NV_scissor_exclusive.txt
@@ -0,0 +1,234 @@
+Name
+
+    NV_scissor_exclusive
+
+Name Strings
+
+    GL_NV_scissor_exclusive
+
+Contact
+
+    Pat Brown, NVIDIA Corporation (pbrown 'at' nvidia.com)
+
+Contributors
+
+    Mark Kilgard, NVIDIA
+
+Status
+
+    Shipping
+
+Version
+
+    Last Modified:      September 15, 2018
+    Revision:           1
+
+Number
+
+    OpenGL Extension #529
+
+Dependencies
+
+    This extension is written against the OpenGL 4.5 Specification
+    (Compatibility Profile), dated October 24, 2016.
+
+    OpenGL 4.5 is required.
+
+    This extension is written against the OpenGL Shading Language
+    Specification, version 4.50, dated April 14, 2016.
+
+    This extension trivially interacts with EXT_draw_buffers2,
+    EXT_transform_feedback, NV_transform_feedback, and
+    EXT_direct_state_access.
+
+Overview
+
+    In unextended OpenGL, applications can enable a per-viewport scissor test
+    (SCISSOR_TEST) where fragments are discarded if their (x,y) coordinates
+    lie outside the corresponding scissor rectangle.  In this extension, we
+    provide a separate per-viewport exclusive scissor test, where fragments
+    are discarded if their (x,y) coordinates lie *inside* the corresponding
+    exclusive scissor rectangle.
+
+    The regular (inclusive) scissor test and exclusive scissor test are
+    orthogonal; applications can enable either or both tests for each
+    viewport. If both tests are enabled, fragments will be discarded unless
+    their (x,y) coordinates are both inside the regular scissor rectangle and
+    outside the exclusive scissor rectangle.
+
+New Procedures and Functions
+
+    void ScissorExclusiveArrayvNV(uint first, sizei count, const int *v);
+    void ScissorExclusiveNV(int x, int y, sizei width, sizei height);
+
+New Tokens
+
+    Accepted by the <cap> parameter of Enable, Disable, and IsEnabled, by the
+    <target> parameter of Enablei, Disablei, IsEnabledi, EnableIndexedEXT,
+    DisableIndexedEXT, and IsEnabledIndexedEXT, and by the <pname> parameter
+    of GetBooleanv, GetIntegerv, GetInteger64v, GetFloatv, GetDoublev,
+    GetDoubleIndexedv, GetBooleani_v, GetIntegeri_v, GetInteger64i_v,
+    GetFloati_v, GetDoublei_v, GetBooleanIndexedvEXT, GetIntegerIndexedvEXT,
+    and GetFloatIndexedvEXT:
+
+        SCISSOR_TEST_EXCLUSIVE_NV                       0x9555
+
+    Accepted by the <pname> parameter of GetBooleanv, GetIntegerv,
+    GetInteger64v, GetFloatv, GetDoublev, GetBooleani_v, GetIntegeri_v,
+    GetInteger64i_v, GetFloati_v, GetDoublei_v, GetDoubleIndexedv,
+    GetBooleanIndexedvEXT, GetIntegerIndexedvEXT, and GetFloatIndexedvEXT:
+
+        SCISSOR_BOX_EXCLUSIVE_NV                        0x9556
+
+Modifications to the OpenGL 4.5 Specification (Compatibility Profile)
+
+    Insert a new section after section 14.9.2, Scissor Test (p. 560)
+
+    14.9.3  Exclusive Scissor Test
+
+    Like the scissor test (section 14.9.2), the exclusive scissor test
+    determines if (x_w, y_w) lies outside the exclusive scissor rectangles
+    defined by four values for each viewport.  These values are set with
+
+      void ScissorExclusiveArrayvNV(uint first, sizei count, const int *v);
+      void ScissorExclusiveNV(int x, int y, sizei width, sizei height);
+
+    ScissorExclusiveArrayvNV defines a set of exclusive scissor rectangles that
+    are each applied to the corresponding viewport (see section 13.6.1).
+    <first> specifies the index of the first exclusive scissor rectangle to
+    modify, and <count> specifies the number of scissor rectangles.  <v>
+    specifies an array of 4*<count> integers, where each group of four
+    integers specifies the left column, bottom row, width, and height (in that
+    order) of an individual exclusive scissor rectangle.
+
+    ScissorExclusiveNV is equivalent to calling ScissorExclusiveArrayvNV with
+    <first> set to 0, <count> set to the value of MAX_VIEWPORTS, and <v>
+    filled with an array of 4*MAX_VIEWPORTS integer, with each group of four
+    integers set to <x>, <y>, <width>, and <height>, respectively.
+
+    When enabled, the exclusive scissor test passes only if the fragment is
+    outside the selected exclusive scissor rectangle, which is the case if
+    any of the following conditions is true:
+
+      * x_w <  left,
+      * x_w >= left + width,
+      * y_w <  bottom, or
+      * y_w >= bottom + height.
+
+    Otherwise, the test fails and the fragment is discarded. For points,
+    lines, and polygons, the scissor rectangle for a primitive is selected in
+    the same manner as the viewport (see section 13.6.1).  For bitmaps, pixel
+    rectangles and buffer clears (see section 17.4.3), the scissor rectangle
+    numbered zero is used for the scissor test.
+
+      Errors
+
+        An INVALID_VALUE error is generated by ScissorExclusiveArrayvNV if
+        <first>+<count> is greater than the value of MAX_VIEWPORTS.
+
+        An INVALID_VALUE error is generated if width or height is negative.
+
+    The exclusive scissor test is enabled or disabled for all viewports using
+    Enable or Disable with target SCISSOR_TEST_EXCLUSIVE_NV.  The test is enabled or
+    disabled for a specific viewport using Enablei or Disablei with the
+    constant SCISSOR_TEST_EXCLUSIVE_NV and the index of the selected viewport.
+    When disabled, it is as if the exclusive scissor test always passes. The
+    value of the scissor test enable for viewport <i> can be queried by
+    calling IsEnabledi with target SCISSOR_TEST_EXCLUSIVE_NV and index <i>.
+    The value of the exclusive scissor test enable for viewport zero may also
+    be queried by calling IsEnabled with the same target, but no index
+    parameter.
+
+      Errors
+
+        An INVALID_VALUE error is generated by Enablei, Disablei and
+        IsEnabledi if target is SCISSOR_TEST_EXCLUSIVE_NV and <index> is
+        greater than or equal to the value of MAX_VIEWPORTS.
+
+    The state required for the exclusive scissor test consists of four integer
+    values per viewport, and a bit indicating whether the test is enabled or
+    disabled for each viewport. In the initial state for all viewports, the
+    exclusive scissor test is disabled and the exclusive scissor rectangle has
+    zero values for all of left, bottom, width, and height.
+
+Interactions with EXT_draw_buffers2 or EXT_transform_feedback or
+NV_transform_feedback or EXT_direct_state_access
+
+    Ignore references to GetBooleanIndexedvEXT or GetIntegerIndexedvEXT if
+    none of EXT_draw_buffers2, EXT_transform_feedback, NV_transform_feedback,
+    or EXT_direct_state_access are supported.
+
+Interactions with EXT_draw_buffers2 or EXT_direct_state_access
+
+    Ignore references to EnableIndexedEXT, DisableIndexedEXT, and
+    IsEnabledIndexedEXT if neither of EXT_draw_buffers2 or
+    EXT_direct_state_access are supported.
+
+Interactions with EXT_direct_state_access
+
+    Ignore references to GetFloatIndexedvEXT and GetDoubleIndexedvEXT if
+    EXT_direct_state_access is not supported.
+
+Additions to the AGL/GLX/WGL Specifications
+
+    None
+
+Errors
+
+    Errors are described in "Errors" sections of the spec language above.
+
+New State
+
+    Get Value                  Type        Get Command   Initial Value   Description                    Sec     Attribute
+    ------------------------   ----------  ------------  -------------   ----------------------------   -----   ---------
+    SCISSOR_TEST_EXCLUSIVE_NV  16* x B     IsEnabledi    FALSE           Exclusive scissoring enabled   14.9.3  scissor/enable
+    SCISSOR_BOX_EXCLUSIVE_NV   16* x 4 x Z GetIntegeri_v (0,0,0,0)       Exclusive scissor rectangles   14.9.3  scissor
+
+New Implementation Dependent State
+
+    None
+
+Issues
+
+    (1) How should we name this extension?
+
+      RESOLVED:  NV_scissor_exclusive.  It defines scissor rectangles and
+      tests that are "exclusive", where fragments pass only if they are
+      outside the rectangle.
+
+    (2) What should we use for the default values for exclusive scissor
+        rectangles?
+
+      RESOLVED:  For inclusive scissors, the default values for an OpenGL
+      context are taken from the size of the drawable first used with the
+      context.  While the inclusive scissor test is initially disabled, the
+      default state allows for "normal" unscissored rendering to that drawable
+      if the test is enabled without explicitly programming a scissor
+      rectangle.
+
+      If we used similar state for exclusive scissors, enabling the exclusive
+      scissor test without programming a rectangle would scissor out all
+      rendering to such drawables.  Instead, we specify the default rectangles
+      as (0,0,0,0), which would cause the exclusive scissor test to discard
+      nothing if enabled without programming a rectangle.  Additionally,
+      this approach makes the default state independent of the drawable first
+      used with the OpenGL context.
+
+    (3) How does the exclusive scissor interact with the functionality
+        of EXT_window_rectangles?
+
+      RESOLVED:  The exclusive scissor, as with the inclusive scissor, is orthogonal
+      to the window rectangles testing introduced by EXT_window_rectangles.
+
+      The window rectangle testing applies to ALL viewports whereas the
+      exclusive scissor, as with the inclusive scissor, are selected by the
+      particular viewport index selected for rasterization.
+
+      Additionally window rectangle testing is only support rendering
+      to framebuffer objects (FBOs) whereas the exclusive scissor,
+      as with the conventional inclusive scissor, works on all drawable.
+
+Revision History
+
+    Revision 1 (pbrown)
+    - Internal revisions.
diff --git a/extensions/NV/NV_shader_texture_footprint.txt b/extensions/NV/NV_shader_texture_footprint.txt
new file mode 100644
index 0000000..b6bc1f3
--- /dev/null
+++ b/extensions/NV/NV_shader_texture_footprint.txt
@@ -0,0 +1,323 @@
+Name
+
+    NV_shader_texture_footprint
+
+Name Strings
+
+    GL_NV_shader_texture_footprint
+
+Contact
+
+    Chris Lentini, NVIDIA (clentini 'at' nvidia.com)
+    Pat Brown, NVIDIA (pbrown 'at' nvidia.com)
+
+Contributors
+
+    Jeff Bolz, NVIDIA
+    Daniel Koch, NVIDIA
+
+Status
+
+    Shipping
+
+Version
+
+    Last Modified Date:         September 15, 2018
+    NVIDIA Revision:            1
+
+Number
+
+    OpenGL Extension #530
+
+Dependencies
+
+    This extension is written against the OpenGL 4.6 Specification
+    (Compatibility Profile), dated July 30, 2017.
+
+    OpenGL 4.5 is required.
+
+    This extension requires support for the OpenGL Shading Language (GLSL)
+    extension "NV_shader_texture_footprint", which can be found at the Khronos
+    Group Github site here:
+
+        https://github.com/KhronosGroup/GLSL
+
+Overview
+
+    This extension adds OpenGL API support for the OpenGL Shading Language
+    (GLSL) extension "NV_shader_texture_footprint".  That extension adds a new
+    set of texture query functions ("textureFootprint*NV") to GLSL.  These
+    built-in functions prepare to perform a filtered texture lookup based on
+    coordinates and other parameters passed in by the calling code.  However,
+    instead of returning data from the provided texture image, these query
+    functions instead return data identifying the _texture footprint_ for an
+    equivalent texture access.  The texture footprint identifies a set of
+    texels that may be accessed in order to return a filtered result for the
+    texture access.
+
+    The footprint itself is a structure that includes integer values that
+    identify a small neighborhood of texels in the texture being accessed and
+    a bitfield that indicates which texels in that neighborhood would be used.
+    Each bit in the returned bitfield identifies whether any texel in a small
+    aligned block of texels would be fetched by the texture lookup.  The size
+    of each block is specified by an access _granularity_ provided by the
+    shader.  The minimum granularity supported by this extension is 2x2 (for
+    2D textures) and 2x2x2 (for 3D textures); the maximum granularity is
+    256x256 (for 2D textures) or 64x32x32 (for 3D textures).  Each footprint
+    query returns the footprint from a single texture level.  When using
+    minification filters that combine accesses from multiple mipmap levels,
+    shaders must perform separate queries for the two levels accessed ("fine"
+    and "coarse").  The footprint query also returns a flag indicating if the
+    texture lookup would access texels from only one mipmap level or from two
+    neighboring levels.
+
+    This extension should be useful for multi-pass rendering operations that
+    do an initial expensive rendering pass to produce a first image that is
+    then used as a texture for a second pass.  If the second pass ends up
+    accessing only portions of the first image (e.g., due to visibility), the
+    work spent rendering the non-accessed portion of the first image was
+    wasted.  With this feature, an application can limit this waste using an
+    initial pass over the geometry in the second image that performs a
+    footprint query for each visible pixel to determine the set of pixels that
+    it needs from the first image.  This pass would accumulate an aggregate
+    footprint of all visible pixels into a separate "footprint texture" using
+    shader atomics.  Then, when rendering the first image, the application can
+    kill all shading work for pixels not in this aggregate footprint.
+
+    The implementation of this extension has a number of limitations.  The
+    texture footprint query functions are only supported for two- and
+    three-dimensional textures (TEXTURE_2D, TEXTURE_3D).  Texture footprint
+    evaluation only supports the CLAMP_TO_EDGE wrap mode; results are
+    undefined for all other wrap modes.  The implementation supports only a
+    limited set of granularity values and does not support separate coverage
+    information for each texel in the original texture.
+
+
+New Procedures and Functions
+
+    None
+
+New Tokens
+
+    None
+
+Additions to Chapter 8 of the OpenGL 4.6 (Compatibility Profile) Specification
+(Textures and Samplers)
+
+    (add a new section immediately after section 8.15, Texture Magnification)
+
+    Section 8.X, Texture Footprint Queries
+
+    The OpenGL Shading Language provides a collection of built-in functions,
+    all beginning with "textureFootprint", that allow shaders to query a
+    _texture footprint_.  The texture footprint is a set of texels belonging
+    to a single texture level that would be accessed when performing a
+    filtered texture lookup.  The shader code calling the footprint query
+    functions passes in a _granularity_ value, which is used to subdivide a
+    texture level into an array of fixed-size _texel groups_ whose size is
+    given by the granularity.  The texture footprint query functions return
+    the footprint using a built-in GLSL data structure that identifies the set
+    of texel groups containing one or more texels that would be accessed in an
+    equivalent texture lookup.  Texture footprint queries are only supported
+    for two- and three-dimensional textures (targets TEXTURE_2D and
+    TEXTURE_3D).  Additionally, footprint queries require the use of the
+    CLAMP_TO_EDGE sampler wrap mode in all relevant dimensions; the results of
+    the footprint query are undefined if any other wrap mode is used.
+
+    Each texture footprint query built-in function accepts a set of texture
+    coordinates and any additional parameters (e.g., explicit level of detail,
+    level of detail bias, or derivatives) needed to specify a normal texture
+    lookup operation whose footprint should be evaluated.  The footprint query
+    functions also accept a <granularity> parameter and a <coarse> flag used
+    to select the level of detail whose footprint is returned.  The
+    granularity parameter identifies the size of the texel groups used for the
+    footprint query as described in Table X.1.  The <coarse> flag is used to
+    select between the two levels of detail used when minifying using a filter
+    (NEAREST_MIPMAP_LINEAR, LINEAR_MIPMAP_LINEAR) that averages texels from
+    multiple levels of detail.  When such minification is performed, a value
+    of "false" requests the footprint in the higher-resolution (fine) level of
+    detail, while "true" requests the footprint in the lower-resolution
+    (coarse) level of detail.  When a texture access uses only a single level
+    of detail, its footprint will be returned for queries with <coarse> set to
+    false, while queries with <coarse> set to true will return an empty
+    footprint.  Since many texture accesses may use only a single level, the
+    footprint query functions return a boolean value, which will be true if
+    and only if all accessed texels are in a single level of detail.
+
+      Granularity Value |  TEXTURE_2D   |  TEXTURE_3D
+      ------------------+---------------+----------------
+              0         |  unsupported  |  unsupported
+              1         |      2x2      |     2x2x2
+              2         |      4x2      |  unsupported
+              3         |      4x4      |     4x4x2
+              4         |      8x4      |  unsupported
+              5         |      8x8      |  unsupported
+              6         |     16x8      |  unsupported
+              7         |     16x16     |  unsupported
+              8         |  unsupported  |  unsupported
+              9         |  unsupported  |  unsupported
+              10        |  unsupported  |    16x16x16
+              11        |     64x64     |    32x16x16
+              12        |    128x64     |    32x32x16
+              13        |    128x128    |    32x32x32
+              14        |    256x128    |    64x32x32
+              15        |    256x256    |  unsupported
+
+      Table X.1:  Supported granularities for texture footprint queries, for
+      two-dimensional (TEXTURE_2D) and three-dimensional (TEXTURE_3D)
+      accesses.  Granularity values not listed in the table or listed as
+      "unsupported" are not supported by this extension and result in
+      undefined behavior if used.
+
+      In addition to the boolean result, texture footprint queries return
+      footprint data in a structure of the type gl_TextureFootprint2DNV (for
+      two-dimensional textures) or gl_TextureFootprint3DNV (for
+      three-dimensional textures).  In either structure, the member <lod>
+      specifies the level-of-detail number used for the footprint.  The
+      members <anchor> and <offset> identify a small neighborhood of texel
+      groups in the texture used by the query.  The member <mask> specifies 64
+      bits of data indicating which texel groups in the neighborhood are part
+      of the footprint.  The member <granularity> returns information on the
+      size of the texel groups in the footprint, which is sometimes larger
+      than the requested granularity, as described below.
+
+      For two-dimensional footprint queries, the neighborhood returned by the
+      query is an 8x8 array of texel groups, where each texel group in
+      neighborhood is identified by a coordinate (x,y), where <x> and <y> are
+      integer values in the range [0,7].  Each texel group corresponds to a
+      set of texels whose (u,v) coordinates satisfy the inequalities:
+
+        u1 <= u <= u2
+        v1 <= v <= v2
+
+      computed using the following logic:
+
+        // The footprint logic returns a mask whose bits are aligned to 8x8
+        // sets of texel groups.  This allows shaders to use atomics to
+        // efficiently accumulate footprint results across many invocations,
+        // storing an 8x8 array of bits for each group into one RG32UI texel.
+        // The texel group number in the neighborhood is treated as an offset
+        // relative to the anchor point.
+        uvec2 texel_group = 8 * result.anchor + uvec2(x,y);
+
+        // If the neighborhood crosses the boundaries of an 8x8 set, the bits
+        // of the mask are effectively split across multiple sets (up to
+        // four for 2D).  The "offset" parameter returned by the query
+        // identifies which x/y group values in the neighborhood are
+        // assigned to which set.  An all-zero offset indicates that the
+        // footprint is fully contained in a single 8x8 set at the anchor.
+        // "Low" x/y values identify texel groups at the beginning of the 8x8
+        // set identified by the anchor, while "high" values correspond to
+        // texel groups at the end of the previous set.  The offset
+        // indicates the number of texel groups assigned to the previous set.
+        if (x + result.offset.x >= 8) {
+            texel_group.x -= 8;
+        }
+        if (y + result.offset.y >= 8) {
+            texel_group.y -= 8;
+        }
+
+        // Once we have a group number, u/v texel number ranges are generated by
+        // multiplying by the texel group size.
+        uint u1 = texel_group.x * granularity_x;
+        uint u2 = u1 + granularity_x - 1;
+        uint v1 = texel_group.y * granularity_y;
+        uint v2 = v1 + granularity_y - 1;
+
+      In the equations above, <granularity_x> and <granularity_y> refer to the
+      texel group size as in Table X.1.  result.anchor and result.offset
+      specify the <anchor> and <offset> members of the returned structure, and
+      <x> and <y> specify the texel group number in the neighborhood.
+
+      Each bit in the <mask> member of the returned structure corresponds to
+      one of the texel groups in the 8x8 neighborhood.  That bit will be set
+      if and only if any of the texels in the texel group is covered by the
+      footprint.  The texel group (x,y) is considered to be covered if and
+      only if the following logic computes true for <covered>:
+
+        uint64_t mask = result.mask.x | (result.mask.y << 32);
+        uint32_t bit = y * 8 + x;
+        bool covered = (0 != ((mask >> bit) & 1));
+
+      For three-dimensional footprint queries, the logic is very similar,
+      except that the neighborhood returned by the query is a 4x4x4 array of
+      texel groups.  Each texel group in neighborhood is identified by a
+      coordinate (x,y,z), where <x>, <y>, and <z> are integer values in the
+      range [0,3].  Each texel group corresponds to a set of texels whose
+      (u,v,w) coordinates satisfy the inequalities:
+
+        u1 <= u <= u2
+        v1 <= v <= v2
+        w1 <= w <= w2
+
+      computed using the following logic:
+
+        uvec3 texel_group = 4 * result.anchor + uvec3(x,y,z);
+        if (x + result.offset.x >= 4) {
+            texel_group.x -= 4;
+        }
+        if (y + result.offset.y >= 4) {
+            texel_group.y -= 4;
+        }
+        if (z + result.offset.z >= 4) {
+            texel_group.z -= 4;
+        }
+        uint u1 = texel_group.x * granularity_x;
+        uint u2 = u1 + granularity_x - 1;
+        uint v1 = texel_group.y * granularity_y;
+        uint v2 = v1 + granularity_y - 1;
+        uint w1 = texel_group.z * granularity_z;
+        uint w2 = w1 + granularity_z - 1;
+
+      As in the two-dimensional logic, <granularity_x>, <granularity_y>, and
+      <granularity_z> refer to the texel group size as in Table X.1.
+      result.anchor and result.offset specify the <anchor> and <offset>
+      members of the returned structure, and <x>, <y>, and <z> specify the
+      texel group number in the neighborhood.
+
+      Each bit in the <mask> member of the returned structure corresponds to
+      one of the texel groups in the 4x4x4 neighborhood.  That bit will be set
+      if and only if any of the texels in the texel group is covered by the
+      footprint.  The texel group (x,y,z) is considered to be covered if and
+      only if the following logic computes true for <covered>:
+
+        uint64_t mask = result.mask.x | (result.mask.y << 32);
+        uint32_t bit = z * 16 + y * 4 + x;
+        bool covered = (0 != ((mask >> bit) & 1));
+
+      In most cases, the texel group sizes used by the footprint query will
+      match the value passed to the query, as interpreted according to Table
+      X.1.  However, in some cases, the footprint may be too large to be
+      expressed as a collection of 8x8 or 4x4x4 set of texel groups using the
+      requested granularity.  In this case, the implementation uses a texel
+      group size that is larger than the requested granularity.  If a larger
+      texel group size is used, the implementation will return the texel group
+      size used in the <granularity> member of the footprint structure, which
+      should also be interpreted according to Table X.1.  If the requested
+      texel group size is used, the implementation will return zero in
+      <granularity>.  The texel group size will only be increased by the
+      implementation if anisotropic filtering is used.  If the texture and
+      sampler objects used by the footprint query do not enable anisotropic
+      texture filtering, the footprint query will always use the original
+      requested granularity and return zero in the <granularity> member.
+
+Errors
+
+    None
+
+New State
+
+    None
+
+New Implementation Dependent State
+
+    None
+
+Issues
+
+    None, but please refer to issues in the GLSL extension specification.
+
+Revision History
+
+    Revision 1 (clentini, pbrown)
+    - Internal revisions.
diff --git a/extensions/NV/NV_shading_rate_image.txt b/extensions/NV/NV_shading_rate_image.txt
new file mode 100644
index 0000000..43a28f1
--- /dev/null
+++ b/extensions/NV/NV_shading_rate_image.txt
@@ -0,0 +1,1007 @@
+Name
+
+    NV_shading_rate_image
+
+Name Strings
+
+    GL_NV_shading_rate_image
+
+Contact
+
+    Pat Brown, NVIDIA Corporation (pbrown 'at' nvidia.com)
+
+Contributors
+
+    Daniel Koch, NVIDIA
+    Mark Kilgard, NVIDIA
+    Jeff Bolz, NVIDIA
+    Mathias Schott, NVIDIA
+
+Status
+
+    Shipping
+
+Version
+
+    Last Modified:      September 15, 2018
+    Revision:           1
+
+Number
+
+    OpenGL Extension #531
+
+Dependencies
+
+    This extension is written against the OpenGL 4.5 Specification
+    (Compatibility Profile), dated October 24, 2016.
+
+    OpenGL 4.5 is required.
+
+    This extension requires support for the OpenGL Shading Language (GLSL)
+    extension "NV_fragment_shader_barycentric", which can be found at the
+    Khronos Group Github site here:
+
+        https://github.com/KhronosGroup/GLSL
+
+    This extension interacts trivially with ARB_sample_locations and
+    NV_sample_locations.
+
+    This extension interacts with NV_scissor_exclusive.
+
+    This extension interacts with NV_conservative_raster.
+
+    This extension interacts with NV_conservative_raster_underestimation.
+
+    This extension interacts with EXT_raster_multisample.
+
+    NV_framebuffer_mixed_samples is required.
+
+Overview
+
+    By default, OpenGL runs a fragment shader once for each pixel covered by a
+    primitive being rasterized.  When using multisampling, the outputs of that
+    fragment shader are broadcast to each covered sample of the fragment's
+    pixel.  When using multisampling, applications can also request that the
+    fragment shader be run once per color sample (when using the "sample"
+    qualifier on one or more active fragment shader inputs), or run a fixed
+    number of times per pixel using SAMPLE_SHADING enable and the
+    MinSampleShading frequency value.  In all of these approaches, the number
+    of fragment shader invocations per pixel is fixed, based on API state.
+
+    This extension allows applications to bind and enable a shading rate image
+    that can be used to vary the number of fragment shader invocations across
+    the framebuffer.  This can be useful for applications like eye tracking
+    for virtual reality, where the portion of the framebuffer that the user is
+    looking at directly can be processed at high frequency, while distant
+    corners of the image can be processed at lower frequency.  The shading
+    rate image is an immutable-format two-dimensional or two-dimensional array
+    texture that uses a format of R8UI.  Each texel represents a fixed-size
+    rectangle in the framebuffer, covering 16x16 pixels in the initial
+    implementation of this extension.  When rasterizing a primitive covering
+    one of these rectangles, the OpenGL implementation reads the texel in the
+    bound shading rate image and looks up the fetched value in a palette of
+    shading rates.  The shading rate used can vary from (finest) 16 fragment
+    shader invocations per pixel to (coarsest) one fragment shader invocation
+    for each 4x4 block of pixels.
+
+    When this extension is advertised by an OpenGL implementation, the
+    implementation must also support the GLSL extension
+    "GL_NV_shading_rate_image" (documented separately), which provides new
+    built-in variables that allow fragment shaders to determine the effective
+    shading rate used for each fragment.  Additionally, the GLSL extension also
+    provides new layout qualifiers allowing the interlock functionality provided
+    by ARB_fragment_shader_interlock to guarantee mutual exclusion across an
+    entire fragment when the shading rate specifies multiple pixels per fragment
+    shader invocation.
+
+    Note that this extension requires the use of a framebuffer object; the
+    shading rate image and related state are ignored when rendering to the
+    default framebuffer.
+
+New Procedures and Functions
+
+      void BindShadingRateImageNV(uint texture);
+      void ShadingRateImagePaletteNV(uint viewport, uint first, sizei count,
+                                     const enum *rates);
+      void GetShadingRateImagePaletteNV(uint viewport, uint entry,
+                                        enum *rate);
+      void ShadingRateImageBarrierNV(boolean synchronize);
+      void ShadingRateImageBarrierNV(enum order);
+      void ShadingRateSampleOrderCustomNV(enum rate, uint samples,
+                                          const int *locations);
+      void GetShadingRateSampleLocationivNV(enum rate, uint samples,
+                                            uint index, int *location);
+
+New Tokens
+
+    Accepted by the <cap> parameter of Enable, Disable, and IsEnabled, by the
+    <target> parameter of Enablei, Disablei, IsEnabledi, EnableIndexedEXT,
+    DisableIndexedEXT, and IsEnabledIndexedEXT, and by the <pname> parameter
+    of GetBooleanv, GetIntegerv, GetInteger64v, GetFloatv, GetDoublev,
+    GetDoubleIndexedv, GetBooleani_v, GetIntegeri_v, GetInteger64i_v,
+    GetFloati_v, GetDoublei_v, GetBooleanIndexedvEXT, GetIntegerIndexedvEXT,
+    and GetFloatIndexedvEXT:
+
+        SHADING_RATE_IMAGE_NV                           0x9563
+
+    Accepted in the <rates> parameter of ShadingRateImagePaletteNV and the
+    <rate> parameter of ShadingRateSampleOrderCustomNV and
+    GetShadingRateSampleLocationivNV; returned in the <rate> parameter of
+    GetShadingRateImagePaletteNV:
+
+        SHADING_RATE_NO_INVOCATIONS_NV                  0x9564
+        SHADING_RATE_1_INVOCATION_PER_PIXEL_NV          0x9565
+        SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV     0x9566
+        SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV     0x9567
+        SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV     0x9568
+        SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV     0x9569
+        SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV     0x956A
+        SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV     0x956B
+        SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV         0x956C
+        SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV         0x956D
+        SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV         0x956E
+        SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV        0x956F
+
+    Accepted by the <pname> parameter of GetBooleanv, GetDoublev,
+    GetIntegerv, and GetFloatv:
+
+        SHADING_RATE_IMAGE_BINDING_NV                   0x955B
+        SHADING_RATE_IMAGE_TEXEL_WIDTH_NV               0x955C
+        SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV              0x955D
+        SHADING_RATE_IMAGE_PALETTE_SIZE_NV              0x955E
+        MAX_COARSE_FRAGMENT_SAMPLES_NV                  0x955F
+
+    Accepted by the <order> parameter of ShadingRateSampleOrderNV:
+
+        SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV            0x95AE
+        SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV        0x95AF
+        SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV       0x95B0
+
+
+Modifications to the OpenGL 4.5 Specification (Compatibility Profile)
+
+    Modify Section 14.3.1, Multisampling, p. 532
+
+    (add to the end of the section)
+
+    When using a shading rate image (Section 14.4.1), rasterization may
+    produce fragments covering multiple pixels, where each pixel is treated as
+    a sample.  If SHADING_RATE_IMAGE_NV is enabled for any viewport,
+    primitives will be processed with multisample rasterization rules,
+    regardless of the MULTISAMPLE enable or the value of SAMPLE_BUFFERS.  If
+    the framebuffer has no multisample buffers, each pixel is treated as
+    having a single sample located at the pixel center.
+
+
+    Delete Section 14.3.1.1, Sample Shading, p. 532.  The functionality in
+    this section is moved to the new Section 14.4, "Shading Rate Control".
+
+
+    Add new section before Section 14.4, Points, p. 533
+
+    Section 14.4, Shading Rate Control
+
+    By default, each fragment processed by programmable fragment processing
+    (chapter 15) [[compatibility only: or fixed-function fragment processing
+    (chapter 16)]] corresponds to a single pixel with a single (x,y)
+    coordinate. When using multisampling, implementations are permitted to run
+    separate fragment shader invocations for each sample, but often only run a
+    single invocation for all samples of the fragment.  We will refer to the
+    density of fragment shader invocations in a particular framebuffer region
+    as the _shading rate_.  Applications can use the shading rate to increase
+    the size of fragments to cover multiple pixels and reduce the amount of
+    fragment shader work. Applications can also use the shading rate to
+    explicitly control the minimum number of fragment shader invocations when
+    multisampling.
+
+
+    Section 14.4.1, Shading Rate Image
+
+    Applications can specify the use of a shading rate that varies by (x,y)
+    location using a _shading rate image_.  Use of a shading rate image is
+    enabled or disabled for all viewports using Enable or Disable with target
+    SHADING_RATE_IMAGE_NV.  Use of a shading rate image is enabled or disabled
+    for a specific viewport using Enablei or Disablei with the constant
+    SHADING_RATE_IMAGE_NV and the index of the selected viewport.  The shading
+    rate image may only be used with a framebuffer object.  When rendering to
+    the default framebuffer, the shading rate image operations in this section
+    are disabled.
+
+    The shading rate image is a texture that can be bound with the command
+
+      void BindShadingRateImageNV(uint texture);
+
+    This command unbinds the current shading rate image, if any.  If <texture>
+    is zero, no new texture is bound.  If <texture> is non-zero, it must be
+    the name of an existing immutable-format texture with a target of
+    TEXTURE_2D or TEXTURE_2D_ARRAY with a format of R8UI.  If <texture> has
+    multiple mipmap levels, only the base level will be used as the shading
+    rate image.
+
+      Errors
+
+        INVALID_VALUE is generated if <texture> is not zero and is not the
+        name of an existing texture object.
+
+        INVALID_OPERATION is generated if <texture> is not an immutable-format
+        texture, has a format other than R8UI, or has a texture target other
+        than TEXTURE_2D or TEXTURE_2D_ARRAY.
+
+    When rasterizing a primitive covering pixel (x,y) with a shading rate
+    image having a target of TEXTURE_2D, a two-dimensional texel coordinate
+    (u,v) is generated, where:
+
+      u = floor(x / SHADING_RATE_IMAGE_TEXEL_WIDTH_NV)
+      v = floor(y / SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV)
+
+    and where SHADING_RATE_IMAGE_TEXEL_WIDTH_NV and
+    SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV are the width and height of the
+    implementation-dependent footprint of each shading rate image texel in the
+    framebuffer.  If the bound shading rate image has a target of
+    TEXTURE_2D_ARRAY, a three-dimensional texture coordinate (u,v,w) is
+    generated, where u and v are computed as above.  The coordinate w is set
+    to the layer L of the framebuffer being rendered to if L is less than the
+    number of layers in the shading rate image, or zero otherwise.
+
+    If a texel with coordinates (u,v) or (u,v,w) exists in the bound shading
+    rate image, the value of the 8-bit R component of the texel is used as the
+    shading rate index.  If the (u,v) or (u,v,w) coordinate is outside the
+    extent of the shading rate image, or if no shading rate image is bound,
+    zero will be used as the shading rate index.
+
+    A shading rate index is mapped to a _base shading rate_ using a lookup
+    table called the shading rate image palette.  There is a separate palette
+    for each viewport.  The number of entries in each palette is given by the
+    implementation-dependent constant SHADING_RATE_IMAGE_PALETTE_SIZE_NV.  The
+    base shading rate for an (x,y) coordinate with a shading rate index of <i>
+    will be given by palette entry <i>.  If the shading rate index is greater
+    than or equal to the palette size, the results of the palette lookup are
+    undefined.
+
+    Shading rate image palettes are updated using the command
+
+      void ShadingRateImagePaletteNV(uint viewport, uint first, sizei count,
+                                     const enum *rates);
+
+    <viewport> specifies the number of the viewport whose palette should be
+    updated.  <rates> is an array of <count> shading rate enums and is used to
+    update entries <first> through <first> + <count> - 1 in the palette.  The
+    set of shading rate values accepted in <rates> is given in Table X.1.  The
+    default value for all palette entries is
+    SHADING_RATE_1_INVOCATION_PER_PIXEL_NV.
+
+        Shading Rate                                  Size  Invocations
+        -------------------------------------------   ----- -----------
+        SHADING_RATE_NO_INVOCATIONS_NV                  -       0
+        SHADING_RATE_1_INVOCATION_PER_PIXEL_NV         1x1      1
+        SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV    1x2      1
+        SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV    2x1      1
+        SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV    2x2      1
+        SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV    2x4      1
+        SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV    4x2      1
+        SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV    4x4      1
+        SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV        1x1      2
+        SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV        1x1      4
+        SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV        1x1      8
+        SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV       1x1     16
+
+        Table X.1:  Shading rates accepted by ShadingRateImagePaletteNV.  An
+        entry of "<W>x<H>" in the "Size" column indicates that the shading
+        rate results in fragments with a width and height (in pixels) of <W>
+        and <H>, respectively.  The entry in the "Invocations" column
+        specifies the number of fragment shader invocations that should be
+        generated for each fragment.
+
+      Errors
+
+        INVALID_VALUE is generated if <viewport> is greater than or equal to
+        MAX_VIEWPORTS or if <first> plus <count> is greater than
+        SHADING_RATE_IMAGE_PALETTE_SIZE_NV.
+
+        INVALID_ENUM is generated if any entry in <rates> is not a valid
+        shading rate.
+
+    Individual entries in the shading rate palette can be queried using the
+    command:
+
+      void GetShadingRateImagePaletteNV(uint viewport, uint entry,
+                                        enum *rate);
+
+    where <viewport> specifies the viewport of the palette to query and
+    <entry> specifies the palette entry number.  A single enum from Table X.1
+    is returned in <rate>.
+
+      Errors
+
+        INVALID_VALUE is generated if <viewport> is greater than or equal to
+        MAX_VIEWPORTS or if <entry> is greater than or equal to
+        SHADING_RATE_IMAGE_PALETTE_SIZE_NV.
+
+    If the shading rate image is enabled, a base shading rate will be obtained
+    as described above.  If the shading rate image is disabled, the base
+    shading rate will be SHADING_RATE_1_INVOCATION_PER_PIXEL_NV.  In either
+    case, the shading rate will be adjusted as described in the following
+    sections.
+
+    The rasterization hardware that reads from the shading rate image may
+    cache texels it reads for maximum performance.  If the shading rate image
+    is updated using commands such as TexSubImage2D, image stores in shaders,
+    or by framebuffer writes performed when the shading rate image is bound to
+    a framebuffer object, this cache may retain out-of-date texture data.
+    Calling
+
+      void ShadingRateImageBarrierNV(boolean synchronize);
+
+    with <synchronize> set to TRUE ensures that rendering commands submitted
+    after the barrier don't access old shading rate image data updated
+    directly (TexSubImage2D) or indirectly (rendering, image stores) by
+    commands submitted before the barrier.  If <synchronize> is set to FALSE,
+    ShadingRateImageBarrierNV doesn't wait on the completion of commands
+    submitted before the barrier.  If an application has ensured that all
+    prior commands updating the shading rate image have completed using sync
+    objects or other mechanism, <synchronize> can be safely set to FALSE.
+    Otherwise, the lack of synchronization may cause subsequent rendering
+    commands to source the shading rate image before prior updates have
+    completed.
+
+
+    Section 14.4.2, Sample Shading
+
+    When the shading rate image is disabled, sample shading can be used to
+    specify a minimum number of fragment shader invocations to generate for
+    each fragment.  When the shading rate image is enabled, sample shading can
+    be used to adjust the shading rate to increase the number of fragment
+    shader invocations generated for each primitive.  Sample shading is
+    controlled by calling Enable or Disable with target SAMPLE_SHADING.  If
+    MULTISAMPLE or SAMPLE_SHADING is disabled, sample shading has no effect.
+
+    When sample shading is active, an integer sample shading factor is derived
+    based on the value provided in the command:
+
+      void MinSampleShading(float value);
+
+    When the shading rate image is disabled, a <value> of 0.0 specifies that
+    the minimum number of fragment shader invocations for the shading rate be
+    executed and a <value> of 1.0 specifies that a fragment shader should be
+    on each shadeable sample with separate values per sample.  When the
+    shading rate image is enabled, <value> is used to derive a sample shading
+    rate that can adjust the shading rate.  <value> is not clamped to [0.0,
+    1.0]; values larger than 1.0 can be used to force larger adjustments to
+    the shading rate.
+
+    The sample shading factor is computed from <value> in an
+    implementation-dependent manner but must be greater than or equal to:
+
+      factor = max(ceil(value * max_shaded_samples), 1)
+
+    In this computation, <max_shaded_samples> is the maximum number of
+    fragment shader invocations per fragment, and is equal to:
+
+    - the number of color samples, if the framebuffer has color attachments;
+
+    - the number of depth/stencil samples, if the framebuffer has
+      depth/stencil attachments but no color attachments; or
+
+    - the value of FRAMEBUFFER_DEFAULT_SAMPLES if the framebuffer has no
+      attachments.
+
+    If the framebuffer has non-multisample attachments, the maximum number of
+    shaded samples per pixel is always one.
+
+
+    Section 14.4.3, Shading Rate Adjustment
+
+    Once a base shading rate has been established, it is adjusted to produce a
+    final shading rate.
+
+    First, if the base shading rate specifies multiple pixels for a fragment,
+    the shading rate is adjusted in an implementation-dependent manner to
+    limit the total number of coverage samples for the "coarse" fragment.
+    After adjustment, the maximum number of samples will not exceed the
+    implementation-dependent maximum MAX_COARSE_FRAGMENT_SAMPLES_NV.  However,
+    implementations are permitted to clamp to a lower number of coverage
+    samples if required.  Table X.2 describes the clamping performed in the
+    initial implementation of this extension.
+
+                           Coverage Samples per Pixel
+                Base rate    2      4      8     16
+                ---------  -----  -----  -----  -----
+                   1x2       -      -      -     1x1
+                   2x1       -      -      1x1   1x1
+                   2x2       -      -      1x2   1x1
+                   2x4       -     2x2     1x2   1x1
+                   4x2      2x2    2x2     1x2   1x1
+                   4x4      2x4    2x2     1x2   1x1
+
+      Table X.2, Coarse shading rate adjustment for total coverage sample
+      count for the initial implementation of this extension, where
+      MAX_COARSE_FRAGMENT_SAMPLES_NV is 16.  The entries in the "2", "4", "8",
+      and "16" columns indicate the fragment size for the adjusted shading
+      rate.
+
+    If sample shading is enabled and the sample shading factor is greater than
+    one, the base shading rate is further adjusted to result in more shader
+    invocations per pixel.  Table X.3 describes how the shading rate is
+    adjusted in the initial implementation of this extension.
+
+                               Sample Shading Factor
+          Base rate      2           4           8         16
+          ----------  ---------   -------    --------   --------
+           1x1 / 1     1x1 / 2    1x1 / 4    1x1 / 8    1x1 / 16
+           1x2 / 1     1x1 / 1    1x1 / 2    1x1 / 4    1x1 / 8
+           2x1 / 1     1x1 / 1    1x1 / 2    1x1 / 4    1x1 / 8
+           2x2 / 1     1x2 / 1    1x1 / 1    1x1 / 2    1x1 / 4
+           2x4 / 1     2x2 / 1    1x2 / 1    1x1 / 1    1x1 / 2
+           4x2 / 1     2x2 / 1    2x1 / 1    1x1 / 1    1x1 / 2
+           4x4 / 1     2x4 / 1    2x2 / 1    1x2 / 1    1x1 / 1
+           1x1 / 2     1x1 / 4    1x1 / 8    1x1 / 16   1x1 / 16
+           1x1 / 4     1x1 / 8    1x1 / 16   1x1 / 16   1x1 / 16
+           1x1 / 8     1x1 / 16   1x1 / 16   1x1 / 16   1x1 / 16
+           1x1 / 16    1x1 / 16   1x1 / 16   1x1 / 16   1x1 / 16
+
+      Table X.3, Shading rate adjustment based on the sample shading factor in
+      the initial implementation of this extension.  All rates in this table
+      are of the form "<W>x<H> / <I>", indicating a fragment size of <W>x<H>
+      pixels with <I> invocations per fragment.
+
+    If RASTER_MULTISAMPLE_EXT is enabled and the shading rate indicates
+    multiple fragment shader invocations per pixel, implementations are
+    permitted to adjust the shading rate to reduce the number of invocations
+    per pixel.  In this case, implementations are not required to support more
+    than one invocations per pixel.
+
+    If the active fragment shader uses any inputs that are qualified with
+    "sample" (unique values per sample), including the built-ins "gl_SampleID"
+    and "gl_SamplePosition", the shader code is written to expect a separate
+    shader invocation for each shaded sample.  For such fragment shaders, the
+    shading rate is set to the maximum number of shader invocations per pixel
+    (SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV).  This adjustment effectively
+    disables the shading rate image.
+
+    Finally, if the shading rate indicates multiple fragment shader
+    invocations per sample, the total number of invocations per fragment in
+    the shading rate is clamped to the maximum number of shaded samples per
+    pixel described in section 14.4.2.
+
+
+    Section 14.4.4, Shading Rate Application
+
+    If the palette indicates a shading rate of SHADING_RATE_NO_INVOCATIONS_NV,
+    for pixel (x,y), no fragments will be generated for that pixel.
+
+    When the final shading rate for pixel (x,y) is results in fragments with a
+    width and height of <W> and <H>, where either <W> or <H> is greater than
+    one, a single fragment will be produced for that pixel that also includes
+    all other pixels covered by the same primitive whose coordinates (x',y')
+    satisfy:
+
+      floor(x / W) == floor(x' / W), and
+      floor(y / H) == floor(y' / H).
+
+    This combined fragment is considered to have multiple coverage samples;
+    the total number of samples in this fragment is given by
+
+      samples = A * B * S
+
+    where <A> and <B> are the width and height of the combined fragment, in
+    pixels, and <S> is the number of coverage samples per pixel in the draw
+    framebuffer.  The set of coverage samples in the fragment is the union of
+    the per-pixel coverage samples in each of the fragment's pixels.  The
+    location and order of coverage samples within each pixel in the combined
+    fragment are the same as the location and order used for single-pixel
+    fragments.  Each coverage sample in the set of pixels belonging to the
+    combined fragment is assigned a unique sample number in the range
+    [0,<S>-1].  When rendering to a framebuffer object, the order of coverage
+    samples can be specified for each combination of fragment size and
+    coverage sample count.  When using the default framebuffer, the coverage
+    samples are ordered in an implementation-dependent manner.  The command
+
+        void ShadingRateSampleOrderNV(enum order);
+
+    sets the coverage sample order for all valid combinations of shading rate
+    and per-pixel sample coverage count.  If <order> is
+    COARSE_SAMPLE_ORDER_DEFAULT_NV, coverage samples are ordered in an
+    implementation-dependent default order.  If <order> is
+    COARSE_SAMPLE_ORDER_PIXEL_MAJOR_NV, coverage samples in the combined
+    fragment will be ordered sequentially, sorted first by pixel coordinate
+    (in row-major order) and then by per-pixel coverage sample number.  If
+    <order> is COARSE_SAMPLE_ORDER_SAMPLE_MAJOR_NV, coverage samples in the
+    combined fragment will be ordered sequentially, sorted first by per-pixel
+    coverage sample number and then by pixel coordinate (in row-major order).
+
+    When processing a fragment using an ordering specified by
+    COARSE_SAMPLE_ORDER_PIXEL_MAJOR_NV sample <cs> in the combined fragment
+    will be assigned to coverage sample <ps> of pixel (px,py) specified by:
+
+      px = fx + (floor(cs / fsc) % fw)
+      py = fy + floor(cs / (fsc * fw))
+      ps = cs % fsc
+
+    where the lower-leftmost pixel in the fragment has coordinates (fx,fy),
+    the fragment width and height are <fw> and <fh>, respectively, and there
+    are <fsc> coverage samples per pixel.  When processing a fragment with an
+    ordering specified by COARSE_SAMPLE_ORDER_SAMPLE_MAJOR_NV, sample <cs> in
+    the combined fragment will be assigned using:
+
+      px = fx + (cs % fw)
+      py = fy + (floor(cs / fw) % fh)
+      ps = floor(cs / (fw * fh))
+
+    Additionally, the command
+
+        void ShadingRateSampleOrderCustomNV(enum rate, uint samples,
+                                            const int *locations);
+
+    specifies the order of coverage samples for fragments using a shading rate
+    of <rate> with <samples> coverage samples per pixel.  <rate> must be one
+    of the shading rates specified in Table X.1 and must specify a shading
+    rate with more than one pixel per fragment.  <locations> specifies an
+    array of N (x,y,s) tuples, where N is the product the fragment width
+    indicated by <rate>, the fragment height indicated by <rate>, and
+    <samples>.  For each (x,y,s) tuple specified in <locations>, <x> must be
+    in the range [0,fw-1], y must be in the range [0,fh-1], and s must be in
+    the range [0,fsc-1].  No two tuples in <locations> may have the same
+    values.
+
+    When using a sample order specified by ShadingRateSampleOrderCustomNV,
+    sample <cs> in the combined fragment will be assigned using:
+
+      px = fx + locations[3 * cs + 0]
+      py = fy + locations[3 * cs + 1]
+      ps = locations[3 * cs + 2]
+
+    where all terms in these equations are defined as in the equations
+    specified for ShadingRateSampleOrderNV and are consistent with a shading
+    rate of <rate> and a per-pixel sample count of <samples>.
+
+      Errors
+
+       * INVALID_ENUM is generated if <rate> is not one of the enums in Table
+         X.1.
+
+       * INVALID_OPERATION is generated if <rate> does not specify a
+         shading rate palette entry that specifies fragments with more than
+         one pixel.
+
+       * INVALID_VALUE is generated if <sampleCount> is not 1, 2, 4, or 8.
+
+       * INVALID_OPERATION is generated if the product of the fragment width
+         indicated by <rate>, the fragment height indicated by <rate>, and
+         samples is greater than MAX_COARSE_FRAGMENT_SAMPLES_NV.
+
+       * INVALID_VALUE is generated if any (x,y,s) tuple in <locations> has
+         negative values of <x>, <y>, or <s>, has an <x> value greater than or
+         equal to the width of fragments using <rate>, has a <y> value greater
+         than or equal to the height of fragments using <rate>, or has an <s>
+         value greater than or equal to <sampleCount>.
+
+       * INVALID_OPERATION is generated if any pair of (x,y,s) tuples in
+         <locations> have identical values.
+
+    In the initial state, the order of coverage samples in combined fragments
+    is implementation-dependent, but will be identical to the order obtained
+    by passing COARSE_SAMPLE_ORDER_DEFAULT_NV to ShadingRateSampleOrderNV.
+
+    The command
+
+      void GetShadingRateSampleLocationivNV(enum rate, uint samples,
+                                            uint index, int *location);
+
+    can be used to determine the specific pixel and sample number for each
+    numbered sample in a single- or multi-pixel fragment when the final
+    shading rate is <rate> and uses <samples> coverage samples per pixel.
+    <index> specifies a sample number in the fragment.  Three integers are
+    returned in <location>, and are interpreted in the same manner as each
+    (x,y,s) tuples passed to ShadingRateSampleOrderCustomNV.  The command
+    GetMultisamplefv can be used to determine the location of the identified
+    sample <s> within a combined fragment pixel identified by (x,y).
+
+      Errors
+
+        INVALID_OPERATION is returned if <rate> is
+        SHADING_RATE_NO_INVOCATIONS_NV.
+
+        INVALID_VALUE is returned if <index> is greater than or equal to the
+        number of coverage samples in the draw framebuffer in a combined pixel
+        for a shading rate given by <rate>.
+
+    When the final shading rate for pixel (x,y) specifies single-pixel
+    fragments, a single fragment with S samples numbered in the range
+    [0,<S>-1] will be generated when (x,y) is covered.
+
+    If the final shading rate for the fragment containing pixel (x,y) produces
+    fragments covering multiple pixels, a single fragment shader invocation
+    will be generated for the combined fragment.  When using fragments with
+    multiple pixels per fragment, fragment shader outputs (e.g., color values
+    and gl_FragDepth) will be broadcast to all covered pixels/samples of the
+    fragment.  If a "discard" is used in a fragment shader, none of the
+    pixels/samples of the fragment will be updated.
+
+    If the final shading rate for pixel (x,y) indicates <N> fragment shader
+    invocations per fragment, <N> separate fragment shader invocations will be
+    generated for the single-pixel fragment.  Each coverage sample in the
+    fragment is assigned to one of the <N> fragment shader invocations in an
+    implementation-dependent manner.
+
+    If sample shading is enabled and the final shading rate results in
+    multiple fragment shader invocations per pixel, each fragment shader
+    invocation for a pixel will have a separate set of interpolated input
+    values.  If sample shading is disabled, interpolated fragment shader
+    inputs not qualified with "centroid" may have the same value for each
+    invocation.
+
+
+    Modify Section 14.6.X, Conservative Rasterization from the
+    NV_conservative_raster extension specification
+
+    (add to the end of the section)
+
+    When the shading rate results in fragments covering more than one pixel,
+    coverage evaluation for conservative rasterization will be performed
+    independently for each pixel.  In a such a case, a pixel considered not to
+    be covered by a conservatively rasterized primitive will still be
+    considered uncovered even if a neighboring pixel in the same fragment is
+    covered.
+
+
+    Modify Section 14.9.2, Scissor Test
+
+    (add to the end of the section)
+
+    When the shading rate results in fragments covering more than one pixel,
+    the scissor tests are performed separately for each pixel in the fragment.
+    If a pixel covered by a fragment fails either the scissor or exclusive
+    scissor test, that pixel is treated as though it was not covered by the
+    primitive.  If all pixels covered by a fragment are either not covered by
+    the primitive being rasterized or fail either scissor test, the fragment
+    is discarded.
+
+
+    Modify Section 14.9.3, Multisample Fragment Operations (p. 562)
+
+    (modify the end of the first paragraph to indicate that sample mask
+    operations are performed when using the shading rate image, which can
+    produce coarse fragments where each pixel is considered a "sample")
+
+    ... This step is skipped if MULTISAMPLE is disabled or if the value of
+    SAMPLE_BUFFERS is not one, unless SHADING_RATE_IMAGE_NV is enabled for one
+    or more viewports.
+
+    (add to the end of the section)
+
+    When the shading rate results in fragments covering more than one pixel,
+    each fragment will a composite coverage mask that includes separate
+    coverage bits for each sample in each pixel covered by the fragment.  This
+    composite coverage mask will be used by the GLSL built-in input variable
+    gl_SampleMaskIn[] and updated according to the built-in output variable
+    gl_SampleMask[].  Each bit number in this composite mask maps to a
+    specific pixel and sample number within that pixel.
+
+    When building the composite coverage mask for a fragment, rasterization
+    logic evaluates separate per-pixel coverage masks and then modifies each
+    per-pixel mask as described in this section.  After that, it assembles the
+    composite mask by applying the mapping of composite mask bits to
+    pixels/samples, which can be queried using GetShadingRateSampleLocationfvNV.
+    When using the output sample mask gl_SampleMask[] to determine which
+    samples should be updated by subsequent per-fragment operations, a set of
+    separate per-pixel output masks is extracted by reversing the mapping used
+    to generate the composite sample mask.
+
+
+    Modify Section 15.1, Fragment Shader Variables (p. 566)
+
+    (modify fourth paragraph, p. 567, specifying how "centroid" works for
+    multi-pixel fragments)
+
+    When interpolating input variables, the default screen-space location at
+    which these variables are sampled is defined in previous rasterization
+    sections.  The default location may be overriden by interpolation
+    qualifiers.  When interpolating variables declared using "centroid in",
+    the variable is sampled at a location inside the area of the fragment that
+    is covered by the primitive generating the fragment. ...
+
+
+    Modify Section 15.2.2, Shader Inputs (p. 566), as edited by
+    NV_conservative_raster_underestimation
+
+    (add to new paragraph on gl_FragFullyCoveredNV)
+
+    When CONSERVATIVE_RASTERIZATION_NV or CONSERVATIVE_RASTERIZATION2_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.  When the shading rate results in fragments covering more
+    than one pixel, gl_FragFullyCoveredNV will be true if and only if all
+    pixels covered by the fragment are fully covered by the primitive being
+    rasterized.
+
+
+    Modify Section 17.3, Per-Fragment Operations (p. 587)
+
+    (insert a new paragraph after the first paragraph of the section)
+
+    If the fragment covers multiple pixels, the operations described in the
+    section are performed independently for each pixel covered by the
+    fragment.  The set of samples covered by each pixel is determined by
+    extracting the portion of the fragment's composite coverage that applies
+    to that pixel, as described in section 14.9.3.
+
+
+Dependencies on ARB_sample_locations and NV_sample_locations
+
+    If ARB_sample_locations or NV_sample_locations is supported, applications
+    can enable programmable sample locations instead of the default sample
+    locations, and also configure sample locations that may vary from pixel to
+    pixel.
+
+    When using "coarse" shading rates covering multiple pixels, the coarse
+    fragment is considered to include the samples of all the pixels it
+    contains.  Each sample of each pixel in the coarse fragment is mapped to
+    exactly one sample in the coarse fragment.  The location of each sample in
+    the coarse fragment is determined by mapping the sample to a pixel (px,py)
+    and a sample <s> within the identified pixel.  The exact location of that
+    identified sample is the same as it would be for one-pixel fragments.  If
+    programmable sample locations are enabled, those locations will be used.
+    If the sample location pixel grid is enabled, those locations will depend
+    on the (x,y) coordinate of the containing pixel.
+
+Dependencies on NV_scissor_exclusive
+
+    If NV_scissor_exclusive is not supported, remove references to the
+    exclusive scissor test in section 14.9.2.
+
+Dependencies on NV_sample_mask_override_coverage
+
+    If NV_sample_mask_override_coverage is supported, applications are able to
+    use the sample mask to enable coverage for samples not covered by the
+    primitive being rasterized.  When this extension is used in conjunction
+    with a shading rate where fragments cover multiple pixels, it's possible
+    for the sample mask override to enable coverage for pixels that would
+    normally be discarded.  For example, this can enable coverage in pixels
+    that are not covered by the primitive being rasterized or that fail the
+    scissor test.
+
+Dependencies on NV_conservative_raster
+
+    If NV_conservative_raster is supported, conservative rasterization
+    evaluates coverage per pixel, even when using a shading rate that
+    specifies multiple pixels per fragment.
+
+    If NV_conservative_raster is not supported, remove edits to the "Section
+    14.6.X" section from that extension.
+
+Dependencies on NV_conservative_raster_underestimation
+
+    If NV_conservative_raster_underestimation is supported, and conservative
+    rasterization is enabled with a shading rate that specifies multiple
+    pixels per fragment, gl_FragFullyCoveredNV will be true if and only if all
+    pixels covered by the fragment are fully covered by the primitive being
+    rasterized.
+
+    If NV_conservative_raster_underestimation is not supported, remove edits
+    to Section 15.2.2 related to gl_FragFullyCoveredNV.
+
+Dependencies on EXT_raster_multisample
+
+    If EXT_raster_multisample is not supported, remove the language allowing
+    implementations to reduce the number of fragment shader invocations
+    per pixel if RASTER_MULTISAMPLE_EXT is enabled.
+
+
+Additions to the AGL/GLX/WGL Specifications
+
+    None
+
+Errors
+
+    See the "Errors" sections for individual commands above.
+
+New State
+
+    Get Value                   Get Command        Type    Initial Value    Description                 Sec.    Attribute
+    ---------                   ---------------    ----    -------------    -----------                 ----    ---------
+    SHADING_RATE_IMAGE_NV       IsEnabledi         16+ x   FALSE            Use shading rate image to   14.4.1  enable
+                                                    B                       determine shading rate for
+                                                                            a given viewport
+    SHADING_RATE_IMAGE_         GetIntegerv         Z      0                Texture object bound for    14.4.1  none
+      BINDING_NV                                                            use as a shading rate image
+    <none>                      GetShadingRate-    16+ x   SHADING_RATE_1_- Shading rate palette        14.4.1  none
+                                ImagePaletteNV     16+ x   INVOCATION_PER_- entries
+                                                    Z12    PIXEL_NV
+    <none>                      GetShadingRate-    many    n/a              Locations of individual     14.4.3  none
+                                SampleLocation-    3xZ+                     samples in "coarse"
+                                                                            fragments
+
+New Implementation Dependent State
+
+                                                    Minimum
+    Get Value                Type  Get Command      Value   Description                   Sec.
+    ---------                ----- ---------------  ------- ------------------------      ------
+    SHADING_RATE_IMAGE_      Z+    GetIntegerv      1       Width (in pixels) covered by  14.4.1
+      TEXEL_WIDTH_NV                                        each shading rate image texel
+    SHADING_RATE_IMAGE_      Z+    GetIntegerv      1       Height (in pixels) covered by 14.4.1
+      TEXEL_HEIGHT_NV                                       each shading rate image texel
+    SHADING_RATE_IMAGE_      Z+    GetIntegerv      16      Number of entries in each     14.4.1
+      PALETTE_SIZE_NV                                       viewport's shading rate
+                                                            palette
+    MAX_COARSE_FRAGMENT_     Z+    GetIntegerv      1       Maximum number of samples in  14.4.3
+      PALETTE_SIZE_NV                                       "coarse" fragments
+
+Issues
+
+    (1) How should we name this extension?
+
+      RESOLVED:  We are calling this extension NV_shading_rate_image.  We use
+      the term "shading rate" to indicate the variable number of fragment
+      shader invocations that will be spawned for a particular neighborhood of
+      covered pixels.  The extension can support shading rates running one
+      invocation for multiple pixels and/or multiple invocations for a single
+      pixel.  We use "image" in the extension name because we allow
+      applications to control the shading rate using an image, where each
+      pixel specifies a shading rate for a portion of the framebuffer.
+
+      We considered a name like "NV_variable_rate_shading", but decided that
+      name didn't sufficiently distinguish between this extension (where
+      shading rate varies across the framebuffer at once) from an extension
+      where an API is provided to change the shading rate for the entire
+      framebuffer.  For example, the MinSampleShadingARB() API in
+      ARB_sample_shading allows an application to run one thread per pixel
+      (0.0) for some draw calls and one thread per sample (1.0) for others.
+
+    (2) Should this extension support only off-screen (FBO) rendering or can
+        it also support on-screen rendering?
+
+      RESOLVED:  This extension only supports rendering to a framebuffer
+      object; the feature is disabled when rendering to the default
+      framebuffer.  In some window system environments, the default
+      framebuffer may be a subset of a larger framebuffer allocation
+      corresponding the full screen.  Because the initial hardware
+      implementation of this extension always uses (x,y) coordinates relative
+      to the framebuffer allocation to determine the shading rate, the shading
+      rate would depend on the location of a window on the screen and change
+      as the window moves.  While some window systems may have separate
+      default framebuffer allocations for each window, we've chosen to
+      disallow use of the shading rate image with the default framebuffer
+      globally instead of adding a "Can I use the shading rate image with a
+      default framebuffer?" query.
+
+    (3) How does this feature work with per-sample shading?
+
+      RESOLVED:  When using per-sample shading, an application is expecting a
+      fragment shader to run with a separate invocation per sample.  The
+      shading rate image might allow for a "coarsening" that would break such
+      shaders.  We've chosen to override the shading rate (effectively
+      disabling the shading rate image) when per-sample shading is used.
+
+    (4) Should BindShadingRateImageNV take any arguments to bind a subset of
+        a complex texture (e.g., a specific layer of an array texture or a
+        non-base mipmap level)?
+
+      RESOLVED:  No.  Applications can use texture views to create texture
+      that refer to the desired subset of a more complex texture, if required.
+
+    (5) Does a shading rate image need to be bound in order to use the shading
+        rate feature?
+
+      RESOLVED:  No.  The behavior where there is no texture bound when
+      SHADING_RATE_IMAGE_NV is enabled is explicitly defined to behave as if a
+      lookup was performed and returned zero.  If an application wants to use
+      a constant rate other than SHADING_RATE_1_INVOCATION_PER_PIXEL_NV, it
+      can enable SHADING_RATE_IMAGE_NV, ensure no image is bound, and define
+      the entries for index zero in the relevant palette(s) to contain the
+      desired shading rate.  This technique can be used to emulate 16x
+      multisampling on implementations that don't support it by binding larger
+      4x multisample textures to the framebuffer and then setting a shading
+      rate of SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV.
+
+    (6) How is the FRAGMENT_SHADER_INVOCATIONS_ARB query (from
+        ARB_pipeline_statistics_query) handled with fragments covering
+        multiple pixels?
+
+      RESOLVED:  The fragment shader invocation for each multi-pixel fragment
+      is counted exactly once.
+
+    (7) How do we handle the combination of variable-rate shading (including
+        multiple invocations per pixel) and target-independent rasterization
+        (i.e., RASTER_MULTISAMPLE_EXT)?
+
+      RESOLVED:  In EXT_raster_multisample, the specification allows
+      implementations to run a single fragment shader invocation for each
+      pixel, even if sample shading would normally call for multiple
+      invocations per pixel:
+
+        If RASTER_MULTISAMPLE_EXT is enabled, the number of unique samples to
+        process is implementation-dependent and need not be more than one.
+
+      The shading rates in this extension calling for multiple fragment shader
+      invocations per pixel behave similarly to sample shading, so we extend
+      the allowance to this extension as well.  If the shading rate in a
+      region of the framebuffer calls for multiple fragment shader invocations
+      per pixel, implementations are permitted to modify the shading rate and
+      need not support more than one invocation per pixel.
+
+    (8) Both the shading rate image and the framebuffer attachments can be
+        layered or non-layered.  Do they have to match?
+
+      RESOLVED:  No.  When using a shading rate image with a target of
+      TEXTURE_2D with a layered framebuffer, all layers in the framebuffer
+      will use the same two-dimensional shading rate image.  When using a
+      shading rate image with a target of TEXTURE_2D_ARRAY with a non-layered
+      framebuffer, layer zero of the shading rate image will be used, except
+      perhaps in the (undefined behavior) case where a shader writes a
+      non-zero value to gl_Layer.
+
+    (9) When using shading rates that specify "coarse" fragments covering
+        multiple pixels, we will generate a combined coverage mask that
+        combines the coverage masks of all pixels covered by the fragment.  By
+        default, these masks are combined in an implementation-dependent
+        order.  Should we provide a mechanism allowing applications to query
+        or specify an exact order?
+
+      RESOLVED:  Yes, this feature is useful for cases where most of the
+      fragment shader can be evaluated once for an entire coarse fragment, but
+      where some per-pixel computations are also required.  For example, a
+      per-pixel alpha test may want to kill all the samples for some pixels in
+      a coarse fragment.  This sort of test can be implemented using an output
+      sample mask, but such a shader would need to know which bit in the mask
+      corresponds to each sample in the coarse fragment.  The command
+      ShadingRateSampleOrderNV allows applications to specify simple orderings
+      for all combinations, while ShadingRateSampleOrderCustomNV allows for
+      completely customized orders for each combination.
+
+    (10) How do centroid-sampled variables work with fragments larger than one
+         pixel?
+
+      RESOLVED:  For single-pixel fragments, attributes declared with
+      "centroid" are sampled at an implementation-dependent location in the
+      intersection of the area of the primitive being rasterized and the area
+      of the pixel that corresponds to the fragment.  With multi-pixel
+      fragments, we follow a similar pattern, using the intersection of the
+      primitive and the *set* of pixels corresponding to the fragment.
+
+      One important thing to keep in mind when using such "coarse" shading
+      rates is that fragment attributes are sampled at the center of the
+      fragment by default, regardless of the set of pixels/samples covered by
+      the fragment.  For fragments with a size of 4x4 pixels, this center
+      location will be more than two pixels (1.5 * sqrt(2)) away from the
+      center of the pixels at the corners of the fragment.  When rendering a
+      primitive that covers only a small part of a coarse fragment,
+      interpolating a color outside the primitive can produce overly bright or
+      dark color values if the color values have a large gradient.  To deal
+      with this, an application can use centroid sampling on attributes where
+      "extrapolation" artifacts can lead to overly bright or dark pixels.
+      Note that this same problem also exists for multisampling with
+      single-pixel fragments, but is less severe because it only affects
+      certain samples of a pixel and such bright/dark samples may be averaged
+      with other samples that don't have a similar problem.
+
+    (11) How does this feature interact with multisampling?
+
+      RESOLVED:  The shading rate image can produce "coarse" fragments larger
+      than one pixel, which we want to behave a lot like regular multisample.
+      One can consider each coarse fragment to be a lot like a "pixel", where
+      the individual pixels covered by the fragment are treated as "samples".
+
+      When the shading rate is enabled, we override several rules related to
+      multisampling:
+
+      (a) Multisample rasterization rules apply, even if we don't have
+          multisample buffers or if MULTISAMPLE is disabled.
+
+      (b) Coverage for the pixels comprising a coarse fragment is combined
+          into a single aggregate coverage mask that can be read using the
+          fragment shader input "gl_SampleMaskIn[]".
+
+      (c) Coverage for pixels comprising a coarse fragment can be modified using
+          the fragment shader output "gl_SampleMask[]", which is also
+          interpreted as an aggregate coverage mask.
+
+      Note that (a) means that point and line primitives may be rasterized
+      differently depending on whether the shading rate image is enabled or
+      disabled.
+
+    Also, please refer to issues in the GLSL extension specification.
+
+Revision History
+
+    Revision 1 (pbrown)
+    - Internal revisions.
diff --git a/extensions/NV/NV_vdpau_interop2.txt b/extensions/NV/NV_vdpau_interop2.txt
new file mode 100644
index 0000000..45c371c
--- /dev/null
+++ b/extensions/NV/NV_vdpau_interop2.txt
@@ -0,0 +1,206 @@
+Name
+
+    NV_vdpau_interop2
+
+Name Strings
+
+    GL_NV_vdpau_interop2
+
+Contributors
+
+    Manoj Gupta Bonda, NVIDIA
+    James Jones, NVIDIA
+
+Contact
+
+    Manoj Gupta Bonda, NVIDIA (mbonda 'at' nvidia.com)
+
+Status
+
+    XXX - Not complete yet!!!
+
+Version
+
+    1 (2 Oct 2018)
+
+Number
+
+    OpenGL Extension #593
+
+Dependencies
+
+    This extension is written against the OpenGL 4.6 Specification
+    (Compatibility Profile), dated July 30, 2017.
+    but can apply to OpenGL 1.1 and up.
+
+    OpenGL 1.1 is required.
+    GL_NV_vdpau_interop is required.
+    GL_EXT_framebuffer_object affects the definition of this extension.
+    GL_ARB_texture_rectangle affects the definition of this extension.
+    GL_ARB_texture_non_power_of_two affects the definition of this
+    extension.
+
+Overview
+
+    This extension allows VDPAU video surfaces to be used
+    either with frame or field structures for texturing and rendering.
+
+IP Status
+
+    There are no known IP issues. 
+
+New Types
+
+    None
+
+New Procedures and Functions
+
+
+    vdpauSurfaceNV VDPAURegisterVideoSurfaceWithPictureStructureNV (const void *vdpSurface,
+                                                                    enum       target,
+                                                                    sizei      numTextureNames,
+                                                                    const uint *textureNames,
+                                                                    boolean    isFrameStructure);
+
+New Tokens
+
+    None
+
+Additions to Chapter 8 of the OpenGL 4.6 (unabridged) Specification
+(Textures and Samplers)
+    
+    Replace the paragraph that begins with 'The command 
+    vdpauSurfaceNV VDPAURegisterVideoSurfaceNV' and the following two paragraphs,
+    including table 3.8.3.1, with the following:
+
+    The commands
+    
+        vdpauSurfaceNV VDPAURegisterVideoSurfaceNV (const void *vdpSurface,
+                                                    enum       target,
+                                                    sizei      numTextureNames,
+                                                    const uint *textureNames);
+
+        vdpauSurfaceNV VDPAURegisterVideoSurfaceWithPictureStructureNV (const void *vdpSurface,
+                                                                        enum       target,
+                                                                        sizei      numTextureNames,
+                                                                        const uint *textureNames,
+                                                                        boolean    isFrameStructure);
+
+    defines a set of two-dimensional textures, where the image data may
+    be taken from the VdpVideoSurface <vdpSurface>. <target> must be
+    one of TEXTURE_2D or TEXTURE_RECTANGLE. <numTextureNames>
+    determines how many textures are defined. <textureNames> contains
+    the names of the textures that are defined. The surface is
+    transitioned into the registered state.
+    
+    VDPAURegisterVideoSurfaceNV is equivalent to calling 
+    VDPAURegisterVideoSurfaceWithPictureStructureNV with <isFrameStructure> 
+    set to FALSE.
+
+    Legal values for <numTextureNames>,<isFrameStructure> are derived from the
+    VdpChromaType of <vdpSurface>, as defined in table 8.7.1.
+
+                                                                                          Internal
+      VdpChromaType              numTextureNames  isFrameStructure      Index  Size       Format    Content
+      -------------              ---------------  ----------------      -----  ----       --------  -------------------
+      VDP_CHROMA_TYPE_420        4                        0             0      w   x h/2  R8        Top-field luma
+                                                                        1      w   x h/2  R8        Bottom-field luma
+                                                                        2      w/2 x h/4  R8G8      Top-field chroma
+                                                                        3      w/2 x h/4  R8G8      Bottom-field chroma
+      VDP_CHROMA_TYPE_422        4                        0             0      w   x h/2  R8        Top-field luma
+                                                                        1      w   x h/2  R8        Bottom-field luma
+                                                                        2      w/2 x h/2  R8G8      Top-field chroma
+                                                                        3      w/2 x h/2  R8G8      Bottom-field chroma
+      VDP_CHROMA_TYPE_444        4                        0             0      w   x h/2  R8        Top-field luma
+                                                                        1      w   x h/2  R8        Bottom-field luma
+                                                                        2      w   x h/2  R8G8      Top-field chroma
+                                                                        3      w   x h/2  R8G8      Bottom-field chroma
+      VDP_CHROMA_TYPE_420        2                        1             0      w   x h    R8        Luma
+                                                                        1      w/2 x h/2  R8G8      Chroma
+      VDP_CHROMA_TYPE_422        2                        1             0      w   x h    R8        Luma
+                                                                        1      w/2 x h    R8G8      Chroma
+      VDP_CHROMA_TYPE_444        2                        1             0      w   x h    R8        Luma
+                                                                        1      w   x h    R8G8      Chroma
+      VDP_CHROMA_TYPE_420_FIELD  4                        0             0      w   x h/2  R8        Top-field luma
+                                                                        1      w   x h/2  R8        Bottom-field luma
+                                                                        2      w/2 x h/4  R8G8      Top-field chroma
+                                                                        3      w/2 x h/4  R8G8      Bottom-field chroma
+      VDP_CHROMA_TYPE_422_FIELD  4                        0             0      w   x h/2  R8        Top-field luma
+                                                                        1      w   x h/2  R8        Bottom-field luma
+                                                                        2      w/2 x h/2  R8G8      Top-field chroma
+                                                                        3      w/2 x h/2  R8G8      Bottom-field chroma
+      VDP_CHROMA_TYPE_444_FIELD  4                        0             0      w   x h/2  R8        Top-field luma
+                                                                        1      w   x h/2  R8        Bottom-field luma
+                                                                        2      w   x h/2  R8G8      Top-field chroma
+                                                                        3      w   x h/2  R8G8      Bottom-field chroma
+      VDP_CHROMA_TYPE_420_FRAME  2                        1             0      w   x h    R8        Luma
+                                                                        1      w/2 x h/2  R8G8      Chroma
+      VDP_CHROMA_TYPE_422_FRAME  2                        1             0      w   x h    R8        Luma
+                                                                        1      w/2 x h    R8G8      Chroma
+      VDP_CHROMA_TYPE_444_FRAME  2                        1             0      w   x h    R8        Luma
+                                                                        1      w   x h    R8G8      Chroma
+
+      Table 8.7.1: Supported VdpChromaType values, and derived values
+      of <numTextureNames>,<isFrameStructure> and texture parameters for 
+      each texture.
+
+    VDPAURegisterVideoSurfaceWithPictureStructureNV's return value is a handle 
+    used by various other commands detailed in NV_vdpau_interop.
+
+
+Additions to the AGL/GLX/WGL Specifications
+
+    None
+
+Additions to the OpenGL Shading Language
+
+    None
+
+GLX Protocol
+
+    VDPAU implementations currently only support direct-rendering.
+    Consequently, no GLX protocol is currently defined for this
+    extension.
+
+Dependencies on GL_ARB_texture_rectangle
+
+    If GL_ARB_texture_rectangle is not supported, TEXTURE_RECTANGLE may
+    not be used as target for VDPAURegisterVideoSurfaceWithPictureStructureNV.
+
+Dependencies on GL_ARB_texture_non_power_of_two
+
+    If GL_ARB_texture_non_power_of_two is not supported, only VDPAU
+    surfaces with power-of-two size may be used with target TEXTURE_2D.
+
+Errors
+
+    INVALID_OPERATION is generated by 
+    VDPAURegisterVideoSurfaceWithPictureStructureNV if the VDPAU driver
+    refuses the request for some reason.
+
+    INVALID_OPERATION is generated if any texture named by an entry
+    within the <textureNames> parameter of 
+    VDPAURegisterVideoSurfaceWithPictureStructureNV is marked as immutable.
+
+    INVALID_VALUE is generated if the VDPAU surface named by the
+    <vdpSurface> parameter of VDPAURegisterVideoSurfaceWithPictureStructureNV
+    does not have a supported format;
+    see table 8.7.1.
+
+New State
+
+    None
+
+New Implementation State
+
+    None
+
+Issues
+
+
+Revision History
+
+    1. 02 Oct 2018 - Manoj Bonda
+        Initial version
+
+
diff --git a/extensions/OES/OES_texture_float_linear.txt b/extensions/OES/OES_texture_float_linear.txt
index ffcd3d0..47ae7e5 100644
--- a/extensions/OES/OES_texture_float_linear.txt
+++ b/extensions/OES/OES_texture_float_linear.txt
@@ -25,7 +25,7 @@
 
 Version
 
-    Revision 2, October 29, 2014
+    Revision 3, September 21, 2018
 
 Number
 
@@ -37,7 +37,10 @@
 
     This extension is derived from the ARB_texture_float extension.
 
-    OES_texture_half_float and OES_texture_float are required.
+    Either
+     - OES_texture_half_float and OES_texture_float are required.
+    or
+     - OpenGL ES 3.0 is required.
 
 Overview
 
@@ -47,16 +50,67 @@
     LINEAR_MIPMAP_NEAREST and LINEAR_MIPMAP_NEAREST minification
     filters.
 
-    When implemented against OpenGL ES 3.0 or later versions, sized 32-bit
-    floating-point formats become texture-filterable. This should be noted
-    by, for example, checking the ``TF'' column of table 8.13 in the ES 3.1
-    Specification (``Correspondence of sized internal formats to base
-    internal formats ... and use cases ...'') for the R32F, RG32F, RGB32F,
-    and RGBA32F formats.
+    When implemented against OpenGL ES 3.0 or later versions, the
+    existing sized 32-bit floating-point formats become texture-filterable,
+    but no new formats are added.
+
+
+(  Only when implemented against OpenGL ES 3.0  )
+
+Additions to Chapter 3.8.3 of the OpenGL ES 3.0 Specification
+(Texture Image Specification)
+
+    Modify Table 3.13, Correspondence of sized internal color formats to base internal format:
+
+    Check the ``Texture-filterable'' column for the R32F, RG32F, RGB32F, and RGBA32F formats.
+
 
 Issues
 
-   None
+   (1) Can you explain the interactions with OpenGL ES 3.x in more detail?
+
+      OES_texture_float was written against OpenGL ES 2.0 and adds a set of
+      new unsized formats, including floating-point versions of LUMINANCE and
+      LUMINANCE_ALPHA formats.
+
+      OES_texture_float_linear and OES_texture_half_float_linear makes these
+      formats filterable for FLOAT and HALF_FLOAT_OES types, respectively.
+
+      OpenGL ES 3.0 added sized internal formats. The unsized formats and
+      the LUMINANCE formats are considered legacy formats. Floating point
+      versions of these formats were therefore not added in OpenGL ES 3.0.
+
+      Further, OpenGL ES 3.0 requires that the required floating-point
+      formats with 16-bits per component ('half-float') are filterable, but
+      does not support filtering for floating-point formats with 32-bits per
+      component.
+
+      Some OpenGL ES 3.0 implementations want a way to indicate that the
+      required floating-point formats with 32-bit per component are also
+      filterable _without_ adding the additional unsized formats from
+      OES_texture_float. This is achieved by exposing this extension without
+      exposing OES_texture_float.
+
+      For an OpenGL ES 3.0 implementation, the following holds for the
+      combination of the OES_texture_float, OES_texture_float_linear,
+      and OES_texture_half_float_linear extensions:
+
+        - If none of these extensions are supported:
+           - floating-point formats with 32-bit per component are not filterable
+           - floating-point formats with 16-bit per component are filterable
+
+        - If OES_texture_float_linear is supported:
+           - all floating-point formats in Table 3.13 are filterable
+
+        - If OES_texture_float and OES_texture_float_linear are supported:
+           - all floating-point formats in Table 3.13 are filterable
+           - all formats of type FLOAT added by OES_texture_float are filterable
+
+        - If OES_texture_half_float and OES_texture_half_float_linear are
+           supported:
+           - all floating-point formats in Table 3.13 are filterable
+           - all formats of type HALF_FLOAT_OES added by OES_texture_half_float
+             are filterable
 
 New Procedures and Functions
 
@@ -71,3 +125,5 @@
     07/06/2005  0.1   Original draft
 
     10/29/2014  2     Add interactions with ES 3.0/3.1.
+
+    09/21/2018  3     Clarified interactions with ES 3.x.
diff --git a/extensions/OVR/OVR_multiview.txt b/extensions/OVR/OVR_multiview.txt
index bdbd53e..5dd1073 100644
--- a/extensions/OVR/OVR_multiview.txt
+++ b/extensions/OVR/OVR_multiview.txt
@@ -28,6 +28,7 @@
     Tobias Hector, Imagination Technologies
     Daniel Koch, NVIDIA Corporation
     James Helferty, NVIDIA Corporation
+    Olli Etuaho, NVIDIA Corporation
 
 Status
 
@@ -35,8 +36,8 @@
 
 Version
 
-    Last Modified Date: May 2, 2018
-    Revision: 4
+    Last Modified Date: October 19, 2018
+    Revision: 6
 
 Number
 
@@ -47,9 +48,12 @@
 
     OpenGL 3.0 or OpenGL ES 3.0 is required.
 
-    This extensions is written against the OpenGL ES 3.2 (November 3, 2016)
+    This extension is written against the OpenGL ES 3.2 (November 3, 2016)
     specification and the OpenGL 4.6 (Core Profile) (July 30, 2017)
 
+    This extension is written against the OpenGL ES Shading Language 3.00.04
+    specification.
+
     This extension interacts with OpenGL 3.3, ARB_timer_query, and
     EXT_disjoint_timer_query.
 
@@ -258,8 +262,7 @@
     An INVALID_VALUE error is generated if:
     - <numViews> is less than 1 or if <numViews> is greater than MAX_VIEWS_OVR.
     - <texture> is a two-dimensional array texture and <baseViewIndex> +
-      <numViews> is larger than the value of MAX_ARRAY_TEXTURE_LAYERS minus
-      one.
+      <numViews> is larger than the value of MAX_ARRAY_TEXTURE_LAYERS.
     - texture is non-zero and <baseViewIndex> is negative."
 
     An INVALID_OPERATION error is generated if texture is non-zero and is not
@@ -341,6 +344,13 @@
 
       #extension GL_OVR_multiview : <behavior>
 
+    where <behavior> is as specified in section 3.5.
+
+    A new preprocessor #define is added to the OpenGL ES Shading Language:
+
+      #define GL_OVR_multiview 1
+
+
     In section 4.3.8.1 "Input Layout Qualifiers":
 
     Insert a paragraph before the final one ("Fragment shaders cannot ..."):
@@ -778,4 +788,6 @@
                                 interop with compatibility profile's Begin/End (34). Add mention
                                 of OES_geometry_shader and OES_tessellation_shader to interop.
                                 Clarify what happens when transform feedback is paused.
+      5     07/25/18  oetuaho   Fix off-by-one issue in baseViewIndex + numViews check.
+      6     10/19/18  dgkoch    Add standard boiler plate shader extension language.
 
diff --git a/extensions/OVR/OVR_multiview2.txt b/extensions/OVR/OVR_multiview2.txt
index 91f6568..bef4431 100644
--- a/extensions/OVR/OVR_multiview2.txt
+++ b/extensions/OVR/OVR_multiview2.txt
@@ -16,6 +16,7 @@
     Jan Paul van Waveren, Oculus
     Jan-Harald Fredriksen, ARM
     Sam Holmes, Qualcomm
+    Daniel Koch, NVIDIA
 
 Status
 
@@ -23,8 +24,8 @@
 
 Version
 
-    Last Modified Date:  Mar 18, 2015
-    Author Revision: 0.4
+    Last Modified Date:  October 19, 2018
+    Author Revision: 0.5
 
 Number
 
@@ -35,7 +36,10 @@
 
     OpenGL 3.0 or OpenGL ES 3.0 is required.
 
-    Requires extension OVR_multiview to be implemented.
+    This extension is written against the OpenGL ES Shading Language 3.00.04
+    specification.
+
+    This extension requires OVR_multiview.
 
 Overview
 
@@ -57,14 +61,43 @@
 	Including the following line in a shader can be used to control the language
 	features described in this extension:
 
-      #extension GL_OVR_multiview2
+      #extension GL_OVR_multiview2 : <behavior>
+
+    where <behavior> is as specified in section 3.5.
+
+    A new preprocessor #define is added to the OpenGL ES Shading Language:
+
+      #define GL_OVR_multiview2 1
+
+    If the OVR_multiview2 extension is enabled, the OVR_multiview extension
+    is also implicitly enabled.
+
+    Modifications to Section 7.1 "Built-in Language Variables" (as modified by
+    OVR_multiview):
+
+    Delete the paragraph which states:
+
+    It is a compile- or link-time error if any output variable other
+    than gl_Position is statically dependent on gl_ViewID_OVR. If an
+    output variable other than gl_Position is dynamically dependent on
+    gl_ViewID_OVR, the values are undefined.
 
 Errors
 
+    None.
+
 Issues
 
+    (1) Does enabling GL_OVR_multiview2 automatically enable GL_OVR_multiview?
+
+    RESOLVED: Yes. This was not specified in early drafts of the extension,
+    but this is the behavior of multiple implementations.
+
 Revision History
 
       Rev.    Date    Author    Changes
       ----  --------  --------  -----------------------------------------
       0.1   03/18/15  cass      Initial draft
+      0.5   10/19/18  dgkoch    Add standard boiler plate shader extension language.
+                                Add issue 1 and clarify that this extension
+                                implicitly enables OVR_multiview.
diff --git a/extensions/QCOM/QCOM_YUV_texture_gather.txt b/extensions/QCOM/QCOM_YUV_texture_gather.txt
new file mode 100644
index 0000000..57e11eb
--- /dev/null
+++ b/extensions/QCOM/QCOM_YUV_texture_gather.txt
@@ -0,0 +1,97 @@
+Name
+    QCOM_YUV_texture_gather
+
+Name Strings
+
+    GL_QCOM_YUV_texture_gather
+
+Contact
+
+    Jeff Leger ( jleger 'at' qti.qualcomm.com)
+
+Contributors
+
+    Jeff Leger, Qualcomm
+
+
+Status
+
+    Complete
+
+Version
+
+    Last Modified Date:         October 18, 2018
+    Revision:                   1
+
+Number
+
+    OpenGL ES Extension #307
+
+
+Dependencies
+
+    Requires OpenGL ES 3.0
+    Requires GL_EXT_YUV_target
+    Requires EXT_gpu_shader5
+
+
+Overview
+
+    Extension EXT_gpu_shader5 introduced the texture gather built-in functions.
+    Extension EXT_YUV_target adds the ability to sample from YUV textures, but
+    does not include gather functions.   This extension allows gather function
+    to be used in combination with the YUV textures exposed in EXT_YUV_target.
+
+IP Status
+
+    No known IP claims.
+
+New Procedures and Functions
+
+    None
+
+New Tokens
+
+    None
+
+Modifications to The OpenGL ES Shading Language Specification, Version 3.00,
+dated 29 January 2016.
+
+    Including the following line in a shader can be used to control the
+    language features described in this extension:
+
+      #extension QCOM_YUV_texture_gather : <behavior>
+
+    where <behavior> is as specified in section 3.4.
+
+    A new preprocessor #define is added to the OpenGL ES Shading Language:
+
+      #define QCOM_YUV_texture_gather       1
+
+
+    Add to the list of texture gather functions as introduced with EXT_gpu_shader5
+    and core functionality in ESSL 3.1 the following additional function:
+
+    vec4 textureGather(__samplerExternal2DY2YEXT sampler, vec2 P [, int comp] )
+
+Errors
+
+    None.
+
+New State
+
+    None.
+
+New Implementation Dependent State
+
+    None
+
+Issues
+
+    None.
+
+Revision History
+
+    Rev.    Date      Author    Changes
+    ----  ----------  --------  -----------------------------------------
+    1     2018-10-18  jleger    initial version
diff --git a/extensions/QCOM/QCOM_shader_framebuffer_fetch_rate.txt b/extensions/QCOM/QCOM_shader_framebuffer_fetch_rate.txt
new file mode 100644
index 0000000..99f6b45
--- /dev/null
+++ b/extensions/QCOM/QCOM_shader_framebuffer_fetch_rate.txt
@@ -0,0 +1,264 @@
+Name
+    QCOM_shader_framebuffer_fetch_rate
+
+Name Strings
+
+    GL_QCOM_shader_framebuffer_fetch_rate
+
+Contact
+
+    Jeff Leger ( jleger 'at' qti.qualcomm.com)
+
+Contributors
+
+    Jeff Leger, Qualcomm
+    Jonathan Wicks, Qualcomm
+
+Status
+
+    DRAFT
+
+Version
+
+    Last Modified Date:         August 20, 2018
+    Revision:                   1
+
+Number
+
+    OpenGL ES Extension #304
+
+
+Dependencies
+
+    OpenGL ES 2.0 and GLSL ES 1.00 are required.
+
+    This extension is written against the OpenGL ES 3.2 (May 14, 2018)
+    and the OpenGL ES Shading Language 3.20.4 Specification
+    (June 14, 2018) specifications.
+
+    This extension interacts with EXT_shader_framebuffer_fetch.
+    This extension interacts with ARM_shader_framebuffer_fetch_depth_stencil.
+
+Overview
+
+    When certain built-ins (e.g. gl_LastFragData, gl_LastFragStencilARM)
+    are referenced in the shader, the shader is required to execute at sample-rate
+    if the attachments are multisampled.  In some use-cases executing such shaders
+    at fragment-rate is actually the preferred behavior.  When this extension is
+    enabled, such GLSL shaders will execute at fragment-rate and the built-in
+    will return a per-fragment value.  This avoids the significant performance
+    penalty that would otherwise be incurred with sample-rate shading.
+
+    The following built-ins are affected when the this extension is enabled:
+
+        gl_LastFragData      (from EXT_shader_framebuffer_fetch)
+        gl_LastFragDepthARM  (from ARM_shader_framebuffer_fetch_depth_stencil)
+
+    The following built-ins are disallowed when this extension is enabled:
+
+        gl_SampleID
+        gl_SamplePosition
+        interpolateAtSample()
+
+IP Status
+
+    No known IP claims.
+
+New Procedures and Functions
+
+    None
+
+New Tokens
+
+    None
+
+Additions to Chapter 13 of the OpenGL ES 3.2 Specification
+(Fixed-Function Primitive Assembly and Rasterization)
+
+    Modify Section 13.4.1, Sample Shading, p. 353
+
+    Modify the first paragraph:
+        "Sample shading can be used to specify a minimum number of unique samples
+        to process for each fragment. Sample shading is controlled by calling
+        Enable or Disable with target SAMPLE_SHADING."
+
+    by adding one sentence to the end:
+        "Sample shading can be used to specify a minimum number of unique samples
+        to process for each fragment. Sample shading is controlled by calling
+        Enable or Disable with target SAMPLE_SHADING.  For any fragment shader
+        that has forced fragment-rate by enabling QCOM_shader_framebuffer_fetch_rate,
+        such shader will execute as if SAMPLE_SHADING is disabled."
+
+Additions to Chapter 14 (Programmable Fragment Processing) of the OpenGL ES 3.2 Specification
+
+
+    Modify Section 14.2.2 (Shader Inputs), p. 372
+
+        Modify the sentence:
+            "Using gl_SampleID in a fragment shader causes the entire shader to
+            be executed per-sample."
+
+        to:
+            "Using gl_SampleID in a fragment shader causes the entire shader to
+            be executed per-sample.  If GL_QCOM_shader_framebuffer_fetch_rate is
+            enabled, any use of gl_SampleID will result in a compile or link error."
+
+        Modify the sentence:
+            "Using gl_SamplePosition in a fragment shader causes the entire shader to
+            be executed per-sample."
+
+        to:
+            "Using gl_SamplePosition in a fragment shader causes the entire shader to
+            be executed per-sample.  If GL_QCOM_shader_framebuffer_fetch_rate is
+            enabled, any use of gl_SamplePosition will result in a compile or link
+            error."
+
+
+    Modify Section 14.2.3 (Shader Outputs), p. 372
+
+        [[ The following applies if EXT_shader_framebuffer_fetch is supported ]]
+
+            In the new paragraphs added by EXT_shader_framebuffer_fetch to the end
+            this section, change the following added sentence:
+
+                From:
+                   "Reading from a user-defined fragment output declared inout
+                   causes the shader to be evaluated per-sample, since the
+                   framebuffer potentially contains different color values for
+                   each sample."
+
+                To:
+                  "If QCOM_shader_framebuffer_fetch_rate is not enabled, reading from
+                  a user-defined fragment output declared inout causes the shader
+                  to be evaluated per-sample, since the framebuffer potentially
+                  contains different color values for each sample."
+
+            Add the following paragraph to the end of "Shader Outputs" section:
+
+              "If the current rendertarget is multisampled and if
+              QCOM_shader_framebuffer_fetch_rate is enabled, then reading from
+              a user-defined fragment output declared inout will return an
+              implementation-dependent weighted average of the samples within
+              the destination pixel covered by the current fragment.  The value
+              will be between the minium and maximum value of the covered samples.
+              If the destination colors must be linearized from sRGB as
+              described in the preceding paragraphs, the conversion from sRGB
+              to linear happens before computing the weighted average.
+
+Additions to the EGL Specifications
+
+    None.
+
+Modifications to The OpenGL ES Shading Language Specification, Version 3.20.4
+
+    Changes to section 7.1.5. (Fragment Shader Special Variables), p 120.
+
+        Add the following at the start of this section:
+
+            "Static use of certain built-in variables described in this section
+            will cause the shader to be evaluated per-sample. This language feature
+            can be optionally disabled, forcing such shaders to evaluate per-
+            fragment.  The optional behavior can be enabled using:
+
+            #extension GL_QCOM_shader_framebuffer_fetch_rate : <behavior>
+
+            where <behavior> is as specified in section 3.4 (Preprocessor).
+
+            If GL_QCOM_shader_framebuffer_fetch_rate is enabled, it is a compile-time
+            or link-time error if any variable is declared with the "sample"
+            qualifier or if the built-in function interpolateAtSample() is statically
+            referenced."
+
+            Add the New preprocessor #defines are added to the OpenGL ES Shading Language:
+
+            "#define GL_QCOM_shader_framebuffer_fetch_rate  1"
+
+        Modify the last sentence of the paragraph starting with "The input variable
+        gl_SampleID is filled with the sample number of the sample currently being
+        processed"
+
+        from:
+            "Any static use of this variable in a fragment shader causes the entire
+            shader to be evaluated per-sample."
+        to
+            "If GL_QCOM_shader_framebuffer_fetch_rate is not enabled, any static use
+            of this variable in a fragment shader causes the entire shader to be evaluated
+            per-sample.  If GL_QCOM_shader_framebuffer_fetch_rate is enabled, an static
+            reference to gl_SampleID will cause a compile or link error."
+
+        Modify the last sentence of the paragraph starting with "The input variable
+        gl_SamplePosition contains the position of the current sample within the
+        multisample draw buffer."
+
+        from:
+            "Any static use of this variable in a fragment shader causes the entire
+            shader to be evaluated per-sample."
+        to
+            "If GL_QCOM_shader_framebuffer_fetch_rate is not enabled, any static use of
+            this variable in a fragment shader causes the entire shader to be evaluated
+            per-sample.  If GL_QCOM_shader_framebuffer_fetch_rate is enabled, an static
+            reference to gl_SamplePosition will cause a compile or link error."
+
+Interactions with EXT_shader_framebuffer_fetch.
+
+    Extension EXT_shader_framebuffer_fetch adds built-ins (gl_LastFragData[] for
+    version 1.0 shaders and inout variables version 3.0 shaders) that cause fragment
+    shaders to run at sample-rate.  This extension relaxes that requirement to
+    allow fragment-rate and specifies that the value returned from gl_LastFragData
+    will be an implementation-dependent weighted average of the covered pixels.
+
+Interactions with ARM_shader_framebuffer_fetch_depth_stencil.
+
+   Extension ARM_shader_framebuffer_fetch adds built-in "gl_LastFragDepthARM",
+   and specifies the value returned -- for both sample-rate and fragment-rate
+   execution.  This extension can be used to control whether sample-rate or
+   fragment-rate execution is used.
+
+Errors
+
+    None.
+
+New State
+
+    None.
+
+New Implementation Dependent State
+
+    None
+
+Issues
+
+    (1) Does it make sense to enable this extension for a shader that references
+        per-sample built-ins like gl_SampleID and gl_SamplePosition?
+
+        RESOLVED: No.  It doesn't make sense to force fragment-rate
+        execution using this extension, while also referencing per-sample
+        built-ins.  Since there is no known use-case, this will be a compile
+        or link error.
+
+        For the same reason, using the "sample" qualifier or using
+        interpolateAtSample() will cause a compile or link error.
+
+    (2) How does this extension interact with API-controlled sample-rate shading?
+
+        RESOLVED: For shaders that enable this this extension, those the shaders
+        will always execute at fragment-rate, regardless of other API states.
+        In particular, the enable/disable of SAMPLE_SHADING and the value of
+        MIN_SAMPLE_SHADING_VALUE will have no effect on such shaders.
+
+    (3) How does this extension differ from ARM_shader_framebuffer_fetch?
+
+        ARM_shader_framebuffer_fetch provides a means for controlling whether
+        shaders fetching color from the framebuffer should execute at sample-rate or
+        fragement rate.  The API state "FETCH_PER_SAMPLE_ARM" controls
+        this behavior.
+
+        This extension also provides control over sample-rate vs fragment-rate
+        for framebuffer fetch shaders, but does so in the GLSL shader.  Some
+        implementations require this information at shader compile time.
+
+Revision History
+
+    Rev.    Date      Author    Changes
+    ----  ----------  --------  -----------------------------------------
+    1     2018-08-20  jleger     initial version
diff --git a/extensions/QCOM/QCOM_texture_foveated_subsampled_layout.txt b/extensions/QCOM/QCOM_texture_foveated_subsampled_layout.txt
new file mode 100644
index 0000000..4d81f4e
--- /dev/null
+++ b/extensions/QCOM/QCOM_texture_foveated_subsampled_layout.txt
@@ -0,0 +1,324 @@
+Name
+
+    QCOM_texture_foveated_subsampled_layout
+
+Name Strings
+
+    GL_QCOM_texture_foveated_subsampled_layout
+
+Contributors
+
+    Tate Hornbeck
+    Jonathan Wicks
+    Robert VanReenen
+    Jeff Leger
+
+Contact
+
+    Jeff Leger - jleger 'at' qti.qualcomm.com
+
+Status
+
+    Complete
+
+Version
+
+    Last Modified Date:
+    Revision: #3
+
+Number
+
+     OpenGL ES Extension #306
+
+Dependencies
+
+    OpenGL ES 2.0 is required.  This extension is written against OpenGL ES 3.2.
+
+    QCOM_texture_foveated is required.
+
+    This extension interacts with OES_EGL_image_external and
+    OES_EGL_image_external_essl3.
+
+Overview
+
+    This extension builds on QCOM_texture_foveated by introducing a new foveation
+    method bit that aims to reduce memory bandwidth by avoiding the upscaling that
+    occurred as part of the original extension.
+
+    With the original FOVEATION_SCALED_BIN_METHOD_BIT_QCOM foveation method,
+    the render target in system memory is entirely populated. The lower
+    resolution framebuffer data is upscaled to fill the entire render target.
+    The subsampled layout method introduced in this extension leaves the
+    framebuffer data at the calculated lower density and instead samples
+    directly from the the lower resolution texels.
+
+    The primary usecase this is targeting is traditional VR pipeline. The
+    application eye buffers would be rendered as textures with a subsampled layout
+    and then sampled by the warp process. Sampling from a texture with a
+    subsampled layout requires a new sampler layout qualifier.
+
+New Tokens
+
+    Accepted as a value to <param> for the TexParameter{if} and
+    to <params> for the TexParameter{if}v commands with a <pname> of
+    TEXTURE_FOVEATED_FEATURE_BITS_QCOM returned as possible values for
+    <params> when GetTexParameter{if}v is queried with a <pname> of
+    TEXTURE_FOVEATED_FEATURE_BITS_QCOM:
+
+        FOVEATION_SUBSAMPLED_LAYOUT_METHOD_BIT_QCOM     0x4
+
+    Accepted by the <value> parameter of GetBooleanv, GetIntegerv,
+    GetInteger64v, and GetFloatv:
+
+        MAX_SHADER_SUBSAMPLED_IMAGE_UNITS_QCOM          0x8FA1
+
+Additions to the OpenGL ES 3.2 Specification
+
+    Modify section 8.1 "Texture Objects"
+
+    Modify rows in Table 8.19 "Texture parameters and their values"
+
+    Name                               | Type | Legal Values
+    ------------------------------------------------------------
+    TEXTURE_FOVEATED_FEATURE_BITS_QCOM | uint | 0,
+                                                FOVEATION_ENABLE_BIT_QCOM,
+                                                (FOVEATION_ENABLE_BIT_QCOM |
+                                                 FOVEATION_SCALED_BIN_METHOD_BIT_QCOM),
+                                                (FOVEATION_ENABLE_BIT_QCOM |
+                                                 FOVEATION_SUBSAMPLED_LAYOUT_METHOD_BIT_QCOM)
+
+    TEXTURE_FOVEATED_FEATURE_QUERY_QCOM | uint | 0,
+                                                 FOVEATION_ENABLE_BIT_QCOM,
+                                                 (FOVEATION_ENABLE_BIT_QCOM |
+                                                 FOVEATION_SCALED_BIN_METHOD_BIT_QCOM),
+                                                (FOVEATION_ENABLE_BIT_QCOM |
+                                                 FOVEATION_SUBSAMPLED_LAYOUT_METHOD_BIT_QCOM)
+
+
+    Additions to the end of section 8.19 of the OpenGL ES 3.2 Specification
+    after the description of FOVEATION_SCALED_BIN_METHOD_QCOM:
+
+        FOVEATION_SUBSAMPLED_LAYOUT_METHOD_BIT_QCOM: Requests that the
+        implementation perform foveated rendering by dividing the texture render target
+        into a grid of subregions. Each subregions will be greater than or equal to one
+        pixel and less than or equal to the full size of the texture. Then rendering
+        the geometry to each of these regions with a different projection or scale.
+        No upscale is done when writing out to system memory, instead, to sample
+        from a texture with a subsampled layout, the application must declare the sampler
+        with a "subsampled" layout qualifier. Any attempt to read/write
+        this subsampled memory with the CPU will result in a reconstruction pass.
+
+    glGetTexParameteriv(GL_TEXTURE_2D,
+                        GL_TEXTURE_FOVEATED_FEATURE_QUERY_QCOM,
+                        &query);
+
+    if ((query & GL_FOVEATION_ENABLE_BIT_QCOM == GL_FOVEATION_ENABLE_BIT_QCOM) &&
+        (query & GL_FOVEATION_SUBSAMPLED_LAYOUT_METHOD_BIT_QCOM ==
+                                   GL_FOVEATION_SUBSAMPLED_LAYOUT_METHOD_BIT_QCOM))
+    {
+         // Implementation supports subsampled layout scaled bin method of foveation
+    }
+
+    glTexParameteri(GL_TEXTURE_2D,
+                    GL_TEXTURE_FOVEATED_FEATURE_BITS_QCOM,
+                    GL_FOVEATION_ENABLE_BIT_QCOM |
+                    GL_FOVEATION_SUBSAMPLED_LAYOUT_METHOD_BIT_QCOM);
+
+    This will set a texture as having a subsampled layout once it has been rendered to.
+
+    If any shader attempts to use more than MAX_SHADER_SUBSAMPLED_IMAGE_UNITS_QCOM a compile time
+    error will occur.
+
+    Add a new row in Table 21.52 "Implementation Dependent Aggregate Shader Limits"
+
+    Get Value                              Type    Get Command  Minimum Value   Description               Sec
+    ---------                              ----    -----------  -------------   -----------               ------
+    MAX_SHADER_SUBSAMPLED_IMAGE_UNITS_QCOM  Z+      GetIntegerv  1               No. of subsampled texture 8.19
+                                                                                 images allowed in any
+                                                                                 shader stage.
+
+Errors
+
+    INVALID_ENUM is generated by TexParameter{if} or TexParameter{if}v
+    if <pname> is TEXTURE_FOVEATED_FEATURE_BITS_QCOM and <param> has
+    both FOVEATION_SCALED_BIN_METHOD_BIT_QCOM and
+    FOVEATION_SUBSAMPLED_LAYOUT_METHOD_BIT_QCOM set.
+
+    INVALID_VALUE is generated by TexParameter{if} or TexParameter{if}v
+    if <pname> is TEXTURE_MAX_ANISOTROPY_EXT and <param> is a value
+    > 1.0f and the texture at <target> target has a subsampled layout.
+
+    INVALID_OPERATION is generated by TexParameter{if} or TexParameter{if}v
+    if <pname> is TEXTURE_WRAP_S, TEXTURE_WRAP_T, or TEXTURE_WRAP_R and
+    <param> is not CLAMP_TO_EDGE or CLAMP_TO_BORDER and the texture at
+    <target> target has a subsampled layout.
+
+    INVALID_OPERATION is generated by GenerateMipmap if the texture at
+    <target> target has a subsampled layout.
+
+Modifications to the OpenGL ES Shading Language Specification, Version 1.0.17
+
+    #extension GL_QCOM_texture_foveated_subsampled_layout: <behavior>
+
+    The above line is needed to control the GLSL features described in
+    this section.
+
+    A new preprocessor #define is added to the OpenGL ES Shading Language:
+
+    #define GL_QCOM_texture_foveated_subsampled_layout 1
+
+    [[ The following applies if GL_QCOM_texture_foveated_subsampled_layout is supported. ]]
+
+    Add a new Section 4.x (Layout Qualifiers) as follows:
+
+    4.x Layout Qualifiers
+
+    Layout qualifiers can appear with an individual variable declaration:
+
+        <layout-qualifier> <declaration>;
+
+        <layout-qualifier>:
+            layout( <layout-qualifier-id-list> )
+
+        <layout-qualifier-id-list>:
+            comma separated list of <layout-qualifier-id>
+
+    Declarations of layouts can only be made at global scope, and only where
+    indicated in the following subsection; their details are specific to what
+    the declaration interface is, and are discussed individually.
+
+    The tokens in any <layout-qualifier-id-list> are identifiers, not
+    keywords. Generally they can be listed in any order. Order-dependent
+    meanings exist only if explicitly called out below. Similarly, these
+    identifiers are not case-sensitive, unless explicitly noted otherwise.
+
+    4.x.1 Sampler Layout Qualifiers
+
+    Shaders may specify the following layout qualifier only for samplers of type:
+
+    sampler2D
+
+    if OES_EGL_image_external is supported:
+
+    samplerExternalOES
+
+    The allowed layout qualifier identifiers for these samplers are:
+
+      <layout-qualifier-id>:
+        subsampled
+
+    Specifying subsampled layout qualifier for any other sampler types will result
+    in a compile time error. Additionally, dynamically indexing an array of subsampled
+    samplers will result in a compile time error.
+
+    For samplers specified with subsampled layout qualifier only texture2D()
+    lookup function may be used. Any other texel lookup function will produce
+    a compile time error.
+
+    This identifier specifies that the sampler is reading from a texture with a
+    subsampled layout. Attempting to sample a texture previously rendered with
+    FOVEATION_SUBSAMPLED_LAYOUT_METHOD_BIT_QCOM without this layout
+    qualifier will result in undefined behaviour. Declarations are done as follows:
+
+      layout(subsampled) mediump uniform sampler2D u_sampler2D;
+
+Modifications to the OpenGL ES Shading Language Specification, Version 3.10
+
+    #extension GL_QCOM_texture_foveated_subsampled_layout: <behavior>
+
+    The above line is needed to control the GLSL features described in
+    this section.
+
+    A new preprocessor #define is added to the OpenGL ES Shading Language:
+
+    #define GL_QCOM_texture_foveated_subsampled_layout 1
+
+    Modify section 8.9 "Texture Functions"
+
+    Add paragraph at end:
+
+    For samplers specified with subsampled layout qualifier only texture()
+    lookup function may be used. Any other texel lookup function will produce
+    a compile time error.
+
+    Add a new section 4.4.8 "Sampler Layout Qualifiers"
+
+    Shaders may specify the following layout qualifier only for samplers of type:
+
+    sampler2D
+    sampler2DArray
+    isampler2D
+    isampler2DArray
+    usampler2D
+    usampler2DArray
+
+    if OES_EGL_image_external_essl3 is supported:
+
+    samplerExternalOES
+
+    The allowed layout qualifier identifiers for these samplers are:
+
+      <layout-qualifier-id>:
+        subsampled
+
+    Specifying subsampled layout qualifier for any other sampler types will result
+    in a compile time error. Additionally, dynamically indexing an array of subsampled
+    samplers will result in a compile time error.
+
+    This identifier specifies that the sampler is reading from a texture with a
+    subsampled layout. Attempting to sample a texture previously rendered with
+    FOVEATION_SUBSAMPLED_LAYOUT_METHOD_BIT_QCOM without this layout
+    qualifier will result in undefined behaviour. Declarations are done as follows:
+
+      layout(subsampled) mediump uniform sampler2D u_sampler2D;
+
+Issues
+
+    1. Mipmap support
+
+       RESOLVED: Mipmaps are not supported for textures that have a subsampled layout.
+
+    2. How does ReadPixels / CPU access work?
+
+       RESOLVED: A reconstruction pass will occur to fill in the subsampled texture before
+       attempting to access.
+
+       For the sake of completeness, CPU access is supported for textures with a subsampled
+       layout. The implementation guarantees that no uninitialized data in the texture
+       will be returned to the CPU. Accessing a texture with a subsampled layout in this
+       manner removes any bandwidth benefits from this method of foveated rendering and
+       should be avoided when possible.
+
+    3. How does this extension interact with BlitFramebuffer?
+
+       RESOLVED: Similar to ReadPixels, BlitFramebuffer will trigger a reconstruction
+       pass that will be followed by the normal BlitFramebuffer.
+
+    4. TexImage2D/TexSubImage2D/CopyTexImage2D
+
+       RESOLVED: Similar to ReadPixels, TexImage2D type calls will trigger a reconstruction
+       pass and then the data will be uploaded to texture memory.
+
+    5. Wrap Modes
+
+       Resolved: Only CLAMP_TO_EDGE and CLAMP_TO_BORDER are allowed for textures that have
+       a subsampled layout
+
+    6. Aniso
+
+       Resolved: Aniso > 1.0f is not supported for textures that have a subsampled layout.
+
+    7. Dynamically indexing subsampled sampler arrays
+
+       Resolved: Do not allow dynamically indexed subsampled sampler arrays. This is to
+       ease the GLSL->SPIRV translation that glslang will perform.
+
+Revision History
+
+    Rev.    Date     Author    Changes
+    ----  --------  --------  ----------------------------------------------
+     1    08/22/17   tateh     Initial spec
+     2    07/27/18   tateh     Update to layout qualifiers and update
+                               wrap mode limitations
+     3    08/24/18   tateh     Added MAX_SHADER_SUBSAMPLED_IMAGE_UNITS_QCOM query
+                               and dynamically indexed issue
diff --git a/extensions/esext.php b/extensions/esext.php
index 941dc6a..3b718da 100644
--- a/extensions/esext.php
+++ b/extensions/esext.php
@@ -627,4 +627,16 @@
 </li>
 <li value=301><a href="extensions/EXT/EXT_EGL_image_storage.txt">GL_EXT_EGL_image_storage</a>
 </li>
+<li value=302><a href="extensions/MESA/MESA_framebuffer_flip_y.txt">GL_MESA_framebuffer_flip_y</a>
+</li>
+<li value=303><a href="extensions/AMD/AMD_framebuffer_multisample_advanced.txt">GL_AMD_framebuffer_multisample_advanced</a>
+</li>
+<li value=304><a href="extensions/QCOM/QCOM_shader_framebuffer_fetch_rate.txt">GL_QCOM_shader_framebuffer_fetch_rate</a>
+</li>
+<li value=305><a href="extensions/NV/NV_memory_attachment.txt">GL_NV_memory_attachment</a>
+</li>
+<li value=306><a href="extensions/QCOM/QCOM_texture_foveated_subsampled_layout.txt">GL_QCOM_texture_foveated_subsampled_layout</a>
+</li>
+<li value=307><a href="extensions/QCOM/QCOM_YUV_texture_gather.txt">GL_QCOM_YUV_texture_gather</a>
+</li>
 </ol>
diff --git a/extensions/glext.php b/extensions/glext.php
index b2adcfb..56fcdc8 100644
--- a/extensions/glext.php
+++ b/extensions/glext.php
@@ -983,4 +983,26 @@
 </li>
 <li value=522><a href="extensions/EXT/EXT_EGL_image_storage.txt">GL_EXT_EGL_image_storage</a>
 </li>
+<li value=523><a href="extensions/AMD/AMD_framebuffer_multisample_advanced.txt">GL_AMD_framebuffer_multisample_advanced</a>
+</li>
+<li value=524><a href="extensions/NV/NV_memory_attachment.txt">GL_NV_memory_attachment</a>
+</li>
+<li value=525><a href="extensions/NV/NV_compute_shader_derivatives.txt">GL_NV_compute_shader_derivatives</a>
+</li>
+<li value=526><a href="extensions/NV/NV_fragment_shader_barycentric.txt">GL_NV_fragment_shader_barycentric</a>
+</li>
+<li value=527><a href="extensions/NV/NV_mesh_shader.txt">GL_NV_mesh_shader</a>
+</li>
+<li value=528><a href="extensions/NV/NV_representative_fragment_test.txt">GL_NV_representative_fragment_test</a>
+</li>
+<li value=529><a href="extensions/NV/NV_scissor_exclusive.txt">GL_NV_scissor_exclusive</a>
+</li>
+<li value=530><a href="extensions/NV/NV_shader_texture_footprint.txt">GL_NV_shader_texture_footprint</a>
+</li>
+<li value=531><a href="extensions/NV/NV_shading_rate_image.txt">GL_NV_shading_rate_image</a>
+</li>
+<li value=592><a href="extensions/ATI/WGL_ATI_render_texture_rectangle.txt">WGL_ATI_render_texture_rectangle</a>
+</li>
+<li value=593><a href="extensions/NV/NV_vdpau_interop2.txt">GL_NV_vdpau_interop2</a>
+</li>
 </ol>
diff --git a/extensions/registry.py b/extensions/registry.py
index 6e6b158..b68ff48 100644
--- a/extensions/registry.py
+++ b/extensions/registry.py
@@ -57,6 +57,12 @@
         'supporters' : { 'NVIDIA', 'TransGaming' },
         'url' : 'extensions/AMD/AMD_draw_buffers_blend.txt',
     },
+    'GL_AMD_framebuffer_multisample_advanced' : {
+        'number' : 523,
+        'esnumber' : 303,
+        'flags' : { 'public' },
+        'url' : 'extensions/AMD/AMD_framebuffer_multisample_advanced.txt',
+    },
     'GL_AMD_framebuffer_sample_positions' : {
         'number' : 454,
         'flags' : { 'public' },
@@ -1450,6 +1456,12 @@
         'supporters' : { 'ATI' },
         'url' : 'extensions/ATI/ATI_pn_triangles.txt',
     },
+    'WGL_ATI_render_texture_rectangle' : {
+        'number' : 592,
+        'flags' : { 'public' },
+        'supporters' : { 'ATI' },
+        'url' : 'extensions/ATI/WGL_ATI_render_texture_rectangle.txt',
+    },
     'GL_ATI_separate_stencil' : {
         'number' : 289,
         'flags' : { 'public' },
@@ -2910,6 +2922,12 @@
         'supporters' : { 'MESA' },
         'url' : 'extensions/MESA/GLX_MESA_copy_sub_buffer.txt',
     },
+    'GL_MESA_framebuffer_flip_y' : {
+        'esnumber' : 302,
+        'flags' : { 'public' },
+        'supporters' : { 'MESA' },
+        'url' : 'extensions/MESA/MESA_framebuffer_flip_y.txt',
+    },
     'GL_MESA_pack_invert' : {
         'number' : 300,
         'flags' : { 'public' },
@@ -3095,6 +3113,12 @@
         'supporters' : { 'NVIDIA' },
         'url' : 'extensions/NV/NV_compute_program5.txt',
     },
+    'GL_NV_compute_shader_derivatives' : {
+        'number' : 525,
+        'flags' : { 'public' },
+        'supporters' : { 'NVIDIA' },
+        'url' : 'extensions/NV/NV_compute_shader_derivatives.txt',
+    },
     'GL_NV_conditional_render' : {
         'number' : 346,
         'esnumber' : 198,
@@ -3288,6 +3312,12 @@
         'supporters' : { 'NVIDIA' },
         'url' : 'extensions/NV/NV_fragment_program_option.txt',
     },
+    'GL_NV_fragment_shader_barycentric' : {
+        'number' : 526,
+        'flags' : { 'public' },
+        'supporters' : { 'NVIDIA' },
+        'url' : 'extensions/NV/NV_fragment_shader_barycentric.txt',
+    },
     'GL_NV_fragment_shader_interlock' : {
         'number' : 468,
         'esnumber' : 230,
@@ -3398,6 +3428,19 @@
         'supporters' : { 'NVIDIA' },
         'url' : 'extensions/NV/NV_light_max_exponent.txt',
     },
+    'GL_NV_memory_attachment' : {
+        'number' : 524,
+        'esnumber' : 305,
+        'flags' : { 'public' },
+        'supporters' : { 'NVIDIA' },
+        'url' : 'extensions/NV/NV_memory_attachment.txt',
+    },
+    'GL_NV_mesh_shader' : {
+        'number' : 527,
+        'flags' : { 'public' },
+        'supporters' : { 'NVIDIA' },
+        'url' : 'extensions/NV/NV_mesh_shader.txt',
+    },
     'GL_NV_multisample_coverage' : {
         'number' : 393,
         'flags' : { 'public' },
@@ -3536,6 +3579,12 @@
         'supporters' : { 'NVIDIA' },
         'url' : 'extensions/NV/NV_register_combiners2.txt',
     },
+    'GL_NV_representative_fragment_test' : {
+        'number' : 528,
+        'flags' : { 'public' },
+        'supporters' : { 'NVIDIA' },
+        'url' : 'extensions/NV/NV_representative_fragment_test.txt',
+    },
     'GL_NV_robustness_video_memory_purge' : {
         'number' : 484,
         'flags' : { 'public' },
@@ -3558,6 +3607,12 @@
         'flags' : { 'public' },
         'url' : 'extensions/NV/NV_sample_mask_override_coverage.txt',
     },
+    'GL_NV_scissor_exclusive' : {
+        'number' : 529,
+        'flags' : { 'public' },
+        'supporters' : { 'NVIDIA' },
+        'url' : 'extensions/NV/NV_scissor_exclusive.txt',
+    },
     'GL_NV_shader_atomic_counters' : {
         'number' : 423,
         'flags' : { 'public' },
@@ -3610,6 +3665,12 @@
         'supporters' : { 'NVIDIA' },
         'url' : 'extensions/NV/NV_shader_storage_buffer_object.txt',
     },
+    'GL_NV_shader_texture_footprint' : {
+        'number' : 530,
+        'flags' : { 'public' },
+        'supporters' : { 'NVIDIA' },
+        'url' : 'extensions/NV/NV_shader_texture_footprint.txt',
+    },
     'GL_NV_shader_thread_group' : {
         'number' : 447,
         'flags' : { 'public' },
@@ -3620,6 +3681,12 @@
         'flags' : { 'public' },
         'url' : 'extensions/NV/NV_shader_thread_shuffle.txt',
     },
+    'GL_NV_shading_rate_image' : {
+        'number' : 531,
+        'flags' : { 'public' },
+        'supporters' : { 'NVIDIA' },
+        'url' : 'extensions/NV/NV_shading_rate_image.txt',
+    },
     'GL_NV_shadow_samplers_array' : {
         'esnumber' : 146,
         'flags' : { 'public' },
@@ -3774,6 +3841,12 @@
         'supporters' : { 'NVIDIA' },
         'url' : 'extensions/NV/NV_vdpau_interop.txt',
     },
+    'GL_NV_vdpau_interop2' : {
+        'number' : 593,
+        'flags' : { 'public' },
+        'supporters' : { 'NVIDIA' },
+        'url' : 'extensions/NV/NV_vdpau_interop2.txt',
+    },
     'GL_NV_vertex_array_range' : {
         'number' : 190,
         'flags' : { 'public' },
@@ -4312,11 +4385,41 @@
         'flags' : { 'public' },
         'url' : 'extensions/QCOM/QCOM_extended_get2.txt',
     },
+    'GL_QCOM_framebuffer_foveated' : {
+        'esnumber' : 273,
+        'flags' : { 'public' },
+        'url' : 'extensions/QCOM/QCOM_framebuffer_foveated.txt',
+    },
     'GL_QCOM_performance_monitor_global_mode' : {
         'esnumber' : 56,
         'flags' : { 'public' },
         'url' : 'extensions/QCOM/QCOM_performance_monitor_global_mode.txt',
     },
+    'GL_QCOM_shader_framebuffer_fetch_noncoherent' : {
+        'esnumber' : 277,
+        'flags' : { 'public' },
+        'url' : 'extensions/QCOM/QCOM_shader_framebuffer_fetch_noncoherent.txt',
+    },
+    'GL_QCOM_YUV_texture_gather' : {
+        'esnumber' : 307,
+        'flags' : { 'public' },
+        'url' : 'extensions/QCOM/QCOM_YUV_texture_gather.txt',
+    },
+    'GL_QCOM_shader_framebuffer_fetch_rate' : {
+        'esnumber' : 304,
+        'flags' : { 'public' },
+        'url' : 'extensions/QCOM/QCOM_shader_framebuffer_fetch_rate.txt',
+    },
+    'GL_QCOM_texture_foveated' : {
+        'esnumber' : 293,
+        'flags' : { 'public' },
+        'url' : 'extensions/QCOM/QCOM_texture_foveated.txt',
+    },
+    'GL_QCOM_texture_foveated_subsampled_layout' : {
+        'esnumber' : 306,
+        'flags' : { 'public' },
+        'url' : 'extensions/QCOM/QCOM_texture_foveated_subsampled_layout.txt',
+    },
     'GL_QCOM_tiled_rendering' : {
         'esnumber' : 70,
         'flags' : { 'public' },
@@ -4328,21 +4431,6 @@
         'flags' : { 'public' },
         'url' : 'extensions/QCOM/QCOM_writeonly_rendering.txt',
     },
-    'GL_QCOM_framebuffer_foveated' : {
-        'esnumber' : 273,
-        'flags' : { 'public' },
-        'url' : 'extensions/QCOM/QCOM_framebuffer_foveated.txt',
-    },
-    'GL_QCOM_texture_foveated' : {
-        'esnumber' : 293,
-        'flags' : { 'public' },
-        'url' : 'extensions/QCOM/QCOM_texture_foveated.txt',
-    },
-    'GL_QCOM_shader_framebuffer_fetch_noncoherent' : {
-        'esnumber' : 277,
-        'flags' : { 'public' },
-        'url' : 'extensions/QCOM/QCOM_shader_framebuffer_fetch_noncoherent.txt',
-    },
     'GL_REND_screen_coordinates' : {
         'number' : 155,
         'flags' : { 'public' },
diff --git a/index_sc.php b/index_sc.php
index d991636..c26f52a 100644
--- a/index_sc.php
+++ b/index_sc.php
@@ -62,22 +62,6 @@
      (June 6, 2005). </li>
 </ul>
 
-<h2> <a name="specfiles"></a> XML API Registry of Reserved Enumerants
-     and Functions</h2>
-
-<p> The API Registry is a set of XML documents defining the APIs and
-    enumerants used in OpenGL, OpenGL ES, OpenGL SC, EGL, and related APIs,
-    as well as enumerant ranges reserved to vendors but not used yet. There
-    are also scripts for loading the XML and processing it into header
-    files. All documents in the registry are available from the Khronos
-    Subversion server using <a
-    href="https://cvs.khronos.org/svn/repos/ogl/trunk/doc/registry/public/api/">
-    anonymous public access. </a> Start with the <a
-    href="https://cvs.khronos.org/svn/repos/ogl/trunk/doc/registry/public/api/readme.pdf">
-    README </a>. </p>
-
-<hr>
-
 <?php include_once("../../assets/static_pages/khr_page_bottom.php"); ?>
 </body>
 </html>
diff --git a/specs/es/3.2/GLSL_ES_Specification_3.20.pdf b/specs/es/3.2/GLSL_ES_Specification_3.20.pdf
index 44f72dc..70434ce 100644
--- a/specs/es/3.2/GLSL_ES_Specification_3.20.pdf
+++ b/specs/es/3.2/GLSL_ES_Specification_3.20.pdf
Binary files differ
diff --git a/specs/gl/GLSLangSpec.4.60.pdf b/specs/gl/GLSLangSpec.4.60.pdf
index 5388117..bfdb80a 100644
--- a/specs/gl/GLSLangSpec.4.60.pdf
+++ b/specs/gl/GLSLangSpec.4.60.pdf
Binary files differ
diff --git a/xml/Makefile b/xml/Makefile
index 35a4bda..2e2dbd9 100644
--- a/xml/Makefile
+++ b/xml/Makefile
@@ -38,7 +38,8 @@
 	     $(API)/GLES2/gl2ext.h \
 	     $(API)/GLES3/gl3.h
 GLXHEADERS = $(API)/GL/glxext.h
-WGLHEADERS = $(API)/GL/wglext.h
+WGLHEADERS = $(API)/GL/wglext.h \
+	     $(API)/GL/wgl.h
 ALLHEADERS = $(GLHEADERS) $(GLXHEADERS) $(WGLHEADERS)
 
 # Generated files to clean up
diff --git a/xml/genheaders.py b/xml/genheaders.py
index 6cb0634..269363a 100755
--- a/xml/genheaders.py
+++ b/xml/genheaders.py
@@ -257,6 +257,12 @@
     format('#define GLX_GLXEXT_VERSION %s' % time.strftime('%Y%m%d')),
     ''
 ]
+# This is a bad but functional workaround for a structural problem in the scripts
+# identified in https://github.com/KhronosGroup/OpenGL-Registry/pull/186#issuecomment-416196246
+glextKHRplatformStrings = [
+    '#include <KHR/khrplatform.h>',
+    ''
+]
 # EGL_EGLEXT_VERSION is defined only in eglext.h
 eglextVersionStrings = [
     format('#define EGL_EGLEXT_VERSION %s' % time.strftime('%Y%m%d')),
@@ -279,7 +285,7 @@
         defaultExtensions = 'gl',                   # Default extensions for GL
         addExtensions     = None,
         removeExtensions  = None,
-        prefixText        = prefixStrings + glExtPlatformStrings + glextVersionStrings,
+        prefixText        = prefixStrings + glExtPlatformStrings + glextVersionStrings + glextKHRplatformStrings,
         genFuncPointers   = True,
         protectFile       = protectFile,
         protectFeature    = protectFeature,
diff --git a/xml/gl.xml b/xml/gl.xml
index 20ca791..e413fb0 100644
--- a/xml/gl.xml
+++ b/xml/gl.xml
@@ -132,15 +132,16 @@
         <group name="BlendEquationModeEXT">
             <enum name="GL_ALPHA_MAX_SGIX"/>
             <enum name="GL_ALPHA_MIN_SGIX"/>
-            <enum name="GL_FUNC_ADD_EXT"/>
-            <enum name="GL_FUNC_REVERSE_SUBTRACT_EXT"/>
-            <enum name="GL_FUNC_SUBTRACT_EXT"/>
-            <enum name="GL_LOGIC_OP"/>
-            <enum name="GL_MAX_EXT"/>
-            <enum name="GL_MIN_EXT"/>
             <enum name="GL_FUNC_ADD"/>
+            <enum name="GL_FUNC_ADD_EXT"/>
             <enum name="GL_FUNC_REVERSE_SUBTRACT"/>
+            <enum name="GL_FUNC_REVERSE_SUBTRACT_EXT"/>
             <enum name="GL_FUNC_SUBTRACT"/>
+            <enum name="GL_FUNC_SUBTRACT_EXT"/>
+            <enum name="GL_MAX"/>
+            <enum name="GL_MAX_EXT"/>
+            <enum name="GL_MIN"/>
+            <enum name="GL_MIN_EXT"/>
         </group>
 
         <group name="Boolean">
@@ -198,6 +199,7 @@
           <enum name="GL_TEXTURE_BUFFER" />
           <enum name="GL_TRANSFORM_FEEDBACK_BUFFER" />
           <enum name="GL_UNIFORM_BUFFER" />
+          <enum name="GL_PARAMETER_BUFFER" />
         </group>
 
         <group name="BufferUsageARB">
@@ -711,6 +713,7 @@
             <enum name="GL_ACCUM_CLEAR_VALUE"/>
             <enum name="GL_ACCUM_GREEN_BITS"/>
             <enum name="GL_ACCUM_RED_BITS"/>
+            <enum name="GL_ACTIVE_TEXTURE"/>
             <enum name="GL_ALIASED_LINE_WIDTH_RANGE"/>
             <enum name="GL_ALIASED_POINT_SIZE_RANGE"/>
             <enum name="GL_ALPHA_BIAS"/>
@@ -722,6 +725,7 @@
             <enum name="GL_ALPHA_TEST_QCOM"/>
             <enum name="GL_ALPHA_TEST_REF"/>
             <enum name="GL_ALPHA_TEST_REF_QCOM"/>
+            <enum name="GL_ARRAY_BUFFER_BINDING"/>
             <enum name="GL_ASYNC_DRAW_PIXELS_SGIX"/>
             <enum name="GL_ASYNC_HISTOGRAM_SGIX"/>
             <enum name="GL_ASYNC_MARKER_SGIX"/>
@@ -731,10 +735,17 @@
             <enum name="GL_AUTO_NORMAL"/>
             <enum name="GL_AUX_BUFFERS"/>
             <enum name="GL_BLEND"/>
+            <enum name="GL_BLEND_COLOR"/>
             <enum name="GL_BLEND_COLOR_EXT"/>
             <enum name="GL_BLEND_DST"/>
+            <enum name="GL_BLEND_DST_ALPHA"/>
+            <enum name="GL_BLEND_DST_RGB"/>
+            <enum name="GL_BLEND_EQUATION_ALPHA"/>
             <enum name="GL_BLEND_EQUATION_EXT"/>
+            <enum name="GL_BLEND_EQUATION_RGB"/>
             <enum name="GL_BLEND_SRC"/>
+            <enum name="GL_BLEND_SRC_ALPHA"/>
+            <enum name="GL_BLEND_SRC_RGB"/>
             <enum name="GL_BLUE_BIAS"/>
             <enum name="GL_BLUE_BITS"/>
             <enum name="GL_BLUE_SCALE"/>
@@ -760,6 +771,8 @@
             <enum name="GL_COLOR_MATRIX_STACK_DEPTH_SGI"/>
             <enum name="GL_COLOR_TABLE_SGI"/>
             <enum name="GL_COLOR_WRITEMASK"/>
+            <enum name="GL_COMPRESSED_TEXTURE_FORMATS"/>
+            <enum name="GL_CONTEXT_FLAGS"/>
             <enum name="GL_CONVOLUTION_1D_EXT"/>
             <enum name="GL_CONVOLUTION_2D_EXT"/>
             <enum name="GL_CONVOLUTION_HINT_SGIX"/>
@@ -768,6 +781,7 @@
             <enum name="GL_CURRENT_COLOR"/>
             <enum name="GL_CURRENT_INDEX"/>
             <enum name="GL_CURRENT_NORMAL"/>
+            <enum name="GL_CURRENT_PROGRAM"/>
             <enum name="GL_CURRENT_RASTER_COLOR"/>
             <enum name="GL_CURRENT_RASTER_DISTANCE"/>
             <enum name="GL_CURRENT_RASTER_INDEX"/>
@@ -775,6 +789,7 @@
             <enum name="GL_CURRENT_RASTER_POSITION_VALID"/>
             <enum name="GL_CURRENT_RASTER_TEXTURE_COORDS"/>
             <enum name="GL_CURRENT_TEXTURE_COORDS"/>
+            <enum name="GL_DEBUG_GROUP_STACK_DEPTH"/>
             <enum name="GL_DEFORMATIONS_MASK_SGIX"/>
             <enum name="GL_DEPTH_BIAS"/>
             <enum name="GL_DEPTH_BITS"/>
@@ -788,16 +803,19 @@
             <enum name="GL_DEVICE_LUID_EXT"/>
             <enum name="GL_DEVICE_NODE_MASK_EXT"/>
             <enum name="GL_DEVICE_UUID_EXT"/>
+            <enum name="GL_DISPATCH_INDIRECT_BUFFER_BINDING"/>
             <enum name="GL_DISTANCE_ATTENUATION_SGIS"/>
             <enum name="GL_DITHER"/>
             <enum name="GL_DOUBLEBUFFER"/>
             <enum name="GL_DRAW_BUFFER"/>
             <enum name="GL_DRAW_BUFFER_EXT"/>
+            <enum name="GL_DRAW_FRAMEBUFFER_BINDING"/>
             <enum name="GL_DRIVER_UUID_EXT"/>
             <enum name="GL_EDGE_FLAG"/>
             <enum name="GL_EDGE_FLAG_ARRAY"/>
             <enum name="GL_EDGE_FLAG_ARRAY_COUNT_EXT"/>
             <enum name="GL_EDGE_FLAG_ARRAY_STRIDE"/>
+            <enum name="GL_ELEMENT_ARRAY_BUFFER_BINDING"/>
             <enum name="GL_FEEDBACK_BUFFER_SIZE"/>
             <enum name="GL_FEEDBACK_BUFFER_TYPE"/>
             <enum name="GL_FOG"/>
@@ -820,6 +838,7 @@
             <enum name="GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX"/>
             <enum name="GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX"/>
             <enum name="GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX"/>
+            <enum name="GL_FRAGMENT_SHADER_DERIVATIVE_HINT"/>
             <enum name="GL_FRAMEZOOM_FACTOR_SGIX"/>
             <enum name="GL_FRAMEZOOM_SGIX"/>
             <enum name="GL_FRONT_FACE"/>
@@ -828,6 +847,8 @@
             <enum name="GL_GREEN_BITS"/>
             <enum name="GL_GREEN_SCALE"/>
             <enum name="GL_HISTOGRAM_EXT"/>
+            <enum name="GL_IMPLEMENTATION_COLOR_READ_FORMAT"/>
+            <enum name="GL_IMPLEMENTATION_COLOR_READ_TYPE"/>
             <enum name="GL_INDEX_ARRAY"/>
             <enum name="GL_INDEX_ARRAY_COUNT_EXT"/>
             <enum name="GL_INDEX_ARRAY_STRIDE"/>
@@ -842,6 +863,7 @@
             <enum name="GL_INSTRUMENT_MEASUREMENTS_SGIX"/>
             <enum name="GL_INTERLACE_SGIX"/>
             <enum name="GL_IR_INSTRUMENT1_SGIX"/>
+            <enum name="GL_LAYER_PROVOKING_VERTEX"/>
             <enum name="GL_LIGHT0"/>
             <enum name="GL_LIGHT1"/>
             <enum name="GL_LIGHT2"/>
@@ -869,6 +891,7 @@
             <enum name="GL_LIST_MODE"/>
             <enum name="GL_LOGIC_OP"/>
             <enum name="GL_LOGIC_OP_MODE"/>
+            <enum name="GL_MAJOR_VERSION"/>
             <enum name="GL_MAP1_COLOR_4"/>
             <enum name="GL_MAP1_GRID_DOMAIN"/>
             <enum name="GL_MAP1_GRID_SEGMENTS"/>
@@ -894,9 +917,11 @@
             <enum name="GL_MAP_COLOR"/>
             <enum name="GL_MAP_STENCIL"/>
             <enum name="GL_MATRIX_MODE"/>
+            <enum name="GL_MAX_3D_TEXTURE_SIZE"/>
             <enum name="GL_MAX_3D_TEXTURE_SIZE_EXT"/>
             <enum name="GL_MAX_4D_TEXTURE_SIZE_SGIS"/>
             <enum name="GL_MAX_ACTIVE_LIGHTS_SGIX"/>
+            <enum name="GL_MAX_ARRAY_TEXTURE_LAYERS"/>
             <enum name="GL_MAX_ASYNC_DRAW_PIXELS_SGIX"/>
             <enum name="GL_MAX_ASYNC_HISTOGRAM_SGIX"/>
             <enum name="GL_MAX_ASYNC_READ_PIXELS_SGIX"/>
@@ -908,20 +933,98 @@
             <enum name="GL_MAX_CLIP_DISTANCES"/>
             <enum name="GL_MAX_CLIP_PLANES"/>
             <enum name="GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI"/>
+            <enum name="GL_MAX_COLOR_TEXTURE_SAMPLES"/>
+            <enum name="GL_MAX_COMBINED_ATOMIC_COUNTERS"/>
+            <enum name="GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS"/>
+            <enum name="GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS"/>
+            <enum name="GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS"/>
+            <enum name="GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS"/>
+            <enum name="GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS"/>
+            <enum name="GL_MAX_COMBINED_UNIFORM_BLOCKS"/>
+            <enum name="GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS"/>
+            <enum name="GL_MAX_COMPUTE_ATOMIC_COUNTERS"/>
+            <enum name="GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS"/>
+            <enum name="GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS"/>
+            <enum name="GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS"/>
+            <enum name="GL_MAX_COMPUTE_UNIFORM_BLOCKS"/>
+            <enum name="GL_MAX_COMPUTE_UNIFORM_COMPONENTS"/>
+            <enum name="GL_MAX_COMPUTE_WORK_GROUP_COUNT"/>
+            <enum name="GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS"/>
+            <enum name="GL_MAX_COMPUTE_WORK_GROUP_SIZE"/>
+            <enum name="GL_MAX_CUBE_MAP_TEXTURE_SIZE"/>
+            <enum name="GL_MAX_DEBUG_GROUP_STACK_DEPTH"/>
+            <enum name="GL_MAX_DEPTH_TEXTURE_SAMPLES"/>
+            <enum name="GL_MAX_DRAW_BUFFERS"/>
+            <enum name="GL_MAX_DUAL_SOURCE_DRAW_BUFFERS"/>
+            <enum name="GL_MAX_ELEMENTS_INDICES"/>
+            <enum name="GL_MAX_ELEMENTS_VERTICES"/>
+            <enum name="GL_MAX_ELEMENT_INDEX"/>
             <enum name="GL_MAX_EVAL_ORDER"/>
             <enum name="GL_MAX_FOG_FUNC_POINTS_SGIS"/>
+            <enum name="GL_MAX_FRAGMENT_ATOMIC_COUNTERS"/>
+            <enum name="GL_MAX_FRAGMENT_INPUT_COMPONENTS"/>
             <enum name="GL_MAX_FRAGMENT_LIGHTS_SGIX"/>
+            <enum name="GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS"/>
+            <enum name="GL_MAX_FRAGMENT_UNIFORM_BLOCKS"/>
+            <enum name="GL_MAX_FRAGMENT_UNIFORM_COMPONENTS"/>
+            <enum name="GL_MAX_FRAGMENT_UNIFORM_VECTORS"/>
+            <enum name="GL_MAX_FRAMEBUFFER_HEIGHT"/>
+            <enum name="GL_MAX_FRAMEBUFFER_LAYERS"/>
+            <enum name="GL_MAX_FRAMEBUFFER_SAMPLES"/>
+            <enum name="GL_MAX_FRAMEBUFFER_WIDTH"/>
             <enum name="GL_MAX_FRAMEZOOM_FACTOR_SGIX"/>
+            <enum name="GL_MAX_GEOMETRY_ATOMIC_COUNTERS"/>
+            <enum name="GL_MAX_GEOMETRY_INPUT_COMPONENTS"/>
+            <enum name="GL_MAX_GEOMETRY_OUTPUT_COMPONENTS"/>
+            <enum name="GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS"/>
+            <enum name="GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS"/>
+            <enum name="GL_MAX_GEOMETRY_UNIFORM_BLOCKS"/>
+            <enum name="GL_MAX_GEOMETRY_UNIFORM_COMPONENTS"/>
+            <enum name="GL_MAX_INTEGER_SAMPLES"/>
+            <enum name="GL_MAX_LABEL_LENGTH"/>
             <enum name="GL_MAX_LIGHTS"/>
             <enum name="GL_MAX_LIST_NESTING"/>
             <enum name="GL_MAX_MODELVIEW_STACK_DEPTH"/>
             <enum name="GL_MAX_NAME_STACK_DEPTH"/>
             <enum name="GL_MAX_PIXEL_MAP_TABLE"/>
+            <enum name="GL_MAX_PROGRAM_TEXEL_OFFSET"/>
             <enum name="GL_MAX_PROJECTION_STACK_DEPTH"/>
+            <enum name="GL_MAX_RECTANGLE_TEXTURE_SIZE"/>
+            <enum name="GL_MAX_RENDERBUFFER_SIZE"/>
+            <enum name="GL_MAX_SAMPLE_MASK_WORDS"/>
+            <enum name="GL_MAX_SERVER_WAIT_TIMEOUT"/>
+            <enum name="GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS"/>
+            <enum name="GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS"/>
+            <enum name="GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS"/>
+            <enum name="GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS"/>
+            <enum name="GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS"/>
+            <enum name="GL_MAX_TEXTURE_BUFFER_SIZE"/>
+            <enum name="GL_MAX_TEXTURE_IMAGE_UNITS"/>
+            <enum name="GL_MAX_TEXTURE_LOD_BIAS"/>
             <enum name="GL_MAX_TEXTURE_SIZE"/>
             <enum name="GL_MAX_TEXTURE_STACK_DEPTH"/>
+            <enum name="GL_MAX_UNIFORM_BLOCK_SIZE"/>
+            <enum name="GL_MAX_UNIFORM_BUFFER_BINDINGS"/>
+            <enum name="GL_MAX_UNIFORM_LOCATIONS"/>
+            <enum name="GL_MAX_VARYING_COMPONENTS"/>
+            <enum name="GL_MAX_VARYING_FLOATS"/>
+            <enum name="GL_MAX_VARYING_VECTORS"/>
+            <enum name="GL_MAX_VERTEX_ATOMIC_COUNTERS"/>
+            <enum name="GL_MAX_VERTEX_ATTRIBS"/>
+            <enum name="GL_MAX_VERTEX_ATTRIB_BINDINGS"/>
+            <enum name="GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET"/>
+            <enum name="GL_MAX_VERTEX_OUTPUT_COMPONENTS"/>
+            <enum name="GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS"/>
+            <enum name="GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS"/>
+            <enum name="GL_MAX_VERTEX_UNIFORM_BLOCKS"/>
+            <enum name="GL_MAX_VERTEX_UNIFORM_COMPONENTS"/>
+            <enum name="GL_MAX_VERTEX_UNIFORM_VECTORS"/>
+            <enum name="GL_MAX_VIEWPORTS"/>
             <enum name="GL_MAX_VIEWPORT_DIMS"/>
             <enum name="GL_MINMAX_EXT"/>
+            <enum name="GL_MINOR_VERSION"/>
+            <enum name="GL_MIN_MAP_BUFFER_ALIGNMENT"/>
+            <enum name="GL_MIN_PROGRAM_TEXEL_OFFSET"/>
             <enum name="GL_MODELVIEW0_MATRIX_EXT"/>
             <enum name="GL_MODELVIEW0_STACK_DEPTH_EXT"/>
             <enum name="GL_MODELVIEW_MATRIX"/>
@@ -933,14 +1036,20 @@
             <enum name="GL_NORMAL_ARRAY_COUNT_EXT"/>
             <enum name="GL_NORMAL_ARRAY_STRIDE"/>
             <enum name="GL_NORMAL_ARRAY_TYPE"/>
+            <enum name="GL_NUM_COMPRESSED_TEXTURE_FORMATS"/>
             <enum name="GL_NUM_DEVICE_UUIDS_EXT"/>
+            <enum name="GL_NUM_EXTENSIONS"/>
+            <enum name="GL_NUM_PROGRAM_BINARY_FORMATS"/>
+            <enum name="GL_NUM_SHADER_BINARY_FORMATS"/>
             <enum name="GL_PACK_ALIGNMENT"/>
             <enum name="GL_PACK_CMYK_HINT_EXT"/>
             <enum name="GL_PACK_IMAGE_DEPTH_SGIS"/>
+            <enum name="GL_PACK_IMAGE_HEIGHT"/>
             <enum name="GL_PACK_IMAGE_HEIGHT_EXT"/>
             <enum name="GL_PACK_LSB_FIRST"/>
             <enum name="GL_PACK_RESAMPLE_SGIX"/>
             <enum name="GL_PACK_ROW_LENGTH"/>
+            <enum name="GL_PACK_SKIP_IMAGES"/>
             <enum name="GL_PACK_SKIP_IMAGES_EXT"/>
             <enum name="GL_PACK_SKIP_PIXELS"/>
             <enum name="GL_PACK_SKIP_ROWS"/>
@@ -958,6 +1067,7 @@
             <enum name="GL_PIXEL_MAP_I_TO_R_SIZE"/>
             <enum name="GL_PIXEL_MAP_R_TO_R_SIZE"/>
             <enum name="GL_PIXEL_MAP_S_TO_S_SIZE"/>
+            <enum name="GL_PIXEL_PACK_BUFFER_BINDING"/>
             <enum name="GL_PIXEL_TEXTURE_SGIS"/>
             <enum name="GL_PIXEL_TEX_GEN_MODE_SGIX"/>
             <enum name="GL_PIXEL_TEX_GEN_SGIX"/>
@@ -969,6 +1079,8 @@
             <enum name="GL_PIXEL_TILE_GRID_WIDTH_SGIX"/>
             <enum name="GL_PIXEL_TILE_HEIGHT_SGIX"/>
             <enum name="GL_PIXEL_TILE_WIDTH_SGIX"/>
+            <enum name="GL_PIXEL_UNPACK_BUFFER_BINDING"/>
+            <enum name="GL_POINT_FADE_THRESHOLD_SIZE"/>
             <enum name="GL_POINT_FADE_THRESHOLD_SIZE_SGIS"/>
             <enum name="GL_POINT_SIZE"/>
             <enum name="GL_POINT_SIZE_GRANULARITY"/>
@@ -1007,23 +1119,35 @@
             <enum name="GL_POST_CONVOLUTION_RED_SCALE_EXT"/>
             <enum name="GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX"/>
             <enum name="GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX"/>
+            <enum name="GL_PRIMITIVE_RESTART_INDEX"/>
+            <enum name="GL_PROGRAM_BINARY_FORMATS"/>
+            <enum name="GL_PROGRAM_PIPELINE_BINDING"/>
+            <enum name="GL_PROGRAM_POINT_SIZE"/>
             <enum name="GL_PROJECTION_MATRIX"/>
             <enum name="GL_PROJECTION_STACK_DEPTH"/>
+            <enum name="GL_PROVOKING_VERTEX"/>
             <enum name="GL_READ_BUFFER"/>
             <enum name="GL_READ_BUFFER_EXT"/>
             <enum name="GL_READ_BUFFER_NV"/>
+            <enum name="GL_READ_FRAMEBUFFER_BINDING"/>
             <enum name="GL_RED_BIAS"/>
             <enum name="GL_RED_BITS"/>
             <enum name="GL_RED_SCALE"/>
             <enum name="GL_REFERENCE_PLANE_EQUATION_SGIX"/>
             <enum name="GL_REFERENCE_PLANE_SGIX"/>
+            <enum name="GL_RENDERBUFFER_BINDING"/>
             <enum name="GL_RENDER_MODE"/>
             <enum name="GL_RESCALE_NORMAL_EXT"/>
             <enum name="GL_RGBA_MODE"/>
+            <enum name="GL_SAMPLER_BINDING"/>
+            <enum name="GL_SAMPLES"/>
             <enum name="GL_SAMPLES_SGIS"/>
             <enum name="GL_SAMPLE_ALPHA_TO_MASK_SGIS"/>
             <enum name="GL_SAMPLE_ALPHA_TO_ONE_SGIS"/>
+            <enum name="GL_SAMPLE_BUFFERS"/>
             <enum name="GL_SAMPLE_BUFFERS_SGIS"/>
+            <enum name="GL_SAMPLE_COVERAGE_INVERT"/>
+            <enum name="GL_SAMPLE_COVERAGE_VALUE"/>
             <enum name="GL_SAMPLE_MASK_INVERT_SGIS"/>
             <enum name="GL_SAMPLE_MASK_SGIS"/>
             <enum name="GL_SAMPLE_MASK_VALUE_SGIS"/>
@@ -1032,6 +1156,11 @@
             <enum name="GL_SCISSOR_TEST"/>
             <enum name="GL_SELECTION_BUFFER_SIZE"/>
             <enum name="GL_SEPARABLE_2D_EXT"/>
+            <enum name="GL_SHADER_COMPILER"/>
+            <enum name="GL_SHADER_STORAGE_BUFFER_BINDING"/>
+            <enum name="GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT"/>
+            <enum name="GL_SHADER_STORAGE_BUFFER_SIZE"/>
+            <enum name="GL_SHADER_STORAGE_BUFFER_START"/>
             <enum name="GL_SHADE_MODEL"/>
             <enum name="GL_SHARED_TEXTURE_PALETTE_EXT"/>
             <enum name="GL_SMOOTH_LINE_WIDTH_GRANULARITY"/>
@@ -1042,6 +1171,13 @@
             <enum name="GL_SPRITE_MODE_SGIX"/>
             <enum name="GL_SPRITE_SGIX"/>
             <enum name="GL_SPRITE_TRANSLATION_SGIX"/>
+            <enum name="GL_STENCIL_BACK_FAIL"/>
+            <enum name="GL_STENCIL_BACK_FUNC"/>
+            <enum name="GL_STENCIL_BACK_PASS_DEPTH_FAIL"/>
+            <enum name="GL_STENCIL_BACK_PASS_DEPTH_PASS"/>
+            <enum name="GL_STENCIL_BACK_REF"/>
+            <enum name="GL_STENCIL_BACK_VALUE_MASK"/>
+            <enum name="GL_STENCIL_BACK_WRITEMASK"/>
             <enum name="GL_STENCIL_BITS"/>
             <enum name="GL_STENCIL_CLEAR_VALUE"/>
             <enum name="GL_STENCIL_FAIL"/>
@@ -1061,9 +1197,18 @@
             <enum name="GL_TEXTURE_4D_BINDING_SGIS"/>
             <enum name="GL_TEXTURE_4D_SGIS"/>
             <enum name="GL_TEXTURE_BINDING_1D"/>
+            <enum name="GL_TEXTURE_BINDING_1D_ARRAY"/>
             <enum name="GL_TEXTURE_BINDING_2D"/>
+            <enum name="GL_TEXTURE_BINDING_2D_ARRAY"/>
+            <enum name="GL_TEXTURE_BINDING_2D_MULTISAMPLE"/>
+            <enum name="GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY"/>
             <enum name="GL_TEXTURE_BINDING_3D"/>
+            <enum name="GL_TEXTURE_BINDING_BUFFER"/>
+            <enum name="GL_TEXTURE_BINDING_CUBE_MAP"/>
+            <enum name="GL_TEXTURE_BINDING_RECTANGLE"/>
+            <enum name="GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT"/>
             <enum name="GL_TEXTURE_COLOR_TABLE_SGI"/>
+            <enum name="GL_TEXTURE_COMPRESSION_HINT"/>
             <enum name="GL_TEXTURE_COORD_ARRAY"/>
             <enum name="GL_TEXTURE_COORD_ARRAY_COUNT_EXT"/>
             <enum name="GL_TEXTURE_COORD_ARRAY_SIZE"/>
@@ -1075,13 +1220,23 @@
             <enum name="GL_TEXTURE_GEN_T"/>
             <enum name="GL_TEXTURE_MATRIX"/>
             <enum name="GL_TEXTURE_STACK_DEPTH"/>
+            <enum name="GL_TIMESTAMP"/>
+            <enum name="GL_TRANSFORM_FEEDBACK_BUFFER_BINDING"/>
+            <enum name="GL_TRANSFORM_FEEDBACK_BUFFER_SIZE"/>
+            <enum name="GL_TRANSFORM_FEEDBACK_BUFFER_START"/>
+            <enum name="GL_UNIFORM_BUFFER_BINDING"/>
+            <enum name="GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT"/>
+            <enum name="GL_UNIFORM_BUFFER_SIZE"/>
+            <enum name="GL_UNIFORM_BUFFER_START"/>
             <enum name="GL_UNPACK_ALIGNMENT"/>
             <enum name="GL_UNPACK_CMYK_HINT_EXT"/>
             <enum name="GL_UNPACK_IMAGE_DEPTH_SGIS"/>
+            <enum name="GL_UNPACK_IMAGE_HEIGHT"/>
             <enum name="GL_UNPACK_IMAGE_HEIGHT_EXT"/>
             <enum name="GL_UNPACK_LSB_FIRST"/>
             <enum name="GL_UNPACK_RESAMPLE_SGIX"/>
             <enum name="GL_UNPACK_ROW_LENGTH"/>
+            <enum name="GL_UNPACK_SKIP_IMAGES"/>
             <enum name="GL_UNPACK_SKIP_IMAGES_EXT"/>
             <enum name="GL_UNPACK_SKIP_PIXELS"/>
             <enum name="GL_UNPACK_SKIP_ROWS"/>
@@ -1089,13 +1244,20 @@
             <enum name="GL_UNPACK_SUBSAMPLE_RATE_SGIX"/>
             <enum name="GL_UNPACK_SWAP_BYTES"/>
             <enum name="GL_VERTEX_ARRAY"/>
+            <enum name="GL_VERTEX_ARRAY_BINDING"/>
             <enum name="GL_VERTEX_ARRAY_COUNT_EXT"/>
             <enum name="GL_VERTEX_ARRAY_SIZE"/>
             <enum name="GL_VERTEX_ARRAY_STRIDE"/>
             <enum name="GL_VERTEX_ARRAY_TYPE"/>
+            <enum name="GL_VERTEX_BINDING_DIVISOR"/>
+            <enum name="GL_VERTEX_BINDING_OFFSET"/>
+            <enum name="GL_VERTEX_BINDING_STRIDE"/>
             <enum name="GL_VERTEX_PRECLIP_HINT_SGIX"/>
             <enum name="GL_VERTEX_PRECLIP_SGIX"/>
             <enum name="GL_VIEWPORT"/>
+            <enum name="GL_VIEWPORT_BOUNDS_RANGE"/>
+            <enum name="GL_VIEWPORT_INDEX_PROVOKING_VERTEX"/>
+            <enum name="GL_VIEWPORT_SUBPIXEL_BITS"/>
             <enum name="GL_ZOOM_X"/>
             <enum name="GL_ZOOM_Y"/>
         </group>
@@ -1521,18 +1683,30 @@
         <group name="PixelFormat">
             <enum name="GL_ABGR_EXT"/>
             <enum name="GL_ALPHA"/>
+            <enum name="GL_BGR"/>
+            <enum name="GL_BGR_INTEGER"/>
+            <enum name="GL_BGRA"/>
+            <enum name="GL_BGRA_INTEGER"/>
             <enum name="GL_BLUE"/>
+            <enum name="GL_BLUE_INTEGER"/>
             <enum name="GL_CMYKA_EXT"/>
             <enum name="GL_CMYK_EXT"/>
             <enum name="GL_COLOR_INDEX"/>
             <enum name="GL_DEPTH_COMPONENT"/>
+            <enum name="GL_DEPTH_STENCIL"/>
             <enum name="GL_GREEN"/>
+            <enum name="GL_GREEN_INTEGER"/>
             <enum name="GL_LUMINANCE"/>
             <enum name="GL_LUMINANCE_ALPHA"/>
             <enum name="GL_RED"/>
             <enum name="GL_RED_EXT"/>
+            <enum name="GL_RED_INTEGER"/>
+            <enum name="GL_RG"/>
+            <enum name="GL_RG_INTEGER"/>
             <enum name="GL_RGB"/>
+            <enum name="GL_RGB_INTEGER"/>
             <enum name="GL_RGBA"/>
+            <enum name="GL_RGBA_INTEGER"/>
             <enum name="GL_STENCIL_INDEX"/>
             <enum name="GL_UNSIGNED_INT"/>
             <enum name="GL_UNSIGNED_SHORT"/>
@@ -2059,7 +2233,9 @@
 
         <group name="StencilOp">
             <enum name="GL_DECR"/>
+            <enum name="GL_DECR_WRAP"/>
             <enum name="GL_INCR"/>
+            <enum name="GL_INCR_WRAP"/>
             <enum name="GL_INVERT"/>
             <enum name="GL_KEEP"/>
             <enum name="GL_REPLACE"/>
@@ -2319,6 +2495,8 @@
             <enum name="GL_TESS_EVALUATION_SHADER_BIT_EXT"/>
             <enum name="GL_TESS_EVALUATION_SHADER_BIT_OES"/>
             <enum name="GL_COMPUTE_SHADER_BIT"/>
+            <enum name="GL_MESH_SHADER_BIT_NV"/>
+            <enum name="GL_TASK_SHADER_BIT_NV"/>
             <enum name="GL_ALL_SHADER_BITS"/>
             <enum name="GL_ALL_SHADER_BITS_EXT"/>
         </group>
@@ -2400,6 +2578,7 @@
             <enum name="GL_COLOR_ATTACHMENT30"/>
             <enum name="GL_COLOR_ATTACHMENT31"/>
             <enum name="GL_DEPTH_ATTACHMENT"/>
+            <enum name="GL_DEPTH_STENCIL_ATTACHMENT"/>
             <enum name="GL_DEPTH_ATTACHMENT_EXT"/>
             <enum name="GL_DEPTH_ATTACHMENT_OES"/>
         </group>
@@ -2506,6 +2685,10 @@
             <enum name="GL_TIME_ELAPSED"/>
         </group>
 
+        <group name="QueryCounterTarget">
+            <enum name="GL_TIMESTAMP"/>
+        </group>
+
         <group name="ConvolutionTarget">
             <enum name="GL_CONVOLUTION_1D"/>
             <enum name="GL_CONVOLUTION_2D"/>
@@ -2699,6 +2882,7 @@
             <enum name="GL_DEBUG_SEVERITY_LOW"/>
             <enum name="GL_DEBUG_SEVERITY_MEDIUM"/>
             <enum name="GL_DEBUG_SEVERITY_HIGH"/>
+            <enum name="GL_DEBUG_SEVERITY_NOTIFICATION"/>
             <enum name="GL_DONT_CARE"/>
         </group>
 
@@ -3473,6 +3657,8 @@
         <enum value="0x00000010" name="GL_TESS_EVALUATION_SHADER_BIT_EXT"/>
         <enum value="0x00000010" name="GL_TESS_EVALUATION_SHADER_BIT_OES"/>
         <enum value="0x00000020" name="GL_COMPUTE_SHADER_BIT"/>
+        <enum value="0x00000040" name="GL_MESH_SHADER_BIT_NV"/>
+        <enum value="0x00000080" name="GL_TASK_SHADER_BIT_NV"/>
         <enum value="0xFFFFFFFF" name="GL_ALL_SHADER_BITS"/>
         <enum value="0xFFFFFFFF" name="GL_ALL_SHADER_BITS_EXT"/>
     </enums>
@@ -3608,6 +3794,7 @@
     <enums namespace="GL" group="FoveationConfigBitQCOM" type="bitmask">
         <enum value="0x00000001" name="GL_FOVEATION_ENABLE_BIT_QCOM"/>
         <enum value="0x00000002" name="GL_FOVEATION_SCALED_BIN_METHOD_BIT_QCOM"/>
+        <enum value="0x00000004" name="GL_FOVEATION_SUBSAMPLED_LAYOUT_METHOD_BIT_QCOM"/>
     </enums>
 
     <enums namespace="GL" group="FfdMaskSGIX" type="bitmask">
@@ -7766,6 +7953,7 @@
         <enum value="0x8BB8" name="GL_TILE_RASTER_ORDER_FIXED_MESA"/>
         <enum value="0x8BB9" name="GL_TILE_RASTER_ORDER_INCREASING_X_MESA"/>
         <enum value="0x8BBA" name="GL_TILE_RASTER_ORDER_INCREASING_Y_MESA"/>
+        <enum value="0x8BBB" name="GL_FRAMEBUFFER_FLIP_Y_MESA" />
     </enums>
 
     <enums namespace="GL" start="0x8BC0" end="0x8BFF" vendor="QCOM" comment="Reassigned from AMD to QCOM">
@@ -8586,7 +8774,22 @@
         <enum value="0x8E5F" name="GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET"/>
         <enum value="0x8E5F" name="GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB"/>
         <enum value="0x8E5F" name="GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV"/>
-            <unused start="0x8E60" end="0x8E6F" vendor="NV"/>
+        <enum value="0x8E60" name="GL_MAX_MESH_UNIFORM_BLOCKS_NV"/>
+        <enum value="0x8E61" name="GL_MAX_MESH_TEXTURE_IMAGE_UNITS_NV"/>
+        <enum value="0x8E62" name="GL_MAX_MESH_IMAGE_UNIFORMS_NV"/>
+        <enum value="0x8E63" name="GL_MAX_MESH_UNIFORM_COMPONENTS_NV"/>
+        <enum value="0x8E64" name="GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV"/>
+        <enum value="0x8E65" name="GL_MAX_MESH_ATOMIC_COUNTERS_NV"/>
+        <enum value="0x8E66" name="GL_MAX_MESH_SHADER_STORAGE_BLOCKS_NV"/>
+        <enum value="0x8E67" name="GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV"/>
+        <enum value="0x8E68" name="GL_MAX_TASK_UNIFORM_BLOCKS_NV"/>
+        <enum value="0x8E69" name="GL_MAX_TASK_TEXTURE_IMAGE_UNITS_NV"/>
+        <enum value="0x8E6A" name="GL_MAX_TASK_IMAGE_UNIFORMS_NV"/>
+        <enum value="0x8E6B" name="GL_MAX_TASK_UNIFORM_COMPONENTS_NV"/>
+        <enum value="0x8E6C" name="GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV"/>
+        <enum value="0x8E6D" name="GL_MAX_TASK_ATOMIC_COUNTERS_NV"/>
+        <enum value="0x8E6E" name="GL_MAX_TASK_SHADER_STORAGE_BLOCKS_NV"/>
+        <enum value="0x8E6F" name="GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV"/>
         <enum value="0x8E70" name="GL_MAX_TRANSFORM_FEEDBACK_BUFFERS"/>
         <enum value="0x8E71" name="GL_MAX_VERTEX_STREAMS"/>
         <enum value="0x8E72" name="GL_PATCH_VERTICES"/>
@@ -8835,7 +9038,8 @@
 
     <enums namespace="GL" start="0x8FA0" end="0x8FBF" vendor="QCOM" comment="For Maurice Ribble, bug 4512">
         <enum value="0x8FA0" name="GL_PERFMON_GLOBAL_MODE_QCOM"/>
-            <unused start="0x8FA1" end="0x8FAF" vendor="QCOM"/>
+        <enum value="0x8FA1" name="GL_MAX_SHADER_SUBSAMPLED_IMAGE_UNITS_QCOM"/>
+            <unused start="0x8FA2" end="0x8FAF" vendor="QCOM"/>
         <enum value="0x8FB0" name="GL_BINNING_CONTROL_HINT_QCOM"/>
         <enum value="0x8FB1" name="GL_CPU_OPTIMIZED_QCOM"/>
         <enum value="0x8FB2" name="GL_GPU_OPTIMIZED_QCOM"/>
@@ -9394,7 +9598,13 @@
         <enum value="0x91B0" name="GL_MAX_SHADER_COMPILER_THREADS_ARB" alias="GL_MAX_SHADER_COMPILER_THREADS_KHR"/>
         <enum value="0x91B1" name="GL_COMPLETION_STATUS_KHR"/>
         <enum value="0x91B1" name="GL_COMPLETION_STATUS_ARB" alias="GL_COMPLETION_STATUS_KHR"/>
-            <unused start="0x91B2" end="0x91B8" vendor="AMD"/>
+        <enum value="0x91B2" name="GL_RENDERBUFFER_STORAGE_SAMPLES_AMD"/>
+        <enum value="0x91B3" name="GL_MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD"/>
+        <enum value="0x91B4" name="GL_MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD"/>
+        <enum value="0x91B5" name="GL_MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD"/>
+        <enum value="0x91B6" name="GL_NUM_SUPPORTED_MULTISAMPLE_MODES_AMD"/>
+        <enum value="0x91B7" name="GL_SUPPORTED_MULTISAMPLE_MODES_AMD"/>
+            <unused start="0x91B8" end="0x91B8" vendor="AMD"/>
         <enum value="0x91B9" name="GL_COMPUTE_SHADER"/>
             <unused start="0x91BA" vendor="AMD"/>
         <enum value="0x91BB" name="GL_MAX_COMPUTE_UNIFORM_BLOCKS"/>
@@ -9598,7 +9808,7 @@
         <enum value="0x92DC" name="GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS"/>
         <enum value="0x92DD" name="GL_FRAGMENT_COVERAGE_TO_COLOR_NV"/>
         <enum value="0x92DE" name="GL_FRAGMENT_COVERAGE_COLOR_NV"/>
-            <unused start="0x92DF" end="0x92DF" vendor="NV"/>
+        <enum value="0x92DF" name="GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV"/>
         <enum value="0x92E0" name="GL_DEBUG_OUTPUT"/>
         <enum value="0x92E0" name="GL_DEBUG_OUTPUT_KHR"/>
         <enum value="0x92E1" name="GL_UNIFORM"/>
@@ -9761,7 +9971,7 @@
         <enum value="0x937C" name="GL_VIEWPORT_POSITION_W_SCALE_NV"/>
         <enum value="0x937D" name="GL_VIEWPORT_POSITION_W_SCALE_X_COEFF_NV"/>
         <enum value="0x937E" name="GL_VIEWPORT_POSITION_W_SCALE_Y_COEFF_NV"/>
-            <unused start="0x937F" vendor="NV"/>
+        <enum value="0x937F" name="GL_REPRESENTATIVE_FRAGMENT_TEST_NV"/>
     </enums>
 
     <enums namespace="GL" start="0x9380" end="0x939F" vendor="ARB">
@@ -9770,7 +9980,36 @@
         <enum value="0x9381" name="GL_MULTISAMPLE_LINE_WIDTH_RANGE"/>
         <enum value="0x9382" name="GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY_ARB"/>
         <enum value="0x9382" name="GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY"/>
-            <unused start="0x9383" end="0x939F" vendor="ARB"/>
+        <enum value="0x9383" name="GL_VIEW_CLASS_EAC_R11"/>
+        <enum value="0x9384" name="GL_VIEW_CLASS_EAC_RG11"/>
+        <enum value="0x9385" name="GL_VIEW_CLASS_ETC2_RGB"/>
+        <enum value="0x9386" name="GL_VIEW_CLASS_ETC2_RGBA"/>
+        <enum value="0x9387" name="GL_VIEW_CLASS_ETC2_EAC_RGBA"/>
+        <enum value="0x9388" name="GL_VIEW_CLASS_ASTC_4x4_RGBA"/>
+        <enum value="0x9389" name="GL_VIEW_CLASS_ASTC_5x4_RGBA"/>
+        <enum value="0x938A" name="GL_VIEW_CLASS_ASTC_5x5_RGBA"/>
+        <enum value="0x938B" name="GL_VIEW_CLASS_ASTC_6x5_RGBA"/>
+        <enum value="0x938C" name="GL_VIEW_CLASS_ASTC_6x6_RGBA"/>
+        <enum value="0x938D" name="GL_VIEW_CLASS_ASTC_8x5_RGBA"/>
+        <enum value="0x938E" name="GL_VIEW_CLASS_ASTC_8x6_RGBA"/>
+        <enum value="0x938F" name="GL_VIEW_CLASS_ASTC_8x8_RGBA"/>
+        <enum value="0x9390" name="GL_VIEW_CLASS_ASTC_10x5_RGBA"/>
+        <enum value="0x9391" name="GL_VIEW_CLASS_ASTC_10x6_RGBA"/>
+        <enum value="0x9392" name="GL_VIEW_CLASS_ASTC_10x8_RGBA"/>
+        <enum value="0x9393" name="GL_VIEW_CLASS_ASTC_10x10_RGBA"/>
+        <enum value="0x9394" name="GL_VIEW_CLASS_ASTC_12x10_RGBA"/>
+        <enum value="0x9395" name="GL_VIEW_CLASS_ASTC_12x12_RGBA"/>
+            <unused start="0x9396" end="0x939F" vendor="ARB" comment="reserved for ASTC 3D interactions with ARB_ifq2"/>
+            <!-- <enum value="0x9396" name="GL_VIEW_CLASS_ASTC_3x3x3_RGBA"/> -->
+            <!-- <enum value="0x9397" name="GL_VIEW_CLASS_ASTC_4x3x3_RGBA"/> -->
+            <!-- <enum value="0x9398" name="GL_VIEW_CLASS_ASTC_4x4x3_RGBA"/> -->
+            <!-- <enum value="0x9399" name="GL_VIEW_CLASS_ASTC_4x4x4_RGBA"/> -->
+            <!-- <enum value="0x939A" name="GL_VIEW_CLASS_ASTC_5x4x4_RGBA"/> -->
+            <!-- <enum value="0x939B" name="GL_VIEW_CLASS_ASTC_5x5x4_RGBA"/> -->
+            <!-- <enum value="0x939C" name="GL_VIEW_CLASS_ASTC_5x5x5_RGBA"/> -->
+            <!-- <enum value="0x939D" name="GL_VIEW_CLASS_ASTC_6x5x5_RGBA"/> -->
+            <!-- <enum value="0x939E" name="GL_VIEW_CLASS_ASTC_6x6x5_RGBA"/> -->
+            <!-- <enum value="0x939F" name="GL_VIEW_CLASS_ASTC_6x6x6_RGBA"/> -->
     </enums>
 
     <enums namespace="GL" start="0x93A0" end="0x93AF" vendor="ANGLE" comment="Khronos bug 8100">
@@ -9900,11 +10139,21 @@
     <enums namespace="GL" start="0x9530" end="0x962F" vendor="NV" comment="Khronos bug 12977">
         <enum value="0x9530" name="GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT"/>
         <enum value="0x9531" name="GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT"/>
-            <unused start="0x9532" end="0x953F" vendor="NV"/>
+            <unused start="0x9532" end="0x9535" vendor="NV"/>
+        <enum value="0x9536" name="GL_MAX_MESH_TOTAL_MEMORY_SIZE_NV"/>
+        <enum value="0x9537" name="GL_MAX_TASK_TOTAL_MEMORY_SIZE_NV"/>
+        <enum value="0x9538" name="GL_MAX_MESH_OUTPUT_VERTICES_NV"/>
+        <enum value="0x9539" name="GL_MAX_MESH_OUTPUT_PRIMITIVES_NV"/>
+        <enum value="0x953A" name="GL_MAX_TASK_OUTPUT_COUNT_NV"/>
+        <enum value="0x953B" name="GL_MAX_MESH_WORK_GROUP_SIZE_NV"/>
+        <enum value="0x953C" name="GL_MAX_TASK_WORK_GROUP_SIZE_NV"/>
+        <enum value="0x953D" name="GL_MAX_DRAW_MESH_TASKS_COUNT_NV"/>
+        <enum value="0x953E" name="GL_MESH_WORK_GROUP_SIZE_NV"/>
+        <enum value="0x953F" name="GL_TASK_WORK_GROUP_SIZE_NV"/>
         <enum value="0x9540" name="GL_QUERY_RESOURCE_TYPE_VIDMEM_ALLOC_NV"/>
             <unused start="0x9541" vendor="NV"/>
         <enum value="0x9542" name="GL_QUERY_RESOURCE_MEMTYPE_VIDMEM_NV"/>
-            <unused start="0x9543" vendor="NV"/>
+        <enum value="0x9543" name="GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV"/>
         <enum value="0x9544" name="GL_QUERY_RESOURCE_SYS_RESERVED_NV"/>
         <enum value="0x9545" name="GL_QUERY_RESOURCE_TEXTURE_NV"/>
         <enum value="0x9546" name="GL_QUERY_RESOURCE_RENDERBUFFER_NV"/>
@@ -9922,9 +10171,39 @@
         <enum value="0x9552" name="GL_SPIR_V_BINARY_ARB" alias="GL_SPIR_V_BINARY"/>
         <enum value="0x9553" name="GL_SPIR_V_EXTENSIONS"/>
         <enum value="0x9554" name="GL_NUM_SPIR_V_EXTENSIONS"/>
-            <unused start="0x9555" end="0x9557" vendor="NV"/>
+        <enum value="0x9555" name="GL_SCISSOR_TEST_EXCLUSIVE_NV"/>
+        <enum value="0x9556" name="GL_SCISSOR_BOX_EXCLUSIVE_NV"/>
+        <enum value="0x9557" name="GL_MAX_MESH_VIEWS_NV"/>
         <enum value="0x9558" name="GL_RENDER_GPU_MASK_NV"/>
-            <unused start="0x9559" end="0x957F" vendor="NV"/>
+        <enum value="0x9559" name="GL_MESH_SHADER_NV"/>
+        <enum value="0x955A" name="GL_TASK_SHADER_NV"/>
+        <enum value="0x955B" name="GL_SHADING_RATE_IMAGE_BINDING_NV"/>
+        <enum value="0x955C" name="GL_SHADING_RATE_IMAGE_TEXEL_WIDTH_NV"/>
+        <enum value="0x955D" name="GL_SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV"/>
+        <enum value="0x955E" name="GL_SHADING_RATE_IMAGE_PALETTE_SIZE_NV"/>
+        <enum value="0x955F" name="GL_MAX_COARSE_FRAGMENT_SAMPLES_NV"/>
+            <unused start="0x9560" end="0x9562" vendor="NV"/>
+        <enum value="0x9563" name="GL_SHADING_RATE_IMAGE_NV"/>
+        <enum value="0x9564" name="GL_SHADING_RATE_NO_INVOCATIONS_NV"/>
+        <enum value="0x9565" name="GL_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV"/>
+        <enum value="0x9566" name="GL_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV"/>
+        <enum value="0x9567" name="GL_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV"/>
+        <enum value="0x9568" name="GL_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV"/>
+        <enum value="0x9569" name="GL_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV"/>
+        <enum value="0x956A" name="GL_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV"/>
+        <enum value="0x956B" name="GL_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV"/>
+        <enum value="0x956C" name="GL_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV"/>
+        <enum value="0x956D" name="GL_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV"/>
+        <enum value="0x956E" name="GL_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV"/>
+        <enum value="0x956F" name="GL_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV"/>
+            <unused start="0x9570" end="0x9578" vendor="NV"/>
+        <enum value="0x9579" name="GL_MESH_VERTICES_OUT_NV"/>
+        <enum value="0x957A" name="GL_MESH_PRIMITIVES_OUT_NV"/>
+        <enum value="0x957B" name="GL_MESH_OUTPUT_TYPE_NV"/>
+        <enum value="0x957C" name="GL_MESH_SUBROUTINE_NV"/>
+        <enum value="0x957D" name="GL_TASK_SUBROUTINE_NV"/>
+        <enum value="0x957E" name="GL_MESH_SUBROUTINE_UNIFORM_NV"/>
+        <enum value="0x957F" name="GL_TASK_SUBROUTINE_UNIFORM_NV"/>
         <enum value="0x9580" name="GL_TEXTURE_TILING_EXT"/>
         <enum value="0x9581" name="GL_DEDICATED_MEMORY_OBJECT_EXT"/>
         <enum value="0x9582" name="GL_NUM_TILING_TYPES_EXT"/>
@@ -9953,7 +10232,28 @@
         <enum value="0x9599" name="GL_DEVICE_LUID_EXT"/>
         <enum value="0x959A" name="GL_DEVICE_NODE_MASK_EXT"/>
         <enum value="0x959B" name="GL_PROTECTED_MEMORY_OBJECT_EXT"/>
-            <unused start="0x959C" end="0x962F" vendor="NV"/>
+        <enum value="0x959C" name="GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV"/>
+        <enum value="0x959D" name="GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV"/>
+        <enum value="0x959E" name="GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV"/>
+        <enum value="0x959F" name="GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV"/>
+        <enum value="0x95A0" name="GL_REFERENCED_BY_MESH_SHADER_NV"/>
+        <enum value="0x95A1" name="GL_REFERENCED_BY_TASK_SHADER_NV"/>
+        <enum value="0x95A2" name="GL_MAX_MESH_WORK_GROUP_INVOCATIONS_NV"/>
+        <enum value="0x95A3" name="GL_MAX_TASK_WORK_GROUP_INVOCATIONS_NV"/>
+        <enum value="0x95A4" name="GL_ATTACHED_MEMORY_OBJECT_NV"/>
+        <enum value="0x95A5" name="GL_ATTACHED_MEMORY_OFFSET_NV"/>
+        <enum value="0x95A6" name="GL_MEMORY_ATTACHABLE_ALIGNMENT_NV"/>
+        <enum value="0x95A7" name="GL_MEMORY_ATTACHABLE_SIZE_NV"/>
+        <enum value="0x95A8" name="GL_MEMORY_ATTACHABLE_NV"/>
+        <enum value="0x95A9" name="GL_DETACHED_MEMORY_INCARNATION_NV"/>
+        <enum value="0x95AA" name="GL_DETACHED_TEXTURES_NV"/>
+        <enum value="0x95AB" name="GL_DETACHED_BUFFERS_NV"/>
+        <enum value="0x95AC" name="GL_MAX_DETACHED_TEXTURES_NV"/>
+        <enum value="0x95AD" name="GL_MAX_DETACHED_BUFFERS_NV"/>
+        <enum value="0x95AE" name="GL_SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV"/>
+        <enum value="0x95AF" name="GL_SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV"/>
+        <enum value="0x95B0" name="GL_SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV"/>
+        <unused start="0x9581" end="0x962F" vendor="NV"/>
     </enums>
 
     <enums namespace="GL" start="0x9630" end="0x963F" vendor="Oculus" comment="Email from Cass Everitt">
@@ -10566,6 +10866,10 @@
             <param len="count">const <ptype>GLuint</ptype> *<name>samplers</name></param>
         </command>
         <command>
+            <proto>void <name>glBindShadingRateImageNV</name></proto>
+            <param><ptype>GLuint</ptype> <name>texture</name></param>
+        </command>
+        <command>
             <proto><ptype>GLuint</ptype> <name>glBindTexGenParameterEXT</name></proto>
             <param group="TextureUnit"><ptype>GLenum</ptype> <name>unit</name></param>
             <param group="TextureCoordName"><ptype>GLenum</ptype> <name>coord</name></param>
@@ -11073,6 +11377,12 @@
             <param group="BufferSize"><ptype>GLsizeiptr</ptype> <name>length</name></param>
         </command>
         <command>
+            <proto>void <name>glBufferAttachMemoryNV</name></proto>
+            <param group="BufferTargetARB"><ptype>GLenum</ptype> <name>target</name></param>
+            <param><ptype>GLuint</ptype> <name>memory</name></param>
+            <param><ptype>GLuint64</ptype> <name>offset</name></param>
+        </command>
+        <command>
             <proto>void <name>glBufferData</name></proto>
             <param group="BufferTargetARB"><ptype>GLenum</ptype> <name>target</name></param>
             <param group="BufferSize"><ptype>GLsizeiptr</ptype> <name>size</name></param>
@@ -14236,6 +14546,15 @@
             <param><ptype>GLsizei</ptype> <name>width</name></param>
         </command>
         <command>
+            <proto>void <name>glDrawMeshTasksNV</name></proto>
+            <param><ptype>GLuint</ptype> <name>first</name></param>
+            <param><ptype>GLuint</ptype> <name>count</name></param>
+        </command>
+        <command>
+            <proto>void <name>glDrawMeshTasksIndirectNV</name></proto>
+            <param><ptype>GLintptr</ptype> <name>indirect</name></param>
+        </command>
+        <command>
             <proto>void <name>glDrawPixels</name></proto>
             <param><ptype>GLsizei</ptype> <name>width</name></param>
             <param><ptype>GLsizei</ptype> <name>height</name></param>
@@ -16505,6 +16824,7 @@
         </command>
         <command>
             <proto group="GraphicsResetStatus"><ptype>GLenum</ptype> <name>glGetGraphicsResetStatusEXT</name></proto>
+            <alias name="glGetGraphicsResetStatus"/>
         </command>
         <command>
             <proto group="GraphicsResetStatus"><ptype>GLenum</ptype> <name>glGetGraphicsResetStatusKHR</name></proto>
@@ -16861,6 +17181,14 @@
             <param len="COMPSIZE(pname)"><ptype>GLfixed</ptype> *<name>params</name></param>
         </command>
         <command>
+            <proto>void <name>glGetMemoryObjectDetachedResourcesuivNV</name></proto>
+            <param><ptype>GLuint</ptype> <name>memory</name></param>
+            <param><ptype>GLenum</ptype> <name>pname</name></param>
+            <param><ptype>GLint</ptype> <name>first</name></param>
+            <param><ptype>GLsizei</ptype> <name>count</name></param>
+            <param><ptype>GLuint</ptype> *<name>params</name></param>
+        </command>
+        <command>
             <proto>void <name>glGetMemoryObjectParameterivEXT</name></proto>
             <param><ptype>GLuint</ptype> <name>memoryObject</name></param>
             <param group="MemoryObjectParameterName"><ptype>GLenum</ptype> <name>pname</name></param>
@@ -18012,6 +18340,19 @@
             <glx type="single" opcode="198"/>
         </command>
         <command>
+            <proto>void <name>glGetShadingRateImagePaletteNV</name></proto>
+            <param><ptype>GLuint</ptype> <name>viewport</name></param>
+            <param><ptype>GLuint</ptype> <name>entry</name></param>
+            <param len="1"><ptype>GLenum</ptype> *<name>rate</name></param>
+        </command>
+        <command>
+            <proto>void <name>glGetShadingRateSampleLocationivNV</name></proto>
+            <param><ptype>GLenum</ptype> <name>rate</name></param>
+            <param><ptype>GLuint</ptype> <name>samples</name></param>
+            <param><ptype>GLuint</ptype> <name>index</name></param>
+            <param len="3"><ptype>GLint</ptype> *<name>location</name></param>
+        </command>
+        <command>
             <proto>void <name>glGetSharpenTexFuncSGIS</name></proto>
             <param group="TextureTarget"><ptype>GLenum</ptype> <name>target</name></param>
             <param len="COMPSIZE(target)"><ptype>GLfloat</ptype> *<name>points</name></param>
@@ -20895,6 +21236,19 @@
             <alias name="glMultiDrawElementsIndirect"/>
         </command>
         <command>
+            <proto>void <name>glMultiDrawMeshTasksIndirectNV</name></proto>
+            <param><ptype>GLintptr</ptype> <name>indirect</name></param>
+            <param><ptype>GLsizei</ptype> <name>drawcount</name></param>
+            <param><ptype>GLsizei</ptype> <name>stride</name></param>
+        </command>
+        <command>
+            <proto>void <name>glMultiDrawMeshTasksIndirectCountNV</name></proto>
+            <param><ptype>GLintptr</ptype> <name>indirect</name></param>
+            <param><ptype>GLintptr</ptype> <name>drawcount</name></param>
+            <param><ptype>GLsizei</ptype> <name>maxdrawcount</name></param>
+            <param><ptype>GLsizei</ptype> <name>stride</name></param>
+        </command>
+        <command>
             <proto>void <name>glMultiDrawRangeElementArrayAPPLE</name></proto>
             <param group="PrimitiveType"><ptype>GLenum</ptype> <name>mode</name></param>
             <param><ptype>GLuint</ptype> <name>start</name></param>
@@ -21902,6 +22256,12 @@
             <param><ptype>GLbitfield</ptype> <name>waitGpuMask</name></param>
         </command>
         <command>
+            <proto>void <name>glNamedBufferAttachMemoryNV</name></proto>
+            <param><ptype>GLuint</ptype> <name>buffer</name></param>
+            <param><ptype>GLuint</ptype> <name>memory</name></param>
+            <param><ptype>GLuint64</ptype> <name>offset</name></param>
+        </command>
+        <command>
             <proto>void <name>glNamedBufferData</name></proto>
             <param><ptype>GLuint</ptype> <name>buffer</name></param>
             <param group="BufferSize"><ptype>GLsizeiptr</ptype> <name>size</name></param>
@@ -22235,6 +22595,15 @@
             <param><ptype>GLsizei</ptype> <name>height</name></param>
         </command>
         <command>
+            <proto>void <name>glNamedRenderbufferStorageMultisampleAdvancedAMD</name></proto>
+            <param group="Renderbuffer"><ptype>GLuint</ptype> <name>renderbuffer</name></param>
+            <param><ptype>GLsizei</ptype> <name>samples</name></param>
+            <param><ptype>GLsizei</ptype> <name>storageSamples</name></param>
+            <param group="InternalFormat"><ptype>GLenum</ptype> <name>internalformat</name></param>
+            <param><ptype>GLsizei</ptype> <name>width</name></param>
+            <param><ptype>GLsizei</ptype> <name>height</name></param>
+        </command>
+        <command>
             <proto>void <name>glNamedRenderbufferStorageMultisampleCoverageEXT</name></proto>
             <param group="Renderbuffer"><ptype>GLuint</ptype> <name>renderbuffer</name></param>
             <param><ptype>GLsizei</ptype> <name>coverageSamples</name></param>
@@ -24703,12 +25072,12 @@
         <command>
             <proto>void <name>glQueryCounter</name></proto>
             <param><ptype>GLuint</ptype> <name>id</name></param>
-            <param group="QueryTarget"><ptype>GLenum</ptype> <name>target</name></param>
+            <param group="QueryCounterTarget"><ptype>GLenum</ptype> <name>target</name></param>
         </command>
         <command>
             <proto>void <name>glQueryCounterEXT</name></proto>
             <param><ptype>GLuint</ptype> <name>id</name></param>
-            <param group="QueryTarget"><ptype>GLenum</ptype> <name>target</name></param>
+            <param group="QueryCounterTarget"><ptype>GLenum</ptype> <name>target</name></param>
             <alias name="glQueryCounter"/>
         </command>
         <command>
@@ -25125,6 +25494,15 @@
             <param><ptype>GLsizei</ptype> <name>height</name></param>
         </command>
         <command>
+            <proto>void <name>glRenderbufferStorageMultisampleAdvancedAMD</name></proto>
+            <param group="RenderbufferTarget"><ptype>GLenum</ptype> <name>target</name></param>
+            <param><ptype>GLsizei</ptype> <name>samples</name></param>
+            <param><ptype>GLsizei</ptype> <name>storageSamples</name></param>
+            <param group="InternalFormat"><ptype>GLenum</ptype> <name>internalformat</name></param>
+            <param><ptype>GLsizei</ptype> <name>width</name></param>
+            <param><ptype>GLsizei</ptype> <name>height</name></param>
+        </command>
+        <command>
             <proto>void <name>glRenderbufferStorageMultisampleCoverageNV</name></proto>
             <param group="RenderbufferTarget"><ptype>GLenum</ptype> <name>target</name></param>
             <param><ptype>GLsizei</ptype> <name>coverageSamples</name></param>
@@ -25355,6 +25733,11 @@
             <glx type="render" opcode="4112"/>
         </command>
         <command>
+            <proto>void <name>glResetMemoryObjectParameterNV</name></proto>
+            <param><ptype>GLuint</ptype> <name>memory</name></param>
+            <param><ptype>GLenum</ptype> <name>pname</name></param>
+        </command>
+        <command>
             <proto>void <name>glResetMinmax</name></proto>
             <param group="MinmaxTargetEXT"><ptype>GLenum</ptype> <name>target</name></param>
             <glx type="render" opcode="4113"/>
@@ -25590,6 +25973,19 @@
             <alias name="glScissorArrayv"/>
         </command>
         <command>
+            <proto>void <name>glScissorExclusiveArrayvNV</name></proto>
+            <param><ptype>GLuint</ptype> <name>first</name></param>
+            <param><ptype>GLsizei</ptype> <name>count</name></param>
+            <param len="COMPSIZE(count)">const <ptype>GLint</ptype> *<name>v</name></param>
+        </command>
+        <command>
+            <proto>void <name>glScissorExclusiveNV</name></proto>
+            <param group="WinCoord"><ptype>GLint</ptype> <name>x</name></param>
+            <param group="WinCoord"><ptype>GLint</ptype> <name>y</name></param>
+            <param><ptype>GLsizei</ptype> <name>width</name></param>
+            <param><ptype>GLsizei</ptype> <name>height</name></param>
+        </command>
+        <command>
             <proto>void <name>glScissorIndexed</name></proto>
             <param><ptype>GLuint</ptype> <name>index</name></param>
             <param><ptype>GLint</ptype> <name>left</name></param>
@@ -26025,6 +26421,27 @@
             <param><ptype>GLuint</ptype> <name>storageBlockBinding</name></param>
         </command>
         <command>
+            <proto>void <name>glShadingRateImageBarrierNV</name></proto>
+            <param><ptype>GLboolean</ptype> <name>synchronize</name></param>
+        </command>
+        <command>
+            <proto>void <name>glShadingRateImagePaletteNV</name></proto>
+            <param><ptype>GLuint</ptype> <name>viewport</name></param>
+            <param><ptype>GLuint</ptype> <name>first</name></param>
+            <param><ptype>GLsizei</ptype> <name>count</name></param>
+            <param len="count">const <ptype>GLenum</ptype> *<name>rates</name></param>
+        </command>
+        <command>
+            <proto>void <name>glShadingRateSampleOrderNV</name></proto>
+            <param><ptype>GLenum</ptype> <name>order</name></param>
+        </command>
+        <command>
+            <proto>void <name>glShadingRateSampleOrderCustomNV</name></proto>
+            <param><ptype>GLenum</ptype> <name>rate</name></param>
+            <param><ptype>GLuint</ptype> <name>samples</name></param>
+            <param len="COMPSIZE(rate,samples)">const <ptype>GLint</ptype> *<name>locations</name></param>
+        </command>
+        <command>
             <proto>void <name>glSharpenTexFuncSGIS</name></proto>
             <param group="TextureTarget"><ptype>GLenum</ptype> <name>target</name></param>
             <param><ptype>GLsizei</ptype> <name>n</name></param>
@@ -26354,6 +26771,12 @@
             <param><ptype>GLuint</ptype> <name>name</name></param>
         </command>
         <command>
+            <proto>void <name>glTexAttachMemoryNV</name></proto>
+            <param group="TextureTarget"><ptype>GLenum</ptype> <name>target</name></param>
+            <param><ptype>GLuint</ptype> <name>memory</name></param>
+            <param><ptype>GLuint64</ptype> <name>offset</name></param>
+        </command>
+        <command>
             <proto>void <name>glTexBuffer</name></proto>
             <param group="TextureTarget"><ptype>GLenum</ptype> <name>target</name></param>
             <param group="InternalFormat"><ptype>GLenum</ptype> <name>internalformat</name></param>
@@ -27573,6 +27996,12 @@
             <glx type="render" opcode="2058"/>
         </command>
         <command>
+            <proto>void <name>glTextureAttachMemoryNV</name></proto>
+            <param><ptype>GLuint</ptype> <name>texture</name></param>
+            <param><ptype>GLuint</ptype> <name>memory</name></param>
+            <param><ptype>GLuint64</ptype> <name>offset</name></param>
+        </command>
+        <command>
             <proto>void <name>glTextureBarrier</name></proto>
         </command>
         <command>
@@ -29136,6 +29565,14 @@
             <param len="numTextureNames">const <ptype>GLuint</ptype> *<name>textureNames</name></param>
         </command>
         <command>
+            <proto group="vdpauSurfaceNV"><ptype>GLvdpauSurfaceNV</ptype> <name>glVDPAURegisterVideoSurfaceWithPictureStructureNV</name></proto>
+            <param>const void *<name>vdpSurface</name></param>
+            <param><ptype>GLenum</ptype> <name>target</name></param>
+            <param><ptype>GLsizei</ptype> <name>numTextureNames</name></param>
+            <param len="numTextureNames">const <ptype>GLuint</ptype> *<name>textureNames</name></param>
+            <param group="Boolean"><ptype>GLboolean</ptype> <name>isFrameStructure</name></param>
+        </command>
+        <command>
             <proto>void <name>glVDPAUSurfaceAccessNV</name></proto>
             <param group="vdpauSurfaceNV"><ptype>GLvdpauSurfaceNV</ptype> <name>surface</name></param>
             <param><ptype>GLenum</ptype> <name>access</name></param>
@@ -33844,6 +34281,7 @@
             <enum name="GL_RENDERBUFFER_STENCIL_SIZE"/>
             <enum name="GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE"/>
             <enum name="GL_MAX_SAMPLES"/>
+            <enum name="GL_INDEX"/>
             <command name="glIsRenderbuffer"/>
             <command name="glBindRenderbuffer"/>
             <command name="glDeleteRenderbuffers"/>
@@ -33865,8 +34303,7 @@
             <command name="glRenderbufferStorageMultisample"/>
             <command name="glFramebufferTextureLayer"/>
         </require>
-        <require profile="compatibility" comment="Reuse ARB_framebuffer_object compatibility profile">
-            <enum name="GL_INDEX"/>
+        <require comment="Reuse ARB_texture_float">
             <enum name="GL_TEXTURE_LUMINANCE_TYPE"/>
             <enum name="GL_TEXTURE_INTENSITY_TYPE"/>
         </require>
@@ -34914,6 +35351,7 @@
             <enum name="GL_CLAMP_VERTEX_COLOR"/>
             <enum name="GL_CLAMP_FRAGMENT_COLOR"/>
             <enum name="GL_ALPHA_INTEGER"/>
+            <enum name="GL_INDEX"/>
             <enum name="GL_TEXTURE_LUMINANCE_TYPE"/>
             <enum name="GL_TEXTURE_INTENSITY_TYPE"/>
         </remove>
@@ -38686,6 +39124,18 @@
                 <command name="glBlendEquationSeparateIndexedAMD"/>
             </require>
         </extension>
+        <extension name="GL_AMD_framebuffer_multisample_advanced" supported="gl|glcore|gles2">
+            <require>
+                <enum name="GL_RENDERBUFFER_STORAGE_SAMPLES_AMD"/>
+                <enum name="GL_MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD"/>
+                <enum name="GL_MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD"/>
+                <enum name="GL_MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD"/>
+                <enum name="GL_NUM_SUPPORTED_MULTISAMPLE_MODES_AMD"/>
+                <enum name="GL_SUPPORTED_MULTISAMPLE_MODES_AMD"/>
+                <command name="glRenderbufferStorageMultisampleAdvancedAMD"/>
+                <command name="glNamedRenderbufferStorageMultisampleAdvancedAMD"/>
+            </require>
+        </extension>
         <extension name="GL_AMD_framebuffer_sample_positions" supported="gl">
             <require>
                 <enum name="GL_SUBSAMPLE_DISTANCE_AMD"/>
@@ -40391,6 +40841,29 @@
                 <enum name="GL_VIEW_CLASS_RGTC2_RG"/>
                 <enum name="GL_VIEW_CLASS_BPTC_UNORM"/>
                 <enum name="GL_VIEW_CLASS_BPTC_FLOAT"/>
+            </require>
+            <require comment="Supported only if GL_ARB_ES3_compatibility is supported">
+                <enum name="GL_VIEW_CLASS_EAC_R11"/>
+                <enum name="GL_VIEW_CLASS_EAC_RG11"/>
+                <enum name="GL_VIEW_CLASS_ETC2_RGB"/>
+                <enum name="GL_VIEW_CLASS_ETC2_RGBA"/>
+                <enum name="GL_VIEW_CLASS_ETC2_EAC_RGBA"/>
+            </require>
+            <require comment="Supported only if GL_KHR_texture_compression_astc_ldr is supported">
+                <enum name="GL_VIEW_CLASS_ASTC_4x4_RGBA"/>
+                <enum name="GL_VIEW_CLASS_ASTC_5x4_RGBA"/>
+                <enum name="GL_VIEW_CLASS_ASTC_5x5_RGBA"/>
+                <enum name="GL_VIEW_CLASS_ASTC_6x5_RGBA"/>
+                <enum name="GL_VIEW_CLASS_ASTC_6x6_RGBA"/>
+                <enum name="GL_VIEW_CLASS_ASTC_8x5_RGBA"/>
+                <enum name="GL_VIEW_CLASS_ASTC_8x6_RGBA"/>
+                <enum name="GL_VIEW_CLASS_ASTC_8x8_RGBA"/>
+                <enum name="GL_VIEW_CLASS_ASTC_10x5_RGBA"/>
+                <enum name="GL_VIEW_CLASS_ASTC_10x6_RGBA"/>
+                <enum name="GL_VIEW_CLASS_ASTC_10x8_RGBA"/>
+                <enum name="GL_VIEW_CLASS_ASTC_10x10_RGBA"/>
+                <enum name="GL_VIEW_CLASS_ASTC_12x10_RGBA"/>
+                <enum name="GL_VIEW_CLASS_ASTC_12x12_RGBA"/>
                 <command name="glGetInternalformati64v"/>
             </require>
         </extension>
@@ -45729,6 +46202,11 @@
                 <enum name="GL_TEXTURE_2D_STACK_BINDING_MESAX"/>
             </require>
         </extension>
+        <extension name="GL_MESA_framebuffer_flip_y" supported="gles2">
+            <require>
+                <enum name="GL_FRAMEBUFFER_FLIP_Y_MESA"/>
+            </require>
+        </extension>
         <extension name="GL_MESA_pack_invert" supported="gl">
             <require>
                 <enum name="GL_PACK_INVERT_MESA"/>
@@ -45978,6 +46456,7 @@
                 <enum name="GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV"/>
             </require>
         </extension>
+        <extension name="GL_NV_compute_shader_derivatives" supported="gl|glcore"/>
         <extension name="GL_NV_conditional_render" supported="gl|glcore|gles2">
             <require>
                 <enum name="GL_QUERY_WAIT_NV"/>
@@ -46296,6 +46775,7 @@
         </extension>
         <extension name="GL_NV_fragment_program4" supported="gl"/>
         <extension name="GL_NV_fragment_program_option" supported="gl"/>
+        <extension name="GL_NV_fragment_shader_barycentric" supported="gl|glcore"/>
         <extension name="GL_NV_fragment_shader_interlock" supported="gl|glcore|gles2"/>
         <extension name="GL_NV_framebuffer_blit" supported="gles2">
             <require>
@@ -46580,6 +47060,84 @@
                 <command name="glMulticastGetQueryObjectui64vNV"/>
             </require>
         </extension>
+        <extension name="GL_NV_memory_attachment" supported="gl|glcore|gles2">
+            <require>
+                <enum name="GL_ATTACHED_MEMORY_OBJECT_NV"/>
+                <enum name="GL_ATTACHED_MEMORY_OFFSET_NV"/>
+                <enum name="GL_MEMORY_ATTACHABLE_ALIGNMENT_NV"/>
+                <enum name="GL_MEMORY_ATTACHABLE_SIZE_NV"/>
+                <enum name="GL_MEMORY_ATTACHABLE_NV"/>
+                <enum name="GL_DETACHED_MEMORY_INCARNATION_NV"/>
+                <enum name="GL_DETACHED_TEXTURES_NV"/>
+                <enum name="GL_DETACHED_BUFFERS_NV"/>
+                <enum name="GL_MAX_DETACHED_TEXTURES_NV"/>
+                <enum name="GL_MAX_DETACHED_BUFFERS_NV"/>
+                <command name="glGetMemoryObjectDetachedResourcesuivNV"/>
+                <command name="glResetMemoryObjectParameterNV"/>
+                <command name="glTexAttachMemoryNV"/>
+                <command name="glBufferAttachMemoryNV"/>
+            </require>
+            <require comment="Supported only if GL_EXT_direct_state_access is supported">
+                <command name="glTextureAttachMemoryNV"/>
+                <command name="glNamedBufferAttachMemoryNV"/>
+            </require>
+        </extension>
+        <extension name="GL_NV_mesh_shader" supported="gl|glcore">
+            <require>
+                <enum name="GL_MESH_SHADER_NV"/>
+                <enum name="GL_TASK_SHADER_NV"/>
+                <enum name="GL_MAX_MESH_UNIFORM_BLOCKS_NV"/>
+                <enum name="GL_MAX_MESH_TEXTURE_IMAGE_UNITS_NV"/>
+                <enum name="GL_MAX_MESH_IMAGE_UNIFORMS_NV"/>
+                <enum name="GL_MAX_MESH_UNIFORM_COMPONENTS_NV"/>
+                <enum name="GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV"/>
+                <enum name="GL_MAX_MESH_ATOMIC_COUNTERS_NV"/>
+                <enum name="GL_MAX_MESH_SHADER_STORAGE_BLOCKS_NV"/>
+                <enum name="GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV"/>
+                <enum name="GL_MAX_TASK_UNIFORM_BLOCKS_NV"/>
+                <enum name="GL_MAX_TASK_TEXTURE_IMAGE_UNITS_NV"/>
+                <enum name="GL_MAX_TASK_IMAGE_UNIFORMS_NV"/>
+                <enum name="GL_MAX_TASK_UNIFORM_COMPONENTS_NV"/>
+                <enum name="GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV"/>
+                <enum name="GL_MAX_TASK_ATOMIC_COUNTERS_NV"/>
+                <enum name="GL_MAX_TASK_SHADER_STORAGE_BLOCKS_NV"/>
+                <enum name="GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV"/>
+                <enum name="GL_MAX_MESH_WORK_GROUP_INVOCATIONS_NV"/>
+                <enum name="GL_MAX_TASK_WORK_GROUP_INVOCATIONS_NV"/>
+                <enum name="GL_MAX_MESH_TOTAL_MEMORY_SIZE_NV"/>
+                <enum name="GL_MAX_TASK_TOTAL_MEMORY_SIZE_NV"/>
+                <enum name="GL_MAX_MESH_OUTPUT_VERTICES_NV"/>
+                <enum name="GL_MAX_MESH_OUTPUT_PRIMITIVES_NV"/>
+                <enum name="GL_MAX_TASK_OUTPUT_COUNT_NV"/>
+                <enum name="GL_MAX_DRAW_MESH_TASKS_COUNT_NV"/>
+                <enum name="GL_MAX_MESH_VIEWS_NV"/>
+                <enum name="GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV"/>
+                <enum name="GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV"/>
+                <enum name="GL_MAX_MESH_WORK_GROUP_SIZE_NV"/>
+                <enum name="GL_MAX_TASK_WORK_GROUP_SIZE_NV"/>
+                <enum name="GL_MESH_WORK_GROUP_SIZE_NV"/>
+                <enum name="GL_TASK_WORK_GROUP_SIZE_NV"/>
+                <enum name="GL_MESH_VERTICES_OUT_NV"/>
+                <enum name="GL_MESH_PRIMITIVES_OUT_NV"/>
+                <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"/>
+                <command name="glDrawMeshTasksIndirectNV"/>
+                <command name="glMultiDrawMeshTasksIndirectNV"/>
+                <command name="glMultiDrawMeshTasksIndirectCountNV"/>
+            </require>
+        </extension>
         <extension name="GL_NV_multisample_coverage" supported="gl">
             <require>
                 <enum name="GL_SAMPLES_ARB"/>
@@ -47077,6 +47635,11 @@
                 <command name="glGetCombinerStageParameterfvNV"/>
             </require>
         </extension>
+        <extension name="GL_NV_representative_fragment_test" supported="gl|glcore">
+            <require>
+                <enum name="GL_REPRESENTATIVE_FRAGMENT_TEST_NV"/>
+            </require>
+        </extension>
         <extension name="GL_NV_robustness_video_memory_purge" supported="gl">
             <require>
                 <enum name="GL_PURGED_CONTEXT_RESET_NV"/>
@@ -47112,6 +47675,14 @@
             </require>
         </extension>
         <extension name="GL_NV_sample_mask_override_coverage" supported="gl|glcore|gles2"/>
+        <extension name="GL_NV_scissor_exclusive" supported="gl|glcore">
+            <require>
+                <enum name="GL_SCISSOR_TEST_EXCLUSIVE_NV"/>
+                <enum name="GL_SCISSOR_BOX_EXCLUSIVE_NV"/>
+                <command name="glScissorExclusiveNV"/>
+                <command name="glScissorExclusiveArrayvNV"/>
+            </require>
+        </extension>
         <extension name="GL_NV_shader_atomic_counters" supported="gl|glcore"/>
         <extension name="GL_NV_shader_atomic_float" supported="gl|glcore"/>
         <extension name="GL_NV_shader_atomic_float64" supported="gl|glcore"/>
@@ -47147,6 +47718,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_thread_group" supported="gl|glcore">
             <require>
                 <enum name="GL_WARP_SIZE_NV"/>
@@ -47155,6 +47727,39 @@
             </require>
         </extension>
         <extension name="GL_NV_shader_thread_shuffle" supported="gl|glcore"/>
+        <extension name="GL_NV_shading_rate_image" supported="gl|glcore">
+            <require>
+                <enum name="GL_SHADING_RATE_IMAGE_NV"/>
+                <enum name="GL_SHADING_RATE_NO_INVOCATIONS_NV"/>
+                <enum name="GL_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV"/>
+                <enum name="GL_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV"/>
+                <enum name="GL_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV"/>
+                <enum name="GL_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV"/>
+                <enum name="GL_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV"/>
+                <enum name="GL_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV"/>
+                <enum name="GL_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV"/>
+                <enum name="GL_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV"/>
+                <enum name="GL_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV"/>
+                <enum name="GL_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV"/>
+                <enum name="GL_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV"/>
+                <enum name="GL_SHADING_RATE_IMAGE_BINDING_NV"/>
+                <enum name="GL_SHADING_RATE_IMAGE_TEXEL_WIDTH_NV"/>
+                <enum name="GL_SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV"/>
+                <enum name="GL_SHADING_RATE_IMAGE_PALETTE_SIZE_NV"/>
+                <enum name="GL_MAX_COARSE_FRAGMENT_SAMPLES_NV"/>
+                <enum name="GL_SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV"/>
+                <enum name="GL_SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV"/>
+                <enum name="GL_SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV"/>
+                <command name="glBindShadingRateImageNV"/>
+                <command name="glGetShadingRateImagePaletteNV"/>
+                <command name="glGetShadingRateSampleLocationivNV"/>
+                <command name="glShadingRateImageBarrierNV"/>
+                <command name="glShadingRateImageBarrierNV"/>
+                <command name="glShadingRateImagePaletteNV"/>
+                <command name="glShadingRateSampleOrderNV"/>
+                <command name="glShadingRateSampleOrderCustomNV"/>
+            </require>
+        </extension>
         <extension name="GL_NV_shadow_samplers_array" supported="gles2">
             <require>
                 <enum name="GL_SAMPLER_2D_ARRAY_SHADOW_NV"/>
@@ -47431,6 +48036,11 @@
                 <command name="glVDPAUUnmapSurfacesNV"/>
             </require>
         </extension>
+        <extension name="GL_NV_vdpau_interop2" supported="gl">
+            <require>
+                <command name="glVDPAURegisterVideoSurfaceWithPictureStructureNV"/>
+            </require>
+        </extension>
         <extension name="GL_NV_vertex_array_range" supported="gl">
             <require>
                 <enum name="GL_VERTEX_ARRAY_RANGE_NV"/>
@@ -48808,6 +49418,12 @@
                 <command name="glTextureFoveationParametersQCOM"/>
             </require>
         </extension>
+        <extension name="GL_QCOM_texture_foveated_subsampled_layout" supported="gles2">
+            <require>
+                <enum name="GL_FOVEATION_SUBSAMPLED_LAYOUT_METHOD_BIT_QCOM"/>
+                <enum name="GL_MAX_SHADER_SUBSAMPLED_IMAGE_UNITS_QCOM"/>
+            </require>
+        </extension>
         <extension name="GL_QCOM_perfmon_global_mode" supported="gles1|gles2">
             <require>
                 <enum name="GL_PERFMON_GLOBAL_MODE_QCOM"/>
@@ -48819,6 +49435,8 @@
                 <command name="glFramebufferFetchBarrierQCOM"/>
             </require>
         </extension>
+        <extension name="GL_QCOM_shader_framebuffer_fetch_rate" supported="gles2">
+        </extension>
         <extension name="GL_QCOM_tiled_rendering" supported="gles1|gles2">
             <require>
                 <enum name="GL_COLOR_BUFFER_BIT0_QCOM"/>
@@ -48862,6 +49480,8 @@
                 <enum name="GL_WRITEONLY_RENDERING_QCOM"/>
             </require>
         </extension>
+        <extension name="GL_QCOM_YUV_texture_gather" supported="gles2">
+        </extension>
         <extension name="GL_REND_screen_coordinates" supported="gl">
             <require>
                 <enum name="GL_SCREEN_COORDINATES_REND"/>
diff --git a/xml/testesext.c b/xml/testesext.c
index bfb15d7..8f1f236 100644
--- a/xml/testesext.c
+++ b/xml/testesext.c
@@ -1,4 +1,4 @@
-/*% cc -I. -I../api -I../../../../../registry/trunk/egl/api/ -c % ; rm testext.o
+/*% cc -I. -I../api -I../../../../../registry/trunk/egl/api/ -c % ; rm testesext.o
  *
  * Test to make sure gl3.h builds properly.
  * Will also use SVN internal versions of gl3platform.h
diff --git a/xml/wgl.xml b/xml/wgl.xml
index 1d7c604..49277ed 100644
--- a/xml/wgl.xml
+++ b/xml/wgl.xml
@@ -427,6 +427,7 @@
         <enum value="0x21A3"        name="WGL_GPU_RAM_AMD"/>
         <enum value="0x21A4"        name="WGL_GPU_CLOCK_AMD"/>
         <enum value="0x21A5"        name="WGL_GPU_NUM_PIPES_AMD"/>
+        <enum value="0x21A5"        name="WGL_TEXTURE_RECTANGLE_ATI" comment="Duplicates unrelated WGL_GPU_NUM_PIPES_AMD"/>
         <enum value="0x21A6"        name="WGL_GPU_NUM_SIMD_AMD"/>
         <enum value="0x21A7"        name="WGL_GPU_NUM_RB_AMD"/>
         <enum value="0x21A8"        name="WGL_GPU_NUM_SPI_AMD"/>
@@ -451,7 +452,7 @@
     </enums>
 
     <enums namespace="EGL" start="0x3080" end="0x30AF" vendor="KHR" comment="Values shared with EGL. Do not allocate additional values in this range.">
-        <enum value="0x3087" name="WGL_COLORSPACE_EXT"/>
+        <enum value="0x309D" name="WGL_COLORSPACE_EXT"/>
         <enum value="0x3089" name="WGL_COLORSPACE_SRGB_EXT"/>
         <enum value="0x308A" name="WGL_COLORSPACE_LINEAR_EXT"/>
     </enums>
@@ -1627,6 +1628,11 @@
                 <enum name="WGL_TYPE_RGBA_FLOAT_ATI"/>
             </require>
         </extension>
+        <extension name="WGL_ATI_render_texture_rectangle" supported="wgl">
+            <require>
+                <enum name="WGL_TEXTURE_RECTANGLE_ATI"/>
+            </require>
+        </extension>
         <extension name="WGL_EXT_colorspace" supported="wgl">
             <require>
                 <enum name="WGL_COLORSPACE_EXT"/>