summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2010-12-14 14:42:24 +1000
committerBen Skeggs <bskeggs@redhat.com>2010-12-14 14:42:24 +1000
commit214ea264cdb386520a1308a29f204e441f349cb1 (patch)
tree29514befcba5a9f251c8e3a898641b12c0cc1405
parent8bb8231236a6b877895663aeaa9cef731d67fe68 (diff)
downloadxorg-driver-xf86-video-nouveau-214ea264cdb386520a1308a29f204e441f349cb1.tar.gz
nv50/xv: kick csc parameters out into a constant buffer
These were previously inlined into the shader, which is simple, but makes implementing brightness/contrast adjustments impossible. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
-rw-r--r--src/nv50_accel.c70
-rw-r--r--src/nv50_accel.h10
2 files changed, 50 insertions, 30 deletions
diff --git a/src/nv50_accel.c b/src/nv50_accel.c
index 95d1886..3972446 100644
--- a/src/nv50_accel.c
+++ b/src/nv50_accel.c
@@ -352,42 +352,35 @@ NVAccelInitNV50TCL(ScrnInfoPtr pScrn)
OUT_RING (chan, (0 << NV50TCL_CB_DEF_SET_BUFFER_SHIFT) | 0x4000);
BEGIN_RING(chan, tesla, NV50TCL_CB_ADDR, 1);
OUT_RING (chan, 0);
- BEGIN_RING_NI(chan, tesla, NV50TCL_CB_DATA(0), 34);
+ BEGIN_RING_NI(chan, tesla, NV50TCL_CB_DATA(0), 28);
OUT_RING (chan, 0x80000008);
OUT_RING (chan, 0x90000408);
OUT_RING (chan, 0x82010400);
OUT_RING (chan, 0x82020404);
OUT_RING (chan, 0xf0400001);
OUT_RING (chan, 0x00008784);
- OUT_RING (chan, 0xc0080001);
- OUT_RING (chan, 0x03f9507f);
- OUT_RING (chan, 0xb013000d);
- OUT_RING (chan, 0x0bf5ee3b);
- OUT_RING (chan, 0xb02f0011);
- OUT_RING (chan, 0x03f078ff);
- OUT_RING (chan, 0xb0220015);
- OUT_RING (chan, 0x0bf8a677);
+ OUT_RING (chan, 0xc0800014);
+ OUT_RING (chan, 0xb0810a0c);
+ OUT_RING (chan, 0xb0820a10);
+ OUT_RING (chan, 0xb0830a14);
OUT_RING (chan, 0x82030400);
OUT_RING (chan, 0x82040404);
OUT_RING (chan, 0xf0400201);
OUT_RING (chan, 0x0000c784);
- OUT_RING (chan, 0xc0160009);
- OUT_RING (chan, 0x0bec890f);
- OUT_RING (chan, 0xb0000411);
- OUT_RING (chan, 0x00010780);
- OUT_RING (chan, 0xc0070009);
- OUT_RING (chan, 0x0400116b);
- OUT_RING (chan, 0xc02d0201);
- OUT_RING (chan, 0x03fcc433);
- OUT_RING (chan, 0xc0370205);
- OUT_RING (chan, 0x0bf501a3);
- OUT_RING (chan, 0xb0000001);
- OUT_RING (chan, 0x0000c780);
- OUT_RING (chan, 0xb0000205);
- OUT_RING (chan, 0x00010780);
- OUT_RING (chan, 0xb0000409);
- OUT_RING (chan, 0x00014781);
-
+ OUT_RING (chan, 0xc0840008);
+ OUT_RING (chan, 0xb002060c);
+ OUT_RING (chan, 0xc0850008);
+ OUT_RING (chan, 0xb0020810);
+ OUT_RING (chan, 0xc0860008);
+ OUT_RING (chan, 0xb0020a14);
+ OUT_RING (chan, 0xc0870208);
+ OUT_RING (chan, 0xb0020600);
+ OUT_RING (chan, 0xc0890208);
+ OUT_RING (chan, 0xb0020a08);
+ OUT_RING (chan, 0xc0880205);
+ OUT_RING (chan, 0x00000780);
+ OUT_RING (chan, 0xb0000805);
+ OUT_RING (chan, 0x00004781);
/* HPOS.xy = ($o0, $o1), HPOS.zw = (0.0, 1.0), then map $o2 - $o5 */
BEGIN_RING(chan, tesla, NV50TCL_VP_RESULT_MAP(0), 2);
OUT_RING (chan, 0x41400100);
@@ -415,6 +408,31 @@ NVAccelInitNV50TCL(ScrnInfoPtr pScrn)
OUT_RING (chan, 8192 << NV50TCL_SCREEN_SCISSOR_HORIZ_W_SHIFT);
OUT_RING (chan, 8192 << NV50TCL_SCREEN_SCISSOR_VERT_H_SHIFT);
+ BEGIN_RING(chan, tesla, NV50TCL_CB_DEF_ADDRESS_HIGH, 3);
+ if (OUT_RELOCh(chan, pNv->tesla_scratch, PFP_DATA,
+ NOUVEAU_BO_VRAM | NOUVEAU_BO_WR) ||
+ OUT_RELOCl(chan, pNv->tesla_scratch, PFP_DATA,
+ NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) {
+ MARK_UNDO(chan);
+ return FALSE;
+ }
+ OUT_RING (chan, (CB_PFP << NV50TCL_CB_DEF_SET_BUFFER_SHIFT) | 0x4000);
+ BEGIN_RING(chan, tesla, NV50TCL_CB_ADDR, 1);
+ OUT_RING (chan, CB_PFP);
+ BEGIN_RING_NI(chan, tesla, NV50TCL_CB_DATA(0), 10);
+ OUT_RINGf (chan, 1.164300);
+ OUT_RINGf (chan, -0.870660);
+ OUT_RINGf (chan, 0.529540);
+ OUT_RINGf (chan, -1.081280);
+ OUT_RINGf (chan, 0.000000);
+ OUT_RINGf (chan, -0.391730);
+ OUT_RINGf (chan, 2.017000);
+ OUT_RINGf (chan, 1.595800);
+ OUT_RINGf (chan, -0.812900);
+ OUT_RINGf (chan, 0.000000);
+ BEGIN_RING(chan, tesla, NV50TCL_SET_PROGRAM_CB, 1);
+ OUT_RING (chan, 0x00000031 | (CB_PFP << 12));
+
return TRUE;
}
diff --git a/src/nv50_accel.h b/src/nv50_accel.h
index f5ccd92..9cdbbab 100644
--- a/src/nv50_accel.h
+++ b/src/nv50_accel.h
@@ -2,10 +2,11 @@
#define __NV50_ACCEL_H__
/* "Tesla scratch buffer" offsets */
-#define PVP_OFFSET 0x00000000 /* Vertex program */
-#define PFP_OFFSET 0x00001000 /* Fragment program */
-#define TIC_OFFSET 0x00002000 /* Texture Image Control */
-#define TSC_OFFSET 0x00003000 /* Texture Sampler Control */
+#define PVP_OFFSET 0x00000000 /* Vertex program */
+#define PFP_OFFSET 0x00001000 /* Fragment program */
+#define TIC_OFFSET 0x00002000 /* Texture Image Control */
+#define TSC_OFFSET 0x00003000 /* Texture Sampler Control */
+#define PFP_DATA 0x00004000 /* FP constbuf */
/* Fragment programs */
#define PFP_S 0x0000 /* (src) */
@@ -19,6 +20,7 @@
/* Constant buffer assignments */
#define CB_TSC 0
#define CB_TIC 1
+#define CB_PFP 2
static __inline__ void
VTX1s(NVPtr pNv, float sx, float sy, unsigned dx, unsigned dy)