| struct texture_stage_op |
| { |
| unsigned int carg1, carg2, carg0; |
| unsigned int aarg1, aarg2, aarg0; |
| unsigned int dst; |
| }; |
| |
| static const char *debug_register(unsigned int reg) { |
| switch(reg) { |
| case 0x8921: return "GL_REG_0_ATI"; |
| case 0x8923: return "GL_REG_2_ATI"; |
| case 0x0: return "GL_ZERO"; |
| case 0x1: return "GL_ONE"; |
| default: return "Unknown register\n"; |
| } |
| } |
| |
| static unsigned int find_tmpreg(struct texture_stage_op op[8]) { |
| int i; |
| int tex_used[8]; |
| |
| for(i = 0; i < 8; i++) { |
| if(op[i].carg1 == 0x00000002 ) { |
| tex_used[i] = 1; |
| } |
| } |
| |
| for(i = 1; i < 6; i++) { |
| if(!tex_used[i]) { |
| return 0x8921 + i; |
| } |
| } |
| return 0; |
| } |
| |
| extern f(const char*); |
| |
| void g() { |
| struct texture_stage_op op[8]; |
| unsigned int tmparg = find_tmpreg(op); |
| unsigned int dstreg; |
| |
| if(tmparg == 0x0) return; |
| dstreg = tmparg; |
| f(debug_register(dstreg)); |
| return; |
| } |