OSDN Git Service

meta: Track VBO using gl_buffer_object instead of GL API object handle in _mesa_meta_...
authorIan Romanick <ian.d.romanick@intel.com>
Thu, 5 Nov 2015 22:31:23 +0000 (14:31 -0800)
committerIan Romanick <ian.d.romanick@intel.com>
Tue, 24 Nov 2015 19:50:30 +0000 (11:50 -0800)
Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
(cherry picked from commit b8a7369fb7e5773892d01fcb1140fe6569ee27eb)

src/mesa/drivers/common/meta.c
src/mesa/drivers/common/meta.h

index aa5b660..30d1b0b 100644 (file)
@@ -3297,20 +3297,32 @@ _mesa_meta_DrawTex(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z,
    if (drawtex->VAO == 0) {
       /* one-time setup */
       GLint active_texture;
+      GLuint VBO;
 
       /* create vertex array object */
       _mesa_GenVertexArrays(1, &drawtex->VAO);
       _mesa_BindVertexArray(drawtex->VAO);
 
       /* create vertex array buffer */
-      _mesa_CreateBuffers(1, &drawtex->VBO);
-      _mesa_NamedBufferData(drawtex->VBO, sizeof(verts),
-                            NULL, GL_DYNAMIC_DRAW_ARB);
+      _mesa_CreateBuffers(1, &VBO);
+      drawtex->buf_obj = _mesa_lookup_bufferobj(ctx, VBO);
+
+      /* _mesa_lookup_bufferobj only returns NULL if name is 0.  If the object
+       * does not yet exist (i.e., hasn't been bound) it will return a dummy
+       * object that you can't do anything with.
+       */
+      assert(drawtex->buf_obj != NULL && (drawtex->buf_obj)->Name == VBO);
+      assert(drawtex->buf_obj == ctx->Array.ArrayBufferObj);
+
+      _mesa_buffer_data(ctx, drawtex->buf_obj, GL_NONE, sizeof(verts), verts,
+                        GL_DYNAMIC_DRAW, __func__);
+
+      assert(drawtex->buf_obj->Size == sizeof(verts));
 
       /* client active texture is not part of the array object */
       active_texture = ctx->Array.ActiveTexture;
 
-      _mesa_BindBuffer(GL_ARRAY_BUFFER_ARB, drawtex->VBO);
+      _mesa_BindBuffer(GL_ARRAY_BUFFER_ARB, VBO);
 
       /* setup vertex arrays */
       _mesa_VertexPointer(3, GL_FLOAT, sizeof(struct vertex), OFFSET(x));
@@ -3390,7 +3402,8 @@ _mesa_meta_DrawTex(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z,
          verts[3].st[i][1] = t1;
       }
 
-      _mesa_NamedBufferSubData(drawtex->VBO, 0, sizeof(verts), verts);
+      _mesa_buffer_sub_data(ctx, drawtex->buf_obj, 0, sizeof(verts), verts,
+                            __func__);
    }
 
    _mesa_DrawArrays(GL_TRIANGLE_FAN, 0, 4);
index 16247d7..cbbfba1 100644 (file)
@@ -405,7 +405,7 @@ struct decompress_state
 struct drawtex_state
 {
    GLuint VAO;
-   GLuint VBO;
+   struct gl_buffer_object *buf_obj;
 };
 
 #define MAX_META_OPS_DEPTH      8