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 <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18828>
This commit is contained in:
+48
-51
@@ -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))
|
||||
if (!handle_bind_buffer_gen(ctx, buffer,
|
||||
&bufObj, "glBindBufferRange", no_error))
|
||||
return;
|
||||
|
||||
if (!no_error && !bufObj) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glBindBufferRange(invalid buffer=%u)", buffer);
|
||||
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))
|
||||
if (!handle_bind_buffer_gen(ctx, buffer,
|
||||
&bufObj, "glBindBufferBase", false))
|
||||
return;
|
||||
|
||||
if (!bufObj) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glBindBufferBase(invalid buffer=%u)", buffer);
|
||||
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:
|
||||
|
||||
Reference in New Issue
Block a user