st/mesa: write vertices directly into the buffer for glClear fallback
authorMarek Olšák <maraeo@gmail.com>
Fri, 13 Apr 2012 18:37:41 +0000 (20:37 +0200)
committerMarek Olšák <maraeo@gmail.com>
Wed, 18 Apr 2012 14:19:39 +0000 (16:19 +0200)
src/mesa/state_tracker/st_cb_clear.c
src/mesa/state_tracker/st_context.h

index f0c30b65ba2b1fc34e38ef59352a4367c35b476c..3cd8756f2ee415e4b245f1836292cbc3f19f7a06 100644 (file)
@@ -139,35 +139,37 @@ draw_quad(struct st_context *st,
    struct pipe_context *pipe = st->pipe;
    struct pipe_resource *vbuf = NULL;
    GLuint i, offset;
+   float (*vertices)[2][4];  /**< vertex pos + color */
+
+   u_upload_alloc(st->uploader, 0, 4 * sizeof(vertices[0]), &offset, &vbuf,
+                 (void**)&vertices);
+   if (!vbuf) {
+      return;
+   }
 
    /* positions */
-   st->clear.vertices[0][0][0] = x0;
-   st->clear.vertices[0][0][1] = y0;
+   vertices[0][0][0] = x0;
+   vertices[0][0][1] = y0;
 
-   st->clear.vertices[1][0][0] = x1;
-   st->clear.vertices[1][0][1] = y0;
+   vertices[1][0][0] = x1;
+   vertices[1][0][1] = y0;
 
-   st->clear.vertices[2][0][0] = x1;
-   st->clear.vertices[2][0][1] = y1;
+   vertices[2][0][0] = x1;
+   vertices[2][0][1] = y1;
 
-   st->clear.vertices[3][0][0] = x0;
-   st->clear.vertices[3][0][1] = y1;
+   vertices[3][0][0] = x0;
+   vertices[3][0][1] = y1;
 
    /* same for all verts: */
    for (i = 0; i < 4; i++) {
-      st->clear.vertices[i][0][2] = z;
-      st->clear.vertices[i][0][3] = 1.0;
-      st->clear.vertices[i][1][0] = color->f[0];
-      st->clear.vertices[i][1][1] = color->f[1];
-      st->clear.vertices[i][1][2] = color->f[2];
-      st->clear.vertices[i][1][3] = color->f[3];
+      vertices[i][0][2] = z;
+      vertices[i][0][3] = 1.0;
+      vertices[i][1][0] = color->f[0];
+      vertices[i][1][1] = color->f[1];
+      vertices[i][1][2] = color->f[2];
+      vertices[i][1][3] = color->f[3];
    }
 
-   u_upload_data(st->uploader, 0, sizeof(st->clear.vertices),
-                st->clear.vertices, &offset, &vbuf);
-   if (!vbuf) {
-      return;
-   }
    u_upload_unmap(st->uploader);
 
    /* draw */
index f1342a64615ff9f89c974bd20e1a1cb30aaadb87..dbcc2b1a3eaa93e4cfe59bd6a2e1d2bdbe3cffbd 100644 (file)
@@ -170,7 +170,6 @@ struct st_context
       struct pipe_viewport_state viewport;
       void *vs;
       void *fs;
-      float vertices[4][2][4];  /**< vertex pos + color */
       boolean enable_ds_separate;
    } clear;