Adding NV_timeline_semaphore (merged with NV_memory_objects_sparse)
diff --git a/extensions/NV/NV_memory_object_sparse.txt b/extensions/NV/NV_memory_object_sparse.txt
new file mode 100755
index 0000000..96faaf3
--- /dev/null
+++ b/extensions/NV/NV_memory_object_sparse.txt
@@ -0,0 +1,183 @@
+Name
+
+    NV_memory_object_sparse
+
+Name Strings
+
+    GL_NV_memory_object_sparse
+
+Contributors
+
+    Carsten Rohde, NVIDIA
+    James Jones, NVIDIA
+
+Contact
+
+    Carsten Rohde, NVIDIA Corporation (crohde 'at' nvidia.com)
+
+Status
+
+    Complete
+
+Version
+
+    Last Modified Date: Jul 10, 2020
+    Revision:           1
+
+Number
+
+    550
+    OpenGL ES Extension #329
+
+Dependencies
+
+    Written against the OpenGL 4.6 and OpenGL ES 3.2 specifications
+    including ARB_sparse_texture and ARB_sparse_buffer.
+
+    GL_NV_memory_object_sparse requires GL_EXT_memory_object,
+    ARB_sparse_texture and/or ARB_sparse_buffer or a version of
+    OpenGL or OpenGL ES that incorporates it.
+
+    NV_memory_object_sparse interacts with ARB_direct_state_access (OpenGL)
+    when OpenGL < 4.6 is used.
+
+    ARB_sparse_texture (OpenGL) interacts with GL_EXT_memory_object_sparse.
+    ARB_sparse_buffer (OpenGL) interacts with GL_EXT_memory_object_sparse.
+    EXT_sparse_texture (OpenGL ES) interacts with GL_EXT_memory_object_sparse.
+
+Overview
+
+    This extension adds sparse support to EXT_memory_object extension.
+
+New Procedures and Functions
+
+    void BufferPageCommitmentMemNV(enum target,
+                                   intptr offset, sizeiptr size,
+                                   uint memory, uint64 offset,
+                                   boolean commit);
+
+    void NamedBufferPageCommitmentMemNV(uint buffer,
+                                        intptr offset, sizeiptr size,
+                                        uint memory, uint64 offset,
+                                        boolean commit);
+
+    void TexPageCommitmentMemNV(enum target,
+                                int layer, int level,
+                                int xoffset, int yoffset, int zoffset,
+                                sizei width, sizei height, sizei depth,
+                                uint memory, uint64 offset,
+                                boolean commit);
+
+    void TexturePageCommitmentMemNV(uint texture,
+                                    int layer, int level,
+                                    int xoffset, int yoffset, int zoffset,
+                                    sizei width, sizei height, sizei depth,
+                                    uint memory, uint64 offset,
+                                    boolean commit);
+
+
+New Tokens
+
+    None
+
+
+Additions to Chapter 6 of the OpenGL 4.4 (core) Specification (Buffer Objects)
+
+    In Section 6.2, "Creating and Modifying Buffer Object Data Stores", add
+    the following add the following to the end of the description of
+    BufferSubData:
+
+    If NV_memory_object_sparse is supported, additionally, the commands
+
+        void BufferPageCommitmentMemNV(enum target,
+                                       intptr offset, sizeiptr size,
+                                       uint memory, uint64 offset,
+                                       boolean commit);
+
+        void NamedBufferPageCommitmentMemNV(uint buffer,
+                                            intptr offset,
+                                            sizeiptr size,
+                                            uint memory, uint64 offset,
+                                            boolean commit);
+
+    behaves similarly to BufferPageCommitmentARB and
+    NamedBufferPageCommitmentMemARB except that the pages of the sparse buffer
+    are bound to the memory specified by <memory> and <offset>.
+
+    Errors (additionally to non-Mem variants)
+
+      An INVALID_OPERATION error is generated if <memory> is not the name of
+      an existing memory object.
+
+      An INVALID_OPERATION error is generated if <offset> + <size> exceeds the
+      size of the memory object.
+
+    Add the following to end of subsection 8.20.2. "Controlling Sparse Texture
+    Commitment":
+
+    If NV_memory_object_sparse is supported, additionally, the commands
+
+        void TexPageCommitmentMemNV(enum target,
+                                    int layer, int level,
+                                    int xoffset, int yoffset, int zoffset,
+                                    sizei width, sizei height, sizei depth,
+                                    uint memory, uint64 offset,
+                                    boolean commit);
+
+        void TexturePageCommitmentMemNV(uint texture,
+                                        int layer, int level,
+                                        int xoffset, int yoffset, int zoffset,
+                                        sizei width, sizei height, sizei depth,
+                                        uint memory, uint64 offset,
+                                        boolean commit);
+
+    behaves similarly to TexPageCommitmentMemARB and
+    TexturePageCommitmentEXT except that the tiles of the sparse texture
+    are bound to the memory specified by <memory> and <offset>.
+
+    <layer> indicates the layer of a texture array or cube texture,
+    <zoffset> must be 0 and <depth> must 1 in this case. For other textures
+    <layer> must be 0.
+
+    Errors (additionally to non-Mem variants)
+
+      An INVALID_OPERATION error is generated if <memory> is not the name of
+      an existing memory object.
+
+      An INVALID_OPERATION error is generated if <memory> is dedicated or
+      imported from a non-opaque handle.
+
+      An INVALID_OPERATION error is generated if <offset> plus the number of
+      bytes required for the tiles to commit exceeds the size of the memory
+      object.
+
+      An INVALID_VALUE error is generated if <layer> is not 0 and the texture
+      neither a texture array or a cube texture.
+
+      An INVALID_VALUE error is generated if <zoffset> is not 0 or <depth> is
+      not 1 if the texture is a texture array or a cube texture.
+
+      An INVALID_VALUE error is generated if <layer> is greater or equal than
+      the number of layers of the texture array.
+
+      An INVALID_VALUE error is generated if <layer> is greater or equal than
+      6 in case of a cube texture.
+
+Dependencies on EXT_direct_state_access
+
+    If EXT_direct_state_access is not supported, remove references to the
+    NamedBufferPageCommitmentMemNV and TexturePageCommitmentMemNV commands
+    added by this extension.
+
+Issues
+
+    (1) Should we a 'aspect' parameter to the new gl.*CommitMemNV() functions?
+
+    RESOLVED: No. This can be deferred to a future EXT extension because there
+              is currently no multi-planar texture support in GL and metadata
+              isn't required for NVIDIA hardware.
+
+Revision History
+
+    Revision 1, 2020-08-04 (Carsten Rohde)
+        - Initial draft.
diff --git a/extensions/esext.php b/extensions/esext.php
index 9625b28..c4a1baf 100644
--- a/extensions/esext.php
+++ b/extensions/esext.php
@@ -683,6 +683,8 @@
 </li>
 <li value=328><a href="extensions/MESA/MESA_framebuffer_swap_xy.txt">GL_MESA_framebuffer_swap_xy</a>
 </li>
