blob: 87b2087cf15a288713c6fee04baf99130a71c78e [file] [log] [blame]
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 <memory> and <memOffset>.
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 2, 2020-08-14 (Piers Daniell)
- Fix duplicate parameter names in BufferPageCommitmentMemNV and
NamedBufferPageCommitmentMemNV.
Revision 1, 2020-08-04 (Carsten Rohde)
- Initial draft.