1 struct texture_stage_op
2 {
3     unsigned int carg1, carg2, carg0;
4     unsigned int aarg1, aarg2, aarg0;
5     unsigned int dst;
6 };
7 
debug_register(unsigned int reg)8 static const char *debug_register(unsigned int reg) {
9     switch(reg) {
10         case 0x8921: return "GL_REG_0_ATI";
11         case 0x8923: return "GL_REG_2_ATI";
12         case 0x0: return "GL_ZERO";
13         case 0x1: return "GL_ONE";
14         default: return "Unknown register\n";
15     }
16 }
17 
find_tmpreg(struct texture_stage_op op[8])18 static unsigned int find_tmpreg(struct texture_stage_op op[8]) {
19     int i;
20     int tex_used[8];
21 
22     for(i = 0; i < 8; i++) {
23         if(op[i].carg1 == 0x00000002 ) {
24             tex_used[i] = 1;
25         }
26     }
27 
28     for(i = 1; i < 6; i++) {
29         if(!tex_used[i]) {
30                 return 0x8921 + i;
31         }
32     }
33     return 0;
34 }
35 
36 extern f(const char*);
37 
g()38 void g() {
39     struct texture_stage_op op[8];
40     unsigned int tmparg = find_tmpreg(op);
41     unsigned int dstreg;
42 
43     if(tmparg == 0x0) return;
44     dstreg = tmparg;
45     f(debug_register(dstreg));
46     return;
47 }
48