summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <[email protected]>2008-05-21 10:49:26 +1000
committerDave Airlie <[email protected]>2008-05-21 10:49:26 +1000
commit9ec2b1c83f3390dac2e5e7d3aa21ff4920f29243 (patch)
treeb94890afc60db630a2ddf2d623de985d80fbdf44
parent2bda1a9502206ca2b7b35e39c82356f91de06914 (diff)
r500: finish main texture instruction decoding
-rw-r--r--src/mesa/drivers/dri/r300/r500_fragprog.c31
1 files changed, 28 insertions, 3 deletions
diff --git a/src/mesa/drivers/dri/r300/r500_fragprog.c b/src/mesa/drivers/dri/r300/r500_fragprog.c
index 5869dca9336..c83fa3befe2 100644
--- a/src/mesa/drivers/dri/r300/r500_fragprog.c
+++ b/src/mesa/drivers/dri/r300/r500_fragprog.c
@@ -1149,6 +1149,20 @@ static char *to_mask(int val)
return str;
}
+static char *to_texop(int val)
+{
+ switch(val) {
+ case 0: return "NOP";
+ case 1: return "LD";
+ case 2: return "TEXKILL";
+ case 3: return "PROJ";
+ case 4: return "LODBIAS";
+ case 5: return "LOD";
+ case 6: return "DXDY";
+ }
+ return NULL;
+}
+
static void dump_program(struct r500_fragment_program *fp)
{
int pc = 0;
@@ -1220,9 +1234,20 @@ static void dump_program(struct r500_fragment_program *fp)
case 2:
break;
case 3:
- fprintf(stderr,"1: TEX INST 0x%08x\n", fp->inst[n].inst1);
- fprintf(stderr,"2: TEX ADDR 0x%08x\n", fp->inst[n].inst2);
- fprintf(stderr,"2: TEX ADDR DXDY 0x%08x\n", fp->inst[n].inst3);
+ inst = fp->inst[n].inst1;
+ fprintf(stderr,"\t1:TEX_INST: 0x%08x: id: %d op:%s, %s, %s %s\n", inst, (inst >> 16) & 0xf,
+ to_texop((inst >> 22) & 0x7), (inst & (1<<25)) ? "ACQ" : "",
+ (inst & (1<<26)) ? "IGNUNC" : "", (inst & (1<<27)) ? "UNSCALED" : "SCALED");
+ inst = fp->inst[n].inst2;
+ fprintf(stderr,"\t2:TEX_ADDR: 0x%08x: src: %d%s %s/%s/%s/%s dst: %d%s %s/%s/%s/%s\n", inst,
+ inst & 127, inst & (1<<7) ? "(rel)" : "",
+ toswiz((inst >> 8) & 0x3), toswiz((inst >> 10) & 0x3),
+ toswiz((inst >> 12) & 0x3), toswiz((inst >> 14) & 0x3),
+ (inst >> 16) & 127, inst & (1<<23) ? "(rel)" : "",
+ toswiz((inst >> 24) & 0x3), toswiz((inst >> 26) & 0x3),
+ toswiz((inst >> 28) & 0x3), toswiz((inst >> 30) & 0x3));
+
+ fprintf(stderr,"\t3:TEX_DXDY: 0x%08x\n", fp->inst[n].inst3);
break;
}
fprintf(stderr,"\n");