--- src/mapi/glapi/gen/gl_API.xml | 2 +- src/mesa/main/bufferobj.c | 20 +++++++++++++++++--- src/mesa/main/bufferobj.h | 3 +++ 3 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml index 1a3b306..8afd5ec 100644 --- a/src/mapi/glapi/gen/gl_API.xml +++ b/src/mapi/glapi/gen/gl_API.xml @@ -8255,21 +8255,21 @@ <category name="GL_ARB_buffer_storage" number="144"> <enum name="MAP_PERSISTENT_BIT" value="0x40" /> <enum name="MAP_COHERENT_BIT" value="0x80" /> <enum name="DYNAMIC_STORAGE_BIT" value="0x100" /> <enum name="CLIENT_STORAGE_BIT" value="0x200" /> <enum name="BUFFER_IMMUTABLE_STORAGE" value="0x821F" /> <enum name="BUFFER_STORAGE_FLAGS" value="0x8220" /> <enum name="CLIENT_MAPPED_BUFFER_BARRIER_BIT" value="0x4000" /> - <function name="BufferStorage"> + <function name="BufferStorage" no_error="true"> <param name="target" type="GLenum"/> <param name="size" type="GLsizeiptr"/> <param name="data" type="const GLvoid *"/> <param name="flags" type="GLbitfield"/> </function> </category> <xi:include href="ARB_clear_texture.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> <!-- ARB extension #146 --> diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index 09ef233..674ff63 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -1602,31 +1602,45 @@ inlined_buffer_storage(GLenum target, GLuint buffer, GLsizeiptr size, 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_storage(ctx, bufObj, size, flags, func)) buffer_storage(ctx, bufObj, target, size, data, flags, func); } void GLAPIENTRY +_mesa_BufferStorage_no_error(GLenum target, GLsizeiptr size, + const GLvoid *data, GLbitfield flags) +{ + inlined_buffer_storage(target, 0, size, data, flags, false, true, + "glBufferStorage"); +} + + +void GLAPIENTRY _mesa_BufferStorage(GLenum target, GLsizeiptr size, const GLvoid *data, GLbitfield flags) { inlined_buffer_storage(target, 0, size, data, flags, false, false, "glBufferStorage"); } void GLAPIENTRY _mesa_NamedBufferStorage_no_error(GLuint buffer, GLsizeiptr size, diff --git a/src/mesa/main/bufferobj.h b/src/mesa/main/bufferobj.h index a06a0e4..024d07d 100644 --- a/src/mesa/main/bufferobj.h +++ b/src/mesa/main/bufferobj.h @@ -165,20 +165,23 @@ _mesa_DeleteBuffers(GLsizei n, const GLuint * buffer); void GLAPIENTRY _mesa_GenBuffers(GLsizei n, GLuint *buffers); void GLAPIENTRY _mesa_CreateBuffers(GLsizei n, GLuint *buffers); GLboolean GLAPIENTRY _mesa_IsBuffer(GLuint buffer); void GLAPIENTRY +_mesa_BufferStorage_no_error(GLenum target, GLsizeiptr size, + const GLvoid *data, GLbitfield flags); +void GLAPIENTRY _mesa_BufferStorage(GLenum target, GLsizeiptr size, const GLvoid *data, GLbitfield flags); void GLAPIENTRY _mesa_NamedBufferStorage_no_error(GLuint buffer, GLsizeiptr size, const GLvoid *data, GLbitfield flags); void GLAPIENTRY _mesa_NamedBufferStorage(GLuint buffer, GLsizeiptr size, const GLvoid *data, GLbitfield flags); -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev