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