--- src/mapi/glapi/gen/gl_API.xml | 3 ++- src/mesa/main/bufferobj.c | 20 +++++++++++++++++--- src/mesa/main/bufferobj.h | 3 +++ 3 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml index 8afd5ec..762fb5a 100644 --- a/src/mapi/glapi/gen/gl_API.xml +++ b/src/mapi/glapi/gen/gl_API.xml @@ -5044,21 +5044,22 @@ </function> <function name="BufferData" es1="1.1" es2="2.0" marshal="custom"> <param name="target" type="GLenum"/> <param name="size" type="GLsizeiptr" counter="true"/> <param name="data" type="const GLvoid *" count="size" img_null_flag="true"/> <param name="usage" type="GLenum"/> <glx ignore="true"/> </function> - <function name="BufferSubData" es1="1.1" es2="2.0" marshal="custom"> + <function name="BufferSubData" es1="1.1" es2="2.0" marshal="custom" + no_error="true"> <param name="target" type="GLenum"/> <param name="offset" type="GLintptr"/> <param name="size" type="GLsizeiptr" counter="true"/> <param name="data" type="const GLvoid *" count="size"/> <glx ignore="true"/> </function> <function name="DeleteBuffers" es1="1.1" es2="2.0"> <param name="n" type="GLsizei" counter="true"/> <param name="buffer" type="const GLuint *" count="n"/> diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index 3e903cb..461d697 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -1865,31 +1865,45 @@ buffer_sub_data(GLenum target, GLuint buffer, GLintptr offset, if (dsa) { if (no_error) { bufObj = _mesa_lookup_bufferobj(ctx, buffer); } else { bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, func); if (!bufObj) return; } } else { - bufObj = get_buffer(ctx, func, target, GL_INVALID_OPERATION); - if (!bufObj) - return; + if (no_error) { + struct gl_buffer_object **bufObjPtr = get_buffer_target(ctx, target); + bufObj = *bufObjPtr; + } else { + bufObj = get_buffer(ctx, func, target, GL_INVALID_OPERATION); + if (!bufObj) + return; + } } if (no_error || validate_buffer_sub_data(ctx, bufObj, offset, size, func)) _mesa_buffer_sub_data(ctx, bufObj, offset, size, data); } void GLAPIENTRY +_mesa_BufferSubData_no_error(GLenum target, GLintptr offset, + GLsizeiptr size, const GLvoid *data) +{ + buffer_sub_data(target, 0, offset, size, data, false, true, + "glBufferSubData"); +} + + +void GLAPIENTRY _mesa_BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data) { buffer_sub_data(target, 0, offset, size, data, false, false, "glBufferSubData"); } void GLAPIENTRY _mesa_NamedBufferSubData_no_error(GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data) diff --git a/src/mesa/main/bufferobj.h b/src/mesa/main/bufferobj.h index b3cfcc0..f652ec3 100644 --- a/src/mesa/main/bufferobj.h +++ b/src/mesa/main/bufferobj.h @@ -186,20 +186,23 @@ _mesa_NamedBufferStorage(GLuint buffer, GLsizeiptr size, const GLvoid *data, void GLAPIENTRY _mesa_BufferData(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); void GLAPIENTRY _mesa_NamedBufferData(GLuint buffer, GLsizeiptr size, const GLvoid *data, GLenum usage); void GLAPIENTRY +_mesa_BufferSubData_no_error(GLenum target, GLintptr offset, + GLsizeiptr size, const GLvoid *data); +void GLAPIENTRY _mesa_BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); void GLAPIENTRY _mesa_NamedBufferSubData_no_error(GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data); void GLAPIENTRY _mesa_NamedBufferSubData(GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data); -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev