Mesa (master): mesa: Add support for the GL_UNIFORM_BUFFER general binding point.

Eric Anholt anholt at kemper.freedesktop.org
Thu Jun 21 18:06:51 UTC 2012


Module: Mesa
Branch: master
Commit: c5c696e7fbce2e0b598ed5d4b1d73f086a664a57
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c5c696e7fbce2e0b598ed5d4b1d73f086a664a57

Author: Eric Anholt <eric at anholt.net>
Date:   Mon Jun 18 11:17:04 2012 -0700

mesa: Add support for the GL_UNIFORM_BUFFER general binding point.

Fixes piglit ARB_uniform_buffer_object/buffer-targets.

Reviewed-by: Brian Paul <brianp at vmware.com>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 src/mesa/main/bufferobj.c |    9 +++++++++
 src/mesa/main/get.c       |    6 ++++++
 src/mesa/main/mtypes.h    |    7 +++++++
 3 files changed, 22 insertions(+), 0 deletions(-)

diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
index 332af3d..b646baa 100644
--- a/src/mesa/main/bufferobj.c
+++ b/src/mesa/main/bufferobj.c
@@ -92,6 +92,11 @@ get_buffer_target(struct gl_context *ctx, GLenum target)
          return &ctx->Texture.BufferObject;
       }
       break;
+   case GL_UNIFORM_BUFFER:
+      if (ctx->Extensions.ARB_uniform_buffer_object) {
+         return &ctx->UniformBuffer;
+      }
+      break;
    default:
       return NULL;
    }
@@ -840,6 +845,10 @@ _mesa_DeleteBuffersARB(GLsizei n, const GLuint *ids)
             }
          }
 
+         if (ctx->UniformBuffer == bufObj) {
+            _mesa_BindBufferARB( GL_UNIFORM_BUFFER, 0 );
+         }
+
          /* unbind any pixel pack/unpack pointers bound to this buffer */
          if (ctx->Pack.BufferObj == bufObj) {
             _mesa_BindBufferARB( GL_PIXEL_PACK_BUFFER_EXT, 0 );
diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index 4ac3689..9e9ddcb 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -1351,6 +1351,8 @@ static const struct value_desc values[] = {
    { GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, CONTEXT_INT(Const.UniformBufferOffsetAlignment),
      extra_ARB_uniform_buffer_object },
 
+   { GL_UNIFORM_BUFFER_BINDING, LOC_CUSTOM, TYPE_INT, 0, extra_ARB_uniform_buffer_object },
+
 #endif /* FEATURE_GL */
 };
 
@@ -1801,6 +1803,10 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu
          v->value_int = samp ? samp->Name : 0;
       }
       break;
+   /* GL_ARB_uniform_buffer_object */
+   case GL_UNIFORM_BUFFER_BINDING:
+      v->value_int = ctx->UniformBuffer->Name;
+      break;
    }   
 }
 
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 53e5280..cf6d9c1 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -3430,6 +3430,13 @@ struct gl_context
 
    struct gl_buffer_object *CopyReadBuffer; /**< GL_ARB_copy_buffer */
    struct gl_buffer_object *CopyWriteBuffer; /**< GL_ARB_copy_buffer */
+
+   /**
+    * Current GL_ARB_uniform_buffer_object binding referenced by
+    * GL_UNIFORM_BUFFER target for glBufferData, glMapBuffer, etc.
+    */
+   struct gl_buffer_object *UniformBuffer;
+
    /*@}*/
 
    struct gl_meta_state *Meta;  /**< for "meta" operations */




More information about the mesa-commit mailing list