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"/>