summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/nv50/nv50_state_validate.c
diff options
context:
space:
mode:
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>2009-10-31 11:25:48 +0100
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>2009-10-31 13:40:33 +0100
commit525f529d138168386224136dc45abb858677bac7 (patch)
treef6a9135390ff3d87090d1eba173a3b27b661b287 /src/gallium/drivers/nv50/nv50_state_validate.c
parent73b45b06690c95cf24cb6f9a81d61269ad51f9dd (diff)
nv50: make MRTs work
We have to indicate to the hw whether the FP exports multiple colour results. Method 0x121c is used to specify the number of RTs. Also deactivate zeta explicitly if there's no zsbuf.
Diffstat (limited to 'src/gallium/drivers/nv50/nv50_state_validate.c')
-rw-r--r--src/gallium/drivers/nv50/nv50_state_validate.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/gallium/drivers/nv50/nv50_state_validate.c b/src/gallium/drivers/nv50/nv50_state_validate.c
index 956a700615..a13d64b7fa 100644
--- a/src/gallium/drivers/nv50/nv50_state_validate.c
+++ b/src/gallium/drivers/nv50/nv50_state_validate.c
@@ -37,6 +37,14 @@ nv50_state_validate_fb(struct nv50_context *nv50)
struct pipe_framebuffer_state *fb = &nv50->framebuffer;
unsigned i, w, h, gw = 0;
+ /* Set nr of active RTs. Don't know what 0xfac6880 does, but
+ * at least 0x880 was required to draw to more than 1 RT.
+ * In some special cases, 0xfac6880 is not used, we probably
+ * don't hit any of these though.
+ */
+ so_method(so, tesla, 0x121c, 1);
+ so_data (so, 0x0fac6880 | fb->nr_cbufs);
+
for (i = 0; i < fb->nr_cbufs; i++) {
struct pipe_texture *pt = fb->cbufs[i]->texture;
struct nouveau_bo *bo = nv50_miptree(pt)->base.bo;
@@ -121,6 +129,9 @@ nv50_state_validate_fb(struct nv50_context *nv50)
so_data (so, fb->zsbuf->width);
so_data (so, fb->zsbuf->height);
so_data (so, 0x00010001);
+ } else {
+ so_method(so, tesla, 0x1538, 1);
+ so_data (so, 0);
}
so_method(so, tesla, NV50TCL_VIEWPORT_HORIZ, 2);