--- src/mapi/glapi/gen/ARB_copy_buffer.xml | 2 +- src/mapi/glapi/gen/ARB_direct_state_access.xml | 2 +- src/mesa/main/bufferobj.c | 33 ++++++++++++++++++++++++++ src/mesa/main/bufferobj.h | 9 ++++++- 4 files changed, 43 insertions(+), 3 deletions(-)
diff --git a/src/mapi/glapi/gen/ARB_copy_buffer.xml b/src/mapi/glapi/gen/ARB_copy_buffer.xml index d1c6f1f..12e0c19 100644 --- a/src/mapi/glapi/gen/ARB_copy_buffer.xml +++ b/src/mapi/glapi/gen/ARB_copy_buffer.xml @@ -4,21 +4,21 @@ <!-- Note: no GLX protocol info yet. --> <OpenGLAPI> <category name="GL_ARB_copy_buffer" number="59"> <enum name="COPY_READ_BUFFER" value="0x8F36"/> <enum name="COPY_WRITE_BUFFER" value="0x8F37"/> - <function name="CopyBufferSubData" es2="3.0"> + <function name="CopyBufferSubData" es2="3.0" no_error="true"> <param name="readTarget" type="GLenum"/> <param name="writeTarget" type="GLenum"/> <param name="readOffset" type="GLintptr"/> <param name="writeOffset" type="GLintptr"/> <param name="size" type="GLsizeiptr"/> </function> </category> </OpenGLAPI> diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml index 03f6c8b..3cb486e 100644 --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml @@ -68,21 +68,21 @@ <param name="usage" type="GLenum" /> </function> <function name="NamedBufferSubData"> <param name="buffer" type="GLuint" /> <param name="offset" type="GLintptr" /> <param name="size" type="GLsizeiptr" /> <param name="data" type="const GLvoid *" /> </function> - <function name="CopyNamedBufferSubData"> + <function name="CopyNamedBufferSubData" no_error="true"> <param name="readBuffer" type="GLuint" /> <param name="writeBuffer" type="GLuint" /> <param name="readOffset" type="GLintptr" /> <param name="writeOffset" type="GLintptr" /> <param name="size" type="GLsizeiptr" /> </function> <function name="ClearNamedBufferData"> <param name="buffer" type="GLuint" /> <param name="internalformat" type="GLenum" /> diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index 6825030..f4597ed 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -2311,20 +2311,38 @@ copy_buffer_sub_data(struct gl_context *ctx, struct gl_buffer_object *src, return; } } dst->MinMaxCacheDirty = true; ctx->Driver.CopyBufferSubData(ctx, src, dst, readOffset, writeOffset, size); } void GLAPIENTRY +_mesa_CopyBufferSubData_no_error(GLenum readTarget, GLenum writeTarget, + GLintptr readOffset, GLintptr writeOffset, + GLsizeiptr size) +{ + GET_CURRENT_CONTEXT(ctx); + + struct gl_buffer_object **src_ptr = get_buffer_target(ctx, readTarget); + struct gl_buffer_object *src = *src_ptr; + + struct gl_buffer_object **dst_ptr = get_buffer_target(ctx, writeTarget); + struct gl_buffer_object *dst = *dst_ptr; + + dst->MinMaxCacheDirty = true; + ctx->Driver.CopyBufferSubData(ctx, src, dst, readOffset, writeOffset, + size); +} + +void GLAPIENTRY _mesa_CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) { GET_CURRENT_CONTEXT(ctx); struct gl_buffer_object *src, *dst; src = get_buffer(ctx, "glCopyBufferSubData", readTarget, GL_INVALID_OPERATION); if (!src) @@ -2333,20 +2351,35 @@ _mesa_CopyBufferSubData(GLenum readTarget, GLenum writeTarget, dst = get_buffer(ctx, "glCopyBufferSubData", writeTarget, GL_INVALID_OPERATION); if (!dst) return; copy_buffer_sub_data(ctx, src, dst, readOffset, writeOffset, size, "glCopyBufferSubData"); } void GLAPIENTRY +_mesa_CopyNamedBufferSubData_no_error(GLuint readBuffer, GLuint writeBuffer, + GLintptr readOffset, + GLintptr writeOffset, GLsizeiptr size) +{ + GET_CURRENT_CONTEXT(ctx); + + struct gl_buffer_object *src = _mesa_lookup_bufferobj(ctx, readBuffer); + struct gl_buffer_object *dst = _mesa_lookup_bufferobj(ctx, writeBuffer); + + dst->MinMaxCacheDirty = true; + ctx->Driver.CopyBufferSubData(ctx, src, dst, readOffset, writeOffset, + size); +} + +void GLAPIENTRY _mesa_CopyNamedBufferSubData(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) { GET_CURRENT_CONTEXT(ctx); struct gl_buffer_object *src, *dst; src = _mesa_lookup_bufferobj_err(ctx, readBuffer, "glCopyNamedBufferSubData"); if (!src) diff --git a/src/mesa/main/bufferobj.h b/src/mesa/main/bufferobj.h index 606582e..797ebe0 100644 --- a/src/mesa/main/bufferobj.h +++ b/src/mesa/main/bufferobj.h @@ -244,27 +244,34 @@ _mesa_GetNamedBufferParameteriv(GLuint buffer, GLenum pname, GLint *params); void GLAPIENTRY _mesa_GetNamedBufferParameteri64v(GLuint buffer, GLenum pname, GLint64 *params); void GLAPIENTRY _mesa_GetBufferPointerv(GLenum target, GLenum pname, GLvoid **params); void GLAPIENTRY _mesa_GetNamedBufferPointerv(GLuint buffer, GLenum pname, GLvoid **params); - +void GLAPIENTRY +_mesa_CopyBufferSubData_no_error(GLenum readTarget, GLenum writeTarget, + GLintptr readOffset, GLintptr writeOffset, + GLsizeiptr size); void GLAPIENTRY _mesa_CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); void GLAPIENTRY +_mesa_CopyNamedBufferSubData_no_error(GLuint readBuffer, GLuint writeBuffer, + GLintptr readOffset, + GLintptr writeOffset, GLsizeiptr size); +void GLAPIENTRY _mesa_CopyNamedBufferSubData(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); void * GLAPIENTRY _mesa_MapBufferRange_no_error(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); void * GLAPIENTRY _mesa_MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev