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: August 14, 2020 Revision: 2 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 memOffset, boolean commit); void NamedBufferPageCommitmentMemNV(uint buffer, intptr offset, sizeiptr size, uint memory, uint64 memOffset, 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 memOffset, boolean commit); void NamedBufferPageCommitmentMemNV(uint buffer, intptr offset, sizeiptr size, uint memory, uint64 memOffset, boolean commit); behaves similarly to BufferPageCommitmentARB and NamedBufferPageCommitmentMemARB except that the pages of the sparse buffer are bound to the memory specified by and . Errors (additionally to non-Mem variants) An INVALID_OPERATION error is generated if is not the name of an existing memory object. An INVALID_OPERATION error is generated if + 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 and . indicates the layer of a texture array or cube texture, must be 0 and must 1 in this case. For other textures must be 0. Errors (additionally to non-Mem variants) An INVALID_OPERATION error is generated if is not the name of an existing memory object. An INVALID_OPERATION error is generated if is dedicated or imported from a non-opaque handle. An INVALID_OPERATION error is generated if 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 is not 0 and the texture neither a texture array or a cube texture. An INVALID_VALUE error is generated if is not 0 or is not 1 if the texture is a texture array or a cube texture. An INVALID_VALUE error is generated if is greater or equal than the number of layers of the texture array. An INVALID_VALUE error is generated if 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 2, 2020-08-14 (Piers Daniell) - Fix duplicate parameter names in BufferPageCommitmentMemNV and NamedBufferPageCommitmentMemNV. Revision 1, 2020-08-04 (Carsten Rohde) - Initial draft.