On 20/02/2015 02:12, Laura Ekstrand wrote:


On Wed, Feb 18, 2015 at 7:40 AM, Martin Peres <martin.pe...@linux.intel.com <mailto:martin.pe...@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.pe...@linux.intel.com
    <mailto:martin.pe...@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 },


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to