From 6a1ede73f5ac2becaf184d79776982556277cc98 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Mon, 22 Aug 2022 01:37:36 -0400 Subject: [PATCH] mesa: inline _mesa_handle_bind_buffer_gen and correct things 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 Part-of: --- src/mesa/main/bufferobj.c | 99 +++++++++++++++++++++++------------------------ 1 file changed, 48 insertions(+), 51 deletions(-) diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index 610d390..6cd7dda 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -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, ¶meter, @@ -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: -- 2.7.4