[Mesa-dev] [PATCH 07/23] main: Add entry point for NamedBufferData.

Martin Peres martin.peres at free.fr
Thu Feb 19 23:52:58 PST 2015


On 20/02/2015 02:12, Laura Ekstrand wrote:
>
>
> On Wed, Feb 18, 2015 at 7:40 AM, Martin Peres 
> <martin.peres at linux.intel.com <mailto:martin.peres at linux.intel.com>> 
> wrote:
>
>
>     On 12/02/15 04:05, Laura Ekstrand wrote:
>
>         v2: review from Ian Romanick
>             - Fix space in ARB_direct_state_access.xml.
>             - Remove "_mesa" from the name of buffer_data static fallback.
>             - Restore VBO_DEBUG and BOUNDS_CHECK.
>             - Fix beginning of comment to start on same line as /*
>         ---
>           src/mapi/glapi/gen/ARB_direct_state_access.xml | 7 +++
>           src/mesa/main/bufferobj.c                      | 67
>         ++++++++++++++++++--------
>           src/mesa/main/bufferobj.h                      | 13 ++++-
>           src/mesa/main/tests/dispatch_sanity.cpp        | 1 +
>           4 files changed, 67 insertions(+), 21 deletions(-)
>
>         diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml
>         b/src/mapi/glapi/gen/ARB_direct_state_access.xml
>         index ff81c21..7779262 100644
>         --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml
>         +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml
>         @@ -21,6 +21,13 @@
>                 <param name="flags" type="GLbitfield" />
>              </function>
>           +   <function name="NamedBufferData" offset="assign">
>         +      <param name="buffer" type="GLuint" />
>         +      <param name="size" type="GLsizeiptr" />
>         +      <param name="data" type="const GLvoid *" />
>         +      <param name="usage" type="GLenum" />
>         +   </function>
>         +
>              <!-- Texture object functions -->
>                <function name="CreateTextures" offset="assign">
>         diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
>         index 6259db1..ac8eed1 100644
>         --- a/src/mesa/main/bufferobj.c
>         +++ b/src/mesa/main/bufferobj.c
>         @@ -556,9 +556,9 @@ _mesa_total_buffer_object_memory(struct
>         gl_context *ctx)
>            * \sa glBufferDataARB, dd_function_table::BufferData.
>            */
>           static GLboolean
>         -_mesa_buffer_data( struct gl_context *ctx, GLenum target,
>         GLsizeiptrARB size,
>         -                  const GLvoid * data, GLenum usage, GLenum
>         storageFlags,
>         -                  struct gl_buffer_object * bufObj )
>         +buffer_data_fallback(struct gl_context *ctx, GLenum target,
>         GLsizeiptr size,
>         +                     const GLvoid *data, GLenum usage, GLenum
>         storageFlags,
>         +                     struct gl_buffer_object *bufObj)
>           {
>              void * new_data;
>           @@ -1112,7 +1112,7 @@
>         _mesa_init_buffer_object_functions(struct dd_function_table
>         *driver)
>              /* GL_ARB_vertex/pixel_buffer_object */
>              driver->NewBufferObject = _mesa_new_buffer_object;
>              driver->DeleteBuffer = _mesa_delete_buffer_object;
>         -   driver->BufferData = _mesa_buffer_data;
>         +   driver->BufferData = buffer_data_fallback;
>              driver->BufferSubData = _mesa_buffer_subdata;
>              driver->GetBufferSubData = _mesa_buffer_get_subdata;
>              driver->UnmapBuffer = _mesa_buffer_unmap;
>         @@ -1474,23 +1474,22 @@ _mesa_NamedBufferStorage(GLuint
>         buffer, GLsizeiptr size, const GLvoid *data,
>           }
>             -
>         -void GLAPIENTRY
>         -_mesa_BufferData(GLenum target, GLsizeiptrARB size,
>         -                    const GLvoid * data, GLenum usage)
>         +void
>         +_mesa_buffer_data(struct gl_context *ctx, struct
>         gl_buffer_object *bufObj,
>         +                  GLenum target, GLsizeiptr size, const
>         GLvoid *data,
>         +                  GLenum usage, const char *func)
>           {
>         -   GET_CURRENT_CONTEXT(ctx);
>         -   struct gl_buffer_object *bufObj;
>              bool valid_usage;
>                if (MESA_VERBOSE & VERBOSE_API)
>         -      _mesa_debug(ctx, "glBufferData(%s, %ld, %p, %s)\n",
>         +      _mesa_debug(ctx, "%s(%s, %ld, %p, %s)\n",
>
>
>     Func could be on this line but I really don't care.
>
>
>         +                  func,
>                             _mesa_lookup_enum_by_nr(target),
>                             (long int) size, data,
>                             _mesa_lookup_enum_by_nr(usage));
>                if (size < 0) {
>         -      _mesa_error(ctx, GL_INVALID_VALUE,
>         "glBufferDataARB(size < 0)");
>         +      _mesa_error(ctx, GL_INVALID_VALUE, "%s(size < 0)", func);
>                 return;
>              }
>           @@ -1519,16 +1518,13 @@ _mesa_BufferData(GLenum target,
>         GLsizeiptrARB size,
>              }
>                if (!valid_usage) {
>         -      _mesa_error(ctx, GL_INVALID_ENUM, "glBufferData(usage)");
>         +      _mesa_error(ctx, GL_INVALID_ENUM, "%s(invalid usage:
>         %s)", func,
>         +                  _mesa_lookup_enum_by_nr(usage));
>                 return;
>              }
>           -   bufObj = get_buffer(ctx, "glBufferDataARB", target,
>         GL_INVALID_OPERATION);
>         -   if (!bufObj)
>         -      return;
>         -
>              if (bufObj->Immutable) {
>         -      _mesa_error(ctx, GL_INVALID_OPERATION,
>         "glBufferData(immutable)");
>         +      _mesa_error(ctx, GL_INVALID_OPERATION, "%s(immutable)",
>         func);
>                 return;
>              }
>           @@ -1554,10 +1550,43 @@ _mesa_BufferData(GLenum target,
>         GLsizeiptrARB size,
>                                          GL_MAP_WRITE_BIT |
>          GL_DYNAMIC_STORAGE_BIT,
>                                          bufObj)) {
>         -      _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBufferDataARB()");
>         +      _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", func);
>              }
>           }
>           +void GLAPIENTRY
>         +_mesa_BufferData(GLenum target, GLsizeiptr size,
>         +                 const GLvoid *data, GLenum usage)
>         +{
>         +   GET_CURRENT_CONTEXT(ctx);
>         +   struct gl_buffer_object *bufObj;
>         +
>         +   bufObj = get_buffer(ctx, "glBufferData", target,
>         GL_INVALID_OPERATION);
>         +   if (!bufObj)
>         +      return;
>         +
>         +   _mesa_buffer_data(ctx, bufObj, target, size, data, usage,
>         +                     "glBufferData");
>         +}
>         +
>         +void GLAPIENTRY
>         +_mesa_NamedBufferData(GLuint buffer, GLsizeiptr size, const
>         GLvoid *data,
>         +                      GLenum usage)
>         +{
>         +   GET_CURRENT_CONTEXT(ctx);
>         +   struct gl_buffer_object *bufObj;
>         +
>         +   bufObj = _mesa_lookup_bufferobj_err(ctx, buffer,
>         "glNamedBufferData");
>         +   if (!bufObj)
>         +      return;
>         +
>         +   /* In direct state access, buffer objects have an
>         unspecified target since
>         +    * they are not required to be bound.
>         +    */
>         +   _mesa_buffer_data(ctx, bufObj, GL_NONE, size, data, usage,
>         +                     "glNamedBufferData");
>         +}
>         +
>             void GLAPIENTRY
>           _mesa_BufferSubData(GLenum target, GLintptrARB offset,
>         diff --git a/src/mesa/main/bufferobj.h b/src/mesa/main/bufferobj.h
>         index 3c337aa..ddd240c 100644
>         --- a/src/mesa/main/bufferobj.h
>         +++ b/src/mesa/main/bufferobj.h
>         @@ -135,6 +135,11 @@ _mesa_buffer_storage(struct gl_context
>         *ctx, struct gl_buffer_object *bufObj,
>                                GLbitfield flags, const char *func);
>             extern void
>         +_mesa_buffer_data(struct gl_context *ctx, struct
>         gl_buffer_object *bufObj,
>         +                  GLenum target, GLsizeiptr size, const
>         GLvoid *data,
>         +                  GLenum usage, const char *func);
>
>
>     is there a reason to export this function? Why not having it static?
>
> Meta (mesa/src/main/drivers/common/) uses _mesa_BufferData.  It would 
> be simpler to use this function _mesa_buffer_data.  After most of DSA 
> is done, I get to start making Meta use the backend functions rather 
> than api entry points.  This will hopefully save us from storing 
> internal driver objects in hash tables and getting the context everywhere.

Good project! Thanks for the info.
>
>
>     Reviewed-by: Martin Peres <martin.peres at linux.intel.com
>     <mailto:martin.peres at linux.intel.com>>
>
>         +
>         +extern void
>           _mesa_buffer_unmap_all_mappings(struct gl_context *ctx,
>                                           struct gl_buffer_object
>         *bufObj);
>           @@ -172,8 +177,12 @@ _mesa_NamedBufferStorage(GLuint buffer,
>         GLsizeiptr size, const GLvoid *data,
>                                    GLbitfield flags);
>             void GLAPIENTRY
>         -_mesa_BufferData(GLenum target, GLsizeiptrARB size,
>         -                 const GLvoid * data, GLenum usage);
>         +_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(GLenum target, GLintptrARB offset,
>         diff --git a/src/mesa/main/tests/dispatch_sanity.cpp
>         b/src/mesa/main/tests/dispatch_sanity.cpp
>         index 9f663be..595ee90 100644
>         --- a/src/mesa/main/tests/dispatch_sanity.cpp
>         +++ b/src/mesa/main/tests/dispatch_sanity.cpp
>         @@ -957,6 +957,7 @@ const struct function
>         gl_core_functions_possible[] = {
>              /* GL_ARB_direct_state_access */
>              { "glCreateBuffers", 45, -1 },
>              { "glNamedBufferStorage", 45, -1 },
>         +   { "glNamedBufferData", 45, -1 },
>              { "glCreateTextures", 45, -1 },
>              { "glTextureStorage1D", 45, -1 },
>              { "glTextureStorage2D", 45, -1 },
>
>


More information about the mesa-dev mailing list