From cdbfb19420cc48c5d9fe2c88ff9b29da6b407401 Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Fri, 12 May 2017 16:43:30 +1000 Subject: [PATCH] mesa: add KHR_no_error support for glNamedBufferStorage() MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reviewed-by: Nicolai Hähnle --- .../glapi/gen/ARB_direct_state_access.xml | 2 +- src/mesa/main/bufferobj.c | 31 ++++++++++++++----- src/mesa/main/bufferobj.h | 3 ++ 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml index 43e4e05b10f..fa375e0e7a2 100644 --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml @@ -54,7 +54,7 @@ - + diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index 4afa2ee6779..09ef233a835 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -1595,22 +1595,26 @@ buffer_storage(struct gl_context *ctx, struct gl_buffer_object *bufObj, static ALWAYS_INLINE void inlined_buffer_storage(GLenum target, GLuint buffer, GLsizeiptr size, const GLvoid *data, GLbitfield flags, bool dsa, - const char *func) + bool no_error, const char *func) { GET_CURRENT_CONTEXT(ctx); struct gl_buffer_object *bufObj; if (dsa) { - bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, func); - if (!bufObj) - return; + 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 (validate_buffer_storage(ctx, bufObj, size, flags, func)) + if (no_error || validate_buffer_storage(ctx, bufObj, size, flags, func)) buffer_storage(ctx, bufObj, target, size, data, flags, func); } @@ -1619,10 +1623,23 @@ void GLAPIENTRY _mesa_BufferStorage(GLenum target, GLsizeiptr size, const GLvoid *data, GLbitfield flags) { - inlined_buffer_storage(target, 0, size, data, flags, false, + inlined_buffer_storage(target, 0, size, data, flags, false, false, "glBufferStorage"); } + +void GLAPIENTRY +_mesa_NamedBufferStorage_no_error(GLuint buffer, GLsizeiptr size, + const GLvoid *data, GLbitfield flags) +{ + /* In direct state access, buffer objects have an unspecified target + * since they are not required to be bound. + */ + inlined_buffer_storage(GL_NONE, buffer, size, data, flags, true, true, + "glNamedBufferStorage"); +} + + void GLAPIENTRY _mesa_NamedBufferStorage(GLuint buffer, GLsizeiptr size, const GLvoid *data, GLbitfield flags) @@ -1630,7 +1647,7 @@ _mesa_NamedBufferStorage(GLuint buffer, GLsizeiptr size, const GLvoid *data, /* In direct state access, buffer objects have an unspecified target * since they are not required to be bound. */ - inlined_buffer_storage(GL_NONE, buffer, size, data, flags, true, + inlined_buffer_storage(GL_NONE, buffer, size, data, flags, true, false, "glNamedBufferStorage"); } diff --git a/src/mesa/main/bufferobj.h b/src/mesa/main/bufferobj.h index 926ffb4faf2..a06a0e470bd 100644 --- a/src/mesa/main/bufferobj.h +++ b/src/mesa/main/bufferobj.h @@ -176,6 +176,9 @@ _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.30.2