mesa: Set the gl_array_object::ARBsemantics flag at the right time
authorIan Romanick <ian.d.romanick@intel.com>
Tue, 31 Jan 2012 16:00:48 +0000 (09:00 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Thu, 2 Feb 2012 17:07:14 +0000 (10:07 -0700)
With 0963990 the flag was only set when Bind created the object.  In
all cases where ::ARBsemantics could be true, this path never
happened.  Instead, add a _Used flag to track whether a VAO has ever
been bound.  On the first Bind, set the _Used flag, and set the
ARBsemantics flag to the correct value.

NOTE: This is a candidate for release branches.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=45423

src/mesa/main/arrayobj.c
src/mesa/main/mtypes.h

index d9ae187bbbd2dfbe76a14db1e64c71d89f34f0f0..c7584d903db75d26d2bcfa15f685cb6eb149687a 100644 (file)
@@ -373,6 +373,10 @@ bind_vertex_array(struct gl_context *ctx, GLuint id, GLboolean genRequired)
             return;
          }
 
+         save_array_object(ctx, newObj);
+      }
+
+      if (!newObj->_Used) {
          /* The "Interactions with APPLE_vertex_array_object" section of the
           * GL_ARB_vertex_array_object spec says:
           *
@@ -380,7 +384,7 @@ bind_vertex_array(struct gl_context *ctx, GLuint id, GLboolean genRequired)
           *     BindVertexArrayAPPLE, determines the semantic of the object."
           */
          newObj->ARBsemantics = genRequired;
-         save_array_object(ctx, newObj);
+         newObj->_Used = GL_TRUE;
       }
    }
 
index 99dcb389b62441ed677db0b2f1334971fc5c09df..d3001d35c69f0ad8f8378dacbd3bfdd2bcaf88ae 100644 (file)
@@ -1631,6 +1631,11 @@ struct gl_array_object
     */
    GLboolean ARBsemantics;
 
+   /**
+    * Has this array object been bound?
+    */
+   GLboolean _Used;
+
    /** Vertex attribute arrays */
    struct gl_client_array VertexAttrib[VERT_ATTRIB_MAX];