diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2010-12-14 14:42:24 +1000 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2010-12-14 14:42:24 +1000 |
commit | 214ea264cdb386520a1308a29f204e441f349cb1 (patch) | |
tree | 29514befcba5a9f251c8e3a898641b12c0cc1405 | |
parent | 8bb8231236a6b877895663aeaa9cef731d67fe68 (diff) | |
download | xorg-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.c | 70 | ||||
-rw-r--r-- | src/nv50_accel.h | 10 |
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) |