[Mesa-dev] [PATCH 09/18] mesa: Refactor set_atomic_buffer_binding()

Fredrik Höglund fredrik at kde.org
Tue Jan 21 15:35:47 PST 2014


Make set_atomic_buffer_binding() just update the binding, and move
the code that does validation, flushes the vertices etc. into a new
bind_atomic_buffer() function.
---
 src/mesa/main/bufferobj.c |   42 ++++++++++++++++++++++++++----------------
 1 file changed, 26 insertions(+), 16 deletions(-)

diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
index e46516d..4094e31 100644
--- a/src/mesa/main/bufferobj.c
+++ b/src/mesa/main/bufferobj.c
@@ -2474,11 +2474,29 @@ bind_buffer_base_uniform_buffer(struct gl_context *ctx,
 
 static void
 set_atomic_buffer_binding(struct gl_context *ctx,
-                          unsigned index,
+                          struct gl_atomic_buffer_binding *binding,
                           struct gl_buffer_object *bufObj,
                           GLintptr offset,
-                          GLsizeiptr size,
-                          const char *name)
+                          GLsizeiptr size)
+{
+   _mesa_reference_buffer_object(ctx, &binding->BufferObject, bufObj);
+
+   if (bufObj == ctx->Shared->NullBufferObj) {
+      binding->Offset = -1;
+      binding->Size = -1;
+   } else {
+      binding->Offset = offset;
+      binding->Size = size;
+   }
+}
+
+static void
+bind_atomic_buffer(struct gl_context *ctx,
+                   unsigned index,
+                   struct gl_buffer_object *bufObj,
+                   GLintptr offset,
+                   GLsizeiptr size,
+                   const char *name)
 {
    struct gl_atomic_buffer_binding *binding;
 
@@ -2506,15 +2524,7 @@ set_atomic_buffer_binding(struct gl_context *ctx,
    FLUSH_VERTICES(ctx, 0);
    ctx->NewDriverState |= ctx->DriverFlags.NewAtomicBuffer;
 
-   _mesa_reference_buffer_object(ctx, &binding->BufferObject, bufObj);
-
-   if (bufObj == ctx->Shared->NullBufferObj) {
-      binding->Offset = -1;
-      binding->Size = -1;
-   } else {
-      binding->Offset = offset;
-      binding->Size = size;
-   }
+   set_atomic_buffer_binding(ctx, binding, bufObj, offset, size);
 }
 
 void GLAPIENTRY
@@ -2556,8 +2566,8 @@ _mesa_BindBufferRange(GLenum target, GLuint index,
       bind_buffer_range_uniform_buffer(ctx, index, bufObj, offset, size);
       return;
    case GL_ATOMIC_COUNTER_BUFFER:
-      set_atomic_buffer_binding(ctx, index, bufObj, offset, size,
-                                "glBindBufferRange");
+      bind_atomic_buffer(ctx, index, bufObj, offset, size,
+                         "glBindBufferRange");
       return;
    default:
       _mesa_error(ctx, GL_INVALID_ENUM, "glBindBufferRange(target)");
@@ -2620,8 +2630,8 @@ _mesa_BindBufferBase(GLenum target, GLuint index, GLuint buffer)
       bind_buffer_base_uniform_buffer(ctx, index, bufObj);
       return;
    case GL_ATOMIC_COUNTER_BUFFER:
-      set_atomic_buffer_binding(ctx, index, bufObj, 0, 0,
-                                "glBindBufferBase");
+      bind_atomic_buffer(ctx, index, bufObj, 0, 0,
+                         "glBindBufferBase");
       return;
    default:
       _mesa_error(ctx, GL_INVALID_ENUM, "glBindBufferBase(target)");
-- 
1.7.10.4



More information about the mesa-dev mailing list