[Mesa-dev] [PATCH 07/10] st/mesa: write vertices directly into the buffer for glClear fallback

Marek Olšák maraeo at gmail.com
Fri Apr 13 14:33:06 PDT 2012


---
 src/mesa/state_tracker/st_cb_clear.c |   40 +++++++++++++++++----------------
 src/mesa/state_tracker/st_context.h  |    1 -
 2 files changed, 21 insertions(+), 20 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_clear.c b/src/mesa/state_tracker/st_cb_clear.c
index f0c30b6..3cd8756 100644
--- a/src/mesa/state_tracker/st_cb_clear.c
+++ b/src/mesa/state_tracker/st_cb_clear.c
@@ -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 */
diff --git a/src/mesa/state_tracker/st_context.h b/src/mesa/state_tracker/st_context.h
index f1342a6..dbcc2b1 100644
--- a/src/mesa/state_tracker/st_context.h
+++ b/src/mesa/state_tracker/st_context.h
@@ -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;
 
-- 
1.7.5.4



More information about the mesa-dev mailing list