+<li value=329><a href="extensions/NV/NV_memory_object_sparse.txt">GL_NV_memory_object_sparse</a>
+</li>
 <li value=330><a href="extensions/NV/GL_NV_timeline_semaphore.txt">GL_NV_timeline_semaphore</a>
 </li>
 </ol>
diff --git a/extensions/glext.php b/extensions/glext.php
index d8533d7..735eed1 100644
--- a/extensions/glext.php
+++ b/extensions/glext.php
@@ -1037,6 +1037,8 @@
 </li>
 <li value=549><a href="extensions/MESA/MESA_framebuffer_swap_xy.txt">GL_MESA_framebuffer_swap_xy</a>
 </li>
+<li value=550><a href="extensions/NV/NV_memory_object_sparse.txt">GL_NV_memory_object_sparse</a>
+</li>
 <li value=551><a href="extensions/NV/GL_NV_timeline_semaphore.txt">GL_NV_timeline_semaphore</a>
 </li>
 </ol>
diff --git a/extensions/registry.py b/extensions/registry.py
index 977ba90..8f3fa4e 100644
--- a/extensions/registry.py
+++ b/extensions/registry.py
@@ -3531,6 +3531,13 @@
         'supporters' : { 'NVIDIA' },
         'url' : 'extensions/NV/NV_memory_attachment.txt',
     },
