[Mesa-dev] [PATCH] mesa: stop abstracting buffer object hashtable locking
Timothy Arceri
tarceri at itsqueeze.com
Thu Apr 6 01:00:15 UTC 2017
This doesn't do anything useful so just remove it.
---
src/mesa/main/bufferobj.c | 33 ++++++++++-----------------------
src/mesa/main/bufferobj.h | 6 ------
src/mesa/main/varray.c | 4 ++--
3 files changed, 12 insertions(+), 31 deletions(-)
diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
index 139efd1..58e0a50 100644
--- a/src/mesa/main/bufferobj.c
+++ b/src/mesa/main/bufferobj.c
@@ -1101,49 +1101,36 @@ _mesa_lookup_bufferobj_err(struct gl_context *ctx, GLuint buffer,
if (!bufObj || bufObj == &DummyBufferObject) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"%s(non-existent buffer object %u)", caller, buffer);
return NULL;
}
return bufObj;
}
-void
-_mesa_begin_bufferobj_lookups(struct gl_context *ctx)
-{
- _mesa_HashLockMutex(ctx->Shared->BufferObjects);
-}
-
-
-void
-_mesa_end_bufferobj_lookups(struct gl_context *ctx)
-{
- _mesa_HashUnlockMutex(ctx->Shared->BufferObjects);
-}
-
-
/**
* Look up a buffer object for a multi-bind function.
*
* Unlike _mesa_lookup_bufferobj(), this function also takes care
* of generating an error if the buffer ID is not zero or the name
* of an existing buffer object.
*
* If the buffer ID refers to an existing buffer object, a pointer
* to the buffer object is returned. If the ID is zero, a pointer
* to the shared NullBufferObj is returned. If the ID is not zero
* and does not refer to a valid buffer object, this function
* returns NULL.
*
* This function assumes that the caller has already locked the
- * hash table mutex by calling _mesa_begin_bufferobj_lookups().
+ * hash table mutex by calling
+ * _mesa_HashLockMutex(ctx->Shared->BufferObjects).
*/
struct gl_buffer_object *
_mesa_multi_bind_lookup_bufferobj(struct gl_context *ctx,
const GLuint *buffers,
GLuint index, const char *caller)
{
struct gl_buffer_object *bufObj;
if (buffers[index] != 0) {
bufObj = _mesa_lookup_bufferobj_locked(ctx, buffers[index]);
@@ -3238,21 +3225,21 @@ bind_uniform_buffers(struct gl_context *ctx, GLuint first, GLsizei count,
* and then a second pass to actually perform the bindings.
* Should we have different error semantics?
*
* RESOLVED: Yes. In this specification, when the parameters for
* one of the <count> binding points are invalid, that binding point
* is not updated and an error will be generated. However, other
* binding points in the same command will be updated if their
* parameters are valid and no other error occurs."
*/
- _mesa_begin_bufferobj_lookups(ctx);
+ _mesa_HashLockMutex(ctx->Shared->BufferObjects);
for (i = 0; i < count; i++) {
struct gl_uniform_buffer_binding *binding =
&ctx->UniformBufferBindings[first + i];
struct gl_buffer_object *bufObj;
GLintptr offset = 0;
GLsizeiptr size = 0;
if (range) {
if (!bind_buffers_check_offset_and_size(ctx, i, offsets, sizes))
@@ -3298,21 +3285,21 @@ bind_uniform_buffers(struct gl_context *ctx, GLuint first, GLsizei count,
bufObj = _mesa_multi_bind_lookup_bufferobj(ctx, buffers, i, caller);
if (bufObj) {
if (bufObj == ctx->Shared->NullBufferObj)
set_ubo_binding(ctx, binding, bufObj, -1, -1, !range);
else
set_ubo_binding(ctx, binding, bufObj, offset, size, !range);
}
}
- _mesa_end_bufferobj_lookups(ctx);
+ _mesa_HashUnlockMutex(ctx->Shared->BufferObjects);
}
static void
bind_shader_storage_buffers(struct gl_context *ctx, GLuint first,
GLsizei count, const GLuint *buffers,
bool range,
const GLintptr *offsets,
const GLsizeiptr *sizes,
const char *caller)
{
@@ -3350,21 +3337,21 @@ bind_shader_storage_buffers(struct gl_context *ctx, GLuint first,
* and then a second pass to actually perform the bindings.
* Should we have different error semantics?
*
* RESOLVED: Yes. In this specification, when the parameters for
* one of the <count> binding points are invalid, that binding point
* is not updated and an error will be generated. However, other
* binding points in the same command will be updated if their
* parameters are valid and no other error occurs."
*/
- _mesa_begin_bufferobj_lookups(ctx);
+ _mesa_HashLockMutex(ctx->Shared->BufferObjects);
for (i = 0; i < count; i++) {
struct gl_shader_storage_buffer_binding *binding =
&ctx->ShaderStorageBufferBindings[first + i];
struct gl_buffer_object *bufObj;
GLintptr offset = 0;
GLsizeiptr size = 0;
if (range) {
if (!bind_buffers_check_offset_and_size(ctx, i, offsets, sizes))
@@ -3410,21 +3397,21 @@ bind_shader_storage_buffers(struct gl_context *ctx, GLuint first,
bufObj = _mesa_multi_bind_lookup_bufferobj(ctx, buffers, i, caller);
if (bufObj) {
if (bufObj == ctx->Shared->NullBufferObj)
set_ssbo_binding(ctx, binding, bufObj, -1, -1, !range);
else
set_ssbo_binding(ctx, binding, bufObj, offset, size, !range);
}
}
- _mesa_end_bufferobj_lookups(ctx);
+ _mesa_HashUnlockMutex(ctx->Shared->BufferObjects);
}
static bool
error_check_bind_xfb_buffers(struct gl_context *ctx,
struct gl_transform_feedback_object *tfObj,
GLuint first, GLsizei count, const char *caller)
{
if (!ctx->Extensions.EXT_transform_feedback) {
_mesa_error(ctx, GL_INVALID_ENUM,
"%s(target=GL_TRANSFORM_FEEDBACK_BUFFER)", caller);
@@ -3529,21 +3516,21 @@ bind_xfb_buffers(struct gl_context *ctx,
* and then a second pass to actually perform the bindings.
* Should we have different error semantics?
*
* RESOLVED: Yes. In this specification, when the parameters for
* one of the <count> binding points are invalid, that binding point
* is not updated and an error will be generated. However, other
* binding points in the same command will be updated if their
* parameters are valid and no other error occurs."
*/
- _mesa_begin_bufferobj_lookups(ctx);
+ _mesa_HashLockMutex(ctx->Shared->BufferObjects);
for (i = 0; i < count; i++) {
const GLuint index = first + i;
struct gl_buffer_object * const boundBufObj = tfObj->Buffers[index];
struct gl_buffer_object *bufObj;
GLintptr offset = 0;
GLsizeiptr size = 0;
if (range) {
offset = offsets[i];
@@ -3595,21 +3582,21 @@ bind_xfb_buffers(struct gl_context *ctx,
if (boundBufObj && boundBufObj->Name == buffers[i])
bufObj = boundBufObj;
else
bufObj = _mesa_multi_bind_lookup_bufferobj(ctx, buffers, i, caller);
if (bufObj)
_mesa_set_transform_feedback_binding(ctx, tfObj, index, bufObj,
offset, size);
}
- _mesa_end_bufferobj_lookups(ctx);
+ _mesa_HashUnlockMutex(ctx->Shared->BufferObjects);
}
static bool
error_check_bind_atomic_buffers(struct gl_context *ctx,
GLuint first, GLsizei count,
const char *caller)
{
if (!ctx->Extensions.ARB_shader_atomic_counters) {
_mesa_error(ctx, GL_INVALID_ENUM,
"%s(target=GL_ATOMIC_COUNTER_BUFFER)", caller);
@@ -3692,21 +3679,21 @@ bind_atomic_buffers(struct gl_context *ctx,
* and then a second pass to actually perform the bindings.
* Should we have different error semantics?
*
* RESOLVED: Yes. In this specification, when the parameters for
* one of the <count> binding points are invalid, that binding point
* is not updated and an error will be generated. However, other
* binding points in the same command will be updated if their
* parameters are valid and no other error occurs."
*/
- _mesa_begin_bufferobj_lookups(ctx);
+ _mesa_HashLockMutex(ctx->Shared->BufferObjects);
for (i = 0; i < count; i++) {
struct gl_atomic_buffer_binding *binding =
&ctx->AtomicBufferBindings[first + i];
struct gl_buffer_object *bufObj;
GLintptr offset = 0;
GLsizeiptr size = 0;
if (range) {
if (!bind_buffers_check_offset_and_size(ctx, i, offsets, sizes))
@@ -3745,21 +3732,21 @@ bind_atomic_buffers(struct gl_context *ctx,
if (binding->BufferObject && binding->BufferObject->Name == buffers[i])
bufObj = binding->BufferObject;
else
bufObj = _mesa_multi_bind_lookup_bufferobj(ctx, buffers, i, caller);
if (bufObj)
set_atomic_buffer_binding(ctx, binding, bufObj, offset, size);
}
- _mesa_end_bufferobj_lookups(ctx);
+ _mesa_HashUnlockMutex(ctx->Shared->BufferObjects);
}
void GLAPIENTRY
_mesa_BindBufferRange(GLenum target, GLuint index,
GLuint buffer, GLintptr offset, GLsizeiptr size)
{
GET_CURRENT_CONTEXT(ctx);
struct gl_buffer_object *bufObj;
if (MESA_VERBOSE & VERBOSE_API) {
diff --git a/src/mesa/main/bufferobj.h b/src/mesa/main/bufferobj.h
index cd0df93..259de94 100644
--- a/src/mesa/main/bufferobj.h
+++ b/src/mesa/main/bufferobj.h
@@ -91,26 +91,20 @@ _mesa_update_default_objects_buffer_objects(struct gl_context *ctx);
extern struct gl_buffer_object *
_mesa_lookup_bufferobj(struct gl_context *ctx, GLuint buffer);
extern struct gl_buffer_object *
_mesa_lookup_bufferobj_locked(struct gl_context *ctx, GLuint buffer);
extern struct gl_buffer_object *
_mesa_lookup_bufferobj_err(struct gl_context *ctx, GLuint buffer,
const char *caller);
-extern void
-_mesa_begin_bufferobj_lookups(struct gl_context *ctx);
-
-extern void
-_mesa_end_bufferobj_lookups(struct gl_context *ctx);
-
extern struct gl_buffer_object *
_mesa_multi_bind_lookup_bufferobj(struct gl_context *ctx,
const GLuint *buffers,
GLuint index, const char *caller);
extern void
_mesa_initialize_buffer_object(struct gl_context *ctx,
struct gl_buffer_object *obj,
GLuint name);
diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
index 8139466..a3836a1 100644
--- a/src/mesa/main/varray.c
+++ b/src/mesa/main/varray.c
@@ -2035,21 +2035,21 @@ vertex_array_vertex_buffers(struct gl_context *ctx,
* errors and then a second pass to actually perform the
* bindings. Should we have different error semantics?
*
* RESOLVED: Yes. In this specification, when the parameters for
* one of the <count> binding points are invalid, that binding
* point is not updated and an error will be generated. However,
* other binding points in the same command will be updated if
* their parameters are valid and no other error occurs."
*/
- _mesa_begin_bufferobj_lookups(ctx);
+ _mesa_HashLockMutex(ctx->Shared->BufferObjects);
for (i = 0; i < count; i++) {
struct gl_buffer_object *vbo;
/* The ARB_multi_bind spec says:
*
* "An INVALID_VALUE error is generated if any value in
* <offsets> or <strides> is negative (per binding)."
*/
if (offsets[i] < 0) {
@@ -2086,21 +2086,21 @@ vertex_array_vertex_buffers(struct gl_context *ctx,
if (!vbo)
continue;
} else {
vbo = ctx->Shared->NullBufferObj;
}
_mesa_bind_vertex_buffer(ctx, vao, VERT_ATTRIB_GENERIC(first + i),
vbo, offsets[i], strides[i]);
}
- _mesa_end_bufferobj_lookups(ctx);
+ _mesa_HashUnlockMutex(ctx->Shared->BufferObjects);
}
void GLAPIENTRY
_mesa_BindVertexBuffers(GLuint first, GLsizei count, const GLuint *buffers,
const GLintptr *offsets, const GLsizei *strides)
{
GET_CURRENT_CONTEXT(ctx);
/* The ARB_vertex_attrib_binding spec says:
--
2.9.3
More information about the mesa-dev
mailing list