blob: b3439dd48fb0a81cd189d273efbc9a00683fab80 [file] [log] [blame]
Name
GLX_NV_copy_buffer
Name Strings
GLX_NV_copy_buffer
Contact
Alex Goins, NVIDIA Corporation (agoins 'at' nvidia.com)
Contributors
Alex Goins
Status
Complete
Version
Last Modified Date: July 15, 2014
Revision: 5
Number
OpenGL Extension #457
Dependencies
GL_ARB_copy_buffer is required.
This extension interacts with EXT_direct_state_access.
Overview
Extend GL_ARB_copy_buffer to have GLX bindings.
New Procedures and Functions
void glXCopyBufferSubDataNV(Display *dpy,
GLXContext readCtx, GLXContext writeCtx,
GLenum readTarget, GLenum writeTarget,
GLintptr readOffset, GLintptr writeOffset,
GLsizeiptr size);
void glXNamedCopyBufferSubDataNV(Display *dpy,
GLXContext readCtx, GLXContext writeCtx,
GLuint readBuffer, GLuint writeBuffer,
GLintptr readOffset, GLintptr writeOffset,
GLsizeiptr size);
New Tokens
None
Additions to the GLX Specification
The functions
void glXCopyBufferSubDataNV(Display *dpy,
GLXContext readCtx, GLXContext writeCtx,
GLenum readTarget, GLenum writeTarget,
GLintptr readOffset, GLintptr writeOffset,
GLsizeiptr size);
void glXNamedCopyBufferSubDataNV(Display *dpy,
GLXContext readCtx, GLXContext writeCtx,
GLuint readBuffer, GLuint writeBuffer,
GLintptr readOffset, GLintptr writeOffset,
GLsizeiptr size);
behave identically to the core functions glCopyBufferSubData and
glNamedCopyBufferSubDataEXT, except that the <readCtx> and
<writeCtx> parameters specify the contexts in which to look up the
source and destination objects, respectively. A value of NULL for
either context indicates that the value which is returned by
glXGetCurrentContext() should be used instead. Both contexts must
share the same address space, as described in section 2.3.
The operations performed by these functions occur in the current context's
command stream.
If neither <readCtx> nor <writeCtx> is current, the error GLXBadContext is
generated.
If <readCtx> and <writeCtx> mix direct and indirect contexts, the error
GLXBadContext is generated.
If either <readCtx> or <writeCtx> is not a valid rendering context,
the error GLXBadContext is generated.
If the server portion of the contexts do not share the same address
space, the error BadMatch is generated.
If an error occurs due to GL parameter validation, the error BadMatch will
be generated. Additionally, if either the source or destination context is
bound to the current thread, a GL error is set to indicate the cause. This
error code may be retrieved by calling glGetError().
GLX Protocol
Two new GLX protocol commands are added.
glXCopyBufferSubDataNV
1 CARD8 opcode (X assigned)
1 16 GLX opcode (glXVendorPrivate)
2 20 request length
4 1387 vendor specific opcode
4 GLX_CONTEXT_TAG context tag
8 INT64 read_offset
8 INT64 write_offset
8 INT64 size
4 GLX_CONTEXT read_context
4 GLX_CONTEXT write_context
4 CARD32 read_target
4 CARD32 write_target
glXNamedCopyBufferSubDataNV
1 CARD8 opcode (X assigned)
1 16 GLX opcode (glXVendorPrivate)
2 20 request length
4 1388 vendor specific opcode
4 GLX_CONTEXT_TAG context tag
8 INT64 read_offset
8 INT64 write_offset
8 INT64 size
4 GLX_CONTEXT read_context
4 GLX_CONTEXT write_context
4 CARD32 read_buffer
4 CARD32 write_buffer
Dependencies on EXT_direct_state_access:
If EXT_direct_state_access is not supported remove any references to
NamedCopyBufferSubData.
Errors
The error INVALID_VALUE is generated if readOffset, writeOffset, or size are
less than zero, or if readOffset+size is greater than the value of
BUFFER_SIZE of readTarget/readBuffer, or if writeOffset+size is greater than
the value of BUFFER_SIZE of writeTarget/writeBuffer.
The error INVALID_OPERATION is generated if either readtarget/readBuffer or
writeTarget/writeBuffer are mapped.
The error INVALID_VALUE is generated if readTarget/readBuffer and
writeTarget/writeBuffer are the same buffer object, and the ranges
[readOffset, readOffset+size) and [writeOffset, writeOffset+size) overlap.
Usage Examples
(1) Copying across contexts using glXCopyBufferSubDataNV()
glXMakeCurrent(dpy, readWindow, readContext);
BindBuffer(COPY_READ_BUFFER, readBuffer);
BufferData(COPY_READ_BUFFER, updateSize, updateData, DYNAMIC_COPY);
glXMakeCurrent(dpy, writeWindow, writeContext);
BindBuffer(COPY_WRITE_BUFFER, writeBuffer);
glXCopyBufferSubDataNV(dpy, readContext, writeContext,
COPY_READ_BUFFER, COPY_WRITE_BUFFER,
0, writeOffset, updateSize);
(2) Copying across contexts using glXNamedCopyBufferSubDataNV()
glXMakeCurrent(dpy, readWindow, readContext);
BindBuffer(ARRAY_BUFFER, readBuffer);
BufferData(ARRAY_BUFFER, updateSize, updateData, DYNAMIC_COPY);
glXNamedCopyBufferSubDataNV(dpy, readContext, writeContext,
readBuffer, writeBuffer,
0, writeOffset, updateSize);
Issues
TBD
Revision History
Rev. Date Author Changes
---- -------- -------- -----------------------------------------
1 07/01/2014 agoins Initial revision based on WGL_NV_copy_buffer.
2 07/02/2014 agoins Add synchronization information. Add explicit
GL type prefixes. Update vendor opcodes.
3 07/14/2014 agoins Update GLX protocol structures, more specific
GLX specification information
4 07/15/2014 agoins More accurate error conditions
5 07/21/2014 agoins Add tag field and change status to complete