From: Marek Olšák Date: Fri, 13 Apr 2012 18:37:41 +0000 (+0200) Subject: st/mesa: write vertices directly into the buffer for glClear fallback X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a8a478999c366cd08be2910ea83465d9b69181e8;p=mesa.git st/mesa: write vertices directly into the buffer for glClear fallback --- diff --git a/src/mesa/state_tracker/st_cb_clear.c b/src/mesa/state_tracker/st_cb_clear.c index f0c30b65ba2..3cd8756f2ee 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 f1342a64615..dbcc2b1a3ea 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;