[Mesa-dev] [PATCH 04/18] gallium/radeon: use viewport state to set vertex positions

Marek Olšák maraeo at gmail.com
Thu Aug 17 18:31:25 UTC 2017


From: Marek Olšák <marek.olsak at amd.com>

---
 src/gallium/drivers/radeon/r600_pipe_common.c | 33 +++++++++++++++------------
 1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c b/src/gallium/drivers/radeon/r600_pipe_common.c
index 4cc64c7..847527a 100644
--- a/src/gallium/drivers/radeon/r600_pipe_common.c
+++ b/src/gallium/drivers/radeon/r600_pipe_common.c
@@ -214,50 +214,53 @@ void r600_draw_rectangle(struct blitter_context *blitter,
 	struct pipe_viewport_state viewport;
 	struct pipe_resource *buf = NULL;
 	unsigned offset = 0;
 	float *vb;
 
 	/* Some operations (like color resolve on r6xx) don't work
 	 * with the conventional primitive types.
 	 * One that works is PT_RECTLIST, which we use here. */
 
 	/* setup viewport */
-	viewport.scale[0] = 1.0f;
-	viewport.scale[1] = 1.0f;
-	viewport.scale[2] = 1.0f;
-	viewport.translate[0] = 0.0f;
-	viewport.translate[1] = 0.0f;
-	viewport.translate[2] = 0.0f;
+	int width = x2 - x1;
+	int height = y2 - y1;
+
+	viewport.scale[0] = width / 2.0;
+	viewport.scale[1] = height / 2.0;
+	viewport.scale[2] = 0;
+	viewport.translate[0] = width / 2.0 + x1;
+	viewport.translate[1] = height / 2.0 + y1;
+	viewport.translate[2] = depth;
 	rctx->b.set_viewport_states(&rctx->b, 0, 1, &viewport);
 
 	/* Upload vertices. The hw rectangle has only 3 vertices,
 	 * The 4th one is derived from the first 3.
 	 * The vertex specification should match u_blitter's vertex element state. */
 	u_upload_alloc(rctx->b.stream_uploader, 0, sizeof(float) * 24,
 		       rctx->screen->info.tcc_cache_line_size,
                        &offset, &buf, (void**)&vb);
 	if (!buf)
 		return;
 
-	vb[0] = x1;
-	vb[1] = y1;
-	vb[2] = depth;
+	vb[0] = -1;
+	vb[1] = -1;
+	vb[2] = 0;
 	vb[3] = 1;
 
-	vb[8] = x1;
-	vb[9] = y2;
-	vb[10] = depth;
+	vb[8] = -1;
+	vb[9] = 1;
+	vb[10] = 0;
 	vb[11] = 1;
 
-	vb[16] = x2;
-	vb[17] = y1;
-	vb[18] = depth;
+	vb[16] = 1;
+	vb[17] = -1;
+	vb[18] = 0;
 	vb[19] = 1;
 
 	switch (type) {
 	case UTIL_BLITTER_ATTRIB_COLOR:
 		memcpy(vb+4, attrib->f, sizeof(float)*4);
 		memcpy(vb+12, attrib->f, sizeof(float)*4);
 		memcpy(vb+20, attrib->f, sizeof(float)*4);
 		break;
 	case UTIL_BLITTER_ATTRIB_TEXCOORD:
 		vb[4] = attrib->f[0]; /* x1 */
-- 
2.7.4



More information about the mesa-dev mailing list