[Mesa-dev] [PATCH 16/23] main: Add entry point for UnmapNamedBuffer.

Fredrik Höglund fredrik at kde.org
Mon Mar 16 13:01:38 PDT 2015


On Thursday 12 February 2015, Laura Ekstrand wrote:
> v2: review from Ian Romanick
>    - Restore VBO_DEBUG and BOUNDS_CHECK
>    - Remove _mesa from static software fallback unmap_buffer.
> ---
>  src/mapi/glapi/gen/ARB_direct_state_access.xml |  5 +++
>  src/mesa/main/bufferobj.c                      | 47 +++++++++++++++++++-------
>  src/mesa/main/bufferobj.h                      |  7 ++++
>  src/mesa/main/tests/dispatch_sanity.cpp        |  1 +
>  4 files changed, 47 insertions(+), 13 deletions(-)
> 
> diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml
> index 557316a..281646d 100644
> --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml
> +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml
> @@ -75,6 +75,11 @@
>        <param name="access" type="GLbitfield" />
>     </function>
>  
> +   <function name="UnmapNamedBuffer" offset="assign">
> +      <return type="GLboolean" />
> +      <param name="buffer" type="GLuint" />
> +   </function>
> +
>     <!-- Texture object functions -->
>  
>     <function name="CreateTextures" offset="assign">
> diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
> index 5fee113..bb7ecdd 100644
> --- a/src/mesa/main/bufferobj.c
> +++ b/src/mesa/main/bufferobj.c
> @@ -736,15 +736,15 @@ _mesa_buffer_flush_mapped_range( struct gl_context *ctx,
>  
>  
>  /**
> - * Default callback for \c dd_function_table::MapBuffer().
> + * Default callback for \c dd_function_table::UnmapBuffer().
>   *
>   * The input parameters will have been already tested for errors.
>   *
>   * \sa glUnmapBufferARB, dd_function_table::UnmapBuffer
>   */
>  static GLboolean
> -_mesa_buffer_unmap(struct gl_context *ctx, struct gl_buffer_object *bufObj,
> -                   gl_map_buffer_index index)
> +unmap_buffer_fallback(struct gl_context *ctx, struct gl_buffer_object *bufObj,
> +                      gl_map_buffer_index index)
>  {
>     (void) ctx;
>     /* XXX we might assert here that bufObj->Pointer is non-null */
> @@ -1110,7 +1110,7 @@ _mesa_init_buffer_object_functions(struct dd_function_table *driver)
>     driver->BufferData = buffer_data_fallback;
>     driver->BufferSubData = buffer_sub_data_fallback;
>     driver->GetBufferSubData = _mesa_buffer_get_subdata;
> -   driver->UnmapBuffer = _mesa_buffer_unmap;
> +   driver->UnmapBuffer = unmap_buffer_fallback;
>  
>     /* GL_ARB_clear_buffer_object */
>     driver->ClearBufferSubData = _mesa_ClearBufferSubData_sw;
> @@ -1799,20 +1799,16 @@ _mesa_ClearNamedBufferSubData(GLuint buffer, GLenum internalformat,
>  }
>  
>  
> -GLboolean GLAPIENTRY
> -_mesa_UnmapBuffer(GLenum target)
> +GLboolean
> +_mesa_unmap_buffer(struct gl_context *ctx, struct gl_buffer_object *bufObj,
> +                   const char *func)
>  {
> -   GET_CURRENT_CONTEXT(ctx);
> -   struct gl_buffer_object *bufObj;
>     GLboolean status = GL_TRUE;
>     ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE);
>  
> -   bufObj = get_buffer(ctx, "glUnmapBufferARB", target, GL_INVALID_OPERATION);
> -   if (!bufObj)
> -      return GL_FALSE;
> -
>     if (!_mesa_bufferobj_mapped(bufObj, MAP_USER)) {
> -      _mesa_error(ctx, GL_INVALID_OPERATION, "glUnmapBufferARB");
> +      _mesa_error(ctx, GL_INVALID_OPERATION,
> +                  "%s(buffer is already unmapped)", func);

I think it would be better to say "buffer is not mapped", since we
don't know if it has ever been mapped.

Either way, this patch is:

Reviewed-by: Fredrik Höglund <fredrik at kde.org>

>        return GL_FALSE;
>     }
>  
> @@ -1861,6 +1857,31 @@ _mesa_UnmapBuffer(GLenum target)
>     return status;
>  }
>  
> +GLboolean GLAPIENTRY
> +_mesa_UnmapBuffer(GLenum target)
> +{
> +   GET_CURRENT_CONTEXT(ctx);
> +   struct gl_buffer_object *bufObj;
> +
> +   bufObj = get_buffer(ctx, "glUnmapBuffer", target, GL_INVALID_OPERATION);
> +   if (!bufObj)
> +      return GL_FALSE;
> +
> +   return _mesa_unmap_buffer(ctx, bufObj, "glUnmapBuffer");
> +}
> +
> +GLboolean GLAPIENTRY
> +_mesa_UnmapNamedBuffer(GLuint buffer)
> +{
> +   GET_CURRENT_CONTEXT(ctx);
> +   struct gl_buffer_object *bufObj;
> +
> +   bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, "glUnmapNamedBuffer");
> +   if (!bufObj)
> +      return GL_FALSE;
> +
> +   return _mesa_unmap_buffer(ctx, bufObj, "glUnmapNamedBuffer");
> +}
>  
>  void GLAPIENTRY
>  _mesa_GetBufferParameteriv(GLenum target, GLenum pname, GLint *params)
> diff --git a/src/mesa/main/bufferobj.h b/src/mesa/main/bufferobj.h
> index 6305b5c..40bd9fc 100644
> --- a/src/mesa/main/bufferobj.h
> +++ b/src/mesa/main/bufferobj.h
> @@ -177,6 +177,10 @@ _mesa_clear_buffer_sub_data(struct gl_context *ctx,
>                              const GLvoid *data,
>                              const char *func, bool subdata);
>  
> +extern GLboolean
> +_mesa_unmap_buffer(struct gl_context *ctx, struct gl_buffer_object *bufObj,
> +                   const char *func);
> +
>  /*
>   * API functions
>   */
> @@ -248,6 +252,9 @@ _mesa_ClearNamedBufferSubData(GLuint buffer, GLenum internalformat,
>  GLboolean GLAPIENTRY
>  _mesa_UnmapBuffer(GLenum target);
>  
> +GLboolean GLAPIENTRY
> +_mesa_UnmapNamedBuffer(GLuint buffer);
> +
>  void GLAPIENTRY
>  _mesa_GetBufferParameteriv(GLenum target, GLenum pname, GLint *params);
>  
> diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp
> index 0f89a8e..de52e69 100644
> --- a/src/mesa/main/tests/dispatch_sanity.cpp
> +++ b/src/mesa/main/tests/dispatch_sanity.cpp
> @@ -964,6 +964,7 @@ const struct function gl_core_functions_possible[] = {
>     { "glClearNamedBufferSubData", 45, -1 },
>     { "glMapNamedBuffer", 45, -1 },
>     { "glMapNamedBufferRange", 45, -1 },
> +   { "glUnmapNamedBuffer", 45, -1 },
>     { "glCreateTextures", 45, -1 },
>     { "glTextureStorage1D", 45, -1 },
>     { "glTextureStorage2D", 45, -1 },
> 



More information about the mesa-dev mailing list