-/**
- * Draw a screen-aligned quadrilateral.
- * Coords are clip coords with y=0=bottom.
- */
-static void
-draw_quad(struct st_context *st,
- float x0, float y0, float x1, float y1, GLfloat z,
- unsigned num_instances,
- const union pipe_color_union *color)
-{
- struct cso_context *cso = st->cso_context;
- struct pipe_vertex_buffer vb = {0};
- GLuint i;
- float (*vertices)[2][4]; /**< vertex pos + color */
-
- vb.stride = 8 * sizeof(float);
-
- if (u_upload_alloc(st->uploader, 0, 4 * sizeof(vertices[0]),
- &vb.buffer_offset, &vb.buffer,
- (void **) &vertices) != PIPE_OK) {
- return;
- }
-
- /* Convert Z from [0,1] to [-1,1] range */
- z = z * 2.0f - 1.0f;
-
- /* positions */
- vertices[0][0][0] = x0;
- vertices[0][0][1] = y0;
-
- vertices[1][0][0] = x1;
- vertices[1][0][1] = y0;
-
- vertices[2][0][0] = x1;
- vertices[2][0][1] = y1;
-
- vertices[3][0][0] = x0;
- vertices[3][0][1] = y1;
-
- /* same for all verts: */
- for (i = 0; i < 4; i++) {
- 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_unmap(st->uploader);
-
- /* draw */
- cso_set_vertex_buffers(cso, cso_get_aux_vertex_buffer_slot(cso), 1, &vb);
- cso_draw_arrays_instanced(cso, PIPE_PRIM_TRIANGLE_FAN, 0, 4,
- 0, num_instances);
- pipe_resource_reference(&vb.buffer, NULL);
-}
-
-
-