Re: [Mesa-dev] [PATCH 06/23] main: Add entry point for NamedBufferStorage.
On 20/02/2015 02:15, Laura Ekstrand wrote: This is NamedBufferStorage, not NamedBufferData. The storage function uses a bitfield instead of an enum. Oops, sorry. I was trying to match these patches with their relative piglit tests and as the order is not always the same, I must have got confused :) ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH 06/23] main: Add entry point for NamedBufferStorage.
This is NamedBufferStorage, not NamedBufferData. The storage function uses a bitfield instead of an enum. On Wed, Feb 18, 2015 at 7:04 AM, Martin Peres wrote: > On 12/02/15 04:05, Laura Ekstrand wrote: > >> --- >> src/mapi/glapi/gen/ARB_direct_state_access.xml | 7 +++ >> src/mesa/main/bufferobj.c | 63 >> +++--- >> src/mesa/main/bufferobj.h | 9 >> src/mesa/main/tests/dispatch_sanity.cpp| 1 + >> 4 files changed, 64 insertions(+), 16 deletions(-) >> >> diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml >> b/src/mapi/glapi/gen/ARB_direct_state_access.xml >> index 6c9d0e8..ff81c21 100644 >> --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml >> +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml >> @@ -14,6 +14,13 @@ >> >> >> + >> + >> + >> + >> + >> > Isn't this supposed to be an enum? Here is the prototype found in core 4.5: > void NamedBufferData( uint buffer, sizeiptr size, const void *data, enum > usage ); > > Other than that, this looks good to me. > > Reviewed-by: Martin Peres > > > + >> + >> >> >> diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c >> index 785f0ff..6259db1 100644 >> --- a/src/mesa/main/bufferobj.c >> +++ b/src/mesa/main/bufferobj.c >> @@ -1386,15 +1386,13 @@ _mesa_IsBuffer(GLuint id) >> } >> -void GLAPIENTRY >> -_mesa_BufferStorage(GLenum target, GLsizeiptr size, const GLvoid *data, >> -GLbitfield flags) >> +void >> +_mesa_buffer_storage(struct gl_context *ctx, struct gl_buffer_object >> *bufObj, >> + GLenum target, GLsizeiptr size, const GLvoid *data, >> + GLbitfield flags, const char *func) >> { >> - GET_CURRENT_CONTEXT(ctx); >> - struct gl_buffer_object *bufObj; >> - >> if (size <= 0) { >> - _mesa_error(ctx, GL_INVALID_VALUE, "glBufferStorage(size <= 0)"); >> + _mesa_error(ctx, GL_INVALID_VALUE, "%s(size <= 0)", func); >> return; >> } >> @@ -1404,27 +1402,25 @@ _mesa_BufferStorage(GLenum target, GLsizeiptr >> size, const GLvoid *data, >>GL_MAP_COHERENT_BIT | >>GL_DYNAMIC_STORAGE_BIT | >>GL_CLIENT_STORAGE_BIT)) { >> - _mesa_error(ctx, GL_INVALID_VALUE, "glBufferStorage(flags)"); >> + _mesa_error(ctx, GL_INVALID_VALUE, "%s(invalid flag bits set)", >> func); >> return; >> } >>if (flags & GL_MAP_PERSISTENT_BIT && >> !(flags & (GL_MAP_READ_BIT | GL_MAP_WRITE_BIT))) { >> - _mesa_error(ctx, GL_INVALID_VALUE, "glBufferStorage(flags!=READ/ >> WRITE)"); >> + _mesa_error(ctx, GL_INVALID_VALUE, >> + "%s(PERSISTENT and flags!=READ/WRITE)", func); >> return; >> } >>if (flags & GL_MAP_COHERENT_BIT && !(flags & >> GL_MAP_PERSISTENT_BIT)) { >> - _mesa_error(ctx, GL_INVALID_VALUE, "glBufferStorage(flags!= >> PERSISTENT)"); >> + _mesa_error(ctx, GL_INVALID_VALUE, >> + "%s(COHERENT and flags!=PERSISTENT)", func); >> return; >> } >> - bufObj = get_buffer(ctx, "glBufferStorage", target, >> GL_INVALID_OPERATION); >> - if (!bufObj) >> - return; >> - >> if (bufObj->Immutable) { >> - _mesa_error(ctx, GL_INVALID_OPERATION, >> "glBufferStorage(immutable)"); >> + _mesa_error(ctx, GL_INVALID_OPERATION, "%s(immutable)", func); >> return; >> } >> @@ -1439,10 +1435,45 @@ _mesa_BufferStorage(GLenum target, GLsizeiptr >> size, const GLvoid *data, >> ASSERT(ctx->Driver.BufferData); >> if (!ctx->Driver.BufferData(ctx, target, size, data, GL_DYNAMIC_DRAW, >> flags, bufObj)) { >> - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBufferStorage()"); >> + _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s()", func); >> } >> } >> +void GLAPIENTRY >> +_mesa_BufferStorage(GLenum target, GLsizeiptr size, const GLvoid *data, >> +GLbitfield flags) >> +{ >> + GET_CURRENT_CONTEXT(ctx); >> + struct gl_buffer_object *bufObj; >> + >> + bufObj = get_buffer(ctx, "glBufferStorage", target, >> GL_INVALID_OPERATION); >> + if (!bufObj) >> + return; >> + >> + _mesa_buffer_storage(ctx, bufObj, target, size, data, flags, >> +"glBufferStorage"); >> +} >> + >> +void GLAPIENTRY >> +_mesa_NamedBufferStorage(GLuint buffer, GLsizeiptr size, const GLvoid >> *data, >> + GLbitfield flags) >> +{ >> + GET_CURRENT_CONTEXT(ctx); >> + struct gl_buffer_object *bufObj; >> + >> + bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, >> "glNamedBufferStorage"); >> + if (!bufObj) >> + return; >> + >> + /* >> +* In direct state access, buffer objects have an unspecified target >> since >> +* they are not required to be bound. >> +*/ >> + _mesa_buffer_storage(ctx, bufObj, GL_NONE, size, data, flags, >> +
Re: [Mesa-dev] [PATCH 06/23] main: Add entry point for NamedBufferStorage.
On 12/02/15 04:05, Laura Ekstrand wrote: --- src/mapi/glapi/gen/ARB_direct_state_access.xml | 7 +++ src/mesa/main/bufferobj.c | 63 +++--- src/mesa/main/bufferobj.h | 9 src/mesa/main/tests/dispatch_sanity.cpp| 1 + 4 files changed, 64 insertions(+), 16 deletions(-) diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml index 6c9d0e8..ff81c21 100644 --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml @@ -14,6 +14,13 @@ + + + + + Isn't this supposed to be an enum? Here is the prototype found in core 4.5: void NamedBufferData( uint buffer, sizeiptr size, const void *data, enum usage ); Other than that, this looks good to me. Reviewed-by: Martin Peres + + diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index 785f0ff..6259db1 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -1386,15 +1386,13 @@ _mesa_IsBuffer(GLuint id) } -void GLAPIENTRY -_mesa_BufferStorage(GLenum target, GLsizeiptr size, const GLvoid *data, -GLbitfield flags) +void +_mesa_buffer_storage(struct gl_context *ctx, struct gl_buffer_object *bufObj, + GLenum target, GLsizeiptr size, const GLvoid *data, + GLbitfield flags, const char *func) { - GET_CURRENT_CONTEXT(ctx); - struct gl_buffer_object *bufObj; - if (size <= 0) { - _mesa_error(ctx, GL_INVALID_VALUE, "glBufferStorage(size <= 0)"); + _mesa_error(ctx, GL_INVALID_VALUE, "%s(size <= 0)", func); return; } @@ -1404,27 +1402,25 @@ _mesa_BufferStorage(GLenum target, GLsizeiptr size, const GLvoid *data, GL_MAP_COHERENT_BIT | GL_DYNAMIC_STORAGE_BIT | GL_CLIENT_STORAGE_BIT)) { - _mesa_error(ctx, GL_INVALID_VALUE, "glBufferStorage(flags)"); + _mesa_error(ctx, GL_INVALID_VALUE, "%s(invalid flag bits set)", func); return; } if (flags & GL_MAP_PERSISTENT_BIT && !(flags & (GL_MAP_READ_BIT | GL_MAP_WRITE_BIT))) { - _mesa_error(ctx, GL_INVALID_VALUE, "glBufferStorage(flags!=READ/WRITE)"); + _mesa_error(ctx, GL_INVALID_VALUE, + "%s(PERSISTENT and flags!=READ/WRITE)", func); return; } if (flags & GL_MAP_COHERENT_BIT && !(flags & GL_MAP_PERSISTENT_BIT)) { - _mesa_error(ctx, GL_INVALID_VALUE, "glBufferStorage(flags!=PERSISTENT)"); + _mesa_error(ctx, GL_INVALID_VALUE, + "%s(COHERENT and flags!=PERSISTENT)", func); return; } - bufObj = get_buffer(ctx, "glBufferStorage", target, GL_INVALID_OPERATION); - if (!bufObj) - return; - if (bufObj->Immutable) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glBufferStorage(immutable)"); + _mesa_error(ctx, GL_INVALID_OPERATION, "%s(immutable)", func); return; } @@ -1439,10 +1435,45 @@ _mesa_BufferStorage(GLenum target, GLsizeiptr size, const GLvoid *data, ASSERT(ctx->Driver.BufferData); if (!ctx->Driver.BufferData(ctx, target, size, data, GL_DYNAMIC_DRAW, flags, bufObj)) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBufferStorage()"); + _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s()", func); } } +void GLAPIENTRY +_mesa_BufferStorage(GLenum target, GLsizeiptr size, const GLvoid *data, +GLbitfield flags) +{ + GET_CURRENT_CONTEXT(ctx); + struct gl_buffer_object *bufObj; + + bufObj = get_buffer(ctx, "glBufferStorage", target, GL_INVALID_OPERATION); + if (!bufObj) + return; + + _mesa_buffer_storage(ctx, bufObj, target, size, data, flags, +"glBufferStorage"); +} + +void GLAPIENTRY +_mesa_NamedBufferStorage(GLuint buffer, GLsizeiptr size, const GLvoid *data, + GLbitfield flags) +{ + GET_CURRENT_CONTEXT(ctx); + struct gl_buffer_object *bufObj; + + bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, "glNamedBufferStorage"); + if (!bufObj) + return; + + /* +* In direct state access, buffer objects have an unspecified target since +* they are not required to be bound. +*/ + _mesa_buffer_storage(ctx, bufObj, GL_NONE, size, data, flags, +"glNamedBufferStorage"); +} + + void GLAPIENTRY _mesa_BufferData(GLenum target, GLsizeiptrARB size, diff --git a/src/mesa/main/bufferobj.h b/src/mesa/main/bufferobj.h index 48d253b..3c337aa 100644 --- a/src/mesa/main/bufferobj.h +++ b/src/mesa/main/bufferobj.h @@ -130,6 +130,11 @@ extern void _mesa_init_buffer_object_functions(struct dd_function_table *driver); extern void +_mesa_buffer_storage(struct gl_context *ctx, struct gl_buffer_object *bufObj, + GLenum target, GLsizeiptr size, const GLvoid *d
[Mesa-dev] [PATCH 06/23] main: Add entry point for NamedBufferStorage.
--- src/mapi/glapi/gen/ARB_direct_state_access.xml | 7 +++ src/mesa/main/bufferobj.c | 63 +++--- src/mesa/main/bufferobj.h | 9 src/mesa/main/tests/dispatch_sanity.cpp| 1 + 4 files changed, 64 insertions(+), 16 deletions(-) diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml index 6c9d0e8..ff81c21 100644 --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml @@ -14,6 +14,13 @@ + + + + + + + diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index 785f0ff..6259db1 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -1386,15 +1386,13 @@ _mesa_IsBuffer(GLuint id) } -void GLAPIENTRY -_mesa_BufferStorage(GLenum target, GLsizeiptr size, const GLvoid *data, -GLbitfield flags) +void +_mesa_buffer_storage(struct gl_context *ctx, struct gl_buffer_object *bufObj, + GLenum target, GLsizeiptr size, const GLvoid *data, + GLbitfield flags, const char *func) { - GET_CURRENT_CONTEXT(ctx); - struct gl_buffer_object *bufObj; - if (size <= 0) { - _mesa_error(ctx, GL_INVALID_VALUE, "glBufferStorage(size <= 0)"); + _mesa_error(ctx, GL_INVALID_VALUE, "%s(size <= 0)", func); return; } @@ -1404,27 +1402,25 @@ _mesa_BufferStorage(GLenum target, GLsizeiptr size, const GLvoid *data, GL_MAP_COHERENT_BIT | GL_DYNAMIC_STORAGE_BIT | GL_CLIENT_STORAGE_BIT)) { - _mesa_error(ctx, GL_INVALID_VALUE, "glBufferStorage(flags)"); + _mesa_error(ctx, GL_INVALID_VALUE, "%s(invalid flag bits set)", func); return; } if (flags & GL_MAP_PERSISTENT_BIT && !(flags & (GL_MAP_READ_BIT | GL_MAP_WRITE_BIT))) { - _mesa_error(ctx, GL_INVALID_VALUE, "glBufferStorage(flags!=READ/WRITE)"); + _mesa_error(ctx, GL_INVALID_VALUE, + "%s(PERSISTENT and flags!=READ/WRITE)", func); return; } if (flags & GL_MAP_COHERENT_BIT && !(flags & GL_MAP_PERSISTENT_BIT)) { - _mesa_error(ctx, GL_INVALID_VALUE, "glBufferStorage(flags!=PERSISTENT)"); + _mesa_error(ctx, GL_INVALID_VALUE, + "%s(COHERENT and flags!=PERSISTENT)", func); return; } - bufObj = get_buffer(ctx, "glBufferStorage", target, GL_INVALID_OPERATION); - if (!bufObj) - return; - if (bufObj->Immutable) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glBufferStorage(immutable)"); + _mesa_error(ctx, GL_INVALID_OPERATION, "%s(immutable)", func); return; } @@ -1439,10 +1435,45 @@ _mesa_BufferStorage(GLenum target, GLsizeiptr size, const GLvoid *data, ASSERT(ctx->Driver.BufferData); if (!ctx->Driver.BufferData(ctx, target, size, data, GL_DYNAMIC_DRAW, flags, bufObj)) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBufferStorage()"); + _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s()", func); } } +void GLAPIENTRY +_mesa_BufferStorage(GLenum target, GLsizeiptr size, const GLvoid *data, +GLbitfield flags) +{ + GET_CURRENT_CONTEXT(ctx); + struct gl_buffer_object *bufObj; + + bufObj = get_buffer(ctx, "glBufferStorage", target, GL_INVALID_OPERATION); + if (!bufObj) + return; + + _mesa_buffer_storage(ctx, bufObj, target, size, data, flags, +"glBufferStorage"); +} + +void GLAPIENTRY +_mesa_NamedBufferStorage(GLuint buffer, GLsizeiptr size, const GLvoid *data, + GLbitfield flags) +{ + GET_CURRENT_CONTEXT(ctx); + struct gl_buffer_object *bufObj; + + bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, "glNamedBufferStorage"); + if (!bufObj) + return; + + /* +* In direct state access, buffer objects have an unspecified target since +* they are not required to be bound. +*/ + _mesa_buffer_storage(ctx, bufObj, GL_NONE, size, data, flags, +"glNamedBufferStorage"); +} + + void GLAPIENTRY _mesa_BufferData(GLenum target, GLsizeiptrARB size, diff --git a/src/mesa/main/bufferobj.h b/src/mesa/main/bufferobj.h index 48d253b..3c337aa 100644 --- a/src/mesa/main/bufferobj.h +++ b/src/mesa/main/bufferobj.h @@ -130,6 +130,11 @@ extern void _mesa_init_buffer_object_functions(struct dd_function_table *driver); extern void +_mesa_buffer_storage(struct gl_context *ctx, struct gl_buffer_object *bufObj, + GLenum target, GLsizeiptr size, const GLvoid *data, + GLbitfield flags, const char *func); + +extern void _mesa_buffer_unmap_all_mappings(struct gl_context *ctx, struct gl_buffer_object *bufObj); @@ -163,6 +168,10 @@ _mesa_BufferStorage(GLenum target, GLsizeiptr size, const GLvoid *data, GLbitfield fla