[Mesa-dev] [PATCH] added functions for binding atomic buffers to extension GL_ARB_shader_atomic_counters for radeonsi and r600 backend

Aditya Atluri adityaavinash1 at gmail.com
Wed Jul 23 11:27:02 PDT 2014


From: Frost <frost at ubuntu.(none)>

---
 src/mesa/main/bufferobj.c |   30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
index 7b1bba0..00f2604 100644
--- a/src/mesa/main/bufferobj.c
+++ b/src/mesa/main/bufferobj.c
@@ -832,6 +832,9 @@ _mesa_init_buffer_objects( struct gl_context *ctx )
    _mesa_reference_buffer_object(ctx, &ctx->UniformBuffer,
 				 ctx->Shared->NullBufferObj);
 
+   _mesa_reference_buffer_object(ctx, &ctx->AtomicBuffer,
+                 ctx->Shared->NullBufferObj);
+
    _mesa_reference_buffer_object(ctx, &ctx->DrawIndirectBuffer,
 				 ctx->Shared->NullBufferObj);
 
@@ -842,6 +845,14 @@ _mesa_init_buffer_objects( struct gl_context *ctx )
       ctx->UniformBufferBindings[i].Offset = -1;
       ctx->UniformBufferBindings[i].Size = -1;
    }
+
+   for (i = 0; i < MAX_COMBINED_ATOMIC_BUFFERS; i++) {
+      _mesa_reference_buffer_object(ctx,
+                                    &ctx->AtomicBufferBindings[i].BufferObject,
+                                    ctx->Shared->NullBufferObj);
+      ctx->AtomicBufferBindings[i].Offset = -1;
+      ctx->AtomicBufferBindings[i].Size = -1;
+   }
 }
 
 
@@ -857,6 +868,8 @@ _mesa_free_buffer_objects( struct gl_context *ctx )
 
    _mesa_reference_buffer_object(ctx, &ctx->UniformBuffer, NULL);
 
+   _mesa_reference_buffer_object(ctx, &ctx->AtomicBuffer, NULL);
+
    _mesa_reference_buffer_object(ctx, &ctx->DrawIndirectBuffer, NULL);
 
    for (i = 0; i < MAX_COMBINED_UNIFORM_BUFFERS; i++) {
@@ -864,6 +877,12 @@ _mesa_free_buffer_objects( struct gl_context *ctx )
 				    &ctx->UniformBufferBindings[i].BufferObject,
 				    NULL);
    }
+
+   for (i = 0; i < MAX_COMBINED_ATOMIC_BUFFERS; i++) {
+      _mesa_reference_buffer_object(ctx,
+                                    &ctx->AtomicBufferBindings[i].BufferObject,
+                                    NULL);
+   }
 }
 
 bool
@@ -1200,6 +1219,17 @@ _mesa_DeleteBuffers(GLsizei n, const GLuint *ids)
             _mesa_BindBuffer( GL_UNIFORM_BUFFER, 0 );
          }
 
+         /* unbind Atomic Buffers binding points */
+         for (j = 0; j < ctx->Const.MaxAtomicBufferBindings; j++) {
+             if (ctx->AtomicBufferBindings[j].BufferObject == bufObj) {
+                 _mesa_BindBufferBase( GL_ATOMIC_COUNTER_BUFFER, j, 0 );
+             }
+         }
+
+         if (ctx->AtomicBuffer == bufObj) {
+            _mesa_BindBuffer(GL_ATOMIC_COUNTER_BUFFER, 0);
+         }
+
          /* unbind any pixel pack/unpack pointers bound to this buffer */
          if (ctx->Pack.BufferObj == bufObj) {
             _mesa_BindBuffer( GL_PIXEL_PACK_BUFFER_EXT, 0 );
-- 
1.7.9.5



More information about the mesa-dev mailing list