[PATCH 1/3] nv50: use correct scissor reg
Christoph Bumiller
e0425955 at student.tuwien.ac.at
Sun Jul 12 06:39:41 PDT 2009
---
src/gallium/drivers/nv50/nv50_screen.c | 4 ++++
src/gallium/drivers/nv50/nv50_state_validate.c | 21 +++++++++++++++------
2 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/src/gallium/drivers/nv50/nv50_screen.c b/src/gallium/drivers/nv50/nv50_screen.c
index b4d6530..fd41d88 100644
--- a/src/gallium/drivers/nv50/nv50_screen.c
+++ b/src/gallium/drivers/nv50/nv50_screen.c
@@ -416,6 +416,10 @@ nv50_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
so_method(so, screen->tesla, 0x1234, 1);
so_data (so, 1);
+ /* activate first scissor rectangle */
+ so_method(so, screen->tesla, 0x0e00, 1);
+ so_data (so, 1);
+
so_emit(chan, so);
so_ref (so, &screen->static_init);
so_ref (NULL, &so);
diff --git a/src/gallium/drivers/nv50/nv50_state_validate.c b/src/gallium/drivers/nv50/nv50_state_validate.c
index 1edf741..4981b1b 100644
--- a/src/gallium/drivers/nv50/nv50_state_validate.c
+++ b/src/gallium/drivers/nv50/nv50_state_validate.c
@@ -124,12 +124,18 @@ nv50_state_validate_fb(struct nv50_context *nv50)
so_method(so, tesla, NV50TCL_VIEWPORT_HORIZ, 2);
so_data (so, w << 16);
so_data (so, h << 16);
+ /* set window scissor rectangle to window extents */
so_method(so, tesla, 0x0e04, 2);
so_data (so, w << 16);
so_data (so, h << 16);
- so_method(so, tesla, 0xdf8, 2);
+ /* set window lower left corner */
+ so_method(so, tesla, 0x0df8, 2);
so_data (so, 0);
so_data (so, h);
+ /* set screen scissor rectangle */
+ so_method(so, tesla, 0x0ff4, 2);
+ so_data (so, w << 16);
+ so_data (so, h << 16);
so_ref(so, &nv50->state.fb);
so_ref(NULL, &so);
@@ -238,13 +244,16 @@ nv50_state_validate(struct nv50_context *nv50)
nv50->state.scissor_enabled = rast->scissor;
so = so_new(3, 0);
- so_method(so, tesla, 0x0ff4, 2);
+ so_method(so, tesla, 0x0e04, 2);
if (nv50->state.scissor_enabled) {
- so_data(so, ((s->maxx - s->minx) << 16) | s->minx);
- so_data(so, ((s->maxy - s->miny) << 16) | s->miny);
+ /* pipe always uses Y_0_TOP for scissor state */
+ unsigned scs_top = nv50->framebuffer.height - s->miny;
+ unsigned scs_btm = nv50->framebuffer.height - s->maxy;
+ so_data(so, (s->maxx << 16) | s->minx);
+ so_data(so, (scs_top << 16) | scs_btm);
} else {
- so_data(so, (8192 << 16));
- so_data(so, (8192 << 16));
+ so_data(so, (nv50->framebuffer.width << 16));
+ so_data(so, (nv50->framebuffer.height << 16));
}
so_ref(so, &nv50->state.scissor);
so_ref(NULL, &so);
--
1.6.3.3
--------------050205000506050205030809
Content-Type: text/plain;
name="0002-nv50-fix-viewport-transform.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="0002-nv50-fix-viewport-transform.patch"
More information about the Nouveau
mailing list