mesa: inline _mesa_handle_bind_buffer_gen and correct things
authorMarek Olšák <marek.olsak@amd.com>
Mon, 22 Aug 2022 05:37:36 +0000 (01:37 -0400)
committerMarge Bot <emma+marge@anholt.net>
Mon, 26 Sep 2022 22:58:16 +0000 (22:58 +0000)
Changes:
- the function is inlined, which will help the next commit to improve perf
- use no_error inside the function
- if the function returns true, the buffer is non-NULL, so remove NULL
  checking in callers

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18828>

src/mesa/main/bufferobj.c

index 610d390..6cd7dda 100644 (file)
@@ -1289,11 +1289,11 @@ new_gl_buffer_object(struct gl_context *ctx, GLuint id)
    return buf;
 }
 
-bool
-_mesa_handle_bind_buffer_gen(struct gl_context *ctx,
-                             GLuint buffer,
-                             struct gl_buffer_object **buf_handle,
-                             const char *caller, bool no_error)
+static ALWAYS_INLINE bool
+handle_bind_buffer_gen(struct gl_context *ctx,
+                       GLuint buffer,
+                       struct gl_buffer_object **buf_handle,
+                       const char *caller, bool no_error)
 {
    struct gl_buffer_object *buf = *buf_handle;
 
@@ -1308,7 +1308,8 @@ _mesa_handle_bind_buffer_gen(struct gl_context *ctx,
        */
       *buf_handle = new_gl_buffer_object(ctx, buffer);
       if (!*buf_handle) {
-        _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", caller);
+         if (!no_error)
+            _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", caller);
         return false;
       }
       _mesa_HashLockMaybeLocked(ctx->Shared->BufferObjects,
@@ -1329,6 +1330,15 @@ _mesa_handle_bind_buffer_gen(struct gl_context *ctx,
    return true;
 }
 
+bool
+_mesa_handle_bind_buffer_gen(struct gl_context *ctx,
+                             GLuint buffer,
+                             struct gl_buffer_object **buf_handle,
+                             const char *caller, bool no_error)
+{
+   return handle_bind_buffer_gen(ctx, buffer, buf_handle, caller, no_error);
+}
+
 /**
  * Bind the specified target to buffer for the specified context.
  * Called by glBindBuffer() and other functions.
@@ -2275,8 +2285,8 @@ _mesa_NamedBufferStorageEXT(GLuint buffer, GLsizeiptr size,
    GET_CURRENT_CONTEXT(ctx);
 
    struct gl_buffer_object *bufObj = _mesa_lookup_bufferobj(ctx, buffer);
-   if (!_mesa_handle_bind_buffer_gen(ctx, buffer,
-                                     &bufObj, "glNamedBufferStorageEXT", false))
+   if (!handle_bind_buffer_gen(ctx, buffer,
+                               &bufObj, "glNamedBufferStorageEXT", false))
       return;
 
    inlined_buffer_storage(GL_NONE, buffer, size, data, flags, GL_NONE, 0,
@@ -2528,8 +2538,8 @@ _mesa_NamedBufferDataEXT(GLuint buffer, GLsizeiptr size, const GLvoid *data,
    }
 
    bufObj = _mesa_lookup_bufferobj(ctx, buffer);
-   if (!_mesa_handle_bind_buffer_gen(ctx, buffer,
-                                     &bufObj, "glNamedBufferDataEXT", false))
+   if (!handle_bind_buffer_gen(ctx, buffer,
+                               &bufObj, "glNamedBufferDataEXT", false))
       return;
 
    _mesa_buffer_data(ctx, bufObj, GL_NONE, size, data, usage,
@@ -2676,8 +2686,8 @@ _mesa_NamedBufferSubDataEXT(GLuint buffer, GLintptr offset,
    }
 
    bufObj = _mesa_lookup_bufferobj(ctx, buffer);
-   if (!_mesa_handle_bind_buffer_gen(ctx, buffer,
-                                     &bufObj, "glNamedBufferSubDataEXT", false))
+   if (!handle_bind_buffer_gen(ctx, buffer,
+                               &bufObj, "glNamedBufferSubDataEXT", false))
       return;
 
    if (validate_buffer_sub_data(ctx, bufObj, offset, size,
@@ -2742,8 +2752,8 @@ _mesa_GetNamedBufferSubDataEXT(GLuint buffer, GLintptr offset,
    }
 
    bufObj = _mesa_lookup_bufferobj(ctx, buffer);
-   if (!_mesa_handle_bind_buffer_gen(ctx, buffer,
-                                     &bufObj, "glGetNamedBufferSubDataEXT", false))
+   if (!handle_bind_buffer_gen(ctx, buffer,
+                               &bufObj, "glGetNamedBufferSubDataEXT", false))
       return;
 
    if (!buffer_object_subdata_range_good(ctx, bufObj, offset, size, false,
@@ -2906,8 +2916,8 @@ _mesa_ClearNamedBufferDataEXT(GLuint buffer, GLenum internalformat,
 {
    GET_CURRENT_CONTEXT(ctx);
    struct gl_buffer_object *bufObj = _mesa_lookup_bufferobj(ctx, buffer);
-   if (!_mesa_handle_bind_buffer_gen(ctx, buffer,
-                                     &bufObj, "glClearNamedBufferDataEXT", false))
+   if (!handle_bind_buffer_gen(ctx, buffer,
+                               &bufObj, "glClearNamedBufferDataEXT", false))
       return;
 
    clear_buffer_sub_data_error(ctx, bufObj, internalformat, 0, bufObj->Size,
@@ -2992,8 +3002,8 @@ _mesa_ClearNamedBufferSubDataEXT(GLuint buffer, GLenum internalformat,
 {
    GET_CURRENT_CONTEXT(ctx);
    struct gl_buffer_object *bufObj = _mesa_lookup_bufferobj(ctx, buffer);
-   if (!_mesa_handle_bind_buffer_gen(ctx, buffer,
-                                     &bufObj, "glClearNamedBufferSubDataEXT", false))
+   if (!handle_bind_buffer_gen(ctx, buffer,
+                               &bufObj, "glClearNamedBufferSubDataEXT", false))
       return;
 
    clear_buffer_sub_data_error(ctx, bufObj, internalformat, offset, size,
@@ -3244,8 +3254,8 @@ _mesa_GetNamedBufferParameterivEXT(GLuint buffer, GLenum pname, GLint *params)
    }
 
    bufObj = _mesa_lookup_bufferobj(ctx, buffer);
-   if (!_mesa_handle_bind_buffer_gen(ctx, buffer,
-                                     &bufObj, "glGetNamedBufferParameterivEXT", false))
+   if (!handle_bind_buffer_gen(ctx, buffer,
+                               &bufObj, "glGetNamedBufferParameterivEXT", false))
       return;
 
    if (!get_buffer_parameter(ctx, bufObj, pname, &parameter,
@@ -3334,8 +3344,8 @@ _mesa_GetNamedBufferPointervEXT(GLuint buffer, GLenum pname, GLvoid **params)
    }
 
    bufObj = _mesa_lookup_bufferobj(ctx, buffer);
-   if (!_mesa_handle_bind_buffer_gen(ctx, buffer,
-                                     &bufObj, "glGetNamedBufferPointervEXT", false))
+   if (!handle_bind_buffer_gen(ctx, buffer,
+                               &bufObj, "glGetNamedBufferPointervEXT", false))
       return;
 
    *params = bufObj->Mappings[MAP_USER].Pointer;
@@ -3456,15 +3466,14 @@ _mesa_NamedCopyBufferSubDataEXT(GLuint readBuffer, GLuint writeBuffer,
    struct gl_buffer_object *src, *dst;
 
    src = _mesa_lookup_bufferobj(ctx, readBuffer);
-   if (!_mesa_handle_bind_buffer_gen(ctx, readBuffer,
-                                     &src,
+   if (!handle_bind_buffer_gen(ctx, readBuffer,
+                               &src,
                                      "glNamedCopyBufferSubDataEXT", false))
       return;
 
    dst = _mesa_lookup_bufferobj(ctx, writeBuffer);
-   if (!_mesa_handle_bind_buffer_gen(ctx, writeBuffer,
-                                     &dst,
-                                     "glNamedCopyBufferSubDataEXT", false))
+   if (!handle_bind_buffer_gen(ctx, writeBuffer,
+                               &dst, "glNamedCopyBufferSubDataEXT", false))
       return;
 
    copy_buffer_sub_data(ctx, src, dst, readOffset, writeOffset, size,
@@ -3522,7 +3531,7 @@ _mesa_InternalBufferSubDataCopyMESA(GLintptr srcBuffer, GLuint srcOffset,
    if (named && ext_dsa) {
       func = "glNamedBufferSubDataEXT";
       dst = _mesa_lookup_bufferobj(ctx, dstTargetOrName);
-      if (!_mesa_handle_bind_buffer_gen(ctx, dstTargetOrName, &dst, func, false))
+      if (!handle_bind_buffer_gen(ctx, dstTargetOrName, &dst, func, false))
          goto done;
    } else if (named) {
       func = "glNamedBufferSubData";
@@ -3807,7 +3816,7 @@ map_named_buffer_range(GLuint buffer, GLintptr offset, GLsizeiptr length,
 
    if (dsa_ext) {
       bufObj = _mesa_lookup_bufferobj(ctx, buffer);
-      if (!_mesa_handle_bind_buffer_gen(ctx, buffer, &bufObj, func, false))
+      if (!handle_bind_buffer_gen(ctx, buffer, &bufObj, func, false))
          return NULL;
    } else {
       bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, func);
@@ -3963,8 +3972,8 @@ _mesa_MapNamedBufferEXT(GLuint buffer, GLenum access)
    }
 
    struct gl_buffer_object *bufObj = _mesa_lookup_bufferobj(ctx, buffer);
-   if (!_mesa_handle_bind_buffer_gen(ctx, buffer,
-                                     &bufObj, "glMapNamedBufferEXT", false))
+   if (!handle_bind_buffer_gen(ctx, buffer,
+                               &bufObj, "glMapNamedBufferEXT", false))
       return NULL;
 
    if (!validate_map_buffer_range(ctx, bufObj, 0, bufObj->Size, accessFlags,
@@ -4096,8 +4105,8 @@ _mesa_FlushMappedNamedBufferRangeEXT(GLuint buffer, GLintptr offset,
    }
 
    bufObj = _mesa_lookup_bufferobj(ctx, buffer);
-   if (!_mesa_handle_bind_buffer_gen(ctx, buffer,
-                                     &bufObj, "glFlushMappedNamedBufferRangeEXT", false))
+   if (!handle_bind_buffer_gen(ctx, buffer,
+                               &bufObj, "glFlushMappedNamedBufferRangeEXT", false))
       return;
 
    flush_mapped_buffer_range(ctx, bufObj, offset, length,
@@ -4894,15 +4903,9 @@ bind_buffer_range(GLenum target, GLuint index, GLuint buffer, GLintptr offset,
       bufObj = NULL;
    } else {
       bufObj = _mesa_lookup_bufferobj(ctx, buffer);
-      if (!_mesa_handle_bind_buffer_gen(ctx, buffer,
-                                        &bufObj, "glBindBufferRange", false))
-         return;
-
-      if (!no_error && !bufObj) {
-         _mesa_error(ctx, GL_INVALID_OPERATION,
-                     "glBindBufferRange(invalid buffer=%u)", buffer);
+      if (!handle_bind_buffer_gen(ctx, buffer,
+                                  &bufObj, "glBindBufferRange", no_error))
          return;
-      }
    }
 
    if (no_error) {
@@ -4992,15 +4995,9 @@ _mesa_BindBufferBase(GLenum target, GLuint index, GLuint buffer)
       bufObj = NULL;
    } else {
       bufObj = _mesa_lookup_bufferobj(ctx, buffer);
-      if (!_mesa_handle_bind_buffer_gen(ctx, buffer,
-                                        &bufObj, "glBindBufferBase", false))
-         return;
-
-      if (!bufObj) {
-         _mesa_error(ctx, GL_INVALID_OPERATION,
-                     "glBindBufferBase(invalid buffer=%u)", buffer);
+      if (!handle_bind_buffer_gen(ctx, buffer,
+                                  &bufObj, "glBindBufferBase", false))
          return;
-      }
    }
 
    /* Note that there's some oddness in the GL 3.1-GL 3.3 specifications with
@@ -5356,8 +5353,8 @@ _mesa_NamedBufferPageCommitmentEXT(GLuint buffer, GLintptr offset,
    /* Use NamedBuffer* functions logic from EXT_direct_state_access */
    if (buffer != 0) {
       bufferObj = _mesa_lookup_bufferobj(ctx, buffer);
-      if (!_mesa_handle_bind_buffer_gen(ctx, buffer, &bufferObj,
-                                        "glNamedBufferPageCommitmentEXT", false))
+      if (!handle_bind_buffer_gen(ctx, buffer, &bufferObj,
+                                  "glNamedBufferPageCommitmentEXT", false))
          return;
    } else {
       /* GL_EXT_direct_state_access says about NamedBuffer* functions: