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

Laura Ekstrand laura at jlekstrand.net
Thu Feb 19 16:12:50 PST 2015


On Wed, Feb 18, 2015 at 7:40 AM, Martin Peres <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.

>
> Reviewed-by: Martin Peres <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 },
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150219/a91196ce/attachment-0001.html>


More information about the mesa-dev mailing list