+    'GL_NV_memory_object_sparse' : {
+        'number' : 550,
+        'esnumber' : 329,
+        'flags' : { 'public' },
+        'supporters' : { 'NVIDIA' },
+        'url' : 'extensions/NV/NV_memory_object_sparse.txt',
+    },
     'GL_NV_mesh_shader' : {
         'number' : 527,
         'esnumber' : 312,
diff --git a/xml/gl.xml b/xml/gl.xml
index ce01480..7554114 100644
--- a/xml/gl.xml
+++ b/xml/gl.xml
@@ -12818,6 +12818,15 @@
             <param group="Boolean"><ptype>GLboolean</ptype> <name>commit</name></param>
         </command>
         <command>
+            <proto>void <name>glBufferPageCommitmentMemNV</name></proto>
+            <param group="BufferStorageTarget"><ptype>GLenum</ptype> <name>target</name></param>
+            <param><ptype>GLintptr</ptype> <name>offset</name></param>
+            <param><ptype>GLsizeiptr</ptype> <name>size</name></param>
+            <param><ptype>GLuint</ptype> <name>memory</name></param>
+            <param><ptype>GLuint64</ptype> <name>offset</name></param>
+            <param group="Boolean"><ptype>GLboolean</ptype> <name>commit</name></param>
+        </command>
+        <command>
             <proto>void <name>glBufferParameteriAPPLE</name></proto>
             <param><ptype>GLenum</ptype> <name>target</name></param>
             <param><ptype>GLenum</ptype> <name>pname</name></param>
@@ -23767,6 +23776,15 @@
             <param group="Boolean"><ptype>GLboolean</ptype> <name>commit</name></param>
         </command>
         <command>
+            <proto>void <name>glNamedBufferPageCommitmentMemNV</name></proto>
+            <param><ptype>GLuint</ptype> <name>buffer</name></param>
+            <param><ptype>GLintptr</ptype> <name>offset</name></param>
+            <param><ptype>GLsizeiptr</ptype> <name>size</name></param>
+            <param><ptype>GLuint</ptype> <name>memory</name></param>
+            <param><ptype>GLuint64</ptype> <name>offset</name></param>
+            <param group="Boolean"><ptype>GLboolean</ptype> <name>commit</name></param>
+        </command>
+        <command>
             <proto>void <name>glNamedBufferStorage</name></proto>
             <param><ptype>GLuint</ptype> <name>buffer</name></param>
             <param group="BufferSize"><ptype>GLsizeiptr</ptype> <name>size</name></param>
@@ -29145,6 +29163,21 @@
             <alias name="glTexPageCommitmentARB"/>
         </command>
         <command>
+            <proto>void <name>glTexPageCommitmentMemNV</name></proto>
+            <param group="TextureTarget"><ptype>GLenum</ptype> <name>target</name></param>
+            <param><ptype>GLint</ptype> <name>layer</name></param>
+            <param><ptype>GLint</ptype> <name>level</name></param>
+            <param><ptype>GLint</ptype> <name>xoffset</name></param>
+            <param><ptype>GLint</ptype> <name>yoffset</name></param>
+            <param><ptype>GLint</ptype> <name>zoffset</name></param>
+            <param><ptype>GLsizei</ptype> <name>width</name></param>
+            <param><ptype>GLsizei</ptype> <name>height</name></param>
+            <param><ptype>GLsizei</ptype> <name>depth</name></param>
+            <param><ptype>GLuint</ptype> <name>memory</name></param>
+            <param><ptype>GLuint64</ptype> <name>offset</name></param>
+            <param group="Boolean"><ptype>GLboolean</ptype> <name>commit</name></param>
+        </command>
+        <command>
             <proto>void <name>glTexParameterIiv</name></proto>
             <param group="TextureTarget"><ptype>GLenum</ptype> <name>target</name></param>
             <param group="TextureParameterName"><ptype>GLenum</ptype> <name>pname</name></param>
@@ -29673,6 +29706,21 @@
             <param group="Boolean"><ptype>GLboolean</ptype> <name>commit</name></param>
         </command>
         <command>
+            <proto>void <name>glTexturePageCommitmentMemNV</name></proto>
+            <param><ptype>GLuint</ptype> <name>texture</name></param>
+            <param><ptype>GLint</ptype> <name>layer</name></param>
+            <param><ptype>GLint</ptype> <name>level</name></param>
+            <param><ptype>GLint</ptype> <name>xoffset</name></param>
+            <param><ptype>GLint</ptype> <name>yoffset</name></param>
+            <param><ptype>GLint</ptype> <name>zoffset</name></param>
+            <param><ptype>GLsizei</ptype> <name>width</name></param>
+            <param><ptype>GLsizei</ptype> <name>height</name></param>
+            <param><ptype>GLsizei</ptype> <name>depth</name></param>
+            <param><ptype>GLuint</ptype> <name>memory</name></param>
+            <param><ptype>GLuint64</ptype> <name>offset</name></param>
+            <param group="Boolean"><ptype>GLboolean</ptype> <name>commit</name></param>
+        </command>
+        <command>
             <proto>void <name>glTextureParameterIiv</name></proto>
             <param><ptype>GLuint</ptype> <name>texture</name></param>
             <param group="TextureParameterName"><ptype>GLenum</ptype> <name>pname</name></param>
@@ -48691,6 +48739,16 @@
                 <command name="glNamedBufferAttachMemoryNV"/>
             </require>
         </extension>
+        <extension name="GL_NV_memory_object_sparse" supported="gl|glcore|gles2">
+            <require>
+                <command name="glBufferPageCommitmentMemNV"/>
+                <command name="glTexPageCommitmentMemNV"/>
+            </require>
+            <require comment="Supported only if GL_EXT_direct_state_access is supported">
+                <command name="glNamedBufferPageCommitmentMemNV"/>
+                <command name="glTexturePageCommitmentMemNV"/>
+            </require>
+        </extension>
         <extension name="GL_NV_mesh_shader" supported="gl|glcore|gles2">
             <require>
                 <enum name="GL_MESH_SHADER_NV"/>