r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, COLOR DCL OUT[0], COLOR 0: MOV OUT[0], IN[0] 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=2************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, COLOR DCL IN[1], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0], LOCAL 0: TXP TEMP[0], IN[1].xyyw, SAMP[0], RECT 1: MUL TEMP[0].xyz, TEMP[0], IN[0] 2: MOV TEMP[0].xyz, TEMP[0].xyzx 3: MOV TEMP[0].w, IN[0].wwww 4: MOV OUT[0], TEMP[0] 5: END Fragment Program: before compilation # Radeon Compiler Program 0: TXP temp[0], input[1].xyyw, RECT[0]; 1: MUL temp[0].xyz, temp[0], input[0]; 2: MOV temp[0].xyz, temp[0].xyzx; 3: MOV temp[0].w, input[0].wwww; 4: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TXP temp[0], input[1].xyyw, RECT[0]; 1: MUL temp[0].xyz, temp[0], input[0]; 2: MOV temp[0].xyz, temp[0].xyzx; 3: MOV temp[0].w, input[0].wwww; 4: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TXP temp[0], input[1].xyyw, RECT[0]; 1: MUL temp[0].xyz, temp[0], input[0]; 2: MOV temp[0].xyz, temp[0].xyzx; 3: MOV temp[0].w, input[0].wwww; 4: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TXP temp[0], input[1].xyyw, RECT[0]; 1: MUL temp[0].xyz, temp[0], input[0]; 2: MOV temp[0].xyz, temp[0].xyzx; 3: MOV temp[0].w, input[0].wwww; 4: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TXP temp[0], input[1].xyyw, RECT[0]; 1: MUL temp[0].xyz, temp[0], input[0]; 2: MOV temp[0].xyz, temp[0].xyzx; 3: MOV temp[0].w, input[0].wwww; 4: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MUL temp[1], input[1].xyyw, const[0]; 1: TXP temp[0], temp[1], 2D[0]; 2: MUL temp[0].xyz, temp[0], input[0]; 3: MOV temp[0].xyz, temp[0].xyzx; 4: MOV temp[0].w, input[0].wwww; 5: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[1], input[1].xyyw, const[0]; 1: TXP temp[0], temp[1], 2D[0]; 2: MUL temp[0].xyz, temp[0], input[0]; 3: MOV temp[0].xyz, temp[0].xyzx; 4: MOV temp[0].w, input[0].wwww; 5: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[1].xyw, input[1].xy_w, const[0].xy_w; 1: TXP temp[0].xyz, temp[1].xy_w, 2D[0]; 2: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 3: MOV temp[0].xyz, temp[0].xyz_; 4: MOV temp[0].w, input[0].___w; 5: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MUL temp[1].xyw, input[1].xy_w, const[0].xy_w; 1: TXP temp[0].xyz, temp[1].xy_w, 2D[0]; 2: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 3: MOV temp[0].xyz, temp[0].xyz_; 4: MOV temp[0].w, input[0].___w; 5: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MUL temp[2].xyw, input[1].xy_w, const[0].xy_w; 1: TXP temp[3].xyz, temp[2].xy_w, 2D[0]; 2: MUL temp[4].xyz, temp[3].xyz_, input[0].xyz_; 3: MOV temp[5].xyz, temp[4].xyz_; 4: MOV temp[5].w, input[0].___w; 5: MOV output[0], temp[5]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[2].xyw, input[1].xy_w, const[0].xy_w; 1: TXP temp[3].xyz, temp[2].xy_w, 2D[0]; 2: MUL temp[4].xyz, temp[3].xyz_, input[0].xyz_; 3: MOV temp[5].xyz, temp[4].xyz_; 4: MOV temp[5].w, input[0].___w; 5: MOV output[0], temp[5]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[2].xyw, input[1].xy_w, const[0].xy_w; 1: TXP temp[3].xyz, temp[2].xy_w, 2D[0]; 2: MUL temp[4].xyz, temp[3].xyz_, input[0].xyz_; 3: MOV temp[5].xyz, temp[4].xyz_; 4: MOV temp[5].w, input[0].___w; 5: MOV output[0], temp[5]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[2].xyw, input[1].xy_w, const[0].xy_w; 1: TXP temp[3].xyz, temp[2].xy_w, 2D[0]; 2: MUL temp[4].xyz, temp[3].xyz_, input[0].xyz_; 3: MOV temp[5].xyz, temp[4].xyz_; 4: MOV temp[5].w, input[0].___w; 5: MOV output[0], temp[5]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[1], src0.w = input[1], src1.xyz = const[0], src1.w = const[0] MAD temp[2].xy, src0.xy_, src1.xy_, src0.000 MAD temp[2].w, src0.w, src1.w, src0.0 1: TXP temp[3].xyz, temp[2].xy_w, 2D[0]; 2: src0.xyz = temp[3], src1.xyz = input[0] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 3: src0.xyz = temp[4] MAD temp[5].xyz, src0.xyz, src0.111, src0.000 4: src0.w = input[0] MAD temp[5].w, src0.w, src0.1, src0.0 5: src0.xyz = temp[5], src0.w = temp[5] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[1], src0.w = input[1], src1.xyz = const[0], src1.w = const[0] MAD temp[2].xy, src0.xy_, src1.xy_, src0.000 MAD temp[2].w, src0.w, src1.w, src0.0 1: BEGIN_TEX; 2: TXP temp[3].xyz, temp[2].xy_w, 2D[0] SEM_WAIT SEM_ACQUIRE; 3: src0.xyz = temp[3], src0.w = input[0], src1.xyz = input[0] SEM_WAIT MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[5].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[4] MAD temp[5].xyz, src0.xyz, src0.111, src0.000 5: src0.xyz = temp[5], src0.w = temp[5] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[1], src0.w = input[1], src1.xyz = const[0], src1.w = const[0] MAD temp[2].xy, src0.xy_, src1.xy_, src0.000 MAD temp[2].w, src0.w, src1.w, src0.0 1: BEGIN_TEX; 2: TXP temp[3].xyz, temp[2].xy_w, 2D[0] SEM_WAIT SEM_ACQUIRE; 3: src0.xyz = temp[3], src0.w = input[0], src1.xyz = input[0] SEM_WAIT MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[5].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[4] MAD temp[5].xyz, src0.xyz, src0.111, src0.000 5: src0.xyz = temp[5], src0.w = temp[5] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[1], src0.w = input[1], src1.xyz = const[0], src1.w = const[0] MAD temp[1].xy, src0.xy_, src1.xy_, src0.00_ MAD temp[1].w, src0.w, src1.w, src0.0 1: BEGIN_TEX; 2: TXP temp[1].xyz, temp[1].xy_w, 2D[0] SEM_WAIT SEM_ACQUIRE; 3: src0.xyz = temp[1], src0.w = input[0], src1.xyz = input[0] SEM_WAIT MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.111, src0.000 5: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=3************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00000000) 0: xyz: t1 c0 t0 bias-> t1.xy (01840801) w: t1 c0 t0 bias-> t1.w (00840801) xyz: t1.xyz c0.xyz 0.0 op: 00050200 w: t1.w c0.w 0.0 op: 00040509 NODE 1: alu_offset: 1, tex_offset: 0, alu_end: 2, tex_end: 0 (code_addr: 00400081) TEX: TXP t1, t1, texture[0] (00018041) 1: xyz: t1 t0 t0 bias-> t0.xyz (03800001) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t1.xyz t0.xyz 0.0 op: 00050200 w: t0.w 1.0 0.0 op: 00040889 2: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 3: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, COLOR DCL IN[1], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0], LOCAL 0: TXP TEMP[0], IN[1].xyyw, SAMP[0], 2D 1: MUL TEMP[0], TEMP[0], IN[0] 2: MOV OUT[0], TEMP[0] 3: END Fragment Program: before compilation # Radeon Compiler Program 0: TXP temp[0], input[1].xyyw, 2D[0]; 1: MUL temp[0], temp[0], input[0]; 2: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TXP temp[0], input[1].xyyw, 2D[0]; 1: MUL temp[0], temp[0], input[0]; 2: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TXP temp[0], input[1].xyyw, 2D[0]; 1: MUL temp[0], temp[0], input[0]; 2: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TXP temp[0], input[1].xyyw, 2D[0]; 1: MUL temp[0], temp[0], input[0]; 2: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TXP temp[0], input[1].xyyw, 2D[0]; 1: MUL temp[0], temp[0], input[0]; 2: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TXP temp[0], input[1].xyyw, 2D[0]; 1: MUL temp[0], temp[0], input[0]; 2: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TXP temp[0], input[1].xyyw, 2D[0]; 1: MUL temp[0], temp[0], input[0]; 2: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TXP temp[0], input[1].xy_w, 2D[0]; 1: MUL temp[0], temp[0], input[0]; 2: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TXP temp[0], input[1].xy_w, 2D[0]; 1: MUL temp[0], temp[0], input[0]; 2: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TXP temp[1], input[1].xy_w, 2D[0]; 1: MUL temp[2], temp[1], input[0]; 2: MOV output[0], temp[2]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TXP temp[1], input[1].xy_w, 2D[0]; 1: MUL temp[2], temp[1], input[0]; 2: MOV output[0], temp[2]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TXP temp[1], input[1].xy_w, 2D[0]; 1: MUL temp[2], temp[1], input[0]; 2: MOV output[0], temp[2]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TXP temp[1], input[1].xy_w, 2D[0]; 1: MUL temp[2], temp[1], input[0]; 2: MOV output[0], temp[2]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TXP temp[1], input[1].xy_w, 2D[0]; 1: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[2].w, src0.w, src1.w, src0.0 2: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[1], input[1].xy_w, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] SEM_WAIT MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[2].w, src0.w, src1.w, src0.0 3: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[1], input[1].xy_w, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] SEM_WAIT MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[2].w, src0.w, src1.w, src0.0 3: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[1], input[1].xy_w, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] SEM_WAIT MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 3: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=4************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 1, tex_end: 0 (code_addr: 00400040) TEX: TXP t1, t1, texture[0] (00018041) 0: xyz: t1 t0 t0 bias-> t0.xyz (03800001) w: t1 t0 t0 bias-> t0.w (00800001) xyz: t1.xyz t0.xyz 0.0 op: 00050200 w: t1.w t0.w 0.0 op: 00040509 1: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment programFRAG DCL IN[0], COLOR, PERSPECTIVE DCL OUT[0], COLOR 0: MOV OUT[0], IN[0] 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=5************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL OUT[0], COLOR IMM[0] FLT32 { 1.0000, 0.0000, 0.0000, 0.0000} 0: MOV OUT[0], IMM[0].xxxx 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], none.1111; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], none.1111; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], none.1111; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: MAD color[0].xyz, src0.111, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: MAD color[0].xyz, src0.111, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: MAD color[0].xyz, src0.111, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: MAD color[0].xyz, src0.111, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 pc=6************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: 1.0 1.0 0.0 op: 00050a95 w: 1.0 1.0 0.0 op: 00040891 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0], LOCAL 0: TEX TEMP[0], IN[0].xyyy, SAMP[0], 2D 1: MOV OUT[0], TEMP[0] 2: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[1], src0.w = temp[1] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[1], src0.w = temp[1] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[0], src0.w = temp[0] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=7************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL OUT[0], COLOR IMM[0] FLT32 { 1.0000, 0.0000, 0.0000, 0.0000} 0: MOV OUT[0], IMM[0].xxxx 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], none.1111; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], none.1111; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], none.1111; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: MAD color[0].xyz, src0.111, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: MAD color[0].xyz, src0.111, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: MAD color[0].xyz, src0.111, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: MAD color[0].xyz, src0.111, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 pc=8************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: 1.0 1.0 0.0 op: 00050a95 w: 1.0 1.0 0.0 op: 00040891 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, COLOR DCL OUT[0], COLOR 0: MOV OUT[0], IN[0] 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=9************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], PERSPECTIVE DCL IN[1], GENERIC[12], PERSPECTIVE DCL IN[2], GENERIC[13], PERSPECTIVE DCL IN[3], GENERIC[14], PERSPECTIVE DCL IN[4], GENERIC[15], PERSPECTIVE DCL OUT[0], COLOR DCL OUT[1], COLOR[1] DCL OUT[2], COLOR[2] DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL IMM[0] FLT32 { -0.5000, 0.5000, 255.0000, 0.0039} 0: TEX TEMP[0], IN[0].xyyy, SAMP[2], 2D 1: TEX TEMP[1].xyz, IN[0].xyyy, SAMP[1], 2D 2: ADD TEMP[2].xyz, TEMP[1].xyzz, IMM[0].xxxx 3: MUL TEMP[3].xyz, TEMP[2].xxxx, IN[3].xyzz 4: MAD TEMP[3].xyz, TEMP[2].yyyy, IN[2].xyzz, TEMP[3].xyzz 5: MAD TEMP[3].xyz, TEMP[2].zzzz, IN[4].xyzz, TEMP[3].xyzz 6: DP3 TEMP[4].x, TEMP[3].xyzz, TEMP[3].xyzz 7: RSQ TEMP[4].x, TEMP[4].xxxx 8: MUL TEMP[3].xyz, TEMP[3].xyzz, TEMP[4].xxxx 9: MAD TEMP[1].xyz, TEMP[3].xyzz, IMM[0].yyyy, IMM[0].yyyy 10: MUL TEMP[3].x, IN[1].xxxx, IMM[0].zzzz 11: FLR TEMP[4].x, TEMP[3].xxxx 12: MOV TEMP[5].x, TEMP[4].xxxx 13: ADD TEMP[3].x, TEMP[3].xxxx, -TEMP[4].xxxx 14: MUL TEMP[3].x, TEMP[3].xxxx, IMM[0].zzzz 15: FLR TEMP[4].x, TEMP[3].xxxx 16: MOV TEMP[5].y, TEMP[4].xxxx 17: ADD TEMP[3].x, TEMP[3].xxxx, -TEMP[4].xxxx 18: MOV TEMP[5].z, TEMP[3].xxxx 19: MUL TEMP[5].xy, TEMP[5].xyyy, IMM[0].wwww 20: MOV TEMP[2].xyz, TEMP[5].xyzx 21: TEX TEMP[3].xy, IN[0].xyyy, SAMP[0], 2D 22: MOV TEMP[1].w, TEMP[3].xxxx 23: MOV TEMP[2].w, TEMP[3].yyyy 24: MOV OUT[0], TEMP[0] 25: MOV OUT[1], TEMP[1] 26: MOV OUT[2], TEMP[2] 27: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[2]; 1: TEX temp[1].xyz, input[0].xyyy, 2D[1]; 2: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 3: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 4: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 5: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 6: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 7: RSQ temp[4].x, temp[4].xxxx; 8: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 9: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 10: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 11: FLR temp[4].x, temp[3].xxxx; 12: MOV temp[5].x, temp[4].xxxx; 13: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 14: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 15: FLR temp[4].x, temp[3].xxxx; 16: MOV temp[5].y, temp[4].xxxx; 17: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 18: MOV temp[5].z, temp[3].xxxx; 19: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 20: MOV temp[2].xyz, temp[5].xyzx; 21: TEX temp[3].xy, input[0].xyyy, 2D[0]; 22: MOV temp[1].w, temp[3].xxxx; 23: MOV temp[2].w, temp[3].yyyy; 24: MOV output[0], temp[0]; 25: MOV output[1], temp[1]; 26: MOV output[2], temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[2]; 1: TEX temp[1].xyz, input[0].xyyy, 2D[1]; 2: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 3: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 4: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 5: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 6: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 7: RSQ temp[4].x, temp[4].xxxx; 8: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 9: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 10: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 11: FLR temp[4].x, temp[3].xxxx; 12: MOV temp[5].x, temp[4].xxxx; 13: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 14: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 15: FLR temp[4].x, temp[3].xxxx; 16: MOV temp[5].y, temp[4].xxxx; 17: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 18: MOV temp[5].z, temp[3].xxxx; 19: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 20: MOV temp[2].xyz, temp[5].xyzx; 21: TEX temp[3].xy, input[0].xyyy, 2D[0]; 22: MOV temp[1].w, temp[3].xxxx; 23: MOV temp[2].w, temp[3].yyyy; 24: MOV output[0], temp[0]; 25: MOV output[1], temp[1]; 26: MOV output[2], temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[2]; 1: TEX temp[1].xyz, input[0].xyyy, 2D[1]; 2: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 3: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 4: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 5: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 6: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 7: RSQ temp[4].x, temp[4].xxxx; 8: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 9: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 10: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 11: FLR temp[4].x, temp[3].xxxx; 12: MOV temp[5].x, temp[4].xxxx; 13: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 14: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 15: FLR temp[4].x, temp[3].xxxx; 16: MOV temp[5].y, temp[4].xxxx; 17: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 18: MOV temp[5].z, temp[3].xxxx; 19: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 20: MOV temp[2].xyz, temp[5].xyzx; 21: TEX temp[3].xy, input[0].xyyy, 2D[0]; 22: MOV temp[1].w, temp[3].xxxx; 23: MOV temp[2].w, temp[3].yyyy; 24: MOV output[0], temp[0]; 25: MOV output[1], temp[1]; 26: MOV output[2], temp[2]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[2]; 1: TEX temp[1].xyz, input[0].xyyy, 2D[1]; 2: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 3: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 4: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 5: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 6: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 7: RSQ temp[4].x, temp[4].xxxx; 8: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 9: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 10: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 11: FLR temp[4].x, temp[3].xxxx; 12: MOV temp[5].x, temp[4].xxxx; 13: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 14: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 15: FLR temp[4].x, temp[3].xxxx; 16: MOV temp[5].y, temp[4].xxxx; 17: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 18: MOV temp[5].z, temp[3].xxxx; 19: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 20: MOV temp[2].xyz, temp[5].xyzx; 21: TEX temp[3].xy, input[0].xyyy, 2D[0]; 22: MOV temp[1].w, temp[3].xxxx; 23: MOV temp[2].w, temp[3].yyyy; 24: MOV output[0], temp[0]; 25: MOV output[1], temp[1]; 26: MOV output[2], temp[2]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[2]; 1: TEX temp[1].xyz, input[0].xyyy, 2D[1]; 2: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 3: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 4: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 5: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 6: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 7: RSQ temp[4].x, temp[4].xxxx; 8: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 9: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 10: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 11: FLR temp[4].x, temp[3].xxxx; 12: MOV temp[5].x, temp[4].xxxx; 13: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 14: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 15: FLR temp[4].x, temp[3].xxxx; 16: MOV temp[5].y, temp[4].xxxx; 17: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 18: MOV temp[5].z, temp[3].xxxx; 19: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 20: MOV temp[2].xyz, temp[5].xyzx; 21: TEX temp[3].xy, input[0].xyyy, 2D[0]; 22: MOV temp[1].w, temp[3].xxxx; 23: MOV temp[2].w, temp[3].yyyy; 24: MOV output[0], temp[0]; 25: MOV output[1], temp[1]; 26: MOV output[2], temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[2]; 1: TEX temp[6], input[0].xyyy, 2D[1]; 2: MOV temp[1].xyz, temp[6]; 3: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 4: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 5: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 6: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 7: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 10: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 11: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 12: FLR temp[4].x, temp[3].xxxx; 13: MOV temp[5].x, temp[4].xxxx; 14: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 15: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 16: FLR temp[4].x, temp[3].xxxx; 17: MOV temp[5].y, temp[4].xxxx; 18: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 19: MOV temp[5].z, temp[3].xxxx; 20: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 21: MOV temp[2].xyz, temp[5].xyzx; 22: TEX temp[7], input[0].xyyy, 2D[0]; 23: MOV temp[3].xy, temp[7]; 24: MOV temp[1].w, temp[3].xxxx; 25: MOV temp[2].w, temp[3].yyyy; 26: MOV output[0], temp[0]; 27: MOV output[1], temp[1]; 28: MOV output[2], temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[2]; 1: TEX temp[6], input[0].xyyy, 2D[1]; 2: MOV temp[1].xyz, temp[6]; 3: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 4: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 5: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 6: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 7: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 8: RSQ temp[4].x, |temp[4].xxxx|; 9: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 10: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 11: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 12: FRC temp[4].x, temp[3].xxxx; 13: ADD temp[4].x, temp[3].xxxx, -temp[4]; 14: MOV temp[5].x, temp[4].xxxx; 15: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 16: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 17: FRC temp[4].x, temp[3].xxxx; 18: ADD temp[4].x, temp[3].xxxx, -temp[4]; 19: MOV temp[5].y, temp[4].xxxx; 20: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 21: MOV temp[5].z, temp[3].xxxx; 22: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 23: MOV temp[2].xyz, temp[5].xyzx; 24: TEX temp[7], input[0].xyyy, 2D[0]; 25: MOV temp[3].xy, temp[7]; 26: MOV temp[1].w, temp[3].xxxx; 27: MOV temp[2].w, temp[3].yyyy; 28: MOV output[0], temp[0]; 29: MOV output[1], temp[1]; 30: MOV output[2], temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[2]; 1: TEX temp[6].xyz, input[0].xy__, 2D[1]; 2: MOV temp[1].xyz, temp[6].xyz_; 3: ADD temp[2].xyz, temp[1].xyz_, const[0].xxx_; 4: MUL temp[3].xyz, temp[2].xxx_, input[3].xyz_; 5: MAD temp[3].xyz, temp[2].yyy_, input[2].xyz_, temp[3].xyz_; 6: MAD temp[3].xyz, temp[2].zzz_, input[4].xyz_, temp[3].xyz_; 7: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[3].xyz, temp[3].xyz_, temp[4].xxx_; 10: MAD temp[1].xyz, temp[3].xyz_, const[0].yyy_, const[0].yyy_; 11: MUL temp[3].x, input[1].x___, const[0].z___; 12: FRC temp[4].x, temp[3].x___; 13: ADD temp[4].x, temp[3].x___, -temp[4].x___; 14: MOV temp[5].x, temp[4].x___; 15: ADD temp[3].x, temp[3].x___, -temp[4].x___; 16: MUL temp[3].x, temp[3].x___, const[0].z___; 17: FRC temp[4].x, temp[3].x___; 18: ADD temp[4].x, temp[3].x___, -temp[4].x___; 19: MOV temp[5].y, temp[4]._x__; 20: ADD temp[3].x, temp[3].x___, -temp[4].x___; 21: MOV temp[5].z, temp[3].__x_; 22: MUL temp[5].xy, temp[5].xy__, const[0].ww__; 23: MOV temp[2].xyz, temp[5].xyz_; 24: TEX temp[7].xy, input[0].xy__, 2D[0]; 25: MOV temp[3].xy, temp[7].xy__; 26: MOV temp[1].w, temp[3].___x; 27: MOV temp[2].w, temp[3].___y; 28: MOV output[0], temp[0]; 29: MOV output[1], temp[1]; 30: MOV output[2], temp[2]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[2]; 1: TEX temp[6].xyz, input[0].xy__, 2D[1]; 2: MOV temp[1].xyz, temp[6].xyz_; 3: ADD temp[2].xyz, temp[1].xyz_, const[0].xxx_; 4: MUL temp[3].xyz, temp[2].xxx_, input[3].xyz_; 5: MAD temp[3].xyz, temp[2].yyy_, input[2].xyz_, temp[3].xyz_; 6: MAD temp[3].xyz, temp[2].zzz_, input[4].xyz_, temp[3].xyz_; 7: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[3].xyz, temp[3].xyz_, temp[4].xxx_; 10: MAD temp[1].xyz, temp[3].xyz_, const[0].yyy_, const[0].yyy_; 11: MUL temp[3].x, input[1].x___, const[0].z___; 12: FRC temp[4].x, temp[3].x___; 13: ADD temp[4].x, temp[3].x___, -temp[4].x___; 14: MOV temp[5].x, temp[4].x___; 15: ADD temp[3].x, temp[3].x___, -temp[4].x___; 16: MUL temp[3].x, temp[3].x___, const[0].z___; 17: FRC temp[4].x, temp[3].x___; 18: ADD temp[4].x, temp[3].x___, -temp[4].x___; 19: MOV temp[5].y, temp[4]._x__; 20: ADD temp[3].x, temp[3].x___, -temp[4].x___; 21: MOV temp[5].z, temp[3].__x_; 22: MUL temp[5].xy, temp[5].xy__, const[0].ww__; 23: MOV temp[2].xyz, temp[5].xyz_; 24: TEX temp[7].xy, input[0].xy__, 2D[0]; 25: MOV temp[3].xy, temp[7].xy__; 26: MOV temp[1].w, temp[3].___x; 27: MOV temp[2].w, temp[3].___y; 28: MOV output[0], temp[0]; 29: MOV output[1], temp[1]; 30: MOV output[2], temp[2]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[8], input[0].xy__, 2D[2]; 1: TEX temp[9].xyz, input[0].xy__, 2D[1]; 2: MOV temp[10].xyz, temp[9].xyz_; 3: ADD temp[11].xyz, temp[10].xyz_, const[0].xxx_; 4: MUL temp[12].xyz, temp[11].xxx_, input[3].xyz_; 5: MAD temp[13].xyz, temp[11].yyy_, input[2].xyz_, temp[12].xyz_; 6: MAD temp[14].xyz, temp[11].zzz_, input[4].xyz_, temp[13].xyz_; 7: DP3 temp[15].x, temp[14].xyz_, temp[14].xyz_; 8: RSQ temp[16].x, |temp[15].x___|; 9: MUL temp[17].xyz, temp[14].xyz_, temp[16].xxx_; 10: MAD temp[18].xyz, temp[17].xyz_, const[0].yyy_, const[0].yyy_; 11: MUL temp[19].x, input[1].x___, const[0].z___; 12: FRC temp[20].x, temp[19].x___; 13: ADD temp[21].x, temp[19].x___, -temp[20].x___; 14: MOV temp[22].x, temp[21].x___; 15: ADD temp[23].x, temp[19].x___, -temp[21].x___; 16: MUL temp[24].x, temp[23].x___, const[0].z___; 17: FRC temp[25].x, temp[24].x___; 18: ADD temp[26].x, temp[24].x___, -temp[25].x___; 19: MOV temp[22].y, temp[26]._x__; 20: ADD temp[27].x, temp[24].x___, -temp[26].x___; 21: MOV temp[28].z, temp[27].__x_; 22: MUL temp[28].xy, temp[22].xy__, const[0].ww__; 23: MOV temp[29].xyz, temp[28].xyz_; 24: TEX temp[30].xy, input[0].xy__, 2D[0]; 25: MOV temp[31].xy, temp[30].xy__; 26: MOV temp[18].w, temp[31].___x; 27: MOV temp[29].w, temp[31].___y; 28: MOV output[0], temp[8]; 29: MOV output[1], temp[18]; 30: MOV output[2], temp[29]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[8], input[0].xy__, 2D[2]; 1: TEX temp[9].xyz, input[0].xy__, 2D[1]; 2: ADD temp[11].xyz, temp[9].xyz_, none.-H-H-H_; 3: MUL temp[12].xyz, temp[11].xxx_, input[3].xyz_; 4: MAD temp[13].xyz, temp[11].yyy_, input[2].xyz_, temp[12].xyz_; 5: MAD temp[14].xyz, temp[11].zzz_, input[4].xyz_, temp[13].xyz_; 6: DP3 temp[15].x, temp[14].xyz_, temp[14].xyz_; 7: RSQ temp[16].x, |temp[15].x___|; 8: MUL temp[17].xyz, temp[14].xyz_, temp[16].xxx_; 9: MAD temp[18].xyz, temp[17].xyz_, none.HHH_, none.HHH_; 10: MUL temp[19].x, input[1].x___, const[0].z___; 11: FRC temp[20].x, temp[19].x___; 12: MOV temp[22].x, (temp[19] - temp[20]).x___; 13: ADD temp[23].x, temp[19].x___, -(temp[19] - temp[20]).x___; 14: MUL temp[24].x, temp[23].x___, const[0].z___; 15: FRC temp[25].x, temp[24].x___; 16: MOV temp[22].y, (temp[24] - temp[25])._x__; 17: ADD temp[27].x, temp[24].x___, -(temp[24] - temp[25]).x___; 18: MOV temp[28].z, temp[27].__x_; 19: MUL temp[28].xy, temp[22].xy__, const[0].ww__; 20: MOV temp[29].xyz, temp[28].xyz_; 21: TEX temp[30].xy, input[0].xy__, 2D[0]; 22: MOV temp[18].w, temp[30].___x; 23: MOV temp[29].w, temp[30].___y; 24: MOV output[0], temp[8]; 25: MOV output[1], temp[18]; 26: MOV output[2], temp[29]; CONST[0] = { -0.5000 0.5000 255.0000 0.0039 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[8], input[0].xy__, 2D[2]; 1: TEX temp[9].xyz, input[0].xy__, 2D[1]; 2: ADD temp[11].xyz, temp[9].xyz_, none.-H-H-H_; 3: MUL temp[12].xyz, temp[11].xxx_, input[3].xyz_; 4: MAD temp[13].xyz, temp[11].yyy_, input[2].xyz_, temp[12].xyz_; 5: MAD temp[14].xyz, temp[11].zzz_, input[4].xyz_, temp[13].xyz_; 6: DP3 temp[15].x, temp[14].xyz_, temp[14].xyz_; 7: RSQ temp[16].x, |temp[15].x___|; 8: MUL temp[17].xyz, temp[14].xyz_, temp[16].xxx_; 9: MAD temp[18].xyz, temp[17].xyz_, none.HHH_, none.HHH_; 10: MUL temp[19].x, input[1].x___, const[0].z___; 11: FRC temp[20].x, temp[19].x___; 12: MOV temp[22].x, (temp[19] - temp[20]).x___; 13: ADD temp[23].x, temp[19].x___, -(temp[19] - temp[20]).x___; 14: MUL temp[24].x, temp[23].x___, const[0].z___; 15: FRC temp[25].x, temp[24].x___; 16: MOV temp[22].y, (temp[24] - temp[25])._x__; 17: ADD temp[27].x, temp[24].x___, -(temp[24] - temp[25]).x___; 18: MOV temp[28].z, temp[27].__x_; 19: MUL temp[28].xy, temp[22].xy__, const[0].ww__; 20: MOV temp[29].xyz, temp[28].xyz_; 21: TEX temp[30].xy, input[0].xy__, 2D[0]; 22: MOV temp[18].w, temp[30].___x; 23: MOV temp[29].w, temp[30].___y; 24: MOV output[0], temp[8]; 25: MOV output[1], temp[18]; 26: MOV output[2], temp[29]; CONST[0] = { -0.5000 0.5000 255.0000 0.0039 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[8], input[0].xy__, 2D[2]; 1: TEX temp[9].xyz, input[0].xy__, 2D[1]; 2: ADD temp[11].xyz, temp[9].xyz_, none.-H-H-H_; 3: MUL temp[12].xyz, temp[11].xxx_, input[3].xyz_; 4: MAD temp[13].xyz, temp[11].yyy_, input[2].xyz_, temp[12].xyz_; 5: MAD temp[14].xyz, temp[11].zzz_, input[4].xyz_, temp[13].xyz_; 6: DP3 temp[15].x, temp[14].xyz_, temp[14].xyz_; 7: RSQ temp[16].x, |temp[15].x___|; 8: MUL temp[17].xyz, temp[14].xyz_, temp[16].xxx_; 9: MAD temp[18].xyz, temp[17].xyz_, none.HHH_, none.HHH_; 10: MUL temp[19].x, input[1].x___, const[0].z___; 11: FRC temp[20].x, temp[19].x___; 12: MOV temp[22].x, (temp[19] - temp[20]).x___; 13: ADD temp[23].x, temp[19].x___, -(temp[19] - temp[20]).x___; 14: MUL temp[24].x, temp[23].x___, const[0].z___; 15: FRC temp[25].x, temp[24].x___; 16: MOV temp[22].y, (temp[24] - temp[25])._x__; 17: ADD temp[27].x, temp[24].x___, -(temp[24] - temp[25]).x___; 18: MOV temp[28].z, temp[27].__x_; 19: MUL temp[28].xy, temp[22].xy__, const[0].ww__; 20: MOV temp[29].xyz, temp[28].xyz_; 21: TEX temp[30].xy, input[0].xy__, 2D[0]; 22: MOV temp[18].w, temp[30].___x; 23: MOV temp[29].w, temp[30].___y; 24: MOV output[0], temp[8]; 25: MOV output[1], temp[18]; 26: MOV output[2], temp[29]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[8], input[0].xy__, 2D[2]; 1: TEX temp[9].xyz, input[0].xy__, 2D[1]; 2: src0.xyz = temp[9] MAD temp[11].xyz, src0.xyz, src0.111, -src0.HHH 3: src0.xyz = temp[11], src1.xyz = input[3] MAD temp[12].xyz, src0.xxx, src1.xyz, src0.000 4: src0.xyz = temp[11], src1.xyz = input[2], src2.xyz = temp[12] MAD temp[13].xyz, src0.yyy, src1.xyz, src2.xyz 5: src0.xyz = temp[11], src1.xyz = input[4], src2.xyz = temp[13] MAD temp[14].xyz, src0.zzz, src1.xyz, src2.xyz 6: src0.xyz = temp[14] DP3 temp[15].x, src0.xyz, src0.xyz 7: src0.xyz = temp[15] REPL_ALPHA temp[16].x RSQ, |src0.x| 8: src0.xyz = temp[14], src1.xyz = temp[16] MAD temp[17].xyz, src0.xyz, src1.xxx, src0.000 9: src0.xyz = temp[17] MAD temp[18].xyz, src0.xyz, src0.HHH, src0.HHH 10: src0.xyz = input[1], src1.xyz = const[0] MAD temp[19].x, src0.x__, src1.z__, src0.000 11: src0.xyz = temp[19] FRC temp[20].x, src0.x__ 12: src0.xyz = temp[20], src1.xyz = temp[19], srcp.xyz = (src1 - src0) MAD temp[22].x, srcp.x__, src0.111, src0.000 13: src0.xyz = temp[20], src1.xyz = temp[19], srcp.xyz = (src1 - src0) MAD temp[23].x, src1.x__, src0.111, -srcp.x__ 14: src0.xyz = temp[23], src1.xyz = const[0] MAD temp[24].x, src0.x__, src1.z__, src0.000 15: src0.xyz = temp[24] FRC temp[25].x, src0.x__ 16: src0.xyz = temp[25], src1.xyz = temp[24], srcp.xyz = (src1 - src0) MAD temp[22].y, srcp._x_, src0.111, src0.000 17: src0.xyz = temp[25], src1.xyz = temp[24], srcp.xyz = (src1 - src0) MAD temp[27].x, src1.x__, src0.111, -srcp.x__ 18: src0.xyz = temp[27] MAD temp[28].z, src0.__x, src0.111, src0.000 19: src0.xyz = temp[22], src0.w = const[0] MAD temp[28].xy, src0.xy_, src0.ww_, src0.000 20: src0.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src0.111, src0.000 21: TEX temp[30].xy, input[0].xy__, 2D[0]; 22: src0.xyz = temp[30] MAD temp[18].w, src0.x, src0.1, src0.0 23: src0.xyz = temp[30] MAD temp[29].w, src0.y, src0.1, src0.0 24: src0.xyz = temp[8], src0.w = temp[8] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 25: src0.xyz = temp[18], src0.w = temp[18] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 26: src0.xyz = temp[29], src0.w = temp[29] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[8], input[0].xy__, 2D[2]; 2: TEX temp[9].xyz, input[0].xy__, 2D[1]; 3: TEX temp[30].xy, input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 4: src0.xyz = input[1], src1.xyz = const[0], src2.xyz = temp[30] SEM_WAIT MAD temp[19].x, src0.x__, src1.z__, src0.000 MAD temp[18].w, src2.x, src0.1, src0.0 5: src0.xyz = temp[9], src1.xyz = temp[30] MAD temp[11].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[29].w, src1.y, src0.1, src0.0 6: src0.xyz = temp[19] FRC temp[20].x, src0.x__ 7: src0.xyz = temp[11], src1.xyz = input[3] MAD temp[12].xyz, src0.xxx, src1.xyz, src0.000 8: src0.xyz = temp[20], src1.xyz = temp[19], srcp.xyz = (src1 - src0) MAD temp[22].x, srcp.x__, src0.111, src0.000 9: src0.xyz = temp[20], src1.xyz = temp[19], srcp.xyz = (src1 - src0) MAD temp[23].w, src1.x, src0.1, -srcp.x 10: src0.xyz = temp[11], src1.xyz = input[2], src2.xyz = temp[12] MAD temp[13].xyz, src0.yyy, src1.xyz, src2.xyz 11: src0.xyz = temp[23], src0.w = temp[23], src1.xyz = const[0] MAD temp[24].x, src0.w__, src1.z__, src0.000 12: src0.xyz = temp[11], src1.xyz = input[4], src2.xyz = temp[13] MAD temp[14].xyz, src0.zzz, src1.xyz, src2.xyz 13: src0.xyz = temp[24] FRC temp[25].x, src0.x__ 14: src0.xyz = temp[25], src1.xyz = temp[24], src2.xyz = temp[14], srcp.xyz = (src1 - src0) DP3 temp[15].x, src2.xyz, src2.xyz MAD temp[27].w, src1.x, src0.1, -srcp.x 15: src0.xyz = temp[25], src1.xyz = temp[24], src2.xyz = temp[15], srcp.xyz = (src1 - src0) MAD temp[22].y, srcp._x_, src0.111, src0.000 RSQ temp[16].w, |src2.x| 16: src0.xyz = temp[27], src0.w = temp[27] MAD temp[28].z, src0.__w, src0.111, src0.000 17: src0.xyz = temp[14], src0.w = temp[16], src1.xyz = temp[16] MAD temp[17].xyz, src0.xyz, src0.www, src0.000 18: src0.xyz = temp[22], src0.w = const[0] MAD temp[28].xy, src0.xy_, src0.ww_, src0.000 19: src0.xyz = temp[17] MAD temp[18].xyz, src0.xyz, src0.HHH, src0.HHH 20: src0.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src0.111, src0.000 21: src0.xyz = temp[8], src0.w = temp[8] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 22: src0.xyz = temp[18], src0.w = temp[18] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 23: src0.xyz = temp[29], src0.w = temp[29] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[8], input[0].xy__, 2D[2]; 2: TEX temp[9].xyz, input[0].xy__, 2D[1]; 3: TEX temp[30].xy, input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 4: src0.xyz = input[1], src1.xyz = const[0], src2.xyz = temp[30] SEM_WAIT MAD temp[19].x, src0.x__, src1.z__, src0.000 MAD temp[18].w, src2.x, src0.1, src0.0 5: src0.xyz = temp[9], src1.xyz = temp[30] MAD temp[11].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[29].w, src1.y, src0.1, src0.0 6: src0.xyz = temp[19] FRC temp[20].x, src0.x__ 7: src0.xyz = temp[11], src1.xyz = input[3] MAD temp[12].xyz, src0.xxx, src1.xyz, src0.000 8: src0.xyz = temp[20], src1.xyz = temp[19], srcp.xyz = (src1 - src0) MAD temp[22].x, srcp.x__, src0.111, src0.000 9: src0.xyz = temp[20], src1.xyz = temp[19], srcp.xyz = (src1 - src0) MAD temp[23].w, src1.x, src0.1, -srcp.x 10: src0.xyz = temp[11], src1.xyz = input[2], src2.xyz = temp[12] MAD temp[13].xyz, src0.yyy, src1.xyz, src2.xyz 11: src0.w = temp[23], src1.xyz = const[0] MAD temp[24].x, src0.w__, src1.z__, src0.000 12: src0.xyz = temp[11], src1.xyz = input[4], src2.xyz = temp[13] MAD temp[14].xyz, src0.zzz, src1.xyz, src2.xyz 13: src0.xyz = temp[24] FRC temp[25].x, src0.x__ 14: src0.xyz = temp[25], src1.xyz = temp[24], src2.xyz = temp[14], srcp.xyz = (src1 - src0) DP3 temp[15].x, src2.xyz, src2.xyz MAD temp[27].w, src1.x, src0.1, -srcp.x 15: src0.xyz = temp[25], src1.xyz = temp[24], src2.xyz = temp[15], srcp.xyz = (src1 - src0) MAD temp[22].y, srcp._x_, src0.111, src0.000 RSQ temp[16].w, |src2.x| 16: src0.w = temp[27] MAD temp[28].z, src0.__w, src0.111, src0.000 17: src0.xyz = temp[14], src0.w = temp[16] MAD temp[17].xyz, src0.xyz, src0.www, src0.000 18: src0.xyz = temp[22], src0.w = const[0] MAD temp[28].xy, src0.xy_, src0.ww_, src0.000 19: src0.xyz = temp[17] MAD temp[18].xyz, src0.xyz, src0.HHH, src0.HHH 20: src0.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src0.111, src0.000 21: src0.xyz = temp[8], src0.w = temp[8] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 22: src0.xyz = temp[18], src0.w = temp[18] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 23: src0.xyz = temp[29], src0.w = temp[29] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[5], input[0].xy__, 2D[2]; 2: TEX temp[6].xyz, input[0].xy__, 2D[1]; 3: TEX temp[0].xy, input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 4: src0.xyz = input[1], src1.xyz = const[0], src2.xyz = temp[0] SEM_WAIT MAD temp[1].x, src0.x__, src1.z__, src0.0__ MAD temp[1].w, src2.x, src0.1, src0.0 5: src0.xyz = temp[6], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[0].w, src1.y, src0.1, src0.0 6: src0.xyz = temp[1] FRC temp[6].x, src0.x__ 7: src0.xyz = temp[0], src1.xyz = input[3] MAD temp[3].xyz, src0.xxx, src1.xyz, src0.000 8: src0.xyz = temp[6], src1.xyz = temp[1], srcp.xyz = (src1 - src0) MAD temp[7].x, srcp.x__, src0.11_, src0.00_ 9: src0.xyz = temp[6], src1.xyz = temp[1], srcp.xyz = (src1 - src0) MAD temp[2].w, src1.x, src0.1, -srcp.x 10: src0.xyz = temp[0], src1.xyz = input[2], src2.xyz = temp[3] MAD temp[1].xyz, src0.yyy, src1.xyz, src2.xyz 11: src0.w = temp[2], src1.xyz = const[0] MAD temp[2].x, src0.w__, src1.z__, src0.0__ 12: src0.xyz = temp[0], src1.xyz = input[4], src2.xyz = temp[1] MAD temp[0].xyz, src0.zzz, src1.xyz, src2.xyz 13: src0.xyz = temp[2] FRC temp[1].x, src0.x__ 14: src0.xyz = temp[1], src1.xyz = temp[2], src2.xyz = temp[0], srcp.xyz = (src1 - src0) DP3 temp[1].y, src2.xyz, src2.xyz MAD temp[2].w, src1.x, src0.1, -srcp.x 15: src0.xyz = temp[1], src1.xyz = temp[2], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD temp[7].y, srcp._x_, src0.11_, src0.00_ RSQ temp[3].w, |src2.y| 16: src0.w = temp[2] MAD temp[1].z, src0.__w, src0.111, src0.000 17: src0.xyz = temp[0], src0.w = temp[3] MAD temp[0].xyz, src0.xyz, src0.www, src0.000 18: src0.xyz = temp[7], src0.w = const[0] MAD temp[1].xy, src0.xy_, src0.ww_, src0.000 19: src0.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.HHH, src0.HHH 20: src0.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src0.111, src0.000 21: src0.xyz = temp[5], src0.w = temp[5] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 22: src0.xyz = temp[0], src0.w = temp[1] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 23: src0.xyz = temp[1], src0.w = temp[0] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 pc=10************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 19, tex_end: 2 (code_addr: 004404c0) TEX: TEX t5, t0, texture[2] (00009140) TEX t6, t0, texture[1] (00008980) TEX t0, t0, texture[0] (00008000) 0: xyz: t1 c0 t0 bias-> t1.x (00840801) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t1.xyz c0.zzz 0.0 op: 00050380 w: t0.x 1.0 0.0 op: 00040886 1: xyz: t6 t0 t0 bias-> t0.xyz (03800006) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t6.xyz 1.0 -0.5 op: 000d8a80 w: t0.y 1.0 0.0 op: 00040884 2: xyz: t1 t0 t0 bias-> t6.x (00980001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t1.xxx t1.xxx op: 04804080 w: t1.x t1.x t1.x op: 00000000 3: xyz: t0 t3 t0 bias-> t3.xyz (038c00c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t3.xyz 0.0 op: 00050201 w: t0.x t0.x t0.x op: 00000000 4: xyz: t6 t1 t0 sub-> t7.x (009c0046) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xyz 1.0 0.0 op: 00250a8f w: t6.x t6.x t6.x op: 00000000 5: xyz: t6 t1 t0 sub-> (00000046) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t6.xxx t6.xxx t6.xxx op: 00204081 w: t1.x 1.0 -srcp.x op: 000b0883 6: xyz: t0 t2 t3 bias-> t1.xyz (03843080) w: t0 t0 t0 bias-> (00000000) xyz: t0.yyy t2.xyz t3.xyz op: 00020202 w: t0.x t0.x t0.x op: 00000000 7: xyz: t0 c0 t0 bias-> t2.x (00880800) w: t2 t0 t0 bias-> (00000002) xyz: t2.www c0.zzz 0.0 op: 0005038c w: t0.x t0.x t0.x op: 00000000 8: xyz: t0 t4 t1 bias-> t0.xyz (03801100) w: t0 t0 t0 bias-> (00000000) xyz: t0.zzz t4.xyz t1.xyz op: 00020203 w: t0.x t0.x t0.x op: 00000000 9: xyz: t2 t0 t0 bias-> t1.x (00840002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t2.xxx t2.xxx op: 84804080 NOP w: t2.x t2.x t2.x op: 00000000 10: xyz: t1 t2 t0 sub-> t1.y (01040081) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t0.xyz t0.xyz t1.xxx op: 00a04408 w: t2.x 1.0 -srcp.x op: 000b0883 11: xyz: t1 t2 t1 sub-> t7.y (011c1081) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: srcp.xxx 1.0 0.0 op: 00250a90 w: |t1.y| t1.x t1.x op: 05800047 12: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t2 t0 t0 bias-> (00000002) xyz: t2.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 13: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t3 t0 t0 bias-> (00000003) xyz: t0.xyz t3.www 0.0 op: 00050600 w: t0.x t0.x t0.x op: 00000000 14: xyz: t7 t0 t0 bias-> t1.xy (01840007) w: c0 t0 t0 bias-> (00000020) xyz: t7.xyz c0.www 0.0 op: 00050600 w: t7.x t7.x t7.x op: 00000000 15: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 0.5 0.5 op: 00058b00 w: t0.x t0.x t0.x op: 00000000 16: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 17: xyz: t5 t0 t0 bias-> o0.xyz (1c000005) w: t5 t0 t0 bias-> o0.w (01000005) xyz: t5.xyz 1.0 0.0 op: 00050a80 w: t5.w 1.0 0.0 op: 00040889 18: xyz: t0 t0 t0 bias-> o1.xyz (3c000000) w: t1 t0 t0 bias-> o1.w (03000001) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t1.w 1.0 0.0 op: 00040889 19: xyz: t1 t0 t0 bias-> o2.xyz (5c000001) w: t0 t0 t0 bias-> o2.w (05000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], PERSPECTIVE DCL IN[1], GENERIC[12], PERSPECTIVE DCL IN[2], GENERIC[13], PERSPECTIVE DCL OUT[0], COLOR DCL OUT[1], COLOR[1] DCL OUT[2], COLOR[2] DCL SAMP[0] DCL SAMP[1] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL IMM[0] FLT32 { 0.5000, 255.0000, 0.0039, 0.0000} 0: TEX TEMP[0], IN[0].xyyy, SAMP[1], 2D 1: DP3 TEMP[1].x, IN[2].xyzz, IN[2].xyzz 2: RSQ TEMP[2].x, TEMP[1].xxxx 3: MUL TEMP[3].xyz, IN[2].xyzz, TEMP[2].xxxx 4: MAD TEMP[1].xyz, TEMP[3].xyzz, IMM[0].xxxx, IMM[0].xxxx 5: MUL TEMP[3].x, IN[1].xxxx, IMM[0].yyyy 6: FLR TEMP[4].x, TEMP[3].xxxx 7: MOV TEMP[5].x, TEMP[4].xxxx 8: ADD TEMP[3].x, TEMP[3].xxxx, -TEMP[4].xxxx 9: MUL TEMP[3].x, TEMP[3].xxxx, IMM[0].yyyy 10: FLR TEMP[4].x, TEMP[3].xxxx 11: MOV TEMP[5].y, TEMP[4].xxxx 12: ADD TEMP[3].x, TEMP[3].xxxx, -TEMP[4].xxxx 13: MOV TEMP[5].z, TEMP[3].xxxx 14: MUL TEMP[5].xy, TEMP[5].xyyy, IMM[0].zzzz 15: MOV TEMP[2].xyz, TEMP[5].xyzx 16: TEX TEMP[3].xy, IN[0].xyyy, SAMP[0], 2D 17: MOV TEMP[1].w, TEMP[3].xxxx 18: MOV TEMP[2].w, TEMP[3].yyyy 19: MOV OUT[0], TEMP[0] 20: MOV OUT[1], TEMP[1] 21: MOV OUT[2], TEMP[2] 22: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[1]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: TEX temp[3].xy, input[0].xyyy, 2D[0]; 17: MOV temp[1].w, temp[3].xxxx; 18: MOV temp[2].w, temp[3].yyyy; 19: MOV output[0], temp[0]; 20: MOV output[1], temp[1]; 21: MOV output[2], temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[1]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: TEX temp[3].xy, input[0].xyyy, 2D[0]; 17: MOV temp[1].w, temp[3].xxxx; 18: MOV temp[2].w, temp[3].yyyy; 19: MOV output[0], temp[0]; 20: MOV output[1], temp[1]; 21: MOV output[2], temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[1]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: TEX temp[3].xy, input[0].xyyy, 2D[0]; 17: MOV temp[1].w, temp[3].xxxx; 18: MOV temp[2].w, temp[3].yyyy; 19: MOV output[0], temp[0]; 20: MOV output[1], temp[1]; 21: MOV output[2], temp[2]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[1]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: TEX temp[3].xy, input[0].xyyy, 2D[0]; 17: MOV temp[1].w, temp[3].xxxx; 18: MOV temp[2].w, temp[3].yyyy; 19: MOV output[0], temp[0]; 20: MOV output[1], temp[1]; 21: MOV output[2], temp[2]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[1]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: TEX temp[3].xy, input[0].xyyy, 2D[0]; 17: MOV temp[1].w, temp[3].xxxx; 18: MOV temp[2].w, temp[3].yyyy; 19: MOV output[0], temp[0]; 20: MOV output[1], temp[1]; 21: MOV output[2], temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[1]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: TEX temp[6], input[0].xyyy, 2D[0]; 17: MOV temp[3].xy, temp[6]; 18: MOV temp[1].w, temp[3].xxxx; 19: MOV temp[2].w, temp[3].yyyy; 20: MOV output[0], temp[0]; 21: MOV output[1], temp[1]; 22: MOV output[2], temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[1]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, |temp[1].xxxx|; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FRC temp[4].x, temp[3].xxxx; 7: ADD temp[4].x, temp[3].xxxx, -temp[4]; 8: MOV temp[5].x, temp[4].xxxx; 9: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 10: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 11: FRC temp[4].x, temp[3].xxxx; 12: ADD temp[4].x, temp[3].xxxx, -temp[4]; 13: MOV temp[5].y, temp[4].xxxx; 14: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 15: MOV temp[5].z, temp[3].xxxx; 16: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 17: MOV temp[2].xyz, temp[5].xyzx; 18: TEX temp[6], input[0].xyyy, 2D[0]; 19: MOV temp[3].xy, temp[6]; 20: MOV temp[1].w, temp[3].xxxx; 21: MOV temp[2].w, temp[3].yyyy; 22: MOV output[0], temp[0]; 23: MOV output[1], temp[1]; 24: MOV output[2], temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[1]; 1: DP3 temp[1].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[2].x, |temp[1].x___|; 3: MUL temp[3].xyz, input[2].xyz_, temp[2].xxx_; 4: MAD temp[1].xyz, temp[3].xyz_, const[0].xxx_, const[0].xxx_; 5: MUL temp[3].x, input[1].x___, const[0].y___; 6: FRC temp[4].x, temp[3].x___; 7: ADD temp[4].x, temp[3].x___, -temp[4].x___; 8: MOV temp[5].x, temp[4].x___; 9: ADD temp[3].x, temp[3].x___, -temp[4].x___; 10: MUL temp[3].x, temp[3].x___, const[0].y___; 11: FRC temp[4].x, temp[3].x___; 12: ADD temp[4].x, temp[3].x___, -temp[4].x___; 13: MOV temp[5].y, temp[4]._x__; 14: ADD temp[3].x, temp[3].x___, -temp[4].x___; 15: MOV temp[5].z, temp[3].__x_; 16: MUL temp[5].xy, temp[5].xy__, const[0].zz__; 17: MOV temp[2].xyz, temp[5].xyz_; 18: TEX temp[6].xy, input[0].xy__, 2D[0]; 19: MOV temp[3].xy, temp[6].xy__; 20: MOV temp[1].w, temp[3].___x; 21: MOV temp[2].w, temp[3].___y; 22: MOV output[0], temp[0]; 23: MOV output[1], temp[1]; 24: MOV output[2], temp[2]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[1]; 1: DP3 temp[1].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[2].x, |temp[1].x___|; 3: MUL temp[3].xyz, input[2].xyz_, temp[2].xxx_; 4: MAD temp[1].xyz, temp[3].xyz_, const[0].xxx_, const[0].xxx_; 5: MUL temp[3].x, input[1].x___, const[0].y___; 6: FRC temp[4].x, temp[3].x___; 7: ADD temp[4].x, temp[3].x___, -temp[4].x___; 8: MOV temp[5].x, temp[4].x___; 9: ADD temp[3].x, temp[3].x___, -temp[4].x___; 10: MUL temp[3].x, temp[3].x___, const[0].y___; 11: FRC temp[4].x, temp[3].x___; 12: ADD temp[4].x, temp[3].x___, -temp[4].x___; 13: MOV temp[5].y, temp[4]._x__; 14: ADD temp[3].x, temp[3].x___, -temp[4].x___; 15: MOV temp[5].z, temp[3].__x_; 16: MUL temp[5].xy, temp[5].xy__, const[0].zz__; 17: MOV temp[2].xyz, temp[5].xyz_; 18: TEX temp[6].xy, input[0].xy__, 2D[0]; 19: MOV temp[3].xy, temp[6].xy__; 20: MOV temp[1].w, temp[3].___x; 21: MOV temp[2].w, temp[3].___y; 22: MOV output[0], temp[0]; 23: MOV output[1], temp[1]; 24: MOV output[2], temp[2]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[7], input[0].xy__, 2D[1]; 1: DP3 temp[8].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[9].x, |temp[8].x___|; 3: MUL temp[10].xyz, input[2].xyz_, temp[9].xxx_; 4: MAD temp[11].xyz, temp[10].xyz_, const[0].xxx_, const[0].xxx_; 5: MUL temp[12].x, input[1].x___, const[0].y___; 6: FRC temp[13].x, temp[12].x___; 7: ADD temp[14].x, temp[12].x___, -temp[13].x___; 8: MOV temp[15].x, temp[14].x___; 9: ADD temp[16].x, temp[12].x___, -temp[14].x___; 10: MUL temp[17].x, temp[16].x___, const[0].y___; 11: FRC temp[18].x, temp[17].x___; 12: ADD temp[19].x, temp[17].x___, -temp[18].x___; 13: MOV temp[15].y, temp[19]._x__; 14: ADD temp[20].x, temp[17].x___, -temp[19].x___; 15: MOV temp[21].z, temp[20].__x_; 16: MUL temp[21].xy, temp[15].xy__, const[0].zz__; 17: MOV temp[22].xyz, temp[21].xyz_; 18: TEX temp[23].xy, input[0].xy__, 2D[0]; 19: MOV temp[24].xy, temp[23].xy__; 20: MOV temp[11].w, temp[24].___x; 21: MOV temp[22].w, temp[24].___y; 22: MOV output[0], temp[7]; 23: MOV output[1], temp[11]; 24: MOV output[2], temp[22]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[7], input[0].xy__, 2D[1]; 1: DP3 temp[8].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[9].x, |temp[8].x___|; 3: MUL temp[10].xyz, input[2].xyz_, temp[9].xxx_; 4: MAD temp[11].xyz, temp[10].xyz_, none.HHH_, none.HHH_; 5: MUL temp[12].x, input[1].x___, const[0].y___; 6: FRC temp[13].x, temp[12].x___; 7: MOV temp[15].x, (temp[12] - temp[13]).x___; 8: ADD temp[16].x, temp[12].x___, -(temp[12] - temp[13]).x___; 9: MUL temp[17].x, temp[16].x___, const[0].y___; 10: FRC temp[18].x, temp[17].x___; 11: MOV temp[15].y, (temp[17] - temp[18])._x__; 12: ADD temp[20].x, temp[17].x___, -(temp[17] - temp[18]).x___; 13: MOV temp[21].z, temp[20].__x_; 14: MUL temp[21].xy, temp[15].xy__, const[0].zz__; 15: MOV temp[22].xyz, temp[21].xyz_; 16: TEX temp[23].xy, input[0].xy__, 2D[0]; 17: MOV temp[11].w, temp[23].___x; 18: MOV temp[22].w, temp[23].___y; 19: MOV output[0], temp[7]; 20: MOV output[1], temp[11]; 21: MOV output[2], temp[22]; CONST[0] = { 0.5000 255.0000 0.0039 0.0000 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[7], input[0].xy__, 2D[1]; 1: DP3 temp[8].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[9].x, |temp[8].x___|; 3: MUL temp[10].xyz, input[2].xyz_, temp[9].xxx_; 4: MAD temp[11].xyz, temp[10].xyz_, none.HHH_, none.HHH_; 5: MUL temp[12].x, input[1].x___, const[0].y___; 6: FRC temp[13].x, temp[12].x___; 7: MOV temp[15].x, (temp[12] - temp[13]).x___; 8: ADD temp[16].x, temp[12].x___, -(temp[12] - temp[13]).x___; 9: MUL temp[17].x, temp[16].x___, const[0].y___; 10: FRC temp[18].x, temp[17].x___; 11: MOV temp[15].y, (temp[17] - temp[18])._x__; 12: ADD temp[20].x, temp[17].x___, -(temp[17] - temp[18]).x___; 13: MOV temp[21].z, temp[20].__x_; 14: MUL temp[21].xy, temp[15].xy__, const[0].zz__; 15: MOV temp[22].xyz, temp[21].xyz_; 16: TEX temp[23].xy, input[0].xy__, 2D[0]; 17: MOV temp[11].w, temp[23].___x; 18: MOV temp[22].w, temp[23].___y; 19: MOV output[0], temp[7]; 20: MOV output[1], temp[11]; 21: MOV output[2], temp[22]; CONST[0] = { 0.5000 255.0000 0.0039 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[7], input[0].xy__, 2D[1]; 1: DP3 temp[8].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[9].x, |temp[8].x___|; 3: MUL temp[10].xyz, input[2].xyz_, temp[9].xxx_; 4: MAD temp[11].xyz, temp[10].xyz_, none.HHH_, none.HHH_; 5: MUL temp[12].x, input[1].x___, const[0].y___; 6: FRC temp[13].x, temp[12].x___; 7: MOV temp[15].x, (temp[12] - temp[13]).x___; 8: ADD temp[16].x, temp[12].x___, -(temp[12] - temp[13]).x___; 9: MUL temp[17].x, temp[16].x___, const[0].y___; 10: FRC temp[18].x, temp[17].x___; 11: MOV temp[15].y, (temp[17] - temp[18])._x__; 12: ADD temp[20].x, temp[17].x___, -(temp[17] - temp[18]).x___; 13: MOV temp[21].z, temp[20].__x_; 14: MUL temp[21].xy, temp[15].xy__, const[0].zz__; 15: MOV temp[22].xyz, temp[21].xyz_; 16: TEX temp[23].xy, input[0].xy__, 2D[0]; 17: MOV temp[11].w, temp[23].___x; 18: MOV temp[22].w, temp[23].___y; 19: MOV output[0], temp[7]; 20: MOV output[1], temp[11]; 21: MOV output[2], temp[22]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[7], input[0].xy__, 2D[1]; 1: src0.xyz = input[2] DP3 temp[8].x, src0.xyz, src0.xyz 2: src0.xyz = temp[8] REPL_ALPHA temp[9].x RSQ, |src0.x| 3: src0.xyz = input[2], src1.xyz = temp[9] MAD temp[10].xyz, src0.xyz, src1.xxx, src0.000 4: src0.xyz = temp[10] MAD temp[11].xyz, src0.xyz, src0.HHH, src0.HHH 5: src0.xyz = input[1], src1.xyz = const[0] MAD temp[12].x, src0.x__, src1.y__, src0.000 6: src0.xyz = temp[12] FRC temp[13].x, src0.x__ 7: src0.xyz = temp[13], src1.xyz = temp[12], srcp.xyz = (src1 - src0) MAD temp[15].x, srcp.x__, src0.111, src0.000 8: src0.xyz = temp[13], src1.xyz = temp[12], srcp.xyz = (src1 - src0) MAD temp[16].x, src1.x__, src0.111, -srcp.x__ 9: src0.xyz = temp[16], src1.xyz = const[0] MAD temp[17].x, src0.x__, src1.y__, src0.000 10: src0.xyz = temp[17] FRC temp[18].x, src0.x__ 11: src0.xyz = temp[18], src1.xyz = temp[17], srcp.xyz = (src1 - src0) MAD temp[15].y, srcp._x_, src0.111, src0.000 12: src0.xyz = temp[18], src1.xyz = temp[17], srcp.xyz = (src1 - src0) MAD temp[20].x, src1.x__, src0.111, -srcp.x__ 13: src0.xyz = temp[20] MAD temp[21].z, src0.__x, src0.111, src0.000 14: src0.xyz = temp[15], src1.xyz = const[0] MAD temp[21].xy, src0.xy_, src1.zz_, src0.000 15: src0.xyz = temp[21] MAD temp[22].xyz, src0.xyz, src0.111, src0.000 16: TEX temp[23].xy, input[0].xy__, 2D[0]; 17: src0.xyz = temp[23] MAD temp[11].w, src0.x, src0.1, src0.0 18: src0.xyz = temp[23] MAD temp[22].w, src0.y, src0.1, src0.0 19: src0.xyz = temp[7], src0.w = temp[7] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 20: src0.xyz = temp[11], src0.w = temp[11] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 21: src0.xyz = temp[22], src0.w = temp[22] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[7], input[0].xy__, 2D[1]; 2: TEX temp[23].xy, input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 3: src0.xyz = input[1], src1.xyz = const[0], src2.xyz = temp[23] SEM_WAIT MAD temp[12].x, src0.x__, src1.y__, src0.000 MAD temp[22].w, src2.y, src0.1, src0.0 4: src0.xyz = input[2], src1.xyz = temp[23] DP3 temp[8].x, src0.xyz, src0.xyz MAD temp[11].w, src1.x, src0.1, src0.0 5: src0.xyz = temp[12], src1.xyz = temp[8] FRC temp[13].x, src0.x__ RSQ temp[9].w, |src1.x| 6: src0.xyz = temp[13], src1.xyz = temp[12], srcp.xyz = (src1 - src0) MAD temp[15].x, srcp.x__, src0.111, src0.000 7: src0.xyz = input[2], src0.w = temp[9], src1.xyz = temp[9] MAD temp[10].xyz, src0.xyz, src0.www, src0.000 8: src0.xyz = temp[13], src1.xyz = temp[12], src2.xyz = temp[10], srcp.xyz = (src1 - src0) MAD temp[11].xyz, src2.xyz, src0.HHH, src0.HHH MAD temp[16].w, src1.x, src0.1, -srcp.x 9: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = const[0] MAD temp[17].x, src0.w__, src1.y__, src0.000 10: src0.xyz = temp[17] FRC temp[18].x, src0.x__ 11: src0.xyz = temp[18], src1.xyz = temp[17], srcp.xyz = (src1 - src0) MAD temp[15].y, srcp._x_, src0.111, src0.000 12: src0.xyz = temp[18], src1.xyz = temp[17], srcp.xyz = (src1 - src0) MAD temp[20].w, src1.x, src0.1, -srcp.x 13: src0.xyz = temp[15], src1.xyz = const[0] MAD temp[21].xy, src0.xy_, src1.zz_, src0.000 14: src0.xyz = temp[20], src0.w = temp[20] MAD temp[21].z, src0.__w, src0.111, src0.000 15: src0.xyz = temp[21] MAD temp[22].xyz, src0.xyz, src0.111, src0.000 16: src0.xyz = temp[7], src0.w = temp[7] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 17: src0.xyz = temp[11], src0.w = temp[11] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 18: src0.xyz = temp[22], src0.w = temp[22] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[7], input[0].xy__, 2D[1]; 2: TEX temp[23].xy, input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 3: src0.xyz = input[1], src1.xyz = const[0], src2.xyz = temp[23] SEM_WAIT MAD temp[12].x, src0.x__, src1.y__, src0.000 MAD temp[22].w, src2.y, src0.1, src0.0 4: src0.xyz = input[2], src1.xyz = temp[23] DP3 temp[8].x, src0.xyz, src0.xyz MAD temp[11].w, src1.x, src0.1, src0.0 5: src0.xyz = temp[12], src1.xyz = temp[8] FRC temp[13].x, src0.x__ RSQ temp[9].w, |src1.x| 6: src0.xyz = temp[13], src1.xyz = temp[12], srcp.xyz = (src1 - src0) MAD temp[15].x, srcp.x__, src0.111, src0.000 7: src0.xyz = input[2], src0.w = temp[9] MAD temp[10].xyz, src0.xyz, src0.www, src0.000 8: src0.xyz = temp[13], src1.xyz = temp[12], src2.xyz = temp[10], srcp.xyz = (src1 - src0) MAD temp[11].xyz, src2.xyz, src0.HHH, src0.HHH MAD temp[16].w, src1.x, src0.1, -srcp.x 9: src0.w = temp[16], src1.xyz = const[0] MAD temp[17].x, src0.w__, src1.y__, src0.000 10: src0.xyz = temp[17] FRC temp[18].x, src0.x__ 11: src0.xyz = temp[18], src1.xyz = temp[17], srcp.xyz = (src1 - src0) MAD temp[15].y, srcp._x_, src0.111, src0.000 12: src0.xyz = temp[18], src1.xyz = temp[17], srcp.xyz = (src1 - src0) MAD temp[20].w, src1.x, src0.1, -srcp.x 13: src0.xyz = temp[15], src1.xyz = const[0] MAD temp[21].xy, src0.xy_, src1.zz_, src0.000 14: src0.w = temp[20] MAD temp[21].z, src0.__w, src0.111, src0.000 15: src0.xyz = temp[21] MAD temp[22].xyz, src0.xyz, src0.111, src0.000 16: src0.xyz = temp[7], src0.w = temp[7] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 17: src0.xyz = temp[11], src0.w = temp[11] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 18: src0.xyz = temp[22], src0.w = temp[22] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[3], input[0].xy__, 2D[1]; 2: TEX temp[0].xy, input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 3: src0.xyz = input[1], src1.xyz = const[0], src2.xyz = temp[0] SEM_WAIT MAD temp[1].x, src0.x__, src1.y__, src0.0__ MAD temp[1].w, src2.y, src0.1, src0.0 4: src0.xyz = input[2], src1.xyz = temp[0] DP3 temp[0].x, src0.xyz, src0.xyz MAD temp[0].w, src1.x, src0.1, src0.0 5: src0.xyz = temp[1], src1.xyz = temp[0] FRC temp[0].x, src0.x__ RSQ temp[2].w, |src1.x| 6: src0.xyz = temp[0], src1.xyz = temp[1], srcp.xyz = (src1 - src0) MAD temp[4].x, srcp.x__, src0.11_, src0.00_ 7: src0.xyz = input[2], src0.w = temp[2] MAD temp[2].xyz, src0.xyz, src0.www, src0.000 8: src0.xyz = temp[0], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD temp[0].xyz, src2.xyz, src0.HHH, src0.HHH MAD temp[2].w, src1.x, src0.1, -srcp.x 9: src0.w = temp[2], src1.xyz = const[0] MAD temp[1].x, src0.w__, src1.y__, src0.0__ 10: src0.xyz = temp[1] FRC temp[2].x, src0.x__ 11: src0.xyz = temp[2], src1.xyz = temp[1], srcp.xyz = (src1 - src0) MAD temp[4].y, srcp._x_, src0.11_, src0.00_ 12: src0.xyz = temp[2], src1.xyz = temp[1], srcp.xyz = (src1 - src0) MAD temp[2].w, src1.x, src0.1, -srcp.x 13: src0.xyz = temp[4], src1.xyz = const[0] MAD temp[1].xy, src0.xy_, src1.zz_, src0.000 14: src0.w = temp[2] MAD temp[1].z, src0.__w, src0.111, src0.000 15: src0.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src0.111, src0.000 16: src0.xyz = temp[3], src0.w = temp[3] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 17: src0.xyz = temp[0], src0.w = temp[0] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 18: src0.xyz = temp[1], src0.w = temp[1] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 pc=11************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 15, tex_end: 1 (code_addr: 004203c0) TEX: TEX t3, t0, texture[1] (000088c0) TEX t0, t0, texture[0] (00008000) 0: xyz: t1 c0 t0 bias-> t1.x (00840801) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t1.xyz c0.yyy 0.0 op: 00050300 w: t0.y 1.0 0.0 op: 00040887 1: xyz: t2 t0 t0 bias-> t0.x (00800002) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: t0.x 1.0 0.0 op: 00040883 2: xyz: t1 t0 t0 bias-> t0.x (00800001) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t1.xyz t1.xxx t1.xxx op: 84804080 NOP w: |t0.x| t1.x t1.x op: 05800043 3: xyz: t0 t1 t0 sub-> t4.x (00900040) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xyz 1.0 0.0 op: 00250a8f w: t0.x t0.x t0.x op: 00000000 4: xyz: t2 t0 t0 bias-> t2.xyz (03880002) w: t2 t0 t0 bias-> (00000002) xyz: t2.xyz t2.www 0.0 op: 00050600 w: t2.x t2.x t2.x op: 00000000 5: xyz: t0 t1 t2 sub-> t0.xyz (03802040) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t2.xyz 0.5 0.5 op: 00258b08 w: t1.x 1.0 -srcp.x op: 000b0883 6: xyz: t0 c0 t0 bias-> t1.x (00840800) w: t2 t0 t0 bias-> (00000002) xyz: t2.www c0.yyy 0.0 op: 0005030c w: t0.x t0.x t0.x op: 00000000 7: xyz: t1 t0 t0 bias-> t2.x (00880001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t1.xxx t1.xxx op: 84804080 NOP w: t1.x t1.x t1.x op: 00000000 8: xyz: t2 t1 t0 sub-> t4.y (01100042) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xxx 1.0 0.0 op: 00250a90 w: t2.x t2.x t2.x op: 00000000 9: xyz: t2 t1 t0 sub-> (00000042) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t2.xxx t2.xxx t2.xxx op: 00204081 w: t1.x 1.0 -srcp.x op: 000b0883 10: xyz: t4 c0 t0 bias-> t1.xy (01840804) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz c0.zzz 0.0 op: 00050380 w: t4.x t4.x t4.x op: 00000000 11: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t2 t0 t0 bias-> (00000002) xyz: t2.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 12: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 13: xyz: t3 t0 t0 bias-> o0.xyz (1c000003) w: t3 t0 t0 bias-> o0.w (01000003) xyz: t3.xyz 1.0 0.0 op: 00050a80 w: t3.w 1.0 0.0 op: 00040889 14: xyz: t0 t0 t0 bias-> o1.xyz (3c000000) w: t0 t0 t0 bias-> o1.w (03000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 15: xyz: t1 t0 t0 bias-> o2.xyz (5c000001) w: t1 t0 t0 bias-> o2.w (05000001) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], PERSPECTIVE DCL IN[1], GENERIC[12], PERSPECTIVE DCL IN[2], GENERIC[13], PERSPECTIVE DCL OUT[0], COLOR DCL OUT[1], COLOR[1] DCL OUT[2], COLOR[2] DCL SAMP[0] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL IMM[0] FLT32 { 0.5000, 255.0000, 0.0039, 0.0000} 0: TEX TEMP[0], IN[0].xyyy, SAMP[0], 2D 1: DP3 TEMP[1].x, IN[2].xyzz, IN[2].xyzz 2: RSQ TEMP[2].x, TEMP[1].xxxx 3: MUL TEMP[3].xyz, IN[2].xyzz, TEMP[2].xxxx 4: MAD TEMP[1].xyz, TEMP[3].xyzz, IMM[0].xxxx, IMM[0].xxxx 5: MUL TEMP[3].x, IN[1].xxxx, IMM[0].yyyy 6: FLR TEMP[4].x, TEMP[3].xxxx 7: MOV TEMP[5].x, TEMP[4].xxxx 8: ADD TEMP[3].x, TEMP[3].xxxx, -TEMP[4].xxxx 9: MUL TEMP[3].x, TEMP[3].xxxx, IMM[0].yyyy 10: FLR TEMP[4].x, TEMP[3].xxxx 11: MOV TEMP[5].y, TEMP[4].xxxx 12: ADD TEMP[3].x, TEMP[3].xxxx, -TEMP[4].xxxx 13: MOV TEMP[5].z, TEMP[3].xxxx 14: MUL TEMP[5].xy, TEMP[5].xyyy, IMM[0].zzzz 15: MOV TEMP[2].xyz, TEMP[5].xyzx 16: MOV TEMP[1].w, IMM[0].wwww 17: MOV TEMP[2].w, IMM[0].wwww 18: MOV OUT[0], TEMP[0] 19: MOV OUT[1], TEMP[1] 20: MOV OUT[2], TEMP[2] 21: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: MOV temp[1].w, const[0].wwww; 17: MOV temp[2].w, const[0].wwww; 18: MOV output[0], temp[0]; 19: MOV output[1], temp[1]; 20: MOV output[2], temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: MOV temp[1].w, const[0].wwww; 17: MOV temp[2].w, const[0].wwww; 18: MOV output[0], temp[0]; 19: MOV output[1], temp[1]; 20: MOV output[2], temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: MOV temp[1].w, const[0].wwww; 17: MOV temp[2].w, const[0].wwww; 18: MOV output[0], temp[0]; 19: MOV output[1], temp[1]; 20: MOV output[2], temp[2]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: MOV temp[1].w, const[0].wwww; 17: MOV temp[2].w, const[0].wwww; 18: MOV output[0], temp[0]; 19: MOV output[1], temp[1]; 20: MOV output[2], temp[2]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: MOV temp[1].w, const[0].wwww; 17: MOV temp[2].w, const[0].wwww; 18: MOV output[0], temp[0]; 19: MOV output[1], temp[1]; 20: MOV output[2], temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: MOV temp[1].w, const[0].wwww; 17: MOV temp[2].w, const[0].wwww; 18: MOV output[0], temp[0]; 19: MOV output[1], temp[1]; 20: MOV output[2], temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, |temp[1].xxxx|; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FRC temp[4].x, temp[3].xxxx; 7: ADD temp[4].x, temp[3].xxxx, -temp[4]; 8: MOV temp[5].x, temp[4].xxxx; 9: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 10: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 11: FRC temp[4].x, temp[3].xxxx; 12: ADD temp[4].x, temp[3].xxxx, -temp[4]; 13: MOV temp[5].y, temp[4].xxxx; 14: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 15: MOV temp[5].z, temp[3].xxxx; 16: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 17: MOV temp[2].xyz, temp[5].xyzx; 18: MOV temp[1].w, const[0].wwww; 19: MOV temp[2].w, const[0].wwww; 20: MOV output[0], temp[0]; 21: MOV output[1], temp[1]; 22: MOV output[2], temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: DP3 temp[1].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[2].x, |temp[1].x___|; 3: MUL temp[3].xyz, input[2].xyz_, temp[2].xxx_; 4: MAD temp[1].xyz, temp[3].xyz_, const[0].xxx_, const[0].xxx_; 5: MUL temp[3].x, input[1].x___, const[0].y___; 6: FRC temp[4].x, temp[3].x___; 7: ADD temp[4].x, temp[3].x___, -temp[4].x___; 8: MOV temp[5].x, temp[4].x___; 9: ADD temp[3].x, temp[3].x___, -temp[4].x___; 10: MUL temp[3].x, temp[3].x___, const[0].y___; 11: FRC temp[4].x, temp[3].x___; 12: ADD temp[4].x, temp[3].x___, -temp[4].x___; 13: MOV temp[5].y, temp[4]._x__; 14: ADD temp[3].x, temp[3].x___, -temp[4].x___; 15: MOV temp[5].z, temp[3].__x_; 16: MUL temp[5].xy, temp[5].xy__, const[0].zz__; 17: MOV temp[2].xyz, temp[5].xyz_; 18: MOV temp[1].w, const[0].___w; 19: MOV temp[2].w, const[0].___w; 20: MOV output[0], temp[0]; 21: MOV output[1], temp[1]; 22: MOV output[2], temp[2]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: DP3 temp[1].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[2].x, |temp[1].x___|; 3: MUL temp[3].xyz, input[2].xyz_, temp[2].xxx_; 4: MAD temp[1].xyz, temp[3].xyz_, const[0].xxx_, const[0].xxx_; 5: MUL temp[3].x, input[1].x___, const[0].y___; 6: FRC temp[4].x, temp[3].x___; 7: ADD temp[4].x, temp[3].x___, -temp[4].x___; 8: MOV temp[5].x, temp[4].x___; 9: ADD temp[3].x, temp[3].x___, -temp[4].x___; 10: MUL temp[3].x, temp[3].x___, const[0].y___; 11: FRC temp[4].x, temp[3].x___; 12: ADD temp[4].x, temp[3].x___, -temp[4].x___; 13: MOV temp[5].y, temp[4]._x__; 14: ADD temp[3].x, temp[3].x___, -temp[4].x___; 15: MOV temp[5].z, temp[3].__x_; 16: MUL temp[5].xy, temp[5].xy__, const[0].zz__; 17: MOV temp[2].xyz, temp[5].xyz_; 18: MOV temp[1].w, const[0].___w; 19: MOV temp[2].w, const[0].___w; 20: MOV output[0], temp[0]; 21: MOV output[1], temp[1]; 22: MOV output[2], temp[2]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[6], input[0].xy__, 2D[0]; 1: DP3 temp[7].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[8].x, |temp[7].x___|; 3: MUL temp[9].xyz, input[2].xyz_, temp[8].xxx_; 4: MAD temp[10].xyz, temp[9].xyz_, const[0].xxx_, const[0].xxx_; 5: MUL temp[11].x, input[1].x___, const[0].y___; 6: FRC temp[12].x, temp[11].x___; 7: ADD temp[13].x, temp[11].x___, -temp[12].x___; 8: MOV temp[14].x, temp[13].x___; 9: ADD temp[15].x, temp[11].x___, -temp[13].x___; 10: MUL temp[16].x, temp[15].x___, const[0].y___; 11: FRC temp[17].x, temp[16].x___; 12: ADD temp[18].x, temp[16].x___, -temp[17].x___; 13: MOV temp[14].y, temp[18]._x__; 14: ADD temp[19].x, temp[16].x___, -temp[18].x___; 15: MOV temp[20].z, temp[19].__x_; 16: MUL temp[20].xy, temp[14].xy__, const[0].zz__; 17: MOV temp[21].xyz, temp[20].xyz_; 18: MOV temp[10].w, const[0].___w; 19: MOV temp[21].w, const[0].___w; 20: MOV output[0], temp[6]; 21: MOV output[1], temp[10]; 22: MOV output[2], temp[21]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[6], input[0].xy__, 2D[0]; 1: DP3 temp[7].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[8].x, |temp[7].x___|; 3: MUL temp[9].xyz, input[2].xyz_, temp[8].xxx_; 4: MAD temp[10].xyz, temp[9].xyz_, none.HHH_, none.HHH_; 5: MUL temp[11].x, input[1].x___, const[0].y___; 6: FRC temp[12].x, temp[11].x___; 7: MOV temp[14].x, (temp[11] - temp[12]).x___; 8: ADD temp[15].x, temp[11].x___, -(temp[11] - temp[12]).x___; 9: MUL temp[16].x, temp[15].x___, const[0].y___; 10: FRC temp[17].x, temp[16].x___; 11: MOV temp[14].y, (temp[16] - temp[17])._x__; 12: ADD temp[19].x, temp[16].x___, -(temp[16] - temp[17]).x___; 13: MOV temp[20].z, temp[19].__x_; 14: MUL temp[20].xy, temp[14].xy__, const[0].zz__; 15: MOV temp[21].xyz, temp[20].xyz_; 16: MOV temp[10].w, none.___0; 17: MOV temp[21].w, none.___0; 18: MOV output[0], temp[6]; 19: MOV output[1], temp[10]; 20: MOV output[2], temp[21]; CONST[0] = { 0.5000 255.0000 0.0039 0.0000 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[6], input[0].xy__, 2D[0]; 1: DP3 temp[7].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[8].x, |temp[7].x___|; 3: MUL temp[9].xyz, input[2].xyz_, temp[8].xxx_; 4: MAD temp[10].xyz, temp[9].xyz_, none.HHH_, none.HHH_; 5: MUL temp[11].x, input[1].x___, const[0].y___; 6: FRC temp[12].x, temp[11].x___; 7: MOV temp[14].x, (temp[11] - temp[12]).x___; 8: ADD temp[15].x, temp[11].x___, -(temp[11] - temp[12]).x___; 9: MUL temp[16].x, temp[15].x___, const[0].y___; 10: FRC temp[17].x, temp[16].x___; 11: MOV temp[14].y, (temp[16] - temp[17])._x__; 12: ADD temp[19].x, temp[16].x___, -(temp[16] - temp[17]).x___; 13: MOV temp[20].z, temp[19].__x_; 14: MUL temp[20].xy, temp[14].xy__, const[0].zz__; 15: MOV temp[21].xyz, temp[20].xyz_; 16: MOV temp[10].w, none.___0; 17: MOV temp[21].w, none.___0; 18: MOV output[0], temp[6]; 19: MOV output[1], temp[10]; 20: MOV output[2], temp[21]; CONST[0] = { 0.5000 255.0000 0.0039 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[6], input[0].xy__, 2D[0]; 1: DP3 temp[7].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[8].x, |temp[7].x___|; 3: MUL temp[9].xyz, input[2].xyz_, temp[8].xxx_; 4: MAD temp[10].xyz, temp[9].xyz_, none.HHH_, none.HHH_; 5: MUL temp[11].x, input[1].x___, const[0].y___; 6: FRC temp[12].x, temp[11].x___; 7: MOV temp[14].x, (temp[11] - temp[12]).x___; 8: ADD temp[15].x, temp[11].x___, -(temp[11] - temp[12]).x___; 9: MUL temp[16].x, temp[15].x___, const[0].y___; 10: FRC temp[17].x, temp[16].x___; 11: MOV temp[14].y, (temp[16] - temp[17])._x__; 12: ADD temp[19].x, temp[16].x___, -(temp[16] - temp[17]).x___; 13: MOV temp[20].z, temp[19].__x_; 14: MUL temp[20].xy, temp[14].xy__, const[0].zz__; 15: MOV temp[21].xyz, temp[20].xyz_; 16: MOV temp[10].w, none.___0; 17: MOV temp[21].w, none.___0; 18: MOV output[0], temp[6]; 19: MOV output[1], temp[10]; 20: MOV output[2], temp[21]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[6], input[0].xy__, 2D[0]; 1: src0.xyz = input[2] DP3 temp[7].x, src0.xyz, src0.xyz 2: src0.xyz = temp[7] REPL_ALPHA temp[8].x RSQ, |src0.x| 3: src0.xyz = input[2], src1.xyz = temp[8] MAD temp[9].xyz, src0.xyz, src1.xxx, src0.000 4: src0.xyz = temp[9] MAD temp[10].xyz, src0.xyz, src0.HHH, src0.HHH 5: src0.xyz = input[1], src1.xyz = const[0] MAD temp[11].x, src0.x__, src1.y__, src0.000 6: src0.xyz = temp[11] FRC temp[12].x, src0.x__ 7: src0.xyz = temp[12], src1.xyz = temp[11], srcp.xyz = (src1 - src0) MAD temp[14].x, srcp.x__, src0.111, src0.000 8: src0.xyz = temp[12], src1.xyz = temp[11], srcp.xyz = (src1 - src0) MAD temp[15].x, src1.x__, src0.111, -srcp.x__ 9: src0.xyz = temp[15], src1.xyz = const[0] MAD temp[16].x, src0.x__, src1.y__, src0.000 10: src0.xyz = temp[16] FRC temp[17].x, src0.x__ 11: src0.xyz = temp[17], src1.xyz = temp[16], srcp.xyz = (src1 - src0) MAD temp[14].y, srcp._x_, src0.111, src0.000 12: src0.xyz = temp[17], src1.xyz = temp[16], srcp.xyz = (src1 - src0) MAD temp[19].x, src1.x__, src0.111, -srcp.x__ 13: src0.xyz = temp[19] MAD temp[20].z, src0.__x, src0.111, src0.000 14: src0.xyz = temp[14], src1.xyz = const[0] MAD temp[20].xy, src0.xy_, src1.zz_, src0.000 15: src0.xyz = temp[20] MAD temp[21].xyz, src0.xyz, src0.111, src0.000 16: MAD temp[10].w, src0.0, src0.1, src0.0 17: MAD temp[21].w, src0.0, src0.1, src0.0 18: src0.xyz = temp[6], src0.w = temp[6] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 19: src0.xyz = temp[10], src0.w = temp[10] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 20: src0.xyz = temp[21], src0.w = temp[21] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[6], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = input[1], src1.xyz = const[0] MAD temp[11].x, src0.x__, src1.y__, src0.000 MAD temp[21].w, src0.0, src0.1, src0.0 3: src0.xyz = input[2] DP3 temp[7].x, src0.xyz, src0.xyz MAD temp[10].w, src0.0, src0.1, src0.0 4: src0.xyz = temp[11], src1.xyz = temp[7] FRC temp[12].x, src0.x__ RSQ temp[8].w, |src1.x| 5: src0.xyz = temp[12], src1.xyz = temp[11], srcp.xyz = (src1 - src0) MAD temp[14].x, srcp.x__, src0.111, src0.000 6: src0.xyz = input[2], src0.w = temp[8], src1.xyz = temp[8] MAD temp[9].xyz, src0.xyz, src0.www, src0.000 7: src0.xyz = temp[12], src1.xyz = temp[11], src2.xyz = temp[9], srcp.xyz = (src1 - src0) MAD temp[10].xyz, src2.xyz, src0.HHH, src0.HHH MAD temp[15].w, src1.x, src0.1, -srcp.x 8: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = const[0] MAD temp[16].x, src0.w__, src1.y__, src0.000 9: src0.xyz = temp[16] FRC temp[17].x, src0.x__ 10: src0.xyz = temp[17], src1.xyz = temp[16], srcp.xyz = (src1 - src0) MAD temp[14].y, srcp._x_, src0.111, src0.000 11: src0.xyz = temp[17], src1.xyz = temp[16], srcp.xyz = (src1 - src0) MAD temp[19].w, src1.x, src0.1, -srcp.x 12: src0.xyz = temp[14], src1.xyz = const[0] MAD temp[20].xy, src0.xy_, src1.zz_, src0.000 13: src0.xyz = temp[19], src0.w = temp[19] MAD temp[20].z, src0.__w, src0.111, src0.000 14: src0.xyz = temp[20] MAD temp[21].xyz, src0.xyz, src0.111, src0.000 15: src0.xyz = temp[6], src0.w = temp[6] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 16: src0.xyz = temp[10], src0.w = temp[10] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 17: src0.xyz = temp[21], src0.w = temp[21] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[6], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = input[1], src1.xyz = const[0] MAD temp[11].x, src0.x__, src1.y__, src0.000 MAD temp[21].w, src0.0, src0.1, src0.0 3: src0.xyz = input[2] DP3 temp[7].x, src0.xyz, src0.xyz MAD temp[10].w, src0.0, src0.1, src0.0 4: src0.xyz = temp[11], src1.xyz = temp[7] FRC temp[12].x, src0.x__ RSQ temp[8].w, |src1.x| 5: src0.xyz = temp[12], src1.xyz = temp[11], srcp.xyz = (src1 - src0) MAD temp[14].x, srcp.x__, src0.111, src0.000 6: src0.xyz = input[2], src0.w = temp[8] MAD temp[9].xyz, src0.xyz, src0.www, src0.000 7: src0.xyz = temp[12], src1.xyz = temp[11], src2.xyz = temp[9], srcp.xyz = (src1 - src0) MAD temp[10].xyz, src2.xyz, src0.HHH, src0.HHH MAD temp[15].w, src1.x, src0.1, -srcp.x 8: src0.w = temp[15], src1.xyz = const[0] MAD temp[16].x, src0.w__, src1.y__, src0.000 9: src0.xyz = temp[16] FRC temp[17].x, src0.x__ 10: src0.xyz = temp[17], src1.xyz = temp[16], srcp.xyz = (src1 - src0) MAD temp[14].y, srcp._x_, src0.111, src0.000 11: src0.xyz = temp[17], src1.xyz = temp[16], srcp.xyz = (src1 - src0) MAD temp[19].w, src1.x, src0.1, -srcp.x 12: src0.xyz = temp[14], src1.xyz = const[0] MAD temp[20].xy, src0.xy_, src1.zz_, src0.000 13: src0.w = temp[19] MAD temp[20].z, src0.__w, src0.111, src0.000 14: src0.xyz = temp[20] MAD temp[21].xyz, src0.xyz, src0.111, src0.000 15: src0.xyz = temp[6], src0.w = temp[6] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 16: src0.xyz = temp[10], src0.w = temp[10] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 17: src0.xyz = temp[21], src0.w = temp[21] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = input[1], src1.xyz = const[0] MAD temp[1].x, src0.x__, src1.y__, src0.0__ MAD temp[1].w, src0.0, src0.1, src0.0 3: src0.xyz = input[2] DP3 temp[1].y, src0.xyz, src0.xyz MAD temp[2].w, src0.0, src0.1, src0.0 4: src0.xyz = temp[1], src1.xyz = temp[1] FRC temp[3].x, src0.x__ RSQ temp[3].w, |src1.y| 5: src0.xyz = temp[3], src1.xyz = temp[1], srcp.xyz = (src1 - src0) MAD temp[4].x, srcp.x__, src0.11_, src0.00_ 6: src0.xyz = input[2], src0.w = temp[3] MAD temp[2].xyz, src0.xyz, src0.www, src0.000 7: src0.xyz = temp[3], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD temp[1].xyz, src2.xyz, src0.HHH, src0.HHH MAD temp[3].w, src1.x, src0.1, -srcp.x 8: src0.w = temp[3], src1.xyz = const[0] MAD temp[2].x, src0.w__, src1.y__, src0.0__ 9: src0.xyz = temp[2] FRC temp[3].x, src0.x__ 10: src0.xyz = temp[3], src1.xyz = temp[2], srcp.xyz = (src1 - src0) MAD temp[4].y, srcp._x_, src0.11_, src0.00_ 11: src0.xyz = temp[3], src1.xyz = temp[2], srcp.xyz = (src1 - src0) MAD temp[3].w, src1.x, src0.1, -srcp.x 12: src0.xyz = temp[4], src1.xyz = const[0] MAD temp[2].xy, src0.xy_, src1.zz_, src0.000 13: src0.w = temp[3] MAD temp[2].z, src0.__w, src0.111, src0.000 14: src0.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src0.111, src0.000 15: src0.xyz = temp[0], src0.w = temp[0] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 16: src0.xyz = temp[1], src0.w = temp[2] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 17: src0.xyz = temp[2], src0.w = temp[1] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 pc=12************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 15, tex_end: 0 (code_addr: 004003c0) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t1 c0 t0 bias-> t1.x (00840801) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t1.xyz c0.yyy 0.0 op: 00050300 w: 0.0 1.0 0.0 op: 00040890 1: xyz: t2 t0 t0 bias-> t1.y (01040002) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: 0.0 1.0 0.0 op: 00040890 2: xyz: t1 t1 t0 bias-> t3.x (008c0041) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: t1.xyz t1.xxx t1.xxx op: 84804080 NOP w: |t1.y| t1.x t1.x op: 05800044 3: xyz: t3 t1 t0 sub-> t4.x (00900043) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xyz 1.0 0.0 op: 00250a8f w: t3.x t3.x t3.x op: 00000000 4: xyz: t2 t0 t0 bias-> t2.xyz (03880002) w: t3 t0 t0 bias-> (00000003) xyz: t2.xyz t3.www 0.0 op: 00050600 w: t2.x t2.x t2.x op: 00000000 5: xyz: t3 t1 t2 sub-> t1.xyz (03842043) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: t2.xyz 0.5 0.5 op: 00258b08 w: t1.x 1.0 -srcp.x op: 000b0883 6: xyz: t0 c0 t0 bias-> t2.x (00880800) w: t3 t0 t0 bias-> (00000003) xyz: t3.www c0.yyy 0.0 op: 0005030c w: t0.x t0.x t0.x op: 00000000 7: xyz: t2 t0 t0 bias-> t3.x (008c0002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t2.xxx t2.xxx op: 84804080 NOP w: t2.x t2.x t2.x op: 00000000 8: xyz: t3 t2 t0 sub-> t4.y (01100083) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xxx 1.0 0.0 op: 00250a90 w: t3.x t3.x t3.x op: 00000000 9: xyz: t3 t2 t0 sub-> (00000083) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: t3.xxx t3.xxx t3.xxx op: 00204081 w: t2.x 1.0 -srcp.x op: 000b0883 10: xyz: t4 c0 t0 bias-> t2.xy (01880804) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz c0.zzz 0.0 op: 00050380 w: t4.x t4.x t4.x op: 00000000 11: xyz: t0 t0 t0 bias-> t2.z (02080000) w: t3 t0 t0 bias-> (00000003) xyz: t3.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 12: xyz: t2 t0 t0 bias-> t2.xyz (03880002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz 1.0 0.0 op: 00050a80 w: t2.x t2.x t2.x op: 00000000 13: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 14: xyz: t1 t0 t0 bias-> o1.xyz (3c000001) w: t2 t0 t0 bias-> o1.w (03000002) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t2.w 1.0 0.0 op: 00040889 15: xyz: t2 t0 t0 bias-> o2.xyz (5c000002) w: t1 t0 t0 bias-> o2.w (05000001) xyz: t2.xyz 1.0 0.0 op: 00050a80 w: t1.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL IN[1], GENERIC[12], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0], LOCAL 0: TEX TEMP[0], IN[0].xyyy, SAMP[0], 2D 1: MUL TEMP[0], TEMP[0], IN[1] 2: MOV OUT[0], TEMP[0] 3: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MUL temp[2], temp[1], input[1]; 2: MOV output[0], temp[2]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MUL temp[2], temp[1], input[1]; 2: MOV output[0], temp[2]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MUL temp[2], temp[1], input[1]; 2: MOV output[0], temp[2]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MUL temp[2], temp[1], input[1]; 2: MOV output[0], temp[2]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[1], src1.w = input[1] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[2].w, src0.w, src1.w, src0.0 2: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[1], src1.w = input[1] SEM_WAIT MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[2].w, src0.w, src1.w, src0.0 3: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[1], src1.w = input[1] SEM_WAIT MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[2].w, src0.w, src1.w, src0.0 3: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[1], src1.w = input[1] SEM_WAIT MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 3: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=13************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 1, tex_end: 0 (code_addr: 00400040) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t0 t1 t0 bias-> t0.xyz (03800040) w: t0 t1 t0 bias-> t0.w (00800040) xyz: t0.xyz t1.xyz 0.0 op: 00050200 w: t0.w t1.w 0.0 op: 00040509 1: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], POSITION, LINEAR DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[2] DCL CONST[0] DCL TEMP[0] DCL TEMP[1], LOCAL 0: MOV TEMP[0], IN[0] 1: MAD TEMP[0].y, IN[0], CONST[2].xxxx, CONST[2].yyyy 2: TEX TEMP[1].xyz, TEMP[0].xyyy, SAMP[0], RECT 3: MUL TEMP[1].xyz, TEMP[1].xyzz, CONST[0].xyzz 4: MOV OUT[0], TEMP[1] 5: END Fragment Program: before compilation # Radeon Compiler Program 0: RCP temp[2].w, input[0].wwww; 1: MUL temp[2].xyz, input[0], temp[2].wwww; 2: MAD temp[2].xyz, temp[2].xyz0, const[3].xyz0, const[4].xyz0; 3: MOV temp[0], temp[2]; 4: MAD temp[0].y, temp[2], const[2].xxxx, const[2].yyyy; 5: TEX temp[1].xyz, temp[0].xyyy, RECT[0]; 6: MUL temp[1].xyz, temp[1].xyzz, const[0].xyzz; 7: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: RCP temp[2].w, input[0].wwww; 1: MUL temp[2].xyz, input[0], temp[2].wwww; 2: MAD temp[2].xyz, temp[2].xyz0, const[3].xyz0, const[4].xyz0; 3: MOV temp[0], temp[2]; 4: MAD temp[0].y, temp[2], const[2].xxxx, const[2].yyyy; 5: TEX temp[1].xyz, temp[0].xyyy, RECT[0]; 6: MUL temp[1].xyz, temp[1].xyzz, const[0].xyzz; 7: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: RCP temp[2].w, input[0].wwww; 1: MUL temp[2].xyz, input[0], temp[2].wwww; 2: MAD temp[2].xyz, temp[2].xyz0, const[3].xyz0, const[4].xyz0; 3: MOV temp[0], temp[2]; 4: MAD temp[0].y, temp[2], const[2].xxxx, const[2].yyyy; 5: TEX temp[1].xyz, temp[0].xyyy, RECT[0]; 6: MUL temp[1].xyz, temp[1].xyzz, const[0].xyzz; 7: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: RCP temp[2].w, input[0].wwww; 1: MUL temp[2].xyz, input[0], temp[2].wwww; 2: MAD temp[2].xyz, temp[2].xyz0, const[3].xyz0, const[4].xyz0; 3: MOV temp[0], temp[2]; 4: MAD temp[0].y, temp[2], const[2].xxxx, const[2].yyyy; 5: TEX temp[1].xyz, temp[0].xyyy, RECT[0]; 6: MUL temp[1].xyz, temp[1].xyzz, const[0].xyzz; 7: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: RCP temp[2].w, input[0].wwww; 1: MUL temp[2].xyz, input[0], temp[2].wwww; 2: MAD temp[2].xyz, temp[2].xyz0, const[3].xyz0, const[4].xyz0; 3: MOV temp[0], temp[2]; 4: MAD temp[0].y, temp[2], const[2].xxxx, const[2].yyyy; 5: TEX temp[1].xyz, temp[0].xyyy, RECT[0]; 6: MUL temp[1].xyz, temp[1].xyzz, const[0].xyzz; 7: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: RCP temp[2].w, input[0].wwww; 1: MUL temp[2].xyz, input[0], temp[2].wwww; 2: MAD temp[2].xyz, temp[2].xyz0, const[3].xyz0, const[4].xyz0; 3: MOV temp[0], temp[2]; 4: MAD temp[0].y, temp[2], const[2].xxxx, const[2].yyyy; 5: MUL temp[3], temp[0].xyyy, const[5]; 6: TEX temp[4], temp[3], 2D[0]; 7: MOV temp[1].xyz, temp[4]; 8: MUL temp[1].xyz, temp[1].xyzz, const[0].xyzz; 9: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: RCP temp[2].w, input[0].wwww; 1: MUL temp[2].xyz, input[0], temp[2].wwww; 2: MAD temp[2].xyz, temp[2].xyz0, const[3].xyz0, const[4].xyz0; 3: MOV temp[0], temp[2]; 4: MAD temp[0].y, temp[2], const[2].xxxx, const[2].yyyy; 5: MUL temp[3], temp[0].xyyy, const[5]; 6: TEX temp[4], temp[3], 2D[0]; 7: MOV temp[1].xyz, temp[4]; 8: MUL temp[1].xyz, temp[1].xyzz, const[0].xyzz; 9: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: RCP temp[2].w, input[0].___w; 1: MUL temp[2].xy, input[0].xy__, temp[2].ww__; 2: MAD temp[2].xy, temp[2].xy__, const[3].xy__, const[4].xy__; 3: MOV temp[0].x, temp[2].x___; 4: MAD temp[0].y, temp[2]._y__, const[2]._x__, const[2]._y__; 5: MUL temp[3].xy, temp[0].xy__, const[5].xy__; 6: TEX temp[4].xyz, temp[3].xy__, 2D[0]; 7: MOV temp[1].xyz, temp[4].xyz_; 8: MUL temp[1].xyz, temp[1].xyz_, const[0].xyz_; 9: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: RCP temp[2].w, input[0].___w; 1: MUL temp[2].xy, input[0].xy__, temp[2].ww__; 2: MAD temp[2].xy, temp[2].xy__, const[3].xy__, const[4].xy__; 3: MOV temp[0].x, temp[2].x___; 4: MAD temp[0].y, temp[2]._y__, const[2]._x__, const[2]._y__; 5: MUL temp[3].xy, temp[0].xy__, const[5].xy__; 6: TEX temp[4].xyz, temp[3].xy__, 2D[0]; 7: MOV temp[1].xyz, temp[4].xyz_; 8: MUL temp[1].xyz, temp[1].xyz_, const[0].xyz_; 9: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: RCP temp[5].w, input[0].___w; 1: MUL temp[6].xy, input[0].xy__, temp[5].ww__; 2: MAD temp[7].xy, temp[6].xy__, const[3].xy__, const[4].xy__; 3: MOV temp[8].x, temp[7].x___; 4: MAD temp[8].y, temp[7]._y__, const[2]._x__, const[2]._y__; 5: MUL temp[9].xy, temp[8].xy__, const[5].xy__; 6: TEX temp[10].xyz, temp[9].xy__, 2D[0]; 7: MOV temp[11].xyz, temp[10].xyz_; 8: MUL temp[12].xyz, temp[11].xyz_, const[0].xyz_; 9: MOV output[0], temp[12]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: RCP temp[5].w, input[0].___w; 1: MUL temp[6].xy, input[0].xy__, temp[5].ww__; 2: MAD temp[7].xy, temp[6].xy__, const[3].xy__, const[4].xy__; 3: MOV temp[8].x, temp[7].x___; 4: MAD temp[8].y, temp[7]._y__, const[2]._x__, const[2]._y__; 5: MUL temp[9].xy, temp[8].xy__, const[5].xy__; 6: TEX temp[10].xyz, temp[9].xy__, 2D[0]; 7: MUL temp[12].xyz, temp[10].xyz_, const[0].xyz_; 8: MOV output[0], temp[12]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: RCP temp[5].w, input[0].___w; 1: MUL temp[6].xy, input[0].xy__, temp[5].ww__; 2: MAD temp[7].xy, temp[6].xy__, const[3].xy__, const[4].xy__; 3: MOV temp[8].x, temp[7].x___; 4: MAD temp[8].y, temp[7]._y__, const[2]._x__, const[2]._y__; 5: MUL temp[9].xy, temp[8].xy__, const[5].xy__; 6: TEX temp[10].xyz, temp[9].xy__, 2D[0]; 7: MUL temp[12].xyz, temp[10].xyz_, const[0].xyz_; 8: MOV output[0], temp[12]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: RCP temp[5].w, input[0].___w; 1: MUL temp[6].xy, input[0].xy__, temp[5].ww__; 2: MAD temp[7].xy, temp[6].xy__, const[2].xy__, const[3].xy__; 3: MOV temp[8].x, temp[7].x___; 4: MAD temp[8].y, temp[7]._y__, const[1]._x__, const[1]._y__; 5: MUL temp[9].xy, temp[8].xy__, const[4].xy__; 6: TEX temp[10].xyz, temp[9].xy__, 2D[0]; 7: MUL temp[12].xyz, temp[10].xyz_, const[0].xyz_; 8: MOV output[0], temp[12]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[5].w, src0.w 1: src0.xyz = input[0], src0.w = temp[5] MAD temp[6].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[6], src1.xyz = const[2], src2.xyz = const[3] MAD temp[7].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[7] MAD temp[8].x, src0.x__, src0.111, src0.000 4: src0.xyz = temp[7], src1.xyz = const[1] MAD temp[8].y, src0._y_, src1._x_, src1._y_ 5: src0.xyz = temp[8], src1.xyz = const[4] MAD temp[9].xy, src0.xy_, src1.xy_, src0.000 6: TEX temp[10].xyz, temp[9].xy__, 2D[0]; 7: src0.xyz = temp[10], src1.xyz = const[0] MAD temp[12].xyz, src0.xyz, src1.xyz, src0.000 8: src0.xyz = temp[12], src0.w = temp[12] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[5].w, src0.w 1: src0.xyz = input[0], src0.w = temp[5] MAD temp[6].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[6], src1.xyz = const[2], src2.xyz = const[3] MAD temp[7].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[7], src1.xyz = const[1] MAD temp[8].y, src0._y_, src1._x_, src1._y_ 4: src0.xyz = temp[7] MAD temp[8].x, src0.x__, src0.111, src0.000 5: src0.xyz = temp[8], src1.xyz = const[4] MAD temp[9].xy, src0.xy_, src1.xy_, src0.000 6: BEGIN_TEX; 7: TEX temp[10].xyz, temp[9].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 8: src0.xyz = temp[10], src1.xyz = const[0] SEM_WAIT MAD temp[12].xyz, src0.xyz, src1.xyz, src0.000 9: src0.xyz = temp[12], src0.w = temp[12] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[5].w, src0.w 1: src0.xyz = input[0], src0.w = temp[5] MAD temp[6].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[6], src1.xyz = const[2], src2.xyz = const[3] MAD temp[7].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[7], src1.xyz = const[1] MAD temp[8].y, src0._y_, src1._x_, src1._y_ 4: src0.xyz = temp[7] MAD temp[8].x, src0.x__, src0.111, src0.000 5: src0.xyz = temp[8], src1.xyz = const[4] MAD temp[9].xy, src0.xy_, src1.xy_, src0.000 6: BEGIN_TEX; 7: TEX temp[10].xyz, temp[9].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 8: src0.xyz = temp[10], src1.xyz = const[0] SEM_WAIT MAD temp[12].xyz, src0.xyz, src1.xyz, src0.000 9: src0.xyz = temp[12], src0.w = temp[12] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[1].w, src0.w 1: src0.xyz = input[0], src0.w = temp[1] MAD temp[0].xy, src0.xy_, src0.ww_, src0.00_ 2: src0.xyz = temp[0], src1.xyz = const[2], src2.xyz = const[3] MAD temp[0].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[0], src1.xyz = const[1] MAD temp[1].y, src0._y_, src1._x_, src1._y_ 4: src0.xyz = temp[0] MAD temp[1].x, src0.x__, src0.11_, src0.00_ 5: src0.xyz = temp[1], src1.xyz = const[4] MAD temp[0].xy, src0.xy_, src1.xy_, src0.00_ 6: BEGIN_TEX; 7: TEX temp[0].xyz, temp[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 8: src0.xyz = temp[0], src1.xyz = const[0] SEM_WAIT MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 9: src0.xyz = temp[0], src0.w = temp[12] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=14************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 5, tex_end: 0 (code_addr: 00000140) 0: xyz: t0 t0 t0 bias-> (00000000) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: t0.w t0.x t0.x op: 05000009 1: xyz: t0 t0 t0 bias-> t0.xy (01800000) w: t1 t0 t0 bias-> (00000001) xyz: t0.xyz t1.www 0.0 op: 00050600 w: t0.x t0.x t0.x op: 00000000 2: xyz: t0 c2 c3 bias-> t0.xy (01823880) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c2.xyz c3.xyz op: 00020200 w: t0.x t0.x t0.x op: 00000000 3: xyz: t0 c1 t0 bias-> t1.y (01040840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c1.xxx c1.xyz op: 00010280 w: t0.x t0.x t0.x op: 00000000 4: xyz: t0 t0 t0 bias-> t1.x (00840000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 5: xyz: t1 c4 t0 bias-> t0.xy (01800901) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c4.xyz 0.0 op: 00050200 w: t1.x t1.x t1.x op: 00000000 NODE 1: alu_offset: 6, tex_offset: 0, alu_end: 1, tex_end: 0 (code_addr: 00400046) TEX: TEX t0, t0, texture[0] (00008000) 6: xyz: t0 c0 t0 bias-> t0.xyz (03800800) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c0.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 7: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t12 t0 t0 bias-> o0.w (0100000c) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t12.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL OUT[0], COLOR IMM[0] FLT32 { 1.0000, 0.0000, 0.0000, 0.0000} 0: MOV OUT[0], IMM[0].xxxx 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], none.1111; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], none.1111; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], none.1111; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: MAD color[0].xyz, src0.111, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: MAD color[0].xyz, src0.111, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: MAD color[0].xyz, src0.111, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: MAD color[0].xyz, src0.111, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 pc=15************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: 1.0 1.0 0.0 op: 00050a95 w: 1.0 1.0 0.0 op: 00040891 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], POSITION, LINEAR DCL IN[1], GENERIC[12], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL CONST[7..8] DCL CONST[4..6] DCL TEMP[0] DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL DCL TEMP[6], LOCAL DCL TEMP[7], LOCAL DCL TEMP[8], LOCAL IMM[0] FLT32 { 1.0000, 0.0039, 0.0000, 2.0000} IMM[1] FLT32 { -1.0000, 0.0000, 10.0000, 0.0000} 0: MOV TEMP[0], IN[0] 1: MAD TEMP[0].y, IN[0], CONST[8].xxxx, CONST[8].yyyy 2: TEX TEMP[1], TEMP[0].xyyy, SAMP[2], RECT 3: TEX TEMP[2], TEMP[0].xyyy, SAMP[1], RECT 4: RCP TEMP[3].x, IN[1].zzzz 5: MUL TEMP[3].xy, IN[1].xyyy, TEMP[3].xxxx 6: MOV TEMP[3].z, CONST[4].xxxx 7: DP3 TEMP[4].x, TEMP[2].xyzz, IMM[0].xyzz 8: MUL TEMP[3].xyz, TEMP[3].xyzz, TEMP[4].xxxx 9: ADD TEMP[4].xyz, CONST[7].xyzz, -TEMP[3].xyzz 10: MUL TEMP[4].xyz, TEMP[4].xyzz, CONST[6].xxxx 11: DP3 TEMP[5].x, TEMP[4].xyzz, TEMP[4].xyzz 12: RSQ TEMP[5].x, TEMP[5].xxxx 13: MUL TEMP[5].xyz, TEMP[4].xyzz, TEMP[5].xxxx 14: MAD TEMP[6].xyz, TEMP[1].xyzz, IMM[0].wwww, IMM[1].xxxx 15: DP3 TEMP[7].x, TEMP[6].xyzz, TEMP[6].xyzz 16: RSQ TEMP[7].x, TEMP[7].xxxx 17: MUL TEMP[6].xyz, TEMP[6].xyzz, TEMP[7].xxxx 18: MOV TEMP[3].xyz, -TEMP[3].xyzx 19: DP3 TEMP[7].x, TEMP[3].xyzz, TEMP[3].xyzz 20: RSQ TEMP[7].x, TEMP[7].xxxx 21: MAD TEMP[3].xyz, TEMP[3].xyzz, TEMP[7].xxxx, TEMP[5].xyzz 22: TEX TEMP[7].xyz, TEMP[0].xyyy, SAMP[3], RECT 23: MUL TEMP[7].xyz, TEMP[7].xyzz, CONST[5].xyzz 24: DP3 TEMP[5].x, TEMP[5].xyzz, TEMP[6].xyzz 25: MAX TEMP[5].x, TEMP[5].xxxx, IMM[1].yyyy 26: MUL TEMP[1].x, CONST[5].wwww, TEMP[1].wwww 27: DP3 TEMP[8].x, TEMP[3].xyzz, TEMP[3].xyzz 28: RSQ TEMP[8].x, TEMP[8].xxxx 29: MUL TEMP[3].xyz, TEMP[3].xyzz, TEMP[8].xxxx 30: DP3_SAT TEMP[3].x, TEMP[3].xyzz, TEMP[6].xyzz 31: MUL TEMP[2].x, TEMP[2].wwww, IMM[1].zzzz 32: EX2 TEMP[2].x, TEMP[2].xxxx 33: ADD TEMP[2].x, TEMP[2].xxxx, IMM[0].xxxx 34: POW TEMP[2].x, TEMP[3].xxxx, TEMP[2].xxxx 35: MUL TEMP[1].x, TEMP[1].xxxx, TEMP[2].xxxx 36: MUL TEMP[1].xyz, TEMP[1].xxxx, CONST[5].xyzz 37: MAD TEMP[1].xyz, TEMP[7].xyzz, TEMP[5].xxxx, TEMP[1].xyzz 38: DP3 TEMP[2].x, TEMP[4].xyzz, TEMP[4].xyzz 39: TEX TEMP[2].x, TEMP[2].xxxx, SAMP[0], 1D 40: MUL TEMP[1].xyz, TEMP[1].xyzz, TEMP[2].xxxx 41: MOV OUT[0], TEMP[1] 42: END Fragment Program: before compilation # Radeon Compiler Program 0: RCP temp[9].w, input[0].wwww; 1: MUL temp[9].xyz, input[0], temp[9].wwww; 2: MAD temp[9].xyz, temp[9].xyz0, const[11].xyz0, const[12].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[8].xxxx, const[8].yyyy; 5: TEX temp[1], temp[0].xyyy, RECT[2]; 6: TEX temp[2], temp[0].xyyy, RECT[1]; 7: RCP temp[3].x, input[1].zzzz; 8: MUL temp[3].xy, input[1].xyyy, temp[3].xxxx; 9: MOV temp[3].z, const[4].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, const[9].xyzz; 11: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 12: ADD temp[4].xyz, const[7].xyzz, -temp[3].xyzz; 13: MUL temp[4].xyz, temp[4].xyzz, const[6].xxxx; 14: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 15: RSQ temp[5].x, temp[5].xxxx; 16: MUL temp[5].xyz, temp[4].xyzz, temp[5].xxxx; 17: MAD temp[6].xyz, temp[1].xyzz, const[9].wwww, const[10].xxxx; 18: DP3 temp[7].x, temp[6].xyzz, temp[6].xyzz; 19: RSQ temp[7].x, temp[7].xxxx; 20: MUL temp[6].xyz, temp[6].xyzz, temp[7].xxxx; 21: MOV temp[3].xyz, -temp[3].xyzx; 22: DP3 temp[7].x, temp[3].xyzz, temp[3].xyzz; 23: RSQ temp[7].x, temp[7].xxxx; 24: MAD temp[3].xyz, temp[3].xyzz, temp[7].xxxx, temp[5].xyzz; 25: TEX temp[7].xyz, temp[0].xyyy, RECT[3]; 26: MUL temp[7].xyz, temp[7].xyzz, const[5].xyzz; 27: DP3 temp[5].x, temp[5].xyzz, temp[6].xyzz; 28: MAX temp[5].x, temp[5].xxxx, const[10].yyyy; 29: MUL temp[1].x, const[5].wwww, temp[1].wwww; 30: DP3 temp[8].x, temp[3].xyzz, temp[3].xyzz; 31: RSQ temp[8].x, temp[8].xxxx; 32: MUL temp[3].xyz, temp[3].xyzz, temp[8].xxxx; 33: DP3_SAT temp[3].x, temp[3].xyzz, temp[6].xyzz; 34: MUL temp[2].x, temp[2].wwww, const[10].zzzz; 35: EX2 temp[2].x, temp[2].xxxx; 36: ADD temp[2].x, temp[2].xxxx, const[9].xxxx; 37: POW temp[2].x, temp[3].xxxx, temp[2].xxxx; 38: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 39: MUL temp[1].xyz, temp[1].xxxx, const[5].xyzz; 40: MAD temp[1].xyz, temp[7].xyzz, temp[5].xxxx, temp[1].xyzz; 41: DP3 temp[2].x, temp[4].xyzz, temp[4].xyzz; 42: TEX temp[2].x, temp[2].xxxx, 1D[0]; 43: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 44: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: RCP temp[9].w, input[0].wwww; 1: MUL temp[9].xyz, input[0], temp[9].wwww; 2: MAD temp[9].xyz, temp[9].xyz0, const[11].xyz0, const[12].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[8].xxxx, const[8].yyyy; 5: TEX temp[1], temp[0].xyyy, RECT[2]; 6: TEX temp[2], temp[0].xyyy, RECT[1]; 7: RCP temp[3].x, input[1].zzzz; 8: MUL temp[3].xy, input[1].xyyy, temp[3].xxxx; 9: MOV temp[3].z, const[4].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, const[9].xyzz; 11: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 12: ADD temp[4].xyz, const[7].xyzz, -temp[3].xyzz; 13: MUL temp[4].xyz, temp[4].xyzz, const[6].xxxx; 14: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 15: RSQ temp[5].x, temp[5].xxxx; 16: MUL temp[5].xyz, temp[4].xyzz, temp[5].xxxx; 17: MAD temp[6].xyz, temp[1].xyzz, const[9].wwww, const[10].xxxx; 18: DP3 temp[7].x, temp[6].xyzz, temp[6].xyzz; 19: RSQ temp[7].x, temp[7].xxxx; 20: MUL temp[6].xyz, temp[6].xyzz, temp[7].xxxx; 21: MOV temp[3].xyz, -temp[3].xyzx; 22: DP3 temp[7].x, temp[3].xyzz, temp[3].xyzz; 23: RSQ temp[7].x, temp[7].xxxx; 24: MAD temp[3].xyz, temp[3].xyzz, temp[7].xxxx, temp[5].xyzz; 25: TEX temp[7].xyz, temp[0].xyyy, RECT[3]; 26: MUL temp[7].xyz, temp[7].xyzz, const[5].xyzz; 27: DP3 temp[5].x, temp[5].xyzz, temp[6].xyzz; 28: MAX temp[5].x, temp[5].xxxx, const[10].yyyy; 29: MUL temp[1].x, const[5].wwww, temp[1].wwww; 30: DP3 temp[8].x, temp[3].xyzz, temp[3].xyzz; 31: RSQ temp[8].x, temp[8].xxxx; 32: MUL temp[3].xyz, temp[3].xyzz, temp[8].xxxx; 33: DP3_SAT temp[3].x, temp[3].xyzz, temp[6].xyzz; 34: MUL temp[2].x, temp[2].wwww, const[10].zzzz; 35: EX2 temp[2].x, temp[2].xxxx; 36: ADD temp[2].x, temp[2].xxxx, const[9].xxxx; 37: POW temp[2].x, temp[3].xxxx, temp[2].xxxx; 38: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 39: MUL temp[1].xyz, temp[1].xxxx, const[5].xyzz; 40: MAD temp[1].xyz, temp[7].xyzz, temp[5].xxxx, temp[1].xyzz; 41: DP3 temp[2].x, temp[4].xyzz, temp[4].xyzz; 42: TEX temp[2].x, temp[2].xxxx, 1D[0]; 43: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 44: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: RCP temp[9].w, input[0].wwww; 1: MUL temp[9].xyz, input[0], temp[9].wwww; 2: MAD temp[9].xyz, temp[9].xyz0, const[11].xyz0, const[12].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[8].xxxx, const[8].yyyy; 5: TEX temp[1], temp[0].xyyy, RECT[2]; 6: TEX temp[2], temp[0].xyyy, RECT[1]; 7: RCP temp[3].x, input[1].zzzz; 8: MUL temp[3].xy, input[1].xyyy, temp[3].xxxx; 9: MOV temp[3].z, const[4].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, const[9].xyzz; 11: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 12: ADD temp[4].xyz, const[7].xyzz, -temp[3].xyzz; 13: MUL temp[4].xyz, temp[4].xyzz, const[6].xxxx; 14: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 15: RSQ temp[5].x, temp[5].xxxx; 16: MUL temp[5].xyz, temp[4].xyzz, temp[5].xxxx; 17: MAD temp[6].xyz, temp[1].xyzz, const[9].wwww, const[10].xxxx; 18: DP3 temp[7].x, temp[6].xyzz, temp[6].xyzz; 19: RSQ temp[7].x, temp[7].xxxx; 20: MUL temp[6].xyz, temp[6].xyzz, temp[7].xxxx; 21: MOV temp[3].xyz, -temp[3].xyzx; 22: DP3 temp[7].x, temp[3].xyzz, temp[3].xyzz; 23: RSQ temp[7].x, temp[7].xxxx; 24: MAD temp[3].xyz, temp[3].xyzz, temp[7].xxxx, temp[5].xyzz; 25: TEX temp[7].xyz, temp[0].xyyy, RECT[3]; 26: MUL temp[7].xyz, temp[7].xyzz, const[5].xyzz; 27: DP3 temp[5].x, temp[5].xyzz, temp[6].xyzz; 28: MAX temp[5].x, temp[5].xxxx, const[10].yyyy; 29: MUL temp[1].x, const[5].wwww, temp[1].wwww; 30: DP3 temp[8].x, temp[3].xyzz, temp[3].xyzz; 31: RSQ temp[8].x, temp[8].xxxx; 32: MUL temp[3].xyz, temp[3].xyzz, temp[8].xxxx; 33: DP3_SAT temp[3].x, temp[3].xyzz, temp[6].xyzz; 34: MUL temp[2].x, temp[2].wwww, const[10].zzzz; 35: EX2 temp[2].x, temp[2].xxxx; 36: ADD temp[2].x, temp[2].xxxx, const[9].xxxx; 37: POW temp[2].x, temp[3].xxxx, temp[2].xxxx; 38: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 39: MUL temp[1].xyz, temp[1].xxxx, const[5].xyzz; 40: MAD temp[1].xyz, temp[7].xyzz, temp[5].xxxx, temp[1].xyzz; 41: DP3 temp[2].x, temp[4].xyzz, temp[4].xyzz; 42: TEX temp[2].x, temp[2].xxxx, 1D[0]; 43: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 44: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: RCP temp[9].w, input[0].wwww; 1: MUL temp[9].xyz, input[0], temp[9].wwww; 2: MAD temp[9].xyz, temp[9].xyz0, const[11].xyz0, const[12].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[8].xxxx, const[8].yyyy; 5: TEX temp[1], temp[0].xyyy, RECT[2]; 6: TEX temp[2], temp[0].xyyy, RECT[1]; 7: RCP temp[3].x, input[1].zzzz; 8: MUL temp[3].xy, input[1].xyyy, temp[3].xxxx; 9: MOV temp[3].z, const[4].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, const[9].xyzz; 11: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 12: ADD temp[4].xyz, const[7].xyzz, -temp[3].xyzz; 13: MUL temp[4].xyz, temp[4].xyzz, const[6].xxxx; 14: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 15: RSQ temp[5].x, temp[5].xxxx; 16: MUL temp[5].xyz, temp[4].xyzz, temp[5].xxxx; 17: MAD temp[6].xyz, temp[1].xyzz, const[9].wwww, const[10].xxxx; 18: DP3 temp[7].x, temp[6].xyzz, temp[6].xyzz; 19: RSQ temp[7].x, temp[7].xxxx; 20: MUL temp[6].xyz, temp[6].xyzz, temp[7].xxxx; 21: MOV temp[3].xyz, -temp[3].xyzx; 22: DP3 temp[7].x, temp[3].xyzz, temp[3].xyzz; 23: RSQ temp[7].x, temp[7].xxxx; 24: MAD temp[3].xyz, temp[3].xyzz, temp[7].xxxx, temp[5].xyzz; 25: TEX temp[7].xyz, temp[0].xyyy, RECT[3]; 26: MUL temp[7].xyz, temp[7].xyzz, const[5].xyzz; 27: DP3 temp[5].x, temp[5].xyzz, temp[6].xyzz; 28: MAX temp[5].x, temp[5].xxxx, const[10].yyyy; 29: MUL temp[1].x, const[5].wwww, temp[1].wwww; 30: DP3 temp[8].x, temp[3].xyzz, temp[3].xyzz; 31: RSQ temp[8].x, temp[8].xxxx; 32: MUL temp[3].xyz, temp[3].xyzz, temp[8].xxxx; 33: DP3_SAT temp[3].x, temp[3].xyzz, temp[6].xyzz; 34: MUL temp[2].x, temp[2].wwww, const[10].zzzz; 35: EX2 temp[2].x, temp[2].xxxx; 36: ADD temp[2].x, temp[2].xxxx, const[9].xxxx; 37: POW temp[2].x, temp[3].xxxx, temp[2].xxxx; 38: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 39: MUL temp[1].xyz, temp[1].xxxx, const[5].xyzz; 40: MAD temp[1].xyz, temp[7].xyzz, temp[5].xxxx, temp[1].xyzz; 41: DP3 temp[2].x, temp[4].xyzz, temp[4].xyzz; 42: TEX temp[2].x, temp[2].xxxx, 1D[0]; 43: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 44: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: RCP temp[9].w, input[0].wwww; 1: MUL temp[9].xyz, input[0], temp[9].wwww; 2: MAD temp[9].xyz, temp[9].xyz0, const[11].xyz0, const[12].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[8].xxxx, const[8].yyyy; 5: TEX temp[1], temp[0].xyyy, RECT[2]; 6: TEX temp[2], temp[0].xyyy, RECT[1]; 7: RCP temp[3].x, input[1].zzzz; 8: MUL temp[3].xy, input[1].xyyy, temp[3].xxxx; 9: MOV temp[3].z, const[4].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, const[9].xyzz; 11: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 12: ADD temp[4].xyz, const[7].xyzz, -temp[3].xyzz; 13: MUL temp[4].xyz, temp[4].xyzz, const[6].xxxx; 14: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 15: RSQ temp[5].x, temp[5].xxxx; 16: MUL temp[5].xyz, temp[4].xyzz, temp[5].xxxx; 17: MAD temp[6].xyz, temp[1].xyzz, const[9].wwww, const[10].xxxx; 18: DP3 temp[7].x, temp[6].xyzz, temp[6].xyzz; 19: RSQ temp[7].x, temp[7].xxxx; 20: MUL temp[6].xyz, temp[6].xyzz, temp[7].xxxx; 21: MOV temp[3].xyz, -temp[3].xyzx; 22: DP3 temp[7].x, temp[3].xyzz, temp[3].xyzz; 23: RSQ temp[7].x, temp[7].xxxx; 24: MAD temp[3].xyz, temp[3].xyzz, temp[7].xxxx, temp[5].xyzz; 25: TEX temp[7].xyz, temp[0].xyyy, RECT[3]; 26: MUL temp[7].xyz, temp[7].xyzz, const[5].xyzz; 27: DP3 temp[5].x, temp[5].xyzz, temp[6].xyzz; 28: MAX temp[5].x, temp[5].xxxx, const[10].yyyy; 29: MUL temp[1].x, const[5].wwww, temp[1].wwww; 30: DP3 temp[8].x, temp[3].xyzz, temp[3].xyzz; 31: RSQ temp[8].x, temp[8].xxxx; 32: MUL temp[3].xyz, temp[3].xyzz, temp[8].xxxx; 33: DP3_SAT temp[3].x, temp[3].xyzz, temp[6].xyzz; 34: MUL temp[2].x, temp[2].wwww, const[10].zzzz; 35: EX2 temp[2].x, temp[2].xxxx; 36: ADD temp[2].x, temp[2].xxxx, const[9].xxxx; 37: POW temp[2].x, temp[3].xxxx, temp[2].xxxx; 38: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 39: MUL temp[1].xyz, temp[1].xxxx, const[5].xyzz; 40: MAD temp[1].xyz, temp[7].xyzz, temp[5].xxxx, temp[1].xyzz; 41: DP3 temp[2].x, temp[4].xyzz, temp[4].xyzz; 42: TEX temp[2].x, temp[2].xxxx, 1D[0]; 43: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 44: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: RCP temp[9].w, input[0].wwww; 1: MUL temp[9].xyz, input[0], temp[9].wwww; 2: MAD temp[9].xyz, temp[9].xyz0, const[11].xyz0, const[12].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[8].xxxx, const[8].yyyy; 5: MUL temp[10], temp[0].xyyy, const[13]; 6: TEX temp[1], temp[10], 2D[2]; 7: MUL temp[11], temp[0].xyyy, const[14]; 8: TEX temp[2], temp[11], 2D[1]; 9: RCP temp[3].x, input[1].zzzz; 10: MUL temp[3].xy, input[1].xyyy, temp[3].xxxx; 11: MOV temp[3].z, const[4].xxxx; 12: DP3 temp[4].x, temp[2].xyzz, const[9].xyzz; 13: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 14: ADD temp[4].xyz, const[7].xyzz, -temp[3].xyzz; 15: MUL temp[4].xyz, temp[4].xyzz, const[6].xxxx; 16: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 17: RSQ temp[5].x, temp[5].xxxx; 18: MUL temp[5].xyz, temp[4].xyzz, temp[5].xxxx; 19: MAD temp[6].xyz, temp[1].xyzz, const[9].wwww, const[10].xxxx; 20: DP3 temp[7].x, temp[6].xyzz, temp[6].xyzz; 21: RSQ temp[7].x, temp[7].xxxx; 22: MUL temp[6].xyz, temp[6].xyzz, temp[7].xxxx; 23: MOV temp[3].xyz, -temp[3].xyzx; 24: DP3 temp[7].x, temp[3].xyzz, temp[3].xyzz; 25: RSQ temp[7].x, temp[7].xxxx; 26: MAD temp[3].xyz, temp[3].xyzz, temp[7].xxxx, temp[5].xyzz; 27: MUL temp[12], temp[0].xyyy, const[15]; 28: TEX temp[13], temp[12], 2D[3]; 29: MOV temp[7].xyz, temp[13]; 30: MUL temp[7].xyz, temp[7].xyzz, const[5].xyzz; 31: DP3 temp[5].x, temp[5].xyzz, temp[6].xyzz; 32: MAX temp[5].x, temp[5].xxxx, const[10].yyyy; 33: MUL temp[1].x, const[5].wwww, temp[1].wwww; 34: DP3 temp[8].x, temp[3].xyzz, temp[3].xyzz; 35: RSQ temp[8].x, temp[8].xxxx; 36: MUL temp[3].xyz, temp[3].xyzz, temp[8].xxxx; 37: DP3_SAT temp[3].x, temp[3].xyzz, temp[6].xyzz; 38: MUL temp[2].x, temp[2].wwww, const[10].zzzz; 39: EX2 temp[2].x, temp[2].xxxx; 40: ADD temp[2].x, temp[2].xxxx, const[9].xxxx; 41: POW temp[2].x, temp[3].xxxx, temp[2].xxxx; 42: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 43: MUL temp[1].xyz, temp[1].xxxx, const[5].xyzz; 44: MAD temp[1].xyz, temp[7].xyzz, temp[5].xxxx, temp[1].xyzz; 45: DP3 temp[2].x, temp[4].xyzz, temp[4].xyzz; 46: TEX temp[14], temp[2].xxxx, 1D[0]; 47: MOV temp[2].x, temp[14]; 48: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 49: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: RCP temp[9].w, input[0].wwww; 1: MUL temp[9].xyz, input[0], temp[9].wwww; 2: MAD temp[9].xyz, temp[9].xyz0, const[11].xyz0, const[12].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[8].xxxx, const[8].yyyy; 5: MUL temp[10], temp[0].xyyy, const[13]; 6: TEX temp[1], temp[10], 2D[2]; 7: MUL temp[11], temp[0].xyyy, const[14]; 8: TEX temp[2], temp[11], 2D[1]; 9: RCP temp[3].x, input[1].zzzz; 10: MUL temp[3].xy, input[1].xyyy, temp[3].xxxx; 11: MOV temp[3].z, const[4].xxxx; 12: DP3 temp[4].x, temp[2].xyzz, const[9].xyzz; 13: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 14: ADD temp[4].xyz, const[7].xyzz, -temp[3].xyzz; 15: MUL temp[4].xyz, temp[4].xyzz, const[6].xxxx; 16: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 17: RSQ temp[5].x, |temp[5].xxxx|; 18: MUL temp[5].xyz, temp[4].xyzz, temp[5].xxxx; 19: MAD temp[6].xyz, temp[1].xyzz, const[9].wwww, const[10].xxxx; 20: DP3 temp[7].x, temp[6].xyzz, temp[6].xyzz; 21: RSQ temp[7].x, |temp[7].xxxx|; 22: MUL temp[6].xyz, temp[6].xyzz, temp[7].xxxx; 23: MOV temp[3].xyz, -temp[3].xyzx; 24: DP3 temp[7].x, temp[3].xyzz, temp[3].xyzz; 25: RSQ temp[7].x, |temp[7].xxxx|; 26: MAD temp[3].xyz, temp[3].xyzz, temp[7].xxxx, temp[5].xyzz; 27: MUL temp[12], temp[0].xyyy, const[15]; 28: TEX temp[13], temp[12], 2D[3]; 29: MOV temp[7].xyz, temp[13]; 30: MUL temp[7].xyz, temp[7].xyzz, const[5].xyzz; 31: DP3 temp[5].x, temp[5].xyzz, temp[6].xyzz; 32: MAX temp[5].x, temp[5].xxxx, const[10].yyyy; 33: MUL temp[1].x, const[5].wwww, temp[1].wwww; 34: DP3 temp[8].x, temp[3].xyzz, temp[3].xyzz; 35: RSQ temp[8].x, |temp[8].xxxx|; 36: MUL temp[3].xyz, temp[3].xyzz, temp[8].xxxx; 37: DP3_SAT temp[3].x, temp[3].xyzz, temp[6].xyzz; 38: MUL temp[2].x, temp[2].wwww, const[10].zzzz; 39: EX2 temp[2].x, temp[2].xxxx; 40: ADD temp[2].x, temp[2].xxxx, const[9].xxxx; 41: LG2 temp[15].w, temp[3].xxxx; 42: MUL temp[15].w, temp[15].wwww, temp[2].xxxx; 43: EX2 temp[2].x, temp[15].wwww; 44: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 45: MUL temp[1].xyz, temp[1].xxxx, const[5].xyzz; 46: MAD temp[1].xyz, temp[7].xyzz, temp[5].xxxx, temp[1].xyzz; 47: DP3 temp[2].x, temp[4].xyzz, temp[4].xyzz; 48: TEX temp[14], temp[2].xxxx, 1D[0]; 49: MOV temp[2].x, temp[14]; 50: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 51: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: RCP temp[9].w, input[0].___w; 1: MUL temp[9].xy, input[0].xy__, temp[9].ww__; 2: MAD temp[9].xy, temp[9].xy__, const[11].xy__, const[12].xy__; 3: MOV temp[0].x, temp[9].x___; 4: MAD temp[0].y, temp[9]._y__, const[8]._x__, const[8]._y__; 5: MUL temp[10].xy, temp[0].xy__, const[13].xy__; 6: TEX temp[1], temp[10].xy__, 2D[2]; 7: MUL temp[11].xy, temp[0].xy__, const[14].xy__; 8: TEX temp[2], temp[11].xy__, 2D[1]; 9: RCP temp[3].x, input[1].z___; 10: MUL temp[3].xy, input[1].xy__, temp[3].xx__; 11: MOV temp[3].z, const[4].__x_; 12: DP3 temp[4].x, temp[2].xyz_, const[9].xyz_; 13: MUL temp[3].xyz, temp[3].xyz_, temp[4].xxx_; 14: ADD temp[4].xyz, const[7].xyz_, -temp[3].xyz_; 15: MUL temp[4].xyz, temp[4].xyz_, const[6].xxx_; 16: DP3 temp[5].x, temp[4].xyz_, temp[4].xyz_; 17: RSQ temp[5].x, |temp[5].x___|; 18: MUL temp[5].xyz, temp[4].xyz_, temp[5].xxx_; 19: MAD temp[6].xyz, temp[1].xyz_, const[9].www_, const[10].xxx_; 20: DP3 temp[7].x, temp[6].xyz_, temp[6].xyz_; 21: RSQ temp[7].x, |temp[7].x___|; 22: MUL temp[6].xyz, temp[6].xyz_, temp[7].xxx_; 23: MOV temp[3].xyz, -temp[3].xyz_; 24: DP3 temp[7].x, temp[3].xyz_, temp[3].xyz_; 25: RSQ temp[7].x, |temp[7].x___|; 26: MAD temp[3].xyz, temp[3].xyz_, temp[7].xxx_, temp[5].xyz_; 27: MUL temp[12].xy, temp[0].xy__, const[15].xy__; 28: TEX temp[13].xyz, temp[12].xy__, 2D[3]; 29: MOV temp[7].xyz, temp[13].xyz_; 30: MUL temp[7].xyz, temp[7].xyz_, const[5].xyz_; 31: DP3 temp[5].x, temp[5].xyz_, temp[6].xyz_; 32: MAX temp[5].x, temp[5].x___, const[10].y___; 33: MUL temp[1].x, const[5].w___, temp[1].w___; 34: DP3 temp[8].x, temp[3].xyz_, temp[3].xyz_; 35: RSQ temp[8].x, |temp[8].x___|; 36: MUL temp[3].xyz, temp[3].xyz_, temp[8].xxx_; 37: DP3_SAT temp[3].x, temp[3].xyz_, temp[6].xyz_; 38: MUL temp[2].x, temp[2].w___, const[10].z___; 39: EX2 temp[2].x, temp[2].x___; 40: ADD temp[2].x, temp[2].x___, const[9].x___; 41: LG2 temp[15].w, temp[3].___x; 42: MUL temp[15].w, temp[15].___w, temp[2].___x; 43: EX2 temp[2].x, temp[15].w___; 44: MUL temp[1].x, temp[1].x___, temp[2].x___; 45: MUL temp[1].xyz, temp[1].xxx_, const[5].xyz_; 46: MAD temp[1].xyz, temp[7].xyz_, temp[5].xxx_, temp[1].xyz_; 47: DP3 temp[2].x, temp[4].xyz_, temp[4].xyz_; 48: TEX temp[14].x, temp[2].x___, 1D[0]; 49: MOV temp[2].x, temp[14].x___; 50: MUL temp[1].xyz, temp[1].xyz_, temp[2].xxx_; 51: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: RCP temp[9].w, input[0].___w; 1: MUL temp[9].xy, input[0].xy__, temp[9].ww__; 2: MAD temp[9].xy, temp[9].xy__, const[11].xy__, const[12].xy__; 3: MOV temp[0].x, temp[9].x___; 4: MAD temp[0].y, temp[9]._y__, const[8]._x__, const[8]._y__; 5: MUL temp[10].xy, temp[0].xy__, const[13].xy__; 6: TEX temp[1], temp[10].xy__, 2D[2]; 7: MUL temp[11].xy, temp[0].xy__, const[14].xy__; 8: TEX temp[2], temp[11].xy__, 2D[1]; 9: RCP temp[3].x, input[1].z___; 10: MUL temp[3].xy, input[1].xy__, temp[3].xx__; 11: MOV temp[3].z, const[4].__x_; 12: DP3 temp[4].x, temp[2].xyz_, const[9].xyz_; 13: MUL temp[3].xyz, temp[3].xyz_, temp[4].xxx_; 14: ADD temp[4].xyz, const[7].xyz_, -temp[3].xyz_; 15: MUL temp[4].xyz, temp[4].xyz_, const[6].xxx_; 16: DP3 temp[5].x, temp[4].xyz_, temp[4].xyz_; 17: RSQ temp[5].x, |temp[5].x___|; 18: MUL temp[5].xyz, temp[4].xyz_, temp[5].xxx_; 19: MAD temp[6].xyz, temp[1].xyz_, const[9].www_, const[10].xxx_; 20: DP3 temp[7].x, temp[6].xyz_, temp[6].xyz_; 21: RSQ temp[7].x, |temp[7].x___|; 22: MUL temp[6].xyz, temp[6].xyz_, temp[7].xxx_; 23: MOV temp[3].xyz, -temp[3].xyz_; 24: DP3 temp[7].x, temp[3].xyz_, temp[3].xyz_; 25: RSQ temp[7].x, |temp[7].x___|; 26: MAD temp[3].xyz, temp[3].xyz_, temp[7].xxx_, temp[5].xyz_; 27: MUL temp[12].xy, temp[0].xy__, const[15].xy__; 28: TEX temp[13].xyz, temp[12].xy__, 2D[3]; 29: MOV temp[7].xyz, temp[13].xyz_; 30: MUL temp[7].xyz, temp[7].xyz_, const[5].xyz_; 31: DP3 temp[5].x, temp[5].xyz_, temp[6].xyz_; 32: MAX temp[5].x, temp[5].x___, const[10].y___; 33: MUL temp[1].x, const[5].w___, temp[1].w___; 34: DP3 temp[8].x, temp[3].xyz_, temp[3].xyz_; 35: RSQ temp[8].x, |temp[8].x___|; 36: MUL temp[3].xyz, temp[3].xyz_, temp[8].xxx_; 37: DP3_SAT temp[3].x, temp[3].xyz_, temp[6].xyz_; 38: MUL temp[2].x, temp[2].w___, const[10].z___; 39: EX2 temp[2].x, temp[2].x___; 40: ADD temp[2].x, temp[2].x___, const[9].x___; 41: LG2 temp[15].w, temp[3].___x; 42: MUL temp[15].w, temp[15].___w, temp[2].___x; 43: EX2 temp[2].x, temp[15].w___; 44: MUL temp[1].x, temp[1].x___, temp[2].x___; 45: MUL temp[1].xyz, temp[1].xxx_, const[5].xyz_; 46: MAD temp[1].xyz, temp[7].xyz_, temp[5].xxx_, temp[1].xyz_; 47: DP3 temp[2].x, temp[4].xyz_, temp[4].xyz_; 48: TEX temp[14].x, temp[2].x___, 1D[0]; 49: MOV temp[2].x, temp[14].x___; 50: MUL temp[1].xyz, temp[1].xyz_, temp[2].xxx_; 51: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: RCP temp[16].w, input[0].___w; 1: MUL temp[17].xy, input[0].xy__, temp[16].ww__; 2: MAD temp[18].xy, temp[17].xy__, const[11].xy__, const[12].xy__; 3: MOV temp[19].x, temp[18].x___; 4: MAD temp[19].y, temp[18]._y__, const[8]._x__, const[8]._y__; 5: MUL temp[20].xy, temp[19].xy__, const[13].xy__; 6: TEX temp[21], temp[20].xy__, 2D[2]; 7: MUL temp[22].xy, temp[19].xy__, const[14].xy__; 8: TEX temp[23], temp[22].xy__, 2D[1]; 9: RCP temp[24].x, input[1].z___; 10: MUL temp[25].xy, input[1].xy__, temp[24].xx__; 11: MOV temp[25].z, const[4].__x_; 12: DP3 temp[26].x, temp[23].xyz_, const[9].xyz_; 13: MUL temp[27].xyz, temp[25].xyz_, temp[26].xxx_; 14: ADD temp[28].xyz, const[7].xyz_, -temp[27].xyz_; 15: MUL temp[29].xyz, temp[28].xyz_, const[6].xxx_; 16: DP3 temp[30].x, temp[29].xyz_, temp[29].xyz_; 17: RSQ temp[31].x, |temp[30].x___|; 18: MUL temp[32].xyz, temp[29].xyz_, temp[31].xxx_; 19: MAD temp[33].xyz, temp[21].xyz_, const[9].www_, const[10].xxx_; 20: DP3 temp[34].x, temp[33].xyz_, temp[33].xyz_; 21: RSQ temp[35].x, |temp[34].x___|; 22: MUL temp[36].xyz, temp[33].xyz_, temp[35].xxx_; 23: MOV temp[37].xyz, -temp[27].xyz_; 24: DP3 temp[38].x, temp[37].xyz_, temp[37].xyz_; 25: RSQ temp[39].x, |temp[38].x___|; 26: MAD temp[40].xyz, temp[37].xyz_, temp[39].xxx_, temp[32].xyz_; 27: MUL temp[41].xy, temp[19].xy__, const[15].xy__; 28: TEX temp[42].xyz, temp[41].xy__, 2D[3]; 29: MOV temp[43].xyz, temp[42].xyz_; 30: MUL temp[44].xyz, temp[43].xyz_, const[5].xyz_; 31: DP3 temp[45].x, temp[32].xyz_, temp[36].xyz_; 32: MAX temp[46].x, temp[45].x___, const[10].y___; 33: MUL temp[47].x, const[5].w___, temp[21].w___; 34: DP3 temp[48].x, temp[40].xyz_, temp[40].xyz_; 35: RSQ temp[49].x, |temp[48].x___|; 36: MUL temp[50].xyz, temp[40].xyz_, temp[49].xxx_; 37: DP3_SAT temp[51].x, temp[50].xyz_, temp[36].xyz_; 38: MUL temp[52].x, temp[23].w___, const[10].z___; 39: EX2 temp[53].x, temp[52].x___; 40: ADD temp[54].x, temp[53].x___, const[9].x___; 41: LG2 temp[55].w, temp[51].___x; 42: MUL temp[56].w, temp[55].___w, temp[54].___x; 43: EX2 temp[57].x, temp[56].w___; 44: MUL temp[58].x, temp[47].x___, temp[57].x___; 45: MUL temp[59].xyz, temp[58].xxx_, const[5].xyz_; 46: MAD temp[60].xyz, temp[44].xyz_, temp[46].xxx_, temp[59].xyz_; 47: DP3 temp[61].x, temp[29].xyz_, temp[29].xyz_; 48: TEX temp[62].x, temp[61].x___, 1D[0]; 49: MOV temp[63].x, temp[62].x___; 50: MUL temp[21].xyz, temp[60].xyz_, temp[63].xxx_; 51: MOV output[0], temp[21]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: RCP temp[16].w, input[0].___w; 1: MUL temp[17].xy, input[0].xy__, temp[16].ww__; 2: MAD temp[18].xy, temp[17].xy__, const[11].xy__, const[12].xy__; 3: MOV temp[19].x, temp[18].x___; 4: MAD temp[19].y, temp[18]._y__, const[8]._x__, const[8]._y__; 5: MUL temp[20].xy, temp[19].xy__, const[13].xy__; 6: TEX temp[21], temp[20].xy__, 2D[2]; 7: MUL temp[22].xy, temp[19].xy__, const[14].xy__; 8: TEX temp[23], temp[22].xy__, 2D[1]; 9: RCP temp[24].x, input[1].z___; 10: MUL temp[25].xy, input[1].xy__, temp[24].xx__; 11: MOV temp[25].z, const[4].__x_; 12: DP3 temp[26].x, temp[23].xyz_, const[9].xyz_; 13: MUL temp[27].xyz, temp[25].xyz_, temp[26].xxx_; 14: MUL temp[29].xyz, (const[7] - temp[27]).xyz_, const[6].xxx_; 15: DP3 temp[30].x, temp[29].xyz_, temp[29].xyz_; 16: RSQ temp[31].x, |temp[30].x___|; 17: MUL temp[32].xyz, temp[29].xyz_, temp[31].xxx_; 18: MAD temp[33].xyz, temp[21].xyz_, const[9].www_, none.-1-1-1_; 19: DP3 temp[34].x, temp[33].xyz_, temp[33].xyz_; 20: RSQ temp[35].x, |temp[34].x___|; 21: MUL temp[36].xyz, temp[33].xyz_, temp[35].xxx_; 22: DP3 temp[38].x, temp[27].-x-y-z_, temp[27].-x-y-z_; 23: RSQ temp[39].x, |temp[38].x___|; 24: MAD temp[40].xyz, temp[27].-x-y-z_, temp[39].xxx_, temp[32].xyz_; 25: MUL temp[41].xy, temp[19].xy__, const[15].xy__; 26: TEX temp[42].xyz, temp[41].xy__, 2D[3]; 27: MUL temp[44].xyz, temp[42].xyz_, const[5].xyz_; 28: DP3 temp[45].x, temp[32].xyz_, temp[36].xyz_; 29: MAX temp[46].x, temp[45].x___, none.0___; 30: MUL temp[47].x, const[5].w___, temp[21].w___; 31: DP3 temp[48].x, temp[40].xyz_, temp[40].xyz_; 32: RSQ temp[49].x, |temp[48].x___|; 33: MUL temp[50].xyz, temp[40].xyz_, temp[49].xxx_; 34: DP3_SAT temp[51].x, temp[50].xyz_, temp[36].xyz_; 35: MUL temp[52].x, temp[23].w___, const[10].z___; 36: EX2 temp[53].x, temp[52].x___; 37: ADD temp[54].x, temp[53].x___, none.1___; 38: LG2 temp[55].w, temp[51].___x; 39: MUL temp[56].w, temp[55].___w, temp[54].___x; 40: EX2 temp[57].x, temp[56].w___; 41: MUL temp[58].x, temp[47].x___, temp[57].x___; 42: MUL temp[59].xyz, temp[58].xxx_, const[5].xyz_; 43: MAD temp[60].xyz, temp[44].xyz_, temp[46].xxx_, temp[59].xyz_; 44: DP3 temp[61].x, temp[29].xyz_, temp[29].xyz_; 45: TEX temp[62].x, temp[61].x___, 1D[0]; 46: MUL temp[21].xyz, temp[60].xyz_, temp[62].xxx_; 47: MOV output[0], temp[21]; CONST[9] = { 1.0000 0.0039 0.0000 2.0000 } CONST[10] = { -1.0000 0.0000 10.0000 0.0000 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: RCP temp[16].w, input[0].___w; 1: MUL temp[17].xy, input[0].xy__, temp[16].ww__; 2: MAD temp[18].xy, temp[17].xy__, const[11].xy__, const[12].xy__; 3: MOV temp[19].x, temp[18].x___; 4: MAD temp[19].y, temp[18]._y__, const[8]._x__, const[8]._y__; 5: MUL temp[20].xy, temp[19].xy__, const[13].xy__; 6: TEX temp[21], temp[20].xy__, 2D[2]; 7: MUL temp[22].xy, temp[19].xy__, const[14].xy__; 8: TEX temp[23], temp[22].xy__, 2D[1]; 9: RCP temp[24].x, input[1].z___; 10: MUL temp[25].xy, input[1].xy__, temp[24].xx__; 11: MOV temp[25].z, const[4].__x_; 12: DP3 temp[26].x, temp[23].xyz_, const[9].xyz_; 13: MUL temp[27].xyz, temp[25].xyz_, temp[26].xxx_; 14: MUL temp[29].xyz, (const[7] - temp[27]).xyz_, const[6].xxx_; 15: DP3 temp[30].x, temp[29].xyz_, temp[29].xyz_; 16: RSQ temp[31].x, |temp[30].x___|; 17: MUL temp[32].xyz, temp[29].xyz_, temp[31].xxx_; 18: MAD temp[33].xyz, temp[21].xyz_, const[9].www_, none.-1-1-1_; 19: DP3 temp[34].x, temp[33].xyz_, temp[33].xyz_; 20: RSQ temp[35].x, |temp[34].x___|; 21: MUL temp[36].xyz, temp[33].xyz_, temp[35].xxx_; 22: DP3 temp[38].x, temp[27].-x-y-z_, temp[27].-x-y-z_; 23: RSQ temp[39].x, |temp[38].x___|; 24: MAD temp[40].xyz, temp[27].-x-y-z_, temp[39].xxx_, temp[32].xyz_; 25: MUL temp[41].xy, temp[19].xy__, const[15].xy__; 26: TEX temp[42].xyz, temp[41].xy__, 2D[3]; 27: MUL temp[44].xyz, temp[42].xyz_, const[5].xyz_; 28: DP3 temp[45].x, temp[32].xyz_, temp[36].xyz_; 29: MAX temp[46].x, temp[45].x___, none.0___; 30: MUL temp[47].x, const[5].w___, temp[21].w___; 31: DP3 temp[48].x, temp[40].xyz_, temp[40].xyz_; 32: RSQ temp[49].x, |temp[48].x___|; 33: MUL temp[50].xyz, temp[40].xyz_, temp[49].xxx_; 34: DP3_SAT temp[51].x, temp[50].xyz_, temp[36].xyz_; 35: MUL temp[52].x, temp[23].w___, const[10].z___; 36: EX2 temp[53].x, temp[52].x___; 37: ADD temp[54].x, temp[53].x___, none.1___; 38: LG2 temp[55].w, temp[51].___x; 39: MUL temp[56].w, temp[55].___w, temp[54].___x; 40: EX2 temp[57].x, temp[56].w___; 41: MUL temp[58].x, temp[47].x___, temp[57].x___; 42: MUL temp[59].xyz, temp[58].xxx_, const[5].xyz_; 43: MAD temp[60].xyz, temp[44].xyz_, temp[46].xxx_, temp[59].xyz_; 44: DP3 temp[61].x, temp[29].xyz_, temp[29].xyz_; 45: TEX temp[62].x, temp[61].x___, 1D[0]; 46: MUL temp[21].xyz, temp[60].xyz_, temp[62].xxx_; 47: MOV output[0], temp[21]; CONST[5] = { 1.0000 0.0039 0.0000 2.0000 } CONST[6] = { -1.0000 0.0000 10.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: RCP temp[16].w, input[0].___w; 1: MUL temp[17].xy, input[0].xy__, temp[16].ww__; 2: MAD temp[18].xy, temp[17].xy__, const[7].xy__, const[8].xy__; 3: MOV temp[19].x, temp[18].x___; 4: MAD temp[19].y, temp[18]._y__, const[4]._x__, const[4]._y__; 5: MUL temp[20].xy, temp[19].xy__, const[9].xy__; 6: TEX temp[21], temp[20].xy__, 2D[2]; 7: MUL temp[22].xy, temp[19].xy__, const[10].xy__; 8: TEX temp[23], temp[22].xy__, 2D[1]; 9: RCP temp[24].x, input[1].z___; 10: MUL temp[25].xy, input[1].xy__, temp[24].xx__; 11: MOV temp[25].z, const[0].__x_; 12: DP3 temp[26].x, temp[23].xyz_, const[5].xyz_; 13: MUL temp[27].xyz, temp[25].xyz_, temp[26].xxx_; 14: MUL temp[29].xyz, (const[3] - temp[27]).xyz_, const[2].xxx_; 15: DP3 temp[30].x, temp[29].xyz_, temp[29].xyz_; 16: RSQ temp[31].x, |temp[30].x___|; 17: MUL temp[32].xyz, temp[29].xyz_, temp[31].xxx_; 18: MAD temp[33].xyz, temp[21].xyz_, const[5].www_, none.-1-1-1_; 19: DP3 temp[34].x, temp[33].xyz_, temp[33].xyz_; 20: RSQ temp[35].x, |temp[34].x___|; 21: MUL temp[36].xyz, temp[33].xyz_, temp[35].xxx_; 22: DP3 temp[38].x, temp[27].-x-y-z_, temp[27].-x-y-z_; 23: RSQ temp[39].x, |temp[38].x___|; 24: MAD temp[40].xyz, temp[27].-x-y-z_, temp[39].xxx_, temp[32].xyz_; 25: MUL temp[41].xy, temp[19].xy__, const[11].xy__; 26: TEX temp[42].xyz, temp[41].xy__, 2D[3]; 27: MUL temp[44].xyz, temp[42].xyz_, const[1].xyz_; 28: DP3 temp[45].x, temp[32].xyz_, temp[36].xyz_; 29: MAX temp[46].x, temp[45].x___, none.0___; 30: MUL temp[47].x, const[1].w___, temp[21].w___; 31: DP3 temp[48].x, temp[40].xyz_, temp[40].xyz_; 32: RSQ temp[49].x, |temp[48].x___|; 33: MUL temp[50].xyz, temp[40].xyz_, temp[49].xxx_; 34: DP3_SAT temp[51].x, temp[50].xyz_, temp[36].xyz_; 35: MUL temp[52].x, temp[23].w___, const[6].z___; 36: EX2 temp[53].x, temp[52].x___; 37: ADD temp[54].x, temp[53].x___, none.1___; 38: LG2 temp[55].w, temp[51].___x; 39: MUL temp[56].w, temp[55].___w, temp[54].___x; 40: EX2 temp[57].x, temp[56].w___; 41: MUL temp[58].x, temp[47].x___, temp[57].x___; 42: MUL temp[59].xyz, temp[58].xxx_, const[1].xyz_; 43: MAD temp[60].xyz, temp[44].xyz_, temp[46].xxx_, temp[59].xyz_; 44: DP3 temp[61].x, temp[29].xyz_, temp[29].xyz_; 45: TEX temp[62].x, temp[61].x___, 1D[0]; 46: MUL temp[21].xyz, temp[60].xyz_, temp[62].xxx_; 47: MOV output[0], temp[21]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[16].w, src0.w 1: src0.xyz = input[0], src0.w = temp[16] MAD temp[17].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[17], src1.xyz = const[7], src2.xyz = const[8] MAD temp[18].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[18] MAD temp[19].x, src0.x__, src0.111, src0.000 4: src0.xyz = temp[18], src1.xyz = const[4] MAD temp[19].y, src0._y_, src1._x_, src1._y_ 5: src0.xyz = temp[19], src1.xyz = const[9] MAD temp[20].xy, src0.xy_, src1.xy_, src0.000 6: TEX temp[21], temp[20].xy__, 2D[2]; 7: src0.xyz = temp[19], src1.xyz = const[10] MAD temp[22].xy, src0.xy_, src1.xy_, src0.000 8: TEX temp[23], temp[22].xy__, 2D[1]; 9: src0.xyz = input[1] REPL_ALPHA temp[24].x RCP, src0.z 10: src0.xyz = input[1], src1.xyz = temp[24] MAD temp[25].xy, src0.xy_, src1.xx_, src0.000 11: src0.xyz = const[0] MAD temp[25].z, src0.__x, src0.111, src0.000 12: src0.xyz = temp[23], src1.xyz = const[5] DP3 temp[26].x, src0.xyz, src1.xyz 13: src0.xyz = temp[25], src1.xyz = temp[26] MAD temp[27].xyz, src0.xyz, src1.xxx, src0.000 14: src0.xyz = temp[27], src1.xyz = const[3], src2.xyz = const[2], srcp.xyz = (src1 - src0) MAD temp[29].xyz, srcp.xyz, src2.xxx, src0.000 15: src0.xyz = temp[29] DP3 temp[30].x, src0.xyz, src0.xyz 16: src0.xyz = temp[30] REPL_ALPHA temp[31].x RSQ, |src0.x| 17: src0.xyz = temp[29], src1.xyz = temp[31] MAD temp[32].xyz, src0.xyz, src1.xxx, src0.000 18: src0.xyz = temp[21], src0.w = const[5] MAD temp[33].xyz, src0.xyz, src0.www, -src0.111 19: src0.xyz = temp[33] DP3 temp[34].x, src0.xyz, src0.xyz 20: src0.xyz = temp[34] REPL_ALPHA temp[35].x RSQ, |src0.x| 21: src0.xyz = temp[33], src1.xyz = temp[35] MAD temp[36].xyz, src0.xyz, src1.xxx, src0.000 22: src0.xyz = temp[27] DP3 temp[38].x, -src0.xyz, -src0.xyz 23: src0.xyz = temp[38] REPL_ALPHA temp[39].x RSQ, |src0.x| 24: src0.xyz = temp[27], src1.xyz = temp[39], src2.xyz = temp[32] MAD temp[40].xyz, -src0.xyz, src1.xxx, src2.xyz 25: src0.xyz = temp[19], src1.xyz = const[11] MAD temp[41].xy, src0.xy_, src1.xy_, src0.000 26: TEX temp[42].xyz, temp[41].xy__, 2D[3]; 27: src0.xyz = temp[42], src1.xyz = const[1] MAD temp[44].xyz, src0.xyz, src1.xyz, src0.000 28: src0.xyz = temp[32], src1.xyz = temp[36] DP3 temp[45].x, src0.xyz, src1.xyz 29: src0.xyz = temp[45] MAX temp[46].x, src0.x__, src0.0__ 30: src0.w = const[1], src1.w = temp[21] MAD temp[47].x, src0.w__, src1.w__, src0.000 31: src0.xyz = temp[40] DP3 temp[48].x, src0.xyz, src0.xyz 32: src0.xyz = temp[48] REPL_ALPHA temp[49].x RSQ, |src0.x| 33: src0.xyz = temp[40], src1.xyz = temp[49] MAD temp[50].xyz, src0.xyz, src1.xxx, src0.000 34: src0.xyz = temp[50], src1.xyz = temp[36] DP3_SAT temp[51].x, src0.xyz, src1.xyz 35: src0.xyz = const[6], src0.w = temp[23] MAD temp[52].x, src0.w__, src0.z__, src0.000 36: src0.xyz = temp[52] REPL_ALPHA temp[53].x EX2, src0.x 37: src0.xyz = temp[53] MAD temp[54].x, src0.x__, src0.111, src0.1__ 38: src0.xyz = temp[51] LG2 temp[55].w, src0.x 39: src0.xyz = temp[54], src0.w = temp[55] MAD temp[56].w, src0.w, src0.x, src0.0 40: src0.w = temp[56] REPL_ALPHA temp[57].x EX2, src0.w 41: src0.xyz = temp[47], src1.xyz = temp[57] MAD temp[58].x, src0.x__, src1.x__, src0.000 42: src0.xyz = temp[58], src1.xyz = const[1] MAD temp[59].xyz, src0.xxx, src1.xyz, src0.000 43: src0.xyz = temp[44], src1.xyz = temp[46], src2.xyz = temp[59] MAD temp[60].xyz, src0.xyz, src1.xxx, src2.xyz 44: src0.xyz = temp[29] DP3 temp[61].x, src0.xyz, src0.xyz 45: TEX temp[62].x, temp[61].x___, 1D[0]; 46: src0.xyz = temp[60], src1.xyz = temp[62] MAD temp[21].xyz, src0.xyz, src1.xxx, src0.000 47: src0.xyz = temp[21], src0.w = temp[21] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = const[0], src0.w = input[0] MAD temp[25].z, src0.__x, src0.111, src0.000 RCP temp[16].w, src0.w 1: src0.xyz = input[0], src0.w = temp[16], src1.xyz = input[1] MAD temp[17].xy, src0.xy_, src0.ww_, src0.000 RCP temp[24].w, src1.z 2: src0.xyz = temp[17], src1.xyz = const[7], src2.xyz = const[8] MAD temp[18].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = input[1], src0.w = temp[24], src1.xyz = temp[24] MAD temp[25].xy, src0.xy_, src0.ww_, src0.000 4: src0.xyz = temp[18], src1.xyz = const[4] MAD temp[19].y, src0._y_, src1._x_, src1._y_ 5: src0.xyz = temp[18] MAD temp[19].x, src0.x__, src0.111, src0.000 6: src0.xyz = temp[19], src1.xyz = const[11] MAD temp[41].xy, src0.xy_, src1.xy_, src0.000 7: src0.xyz = temp[19], src1.xyz = const[10] MAD temp[22].xy, src0.xy_, src1.xy_, src0.000 8: src0.xyz = temp[19], src1.xyz = const[9] MAD temp[20].xy, src0.xy_, src1.xy_, src0.000 9: BEGIN_TEX; 10: TEX temp[42].xyz, temp[41].xy__, 2D[3]; 11: TEX temp[23], temp[22].xy__, 2D[1]; 12: TEX temp[21], temp[20].xy__, 2D[2] SEM_WAIT SEM_ACQUIRE; 13: src0.xyz = temp[23], src0.w = const[1], src1.xyz = const[5], src1.w = temp[21] SEM_WAIT DP3 temp[26].x, src0.xyz, src1.xyz MAD temp[47].w, src0.w, src1.w, src0.0 14: src0.xyz = temp[42], src0.w = temp[23], src1.xyz = const[1], src2.xyz = const[6] MAD temp[44].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[52].w, src0.w, src2.z, src0.0 15: src0.xyz = temp[21], src0.w = const[5] MAD temp[33].xyz, src0.xyz, src0.www, -src0.111 16: src0.xyz = temp[25], src1.xyz = temp[26] MAD temp[27].xyz, src0.xyz, src1.xxx, src0.000 17: src0.xyz = temp[52], src0.w = temp[52] REPL_ALPHA temp[53].x EX2, src0.w 18: src0.xyz = temp[33], src1.xyz = temp[53] DP3 temp[34].x, src0.xyz, src0.xyz MAD temp[54].w, src1.x, src0.1, src0.1 19: src0.xyz = temp[27], src1.xyz = const[3], src2.xyz = const[2], srcp.xyz = (src1 - src0) MAD temp[29].xyz, srcp.xyz, src2.xxx, src0.000 20: src0.xyz = temp[27] DP3 temp[38].x, -src0.xyz, -src0.xyz 21: src0.xyz = temp[29], src1.xyz = temp[38] DP3 temp[30].x, src0.xyz, src0.xyz RSQ temp[39].w, |src1.x| 22: src0.xyz = temp[29], src1.xyz = temp[34] DP3 temp[61].x, src0.xyz, src0.xyz RSQ temp[35].w, |src1.x| 23: src0.xyz = temp[33], src0.w = temp[35], src1.xyz = temp[35], src2.xyz = temp[30] MAD temp[36].xyz, src0.xyz, src0.www, src0.000 RSQ temp[31].w, |src2.x| 24: src0.xyz = temp[29], src0.w = temp[31], src1.xyz = temp[31] MAD temp[32].xyz, src0.xyz, src0.www, src0.000 25: src0.xyz = temp[27], src0.w = temp[39], src1.xyz = temp[39], src2.xyz = temp[32] MAD temp[40].xyz, -src0.xyz, src0.www, src2.xyz 26: src0.xyz = temp[32], src1.xyz = temp[36] DP3 temp[45].x, src0.xyz, src1.xyz 27: src0.xyz = temp[40], src1.xyz = temp[45] DP3 temp[48].x, src0.xyz, src0.xyz MAX temp[46].w, src1.x, src0.0 28: src0.xyz = temp[48] REPL_ALPHA temp[49].x RSQ, |src0.x| 29: src0.xyz = temp[40], src1.xyz = temp[49] MAD temp[50].xyz, src0.xyz, src1.xxx, src0.000 30: src0.xyz = temp[50], src1.xyz = temp[36] DP3_SAT temp[51].x, src0.xyz, src1.xyz 31: src0.xyz = temp[51] LG2 temp[55].w, src0.x 32: src0.xyz = temp[54], src0.w = temp[55], src1.w = temp[54] MAD temp[56].w, src0.w, src1.w, src0.0 33: src0.w = temp[56] REPL_ALPHA temp[57].x EX2, src0.w 34: src0.xyz = temp[47], src0.w = temp[47], src1.xyz = temp[57] MAD temp[58].x, src0.w__, src1.x__, src0.000 35: src0.xyz = temp[58], src1.xyz = const[1] MAD temp[59].xyz, src0.xxx, src1.xyz, src0.000 36: src0.xyz = temp[44], src0.w = temp[46], src1.xyz = temp[46], src2.xyz = temp[59] MAD temp[60].xyz, src0.xyz, src0.www, src2.xyz 37: BEGIN_TEX; 38: TEX temp[62].x, temp[61].x___, 1D[0] SEM_WAIT SEM_ACQUIRE; 39: src0.xyz = temp[60], src1.xyz = temp[62] SEM_WAIT MAD temp[21].xyz, src0.xyz, src1.xxx, src0.000 40: src0.xyz = temp[21], src0.w = temp[21] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = const[0], src0.w = input[0] MAD temp[25].z, src0.__x, src0.111, src0.000 RCP temp[16].w, src0.w 1: src0.xyz = input[0], src0.w = temp[16], src1.xyz = input[1] MAD temp[17].xy, src0.xy_, src0.ww_, src0.000 RCP temp[24].w, src1.z 2: src0.xyz = temp[17], src1.xyz = const[7], src2.xyz = const[8] MAD temp[18].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = input[1], src0.w = temp[24] MAD temp[25].xy, src0.xy_, src0.ww_, src0.000 4: src0.xyz = temp[18], src1.xyz = const[4] MAD temp[19].y, src0._y_, src1._x_, src1._y_ 5: src0.xyz = temp[18] MAD temp[19].x, src0.x__, src0.111, src0.000 6: src0.xyz = temp[19], src1.xyz = const[11] MAD temp[41].xy, src0.xy_, src1.xy_, src0.000 7: src0.xyz = temp[19], src1.xyz = const[10] MAD temp[22].xy, src0.xy_, src1.xy_, src0.000 8: src0.xyz = temp[19], src1.xyz = const[9] MAD temp[20].xy, src0.xy_, src1.xy_, src0.000 9: BEGIN_TEX; 10: TEX temp[42].xyz, temp[41].xy__, 2D[3]; 11: TEX temp[23], temp[22].xy__, 2D[1]; 12: TEX temp[21], temp[20].xy__, 2D[2] SEM_WAIT SEM_ACQUIRE; 13: src0.xyz = temp[23], src0.w = const[1], src1.xyz = const[5], src1.w = temp[21] SEM_WAIT DP3 temp[26].x, src0.xyz, src1.xyz MAD temp[47].w, src0.w, src1.w, src0.0 14: src0.xyz = temp[42], src0.w = temp[23], src1.xyz = const[1], src2.xyz = const[6] MAD temp[44].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[52].w, src0.w, src2.z, src0.0 15: src0.xyz = temp[21], src0.w = const[5] MAD temp[33].xyz, src0.xyz, src0.www, -src0.111 16: src0.xyz = temp[25], src1.xyz = temp[26] MAD temp[27].xyz, src0.xyz, src1.xxx, src0.000 17: src0.w = temp[52] REPL_ALPHA temp[53].x EX2, src0.w 18: src0.xyz = temp[33], src1.xyz = temp[53] DP3 temp[34].x, src0.xyz, src0.xyz MAD temp[54].w, src1.x, src0.1, src0.1 19: src0.xyz = temp[27], src1.xyz = const[3], src2.xyz = const[2], srcp.xyz = (src1 - src0) MAD temp[29].xyz, srcp.xyz, src2.xxx, src0.000 20: src0.xyz = temp[27] DP3 temp[38].x, -src0.xyz, -src0.xyz 21: src0.xyz = temp[29], src1.xyz = temp[38] DP3 temp[30].x, src0.xyz, src0.xyz RSQ temp[39].w, |src1.x| 22: src0.xyz = temp[29], src1.xyz = temp[34] DP3 temp[61].x, src0.xyz, src0.xyz RSQ temp[35].w, |src1.x| 23: src0.xyz = temp[33], src0.w = temp[35], src2.xyz = temp[30] MAD temp[36].xyz, src0.xyz, src0.www, src0.000 RSQ temp[31].w, |src2.x| 24: src0.xyz = temp[29], src0.w = temp[31] MAD temp[32].xyz, src0.xyz, src0.www, src0.000 25: src0.xyz = temp[27], src0.w = temp[39], src2.xyz = temp[32] MAD temp[40].xyz, -src0.xyz, src0.www, src2.xyz 26: src0.xyz = temp[32], src1.xyz = temp[36] DP3 temp[45].x, src0.xyz, src1.xyz 27: src0.xyz = temp[40], src1.xyz = temp[45] DP3 temp[48].x, src0.xyz, src0.xyz MAX temp[46].w, src1.x, src0.0 28: src0.xyz = temp[48] REPL_ALPHA temp[49].x RSQ, |src0.x| 29: src0.xyz = temp[40], src1.xyz = temp[49] MAD temp[50].xyz, src0.xyz, src1.xxx, src0.000 30: src0.xyz = temp[50], src1.xyz = temp[36] DP3_SAT temp[51].x, src0.xyz, src1.xyz 31: src0.xyz = temp[51] LG2 temp[55].w, src0.x 32: src0.w = temp[55], src1.w = temp[54] MAD temp[56].w, src0.w, src1.w, src0.0 33: src0.w = temp[56] REPL_ALPHA temp[57].x EX2, src0.w 34: src0.w = temp[47], src1.xyz = temp[57] MAD temp[58].x, src0.w__, src1.x__, src0.000 35: src0.xyz = temp[58], src1.xyz = const[1] MAD temp[59].xyz, src0.xxx, src1.xyz, src0.000 36: src0.xyz = temp[44], src0.w = temp[46], src2.xyz = temp[59] MAD temp[60].xyz, src0.xyz, src0.www, src2.xyz 37: BEGIN_TEX; 38: TEX temp[62].x, temp[61].x___, 1D[0] SEM_WAIT SEM_ACQUIRE; 39: src0.xyz = temp[60], src1.xyz = temp[62] SEM_WAIT MAD temp[21].xyz, src0.xyz, src1.xxx, src0.000 40: src0.xyz = temp[21], src0.w = temp[21] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = const[0], src0.w = input[1] MAD temp[2].z, src0.__x, src0.111, src0.000 RCP temp[0].w, src0.w 1: src0.xyz = input[1], src0.w = temp[0], src1.xyz = input[0] MAD temp[1].xy, src0.xy_, src0.ww_, src0.00_ RCP temp[0].w, src1.z 2: src0.xyz = temp[1], src1.xyz = const[7], src2.xyz = const[8] MAD temp[1].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = input[0], src0.w = temp[0] MAD temp[2].xy, src0.xy_, src0.ww_, src0.000 4: src0.xyz = temp[1], src1.xyz = const[4] MAD temp[0].y, src0._y_, src1._x_, src1._y_ 5: src0.xyz = temp[1] MAD temp[0].x, src0.x__, src0.11_, src0.00_ 6: src0.xyz = temp[0], src1.xyz = const[11] MAD temp[1].xy, src0.xy_, src1.xy_, src0.00_ 7: src0.xyz = temp[0], src1.xyz = const[10] MAD temp[3].xy, src0.xy_, src1.xy_, src0.00_ 8: src0.xyz = temp[0], src1.xyz = const[9] MAD temp[0].xy, src0.xy_, src1.xy_, src0.00_ 9: BEGIN_TEX; 10: TEX temp[1].xyz, temp[1].xy__, 2D[3]; 11: TEX temp[3], temp[3].xy__, 2D[1]; 12: TEX temp[0], temp[0].xy__, 2D[2] SEM_WAIT SEM_ACQUIRE; 13: src0.xyz = temp[3], src0.w = const[1], src1.xyz = const[5], src1.w = temp[0] SEM_WAIT DP3 temp[4].x, src0.xyz, src1.xyz MAD temp[2].w, src0.w, src1.w, src0.0 14: src0.xyz = temp[1], src0.w = temp[3], src1.xyz = const[1], src2.xyz = const[6] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[1].w, src0.w, src2.z, src0.0 15: src0.xyz = temp[0], src0.w = const[5] MAD temp[3].xyz, src0.xyz, src0.www, -src0.111 16: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 17: src0.w = temp[1] REPL_ALPHA temp[4].x EX2, src0.w 18: src0.xyz = temp[3], src1.xyz = temp[4] DP3 temp[4].x, src0.xyz, src0.xyz MAD temp[1].w, src1.x, src0.1, src0.1 19: src0.xyz = temp[2], src1.xyz = const[3], src2.xyz = const[2], srcp.xyz = (src1 - src0) MAD temp[5].xyz, srcp.xyz, src2.xxx, src0.000 20: src0.xyz = temp[2] DP3 temp[4].y, -src0.xyz, -src0.xyz 21: src0.xyz = temp[5], src1.xyz = temp[4] DP3 temp[4].y, src0.xyz, src0.xyz RSQ temp[3].w, |src1.y| 22: src0.xyz = temp[5], src1.xyz = temp[4] DP3 temp[4].x, src0.xyz, src0.xyz RSQ temp[4].w, |src1.x| 23: src0.xyz = temp[3], src0.w = temp[4], src2.xyz = temp[4] MAD temp[3].xyz, src0.xyz, src0.www, src0.000 RSQ temp[4].w, |src2.y| 24: src0.xyz = temp[5], src0.w = temp[4] MAD temp[5].xyz, src0.xyz, src0.www, src0.000 25: src0.xyz = temp[2], src0.w = temp[3], src2.xyz = temp[5] MAD temp[2].xyz, -src0.xyz, src0.www, src2.xyz 26: src0.xyz = temp[5], src1.xyz = temp[3] DP3 temp[4].y, src0.xyz, src1.xyz 27: src0.xyz = temp[2], src1.xyz = temp[4] DP3 temp[4].y, src0.xyz, src0.xyz MAX temp[3].w, src1.y, src0.0 28: src0.xyz = temp[4] REPL_ALPHA temp[4].y RSQ, |src0.y| 29: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[2].xyz, src0.xyz, src1.yyy, src0.000 30: src0.xyz = temp[2], src1.xyz = temp[3] DP3_SAT temp[2].x, src0.xyz, src1.xyz 31: src0.xyz = temp[2] LG2 temp[4].w, src0.x 32: src0.w = temp[4], src1.w = temp[1] MAD temp[1].w, src0.w, src1.w, src0.0 33: src0.w = temp[1] REPL_ALPHA temp[2].x EX2, src0.w 34: src0.w = temp[2], src1.xyz = temp[2] MAD temp[2].x, src0.w__, src1.x__, src0.0__ 35: src0.xyz = temp[2], src1.xyz = const[1] MAD temp[2].xyz, src0.xxx, src1.xyz, src0.000 36: src0.xyz = temp[1], src0.w = temp[3], src2.xyz = temp[2] MAD temp[1].xyz, src0.xyz, src0.www, src2.xyz 37: BEGIN_TEX; 38: TEX temp[2].x, temp[4].x___, 1D[0] SEM_WAIT SEM_ACQUIRE; 39: src0.xyz = temp[1], src1.xyz = temp[2] SEM_WAIT MAD temp[1].xyz, src0.xyz, src1.xxx, src0.000 40: src0.xyz = temp[1], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=16************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 8, tex_end: 0 (code_addr: 00000200) 0: xyz: c0 t0 t0 bias-> t2.z (02080020) w: t1 t0 t0 bias-> t0.w (00800001) xyz: c0.xxx 1.0 0.0 op: 00050a81 w: t1.w c0.x c0.x op: 05000009 1: xyz: t1 t0 t0 bias-> t1.xy (01840001) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t1.xyz t0.www 0.0 op: 00050600 w: t0.z t1.x t1.x op: 05000005 2: xyz: t1 c7 c8 bias-> t1.xy (018689c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c7.xyz c8.xyz op: 00020200 w: t1.x t1.x t1.x op: 00000000 3: xyz: t0 t0 t0 bias-> t2.xy (01880000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.www 0.0 op: 00050600 w: t0.x t0.x t0.x op: 00000000 4: xyz: t1 c4 t0 bias-> t0.y (01000901) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c4.xxx c4.xyz op: 00010280 w: t1.x t1.x t1.x op: 00000000 5: xyz: t1 t0 t0 bias-> t0.x (00800001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 6: xyz: t0 c11 t0 bias-> t1.xy (01840ac0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c11.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 7: xyz: t0 c10 t0 bias-> t3.xy (018c0a80) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c10.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 8: xyz: t0 c9 t0 bias-> t0.xy (01800a40) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c9.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 NODE 1: alu_offset: 9, tex_offset: 0, alu_end: 23, tex_end: 2 (code_addr: 000405c9) TEX: TEX t1, t1, texture[3] (00009841) TEX t3, t3, texture[1] (000088c3) TEX t0, t0, texture[2] (00009000) 9: xyz: t3 c5 t0 bias-> t4.x (00900943) w: c1 t0 t0 bias-> t2.w (00880021) xyz: t3.xyz c5.xyz t3.xxx op: 00804200 w: c1.w t0.w 0.0 op: 00040509 10: xyz: t1 c1 c6 bias-> t1.xyz (03866841) w: t3 t0 t0 bias-> t1.w (00840003) xyz: t1.xyz c1.xyz 0.0 op: 00050200 w: t3.w c6.z 0.0 op: 00040409 11: xyz: t0 t0 t0 bias-> t3.xyz (038c0000) w: c5 t0 t0 bias-> (00000025) xyz: t0.xyz c5.www -1.0 op: 000d4600 w: t0.x t0.x t0.x op: 00000000 12: xyz: t2 t4 t0 bias-> t2.xyz (03880102) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t4.xxx 0.0 op: 00050280 w: t2.x t2.x t2.x op: 00000000 13: xyz: t32 t0 t0 bias-> t4.x (00900000) w: t1 t0 t0 bias-> (00000001) xyz: t32.xxx t32.xxx t32.xxx op: 05004081 w: t1.w t32.x t32.x op: 04000009 14: xyz: t3 t4 t0 bias-> t4.x (00900103) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t3.xyz t3.xyz t3.xxx op: 00804000 w: t4.x 1.0 1.0 op: 00044883 15: xyz: t2 c3 c2 sub-> t5.xyz (039628c2) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xyz c2.xxx 0.0 op: 0025048f w: t2.x t2.x t2.x op: 00000000 16: xyz: t2 t0 t0 bias-> t4.y (01100002) w: t0 t0 t0 bias-> (00000000) xyz: -t2.xyz -t2.xyz t2.xxx op: 00805020 w: t2.x t2.x t2.x op: 00000000 17: xyz: t5 t4 t0 bias-> t4.y (01100105) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: t5.xyz t5.xyz t5.xxx op: 00804000 w: |t4.y| t5.x t5.x op: 05800044 18: xyz: t5 t4 t0 bias-> t4.x (00900105) w: t0 t0 t0 bias-> t4.w (00900000) xyz: t5.xyz t5.xyz t5.xxx op: 00804000 w: |t4.x| t5.x t5.x op: 05800043 19: xyz: t3 t32 t4 bias-> t3.xyz (038c4003) w: t4 t0 t0 bias-> t4.w (00900004) xyz: t3.xyz t4.www 0.0 op: 00050600 w: |t4.y| t3.x t3.x op: 05800047 20: xyz: t5 t0 t0 bias-> t5.xyz (03940005) w: t4 t0 t0 bias-> (00000004) xyz: t5.xyz t4.www 0.0 op: 00050600 w: t5.x t5.x t5.x op: 00000000 21: xyz: t2 t32 t5 bias-> t2.xyz (03885002) w: t3 t0 t0 bias-> (00000003) xyz: -t2.xyz t3.www t5.xyz op: 00020620 w: t2.x t2.x t2.x op: 00000000 22: xyz: t5 t3 t0 bias-> t4.y (011000c5) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t3.xyz t5.xxx op: 00804200 w: t5.x t5.x t5.x op: 00000000 23: xyz: t2 t4 t0 bias-> t4.y (01100102) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: t4.y 0.0 t2.x op: 01800804 24: xyz: t4 t0 t0 bias-> t4.y (01100004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xxx t4.xxx t4.xxx op: 05004081 w: |t4.y| t4.x t4.x op: 05800041 25: xyz: t2 t4 t0 bias-> t2.xyz (03880102) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t4.yyy 0.0 op: 00050300 w: t2.x t2.x t2.x op: 00000000 26: xyz: t2 t3 t0 bias-> t2.x (008800c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t3.xyz t2.xxx op: 40804200 w: t2.x t2.x t2.x op: 00000000 27: xyz: t2 t0 t0 bias-> (00000002) w: t0 t0 t0 bias-> t4.w (00900000) xyz: t2.xxx t2.xxx t2.xxx op: 00004081 w: t2.x t2.x t2.x op: 04800000 28: xyz: t32 t0 t0 bias-> (00000000) w: t4 t1 t0 bias-> t1.w (00840044) xyz: t32.xxx t32.xxx t32.xxx op: 00004081 w: t4.w t1.w 0.0 op: 00040509 29: xyz: t0 t0 t0 bias-> t2.x (00880000) w: t1 t0 t0 bias-> (00000001) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: t1.w t0.x t0.x op: 04000009 30: xyz: t32 t2 t0 bias-> t2.x (00880080) w: t2 t0 t0 bias-> (00000002) xyz: t2.www t2.xyz 0.0 op: 0005020c w: t32.x t32.x t32.x op: 00000000 31: xyz: t2 c1 t0 bias-> t2.xyz (03880842) w: t0 t0 t0 bias-> (00000000) xyz: t2.xxx c1.xyz 0.0 op: 00050201 w: t2.x t2.x t2.x op: 00000000 32: xyz: t1 t32 t2 bias-> t1.xyz (03842001) w: t3 t0 t0 bias-> (00000003) xyz: t1.xyz t3.www t2.xyz op: 00020600 w: t1.x t1.x t1.x op: 00000000 NODE 2: alu_offset: 33, tex_offset: 3, alu_end: 1, tex_end: 0 (code_addr: 00403061) TEX: TEX t2, t4, texture[0] (00008084) 33: xyz: t1 t2 t0 bias-> t1.xyz (03840081) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t2.xxx 0.0 op: 00050280 w: t1.x t1.x t1.x op: 00000000 34: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0] DCL TEMP[0], LOCAL 0: TEX TEMP[0], IN[0].xyyy, SAMP[0], 2D 1: MUL TEMP[0], TEMP[0], CONST[0].xxxx 2: MOV OUT[0], TEMP[0] 3: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], const[0].xxxx; 2: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], const[0].xxxx; 2: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], const[0].xxxx; 2: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], const[0].xxxx; 2: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], const[0].xxxx; 2: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], const[0].xxxx; 2: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], const[0].xxxx; 2: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[0], temp[0], const[0].xxxx; 2: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[0], temp[0], const[0].xxxx; 2: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MUL temp[2], temp[1], const[0].xxxx; 2: MOV output[0], temp[2]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MUL temp[2], temp[1], const[0].xxxx; 2: MOV output[0], temp[2]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MUL temp[2], temp[1], const[0].xxxx; 2: MOV output[0], temp[2]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MUL temp[2], temp[1], const[0].xxxx; 2: MOV output[0], temp[2]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = const[0] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[2].w, src0.w, src1.x, src0.0 2: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = const[0] SEM_WAIT MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[2].w, src0.w, src1.x, src0.0 3: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = const[0] SEM_WAIT MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[2].w, src0.w, src1.x, src0.0 3: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0] SEM_WAIT MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[0].w, src0.w, src1.x, src0.0 3: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=17************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 1, tex_end: 0 (code_addr: 00400040) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t0 c0 t0 bias-> t0.xyz (03800800) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xyz c0.xxx 0.0 op: 00050280 w: t0.w c0.x 0.0 op: 00040189 1: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], POSITION, LINEAR DCL IN[1], GENERIC[12], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[5] DCL CONST[0..3] DCL TEMP[0] DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL IMM[0] FLT32 { 1.0000, 0.0039, 0.0000, 0.0000} 0: MOV TEMP[0], IN[0] 1: MAD TEMP[0].y, IN[0], CONST[5].xxxx, CONST[5].yyyy 2: MOV TEMP[1].xyz, CONST[1].xyzx 3: TEX TEMP[2].xyz, TEMP[0].xyyy, SAMP[0], RECT 4: DP3 TEMP[2].x, TEMP[2].xyzz, IMM[0].xyzz 5: MAD TEMP[2].x, -TEMP[2].xxxx, CONST[3].xxxx, IN[1].zzzz 6: ADD TEMP[2].x, TEMP[2].xxxx, -CONST[2].xxxx 7: MIN TEMP[2].x, TEMP[2].xxxx, CONST[2].yyyy 8: RCP TEMP[3].x, CONST[2].yyyy 9: MUL TEMP[2].x, TEMP[2].xxxx, TEMP[3].xxxx 10: MAX TEMP[2].x, TEMP[2].xxxx, IMM[0].wwww 11: POW TEMP[2].x, TEMP[2].xxxx, CONST[0].xxxx 12: MUL TEMP[2].x, TEMP[2].xxxx, CONST[1].wwww 13: MOV TEMP[1].w, TEMP[2].xxxx 14: MOV OUT[0], TEMP[1] 15: END Fragment Program: before compilation # Radeon Compiler Program 0: RCP temp[4].w, input[0].wwww; 1: MUL temp[4].xyz, input[0], temp[4].wwww; 2: MAD temp[4].xyz, temp[4].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[4]; 4: MAD temp[0].y, temp[4], const[5].xxxx, const[5].yyyy; 5: MOV temp[1].xyz, const[1].xyzx; 6: TEX temp[2].xyz, temp[0].xyyy, RECT[0]; 7: DP3 temp[2].x, temp[2].xyzz, const[6].xyzz; 8: MAD temp[2].x, -temp[2].xxxx, const[3].xxxx, input[1].zzzz; 9: ADD temp[2].x, temp[2].xxxx, -const[2].xxxx; 10: MIN temp[2].x, temp[2].xxxx, const[2].yyyy; 11: RCP temp[3].x, const[2].yyyy; 12: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 13: MAX temp[2].x, temp[2].xxxx, const[6].wwww; 14: POW temp[2].x, temp[2].xxxx, const[0].xxxx; 15: MUL temp[2].x, temp[2].xxxx, const[1].wwww; 16: MOV temp[1].w, temp[2].xxxx; 17: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: RCP temp[4].w, input[0].wwww; 1: MUL temp[4].xyz, input[0], temp[4].wwww; 2: MAD temp[4].xyz, temp[4].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[4]; 4: MAD temp[0].y, temp[4], const[5].xxxx, const[5].yyyy; 5: MOV temp[1].xyz, const[1].xyzx; 6: TEX temp[2].xyz, temp[0].xyyy, RECT[0]; 7: DP3 temp[2].x, temp[2].xyzz, const[6].xyzz; 8: MAD temp[2].x, -temp[2].xxxx, const[3].xxxx, input[1].zzzz; 9: ADD temp[2].x, temp[2].xxxx, -const[2].xxxx; 10: MIN temp[2].x, temp[2].xxxx, const[2].yyyy; 11: RCP temp[3].x, const[2].yyyy; 12: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 13: MAX temp[2].x, temp[2].xxxx, const[6].wwww; 14: POW temp[2].x, temp[2].xxxx, const[0].xxxx; 15: MUL temp[2].x, temp[2].xxxx, const[1].wwww; 16: MOV temp[1].w, temp[2].xxxx; 17: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: RCP temp[4].w, input[0].wwww; 1: MUL temp[4].xyz, input[0], temp[4].wwww; 2: MAD temp[4].xyz, temp[4].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[4]; 4: MAD temp[0].y, temp[4], const[5].xxxx, const[5].yyyy; 5: MOV temp[1].xyz, const[1].xyzx; 6: TEX temp[2].xyz, temp[0].xyyy, RECT[0]; 7: DP3 temp[2].x, temp[2].xyzz, const[6].xyzz; 8: MAD temp[2].x, -temp[2].xxxx, const[3].xxxx, input[1].zzzz; 9: ADD temp[2].x, temp[2].xxxx, -const[2].xxxx; 10: MIN temp[2].x, temp[2].xxxx, const[2].yyyy; 11: RCP temp[3].x, const[2].yyyy; 12: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 13: MAX temp[2].x, temp[2].xxxx, const[6].wwww; 14: POW temp[2].x, temp[2].xxxx, const[0].xxxx; 15: MUL temp[2].x, temp[2].xxxx, const[1].wwww; 16: MOV temp[1].w, temp[2].xxxx; 17: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: RCP temp[4].w, input[0].wwww; 1: MUL temp[4].xyz, input[0], temp[4].wwww; 2: MAD temp[4].xyz, temp[4].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[4]; 4: MAD temp[0].y, temp[4], const[5].xxxx, const[5].yyyy; 5: MOV temp[1].xyz, const[1].xyzx; 6: TEX temp[2].xyz, temp[0].xyyy, RECT[0]; 7: DP3 temp[2].x, temp[2].xyzz, const[6].xyzz; 8: MAD temp[2].x, -temp[2].xxxx, const[3].xxxx, input[1].zzzz; 9: ADD temp[2].x, temp[2].xxxx, -const[2].xxxx; 10: MIN temp[2].x, temp[2].xxxx, const[2].yyyy; 11: RCP temp[3].x, const[2].yyyy; 12: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 13: MAX temp[2].x, temp[2].xxxx, const[6].wwww; 14: POW temp[2].x, temp[2].xxxx, const[0].xxxx; 15: MUL temp[2].x, temp[2].xxxx, const[1].wwww; 16: MOV temp[1].w, temp[2].xxxx; 17: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: RCP temp[4].w, input[0].wwww; 1: MUL temp[4].xyz, input[0], temp[4].wwww; 2: MAD temp[4].xyz, temp[4].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[4]; 4: MAD temp[0].y, temp[4], const[5].xxxx, const[5].yyyy; 5: MOV temp[1].xyz, const[1].xyzx; 6: TEX temp[2].xyz, temp[0].xyyy, RECT[0]; 7: DP3 temp[2].x, temp[2].xyzz, const[6].xyzz; 8: MAD temp[2].x, -temp[2].xxxx, const[3].xxxx, input[1].zzzz; 9: ADD temp[2].x, temp[2].xxxx, -const[2].xxxx; 10: MIN temp[2].x, temp[2].xxxx, const[2].yyyy; 11: RCP temp[3].x, const[2].yyyy; 12: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 13: MAX temp[2].x, temp[2].xxxx, const[6].wwww; 14: POW temp[2].x, temp[2].xxxx, const[0].xxxx; 15: MUL temp[2].x, temp[2].xxxx, const[1].wwww; 16: MOV temp[1].w, temp[2].xxxx; 17: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: RCP temp[4].w, input[0].wwww; 1: MUL temp[4].xyz, input[0], temp[4].wwww; 2: MAD temp[4].xyz, temp[4].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[4]; 4: MAD temp[0].y, temp[4], const[5].xxxx, const[5].yyyy; 5: MOV temp[1].xyz, const[1].xyzx; 6: MUL temp[5], temp[0].xyyy, const[9]; 7: TEX temp[6], temp[5], 2D[0]; 8: MOV temp[2].xyz, temp[6]; 9: DP3 temp[2].x, temp[2].xyzz, const[6].xyzz; 10: MAD temp[2].x, -temp[2].xxxx, const[3].xxxx, input[1].zzzz; 11: ADD temp[2].x, temp[2].xxxx, -const[2].xxxx; 12: MIN temp[2].x, temp[2].xxxx, const[2].yyyy; 13: RCP temp[3].x, const[2].yyyy; 14: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 15: MAX temp[2].x, temp[2].xxxx, const[6].wwww; 16: POW temp[2].x, temp[2].xxxx, const[0].xxxx; 17: MUL temp[2].x, temp[2].xxxx, const[1].wwww; 18: MOV temp[1].w, temp[2].xxxx; 19: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: RCP temp[4].w, input[0].wwww; 1: MUL temp[4].xyz, input[0], temp[4].wwww; 2: MAD temp[4].xyz, temp[4].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[4]; 4: MAD temp[0].y, temp[4], const[5].xxxx, const[5].yyyy; 5: MOV temp[1].xyz, const[1].xyzx; 6: MUL temp[5], temp[0].xyyy, const[9]; 7: TEX temp[6], temp[5], 2D[0]; 8: MOV temp[2].xyz, temp[6]; 9: DP3 temp[2].x, temp[2].xyzz, const[6].xyzz; 10: MAD temp[2].x, -temp[2].xxxx, const[3].xxxx, input[1].zzzz; 11: ADD temp[2].x, temp[2].xxxx, -const[2].xxxx; 12: MIN temp[2].x, temp[2].xxxx, const[2].yyyy; 13: RCP temp[3].x, const[2].yyyy; 14: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 15: MAX temp[2].x, temp[2].xxxx, const[6].wwww; 16: LG2 temp[7].w, temp[2].xxxx; 17: MUL temp[7].w, temp[7].wwww, const[0].xxxx; 18: EX2 temp[2].x, temp[7].wwww; 19: MUL temp[2].x, temp[2].xxxx, const[1].wwww; 20: MOV temp[1].w, temp[2].xxxx; 21: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: RCP temp[4].w, input[0].___w; 1: MUL temp[4].xy, input[0].xy__, temp[4].ww__; 2: MAD temp[4].xy, temp[4].xy__, const[7].xy__, const[8].xy__; 3: MOV temp[0].x, temp[4].x___; 4: MAD temp[0].y, temp[4]._y__, const[5]._x__, const[5]._y__; 5: MOV temp[1].xyz, const[1].xyz_; 6: MUL temp[5].xy, temp[0].xy__, const[9].xy__; 7: TEX temp[6].xyz, temp[5].xy__, 2D[0]; 8: MOV temp[2].xyz, temp[6].xyz_; 9: DP3 temp[2].x, temp[2].xyz_, const[6].xyz_; 10: MAD temp[2].x, -temp[2].x___, const[3].x___, input[1].z___; 11: ADD temp[2].x, temp[2].x___, -const[2].x___; 12: MIN temp[2].x, temp[2].x___, const[2].y___; 13: RCP temp[3].x, const[2].y___; 14: MUL temp[2].x, temp[2].x___, temp[3].x___; 15: MAX temp[2].x, temp[2].x___, const[6].w___; 16: LG2 temp[7].w, temp[2].___x; 17: MUL temp[7].w, temp[7].___w, const[0].___x; 18: EX2 temp[2].x, temp[7].w___; 19: MUL temp[2].x, temp[2].x___, const[1].w___; 20: MOV temp[1].w, temp[2].___x; 21: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: RCP temp[4].w, input[0].___w; 1: MUL temp[4].xy, input[0].xy__, temp[4].ww__; 2: MAD temp[4].xy, temp[4].xy__, const[7].xy__, const[8].xy__; 3: MOV temp[0].x, temp[4].x___; 4: MAD temp[0].y, temp[4]._y__, const[5]._x__, const[5]._y__; 5: MOV temp[1].xyz, const[1].xyz_; 6: MUL temp[5].xy, temp[0].xy__, const[9].xy__; 7: TEX temp[6].xyz, temp[5].xy__, 2D[0]; 8: MOV temp[2].xyz, temp[6].xyz_; 9: DP3 temp[2].x, temp[2].xyz_, const[6].xyz_; 10: MAD temp[2].x, -temp[2].x___, const[3].x___, input[1].z___; 11: ADD temp[2].x, temp[2].x___, -const[2].x___; 12: MIN temp[2].x, temp[2].x___, const[2].y___; 13: RCP temp[3].x, const[2].y___; 14: MUL temp[2].x, temp[2].x___, temp[3].x___; 15: MAX temp[2].x, temp[2].x___, const[6].w___; 16: LG2 temp[7].w, temp[2].___x; 17: MUL temp[7].w, temp[7].___w, const[0].___x; 18: EX2 temp[2].x, temp[7].w___; 19: MUL temp[2].x, temp[2].x___, const[1].w___; 20: MOV temp[1].w, temp[2].___x; 21: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: RCP temp[8].w, input[0].___w; 1: MUL temp[9].xy, input[0].xy__, temp[8].ww__; 2: MAD temp[10].xy, temp[9].xy__, const[7].xy__, const[8].xy__; 3: MOV temp[11].x, temp[10].x___; 4: MAD temp[11].y, temp[10]._y__, const[5]._x__, const[5]._y__; 5: MOV temp[12].xyz, const[1].xyz_; 6: MUL temp[13].xy, temp[11].xy__, const[9].xy__; 7: TEX temp[14].xyz, temp[13].xy__, 2D[0]; 8: MOV temp[15].xyz, temp[14].xyz_; 9: DP3 temp[16].x, temp[15].xyz_, const[6].xyz_; 10: MAD temp[17].x, -temp[16].x___, const[3].x___, input[1].z___; 11: ADD temp[18].x, temp[17].x___, -const[2].x___; 12: MIN temp[19].x, temp[18].x___, const[2].y___; 13: RCP temp[20].x, const[2].y___; 14: MUL temp[21].x, temp[19].x___, temp[20].x___; 15: MAX temp[22].x, temp[21].x___, const[6].w___; 16: LG2 temp[23].w, temp[22].___x; 17: MUL temp[24].w, temp[23].___w, const[0].___x; 18: EX2 temp[25].x, temp[24].w___; 19: MUL temp[26].x, temp[25].x___, const[1].w___; 20: MOV temp[12].w, temp[26].___x; 21: MOV output[0], temp[12]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: RCP temp[8].w, input[0].___w; 1: MUL temp[9].xy, input[0].xy__, temp[8].ww__; 2: MAD temp[10].xy, temp[9].xy__, const[7].xy__, const[8].xy__; 3: MOV temp[11].x, temp[10].x___; 4: MAD temp[11].y, temp[10]._y__, const[5]._x__, const[5]._y__; 5: MOV temp[12].xyz, const[1].xyz_; 6: MUL temp[13].xy, temp[11].xy__, const[9].xy__; 7: TEX temp[14].xyz, temp[13].xy__, 2D[0]; 8: DP3 temp[16].x, temp[14].xyz_, const[6].xyz_; 9: MAD temp[17].x, -temp[16].x___, const[3].x___, input[1].z___; 10: MIN temp[19].x, (temp[17] - const[2]).x___, const[2].y___; 11: RCP temp[20].x, const[2].y___; 12: MUL temp[21].x, temp[19].x___, temp[20].x___; 13: MAX temp[22].x, temp[21].x___, none.0___; 14: LG2 temp[23].w, temp[22].___x; 15: MUL temp[24].w, temp[23].___w, const[0].___x; 16: EX2 temp[25].x, temp[24].w___; 17: MUL temp[26].x, temp[25].x___, const[1].w___; 18: MOV temp[12].w, temp[26].___x; 19: MOV output[0], temp[12]; CONST[6] = { 1.0000 0.0039 0.0000 0.0000 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: RCP temp[8].w, input[0].___w; 1: MUL temp[9].xy, input[0].xy__, temp[8].ww__; 2: MAD temp[10].xy, temp[9].xy__, const[7].xy__, const[8].xy__; 3: MOV temp[11].x, temp[10].x___; 4: MAD temp[11].y, temp[10]._y__, const[5]._x__, const[5]._y__; 5: MOV temp[12].xyz, const[1].xyz_; 6: MUL temp[13].xy, temp[11].xy__, const[9].xy__; 7: TEX temp[14].xyz, temp[13].xy__, 2D[0]; 8: DP3 temp[16].x, temp[14].xyz_, const[6].xyz_; 9: MAD temp[17].x, -temp[16].x___, const[3].x___, input[1].z___; 10: MIN temp[19].x, (temp[17] - const[2]).x___, const[2].y___; 11: RCP temp[20].x, const[2].y___; 12: MUL temp[21].x, temp[19].x___, temp[20].x___; 13: MAX temp[22].x, temp[21].x___, none.0___; 14: LG2 temp[23].w, temp[22].___x; 15: MUL temp[24].w, temp[23].___w, const[0].___x; 16: EX2 temp[25].x, temp[24].w___; 17: MUL temp[26].x, temp[25].x___, const[1].w___; 18: MOV temp[12].w, temp[26].___x; 19: MOV output[0], temp[12]; CONST[5] = { 1.0000 0.0039 0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: RCP temp[8].w, input[0].___w; 1: MUL temp[9].xy, input[0].xy__, temp[8].ww__; 2: MAD temp[10].xy, temp[9].xy__, const[6].xy__, const[7].xy__; 3: MOV temp[11].x, temp[10].x___; 4: MAD temp[11].y, temp[10]._y__, const[4]._x__, const[4]._y__; 5: MOV temp[12].xyz, const[1].xyz_; 6: MUL temp[13].xy, temp[11].xy__, const[8].xy__; 7: TEX temp[14].xyz, temp[13].xy__, 2D[0]; 8: DP3 temp[16].x, temp[14].xyz_, const[5].xyz_; 9: MAD temp[17].x, -temp[16].x___, const[3].x___, input[1].z___; 10: MIN temp[19].x, (temp[17] - const[2]).x___, const[2].y___; 11: RCP temp[20].x, const[2].y___; 12: MUL temp[21].x, temp[19].x___, temp[20].x___; 13: MAX temp[22].x, temp[21].x___, none.0___; 14: LG2 temp[23].w, temp[22].___x; 15: MUL temp[24].w, temp[23].___w, const[0].___x; 16: EX2 temp[25].x, temp[24].w___; 17: MUL temp[26].x, temp[25].x___, const[1].w___; 18: MOV temp[12].w, temp[26].___x; 19: MOV output[0], temp[12]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[8].w, src0.w 1: src0.xyz = input[0], src0.w = temp[8] MAD temp[9].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[9], src1.xyz = const[6], src2.xyz = const[7] MAD temp[10].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[10] MAD temp[11].x, src0.x__, src0.111, src0.000 4: src0.xyz = temp[10], src1.xyz = const[4] MAD temp[11].y, src0._y_, src1._x_, src1._y_ 5: src0.xyz = const[1] MAD temp[12].xyz, src0.xyz, src0.111, src0.000 6: src0.xyz = temp[11], src1.xyz = const[8] MAD temp[13].xy, src0.xy_, src1.xy_, src0.000 7: TEX temp[14].xyz, temp[13].xy__, 2D[0]; 8: src0.xyz = temp[14], src1.xyz = const[5] DP3 temp[16].x, src0.xyz, src1.xyz 9: src0.xyz = temp[16], src1.xyz = const[3], src2.xyz = input[1] MAD temp[17].x, -src0.x__, src1.x__, src2.z__ 10: src0.xyz = const[2], src1.xyz = temp[17], srcp.xyz = (src1 - src0) MIN temp[19].x, srcp.x__, src0.y__ 11: src0.xyz = const[2] REPL_ALPHA temp[20].x RCP, src0.y 12: src0.xyz = temp[19], src1.xyz = temp[20] MAD temp[21].x, src0.x__, src1.x__, src0.000 13: src0.xyz = temp[21] MAX temp[22].x, src0.x__, src0.0__ 14: src0.xyz = temp[22] LG2 temp[23].w, src0.x 15: src0.xyz = const[0], src0.w = temp[23] MAD temp[24].w, src0.w, src0.x, src0.0 16: src0.w = temp[24] REPL_ALPHA temp[25].x EX2, src0.w 17: src0.xyz = temp[25], src0.w = const[1] MAD temp[26].x, src0.x__, src0.w__, src0.000 18: src0.xyz = temp[26] MAD temp[12].w, src0.x, src0.1, src0.0 19: src0.xyz = temp[12], src0.w = temp[12] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = const[1], src0.w = input[0] MAD temp[12].xyz, src0.xyz, src0.111, src0.000 RCP temp[8].w, src0.w 1: src0.xyz = input[0], src0.w = temp[8], src1.xyz = const[2] MAD temp[9].xy, src0.xy_, src0.ww_, src0.000 RCP temp[20].w, src1.y 2: src0.xyz = temp[9], src1.xyz = const[6], src2.xyz = const[7] MAD temp[10].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[10], src1.xyz = const[4] MAD temp[11].y, src0._y_, src1._x_, src1._y_ 4: src0.xyz = temp[10] MAD temp[11].x, src0.x__, src0.111, src0.000 5: src0.xyz = temp[11], src1.xyz = const[8] MAD temp[13].xy, src0.xy_, src1.xy_, src0.000 6: BEGIN_TEX; 7: TEX temp[14].xyz, temp[13].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 8: src0.xyz = temp[14], src1.xyz = const[5] SEM_WAIT DP3 temp[16].x, src0.xyz, src1.xyz 9: src0.xyz = temp[16], src1.xyz = const[3], src2.xyz = input[1] MAD temp[17].x, -src0.x__, src1.x__, src2.z__ 10: src0.xyz = const[2], src1.xyz = temp[17], srcp.xyz = (src1 - src0) MIN temp[19].x, srcp.x__, src0.y__ 11: src0.xyz = temp[19], src0.w = temp[20], src1.xyz = temp[20] MAD temp[21].x, src0.x__, src0.w__, src0.000 12: src0.xyz = temp[21] MAX temp[22].x, src0.x__, src0.0__ 13: src0.xyz = temp[22] LG2 temp[23].w, src0.x 14: src0.xyz = const[0], src0.w = temp[23] MAD temp[24].w, src0.w, src0.x, src0.0 15: src0.w = temp[24] REPL_ALPHA temp[25].x EX2, src0.w 16: src0.xyz = temp[25], src0.w = const[1] MAD temp[26].x, src0.x__, src0.w__, src0.000 17: src0.xyz = temp[26] MAD temp[12].w, src0.x, src0.1, src0.0 18: src0.xyz = temp[12], src0.w = temp[12] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = const[1], src0.w = input[0] MAD temp[12].xyz, src0.xyz, src0.111, src0.000 RCP temp[8].w, src0.w 1: src0.xyz = input[0], src0.w = temp[8], src1.xyz = const[2] MAD temp[9].xy, src0.xy_, src0.ww_, src0.000 RCP temp[20].w, src1.y 2: src0.xyz = temp[9], src1.xyz = const[6], src2.xyz = const[7] MAD temp[10].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[10], src1.xyz = const[4] MAD temp[11].y, src0._y_, src1._x_, src1._y_ 4: src0.xyz = temp[10] MAD temp[11].x, src0.x__, src0.111, src0.000 5: src0.xyz = temp[11], src1.xyz = const[8] MAD temp[13].xy, src0.xy_, src1.xy_, src0.000 6: BEGIN_TEX; 7: TEX temp[14].xyz, temp[13].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 8: src0.xyz = temp[14], src1.xyz = const[5] SEM_WAIT DP3 temp[16].x, src0.xyz, src1.xyz 9: src0.xyz = temp[16], src1.xyz = const[3], src2.xyz = input[1] MAD temp[17].x, -src0.x__, src1.x__, src2.z__ 10: src0.xyz = const[2], src1.xyz = temp[17], srcp.xyz = (src1 - src0) MIN temp[19].x, srcp.x__, src0.y__ 11: src0.xyz = temp[19], src0.w = temp[20] MAD temp[21].x, src0.x__, src0.w__, src0.000 12: src0.xyz = temp[21] MAX temp[22].x, src0.x__, src0.0__ 13: src0.xyz = temp[22] LG2 temp[23].w, src0.x 14: src0.xyz = const[0], src0.w = temp[23] MAD temp[24].w, src0.w, src0.x, src0.0 15: src0.w = temp[24] REPL_ALPHA temp[25].x EX2, src0.w 16: src0.xyz = temp[25], src0.w = const[1] MAD temp[26].x, src0.x__, src0.w__, src0.000 17: src0.xyz = temp[26] MAD temp[12].w, src0.x, src0.1, src0.0 18: src0.xyz = temp[12], src0.w = temp[12] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = const[1], src0.w = input[1] MAD temp[2].xyz, src0.xyz, src0.111, src0.000 RCP temp[0].w, src0.w 1: src0.xyz = input[1], src0.w = temp[0], src1.xyz = const[2] MAD temp[0].xy, src0.xy_, src0.ww_, src0.00_ RCP temp[0].w, src1.y 2: src0.xyz = temp[0], src1.xyz = const[6], src2.xyz = const[7] MAD temp[0].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[0], src1.xyz = const[4] MAD temp[1].y, src0._y_, src1._x_, src1._y_ 4: src0.xyz = temp[0] MAD temp[1].x, src0.x__, src0.11_, src0.00_ 5: src0.xyz = temp[1], src1.xyz = const[8] MAD temp[0].xy, src0.xy_, src1.xy_, src0.00_ 6: BEGIN_TEX; 7: TEX temp[1].xyz, temp[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 8: src0.xyz = temp[1], src1.xyz = const[5] SEM_WAIT DP3 temp[0].x, src0.xyz, src1.xyz 9: src0.xyz = temp[0], src1.xyz = const[3], src2.xyz = input[0] MAD temp[0].x, -src0.x__, src1.x__, src2.z__ 10: src0.xyz = const[2], src1.xyz = temp[0], srcp.xyz = (src1 - src0) MIN temp[0].x, srcp.x__, src0.y__ 11: src0.xyz = temp[0], src0.w = temp[0] MAD temp[0].x, src0.x__, src0.w__, src0.0__ 12: src0.xyz = temp[0] MAX temp[0].x, src0.x__, src0.0__ 13: src0.xyz = temp[0] LG2 temp[0].w, src0.x 14: src0.xyz = const[0], src0.w = temp[0] MAD temp[0].w, src0.w, src0.x, src0.0 15: src0.w = temp[0] REPL_ALPHA temp[0].x EX2, src0.w 16: src0.xyz = temp[0], src0.w = const[1] MAD temp[0].x, src0.x__, src0.w__, src0.0__ 17: src0.xyz = temp[0] MAD temp[0].w, src0.x, src0.1, src0.0 18: src0.xyz = temp[2], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=18************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 5, tex_end: 0 (code_addr: 00000140) 0: xyz: c1 t0 t0 bias-> t2.xyz (03880021) w: t1 t0 t0 bias-> t0.w (00800001) xyz: c1.xyz 1.0 0.0 op: 00050a80 w: t1.w c1.x c1.x op: 05000009 1: xyz: t1 c2 t0 bias-> t0.xy (01800881) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t1.xyz t0.www 0.0 op: 00050600 w: c2.y t1.x t1.x op: 05000004 2: xyz: t0 c6 c7 bias-> t0.xy (01827980) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c6.xyz c7.xyz op: 00020200 w: t0.x t0.x t0.x op: 00000000 3: xyz: t0 c4 t0 bias-> t1.y (01040900) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c4.xxx c4.xyz op: 00010280 w: t0.x t0.x t0.x op: 00000000 4: xyz: t0 t0 t0 bias-> t1.x (00840000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 5: xyz: t1 c8 t0 bias-> t0.xy (01800a01) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c8.xyz 0.0 op: 00050200 w: t1.x t1.x t1.x op: 00000000 NODE 1: alu_offset: 6, tex_offset: 0, alu_end: 10, tex_end: 0 (code_addr: 00400286) TEX: TEX t1, t0, texture[0] (00008040) 6: xyz: t1 c5 t0 bias-> t0.x (00800941) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c5.xyz t1.xxx op: 00804200 w: t1.x t1.x t1.x op: 00000000 7: xyz: t0 c3 t0 bias-> t0.x (008008c0) w: t0 t0 t0 bias-> (00000000) xyz: -t0.xyz c3.xyz t0.zzz op: 8002c220 NOP w: t0.x t0.x t0.x op: 00000000 8: xyz: c2 t0 t0 sub-> t0.x (00800022) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xyz c2.yyy c2.xxx op: 0220410f w: c2.x c2.x c2.x op: 00000000 9: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.www 0.0 op: 00050600 w: t0.x t0.x t0.x op: 00000000 10: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 0.0 t0.xxx op: 02804a00 w: t0.x t0.x t0.x op: 00000000 11: xyz: t0 t0 t0 bias-> (00000000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: t0.x t0.x t0.x op: 04800000 12: xyz: c0 t0 t0 bias-> (00000020) w: t0 t0 t0 bias-> t0.w (00800000) xyz: c0.xxx c0.xxx c0.xxx op: 00004081 w: t0.w c0.x 0.0 op: 00040009 13: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: t0.w t0.x t0.x op: 04000009 14: xyz: t0 t0 t0 bias-> t0.x (00800000) w: c1 t0 t0 bias-> (00000021) xyz: t0.xyz c1.www 0.0 op: 00050600 w: t0.x t0.x t0.x op: 00000000 15: xyz: t0 t0 t0 bias-> (00000000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: t0.x 1.0 0.0 op: 00040880 16: xyz: t2 t0 t0 bias-> o0.xyz (1c000002) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t2.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL IN[1], GENERIC[12], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0..1] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL 0: TEX TEMP[0], IN[0].xyyy, SAMP[0], 2D 1: MUL TEMP[0], TEMP[0], IN[1] 2: MOV TEMP[1].w, TEMP[0].wwww 3: MUL TEMP[2].x, CONST[1].xxxx, CONST[0].xxxx 4: MUL TEMP[1].xyz, TEMP[0].xyzz, TEMP[2].xxxx 5: MOV OUT[0], TEMP[1] 6: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV temp[1].w, temp[0].wwww; 3: MUL temp[2].x, const[1].xxxx, const[0].xxxx; 4: MUL temp[1].xyz, temp[0].xyzz, temp[2].xxxx; 5: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV temp[1].w, temp[0].wwww; 3: MUL temp[2].x, const[1].xxxx, const[0].xxxx; 4: MUL temp[1].xyz, temp[0].xyzz, temp[2].xxxx; 5: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV temp[1].w, temp[0].wwww; 3: MUL temp[2].x, const[1].xxxx, const[0].xxxx; 4: MUL temp[1].xyz, temp[0].xyzz, temp[2].xxxx; 5: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV temp[1].w, temp[0].wwww; 3: MUL temp[2].x, const[1].xxxx, const[0].xxxx; 4: MUL temp[1].xyz, temp[0].xyzz, temp[2].xxxx; 5: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV temp[1].w, temp[0].wwww; 3: MUL temp[2].x, const[1].xxxx, const[0].xxxx; 4: MUL temp[1].xyz, temp[0].xyzz, temp[2].xxxx; 5: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV temp[1].w, temp[0].wwww; 3: MUL temp[2].x, const[1].xxxx, const[0].xxxx; 4: MUL temp[1].xyz, temp[0].xyzz, temp[2].xxxx; 5: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV temp[1].w, temp[0].wwww; 3: MUL temp[2].x, const[1].xxxx, const[0].xxxx; 4: MUL temp[1].xyz, temp[0].xyzz, temp[2].xxxx; 5: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV temp[1].w, temp[0].___w; 3: MUL temp[2].x, const[1].x___, const[0].x___; 4: MUL temp[1].xyz, temp[0].xyz_, temp[2].xxx_; 5: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV temp[1].w, temp[0].___w; 3: MUL temp[2].x, const[1].x___, const[0].x___; 4: MUL temp[1].xyz, temp[0].xyz_, temp[2].xxx_; 5: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[3], input[0].xy__, 2D[0]; 1: MUL temp[4], temp[3], input[1]; 2: MOV temp[5].w, temp[4].___w; 3: MUL temp[6].x, const[1].x___, const[0].x___; 4: MUL temp[5].xyz, temp[4].xyz_, temp[6].xxx_; 5: MOV output[0], temp[5]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[3], input[0].xy__, 2D[0]; 1: MUL temp[4], temp[3], input[1]; 2: MOV temp[5].w, temp[4].___w; 3: MUL temp[6].x, const[1].x___, const[0].x___; 4: MUL temp[5].xyz, temp[4].xyz_, temp[6].xxx_; 5: MOV output[0], temp[5]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[3], input[0].xy__, 2D[0]; 1: MUL temp[4], temp[3], input[1]; 2: MOV temp[5].w, temp[4].___w; 3: MUL temp[6].x, const[1].x___, const[0].x___; 4: MUL temp[5].xyz, temp[4].xyz_, temp[6].xxx_; 5: MOV output[0], temp[5]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[3], input[0].xy__, 2D[0]; 1: MUL temp[4], temp[3], input[1]; 2: MOV temp[5].w, temp[4].___w; 3: MUL temp[6].x, const[1].x___, const[0].x___; 4: MUL temp[5].xyz, temp[4].xyz_, temp[6].xxx_; 5: MOV output[0], temp[5]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[3], input[0].xy__, 2D[0]; 1: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = input[1], src1.w = input[1] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[4].w, src0.w, src1.w, src0.0 2: src0.w = temp[4] MAD temp[5].w, src0.w, src0.1, src0.0 3: src0.xyz = const[1], src1.xyz = const[0] MAD temp[6].x, src0.x__, src1.x__, src0.000 4: src0.xyz = temp[4], src1.xyz = temp[6] MAD temp[5].xyz, src0.xyz, src1.xxx, src0.000 5: src0.xyz = temp[5], src0.w = temp[5] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[3], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = input[1], src1.w = input[1] SEM_WAIT MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[4].w, src0.w, src1.w, src0.0 3: src0.xyz = const[1], src0.w = temp[4], src1.xyz = const[0] MAD temp[6].x, src0.x__, src1.x__, src0.000 MAD temp[5].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[4], src1.xyz = temp[6] MAD temp[5].xyz, src0.xyz, src1.xxx, src0.000 5: src0.xyz = temp[5], src0.w = temp[5] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[3], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = input[1], src1.w = input[1] SEM_WAIT MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[4].w, src0.w, src1.w, src0.0 3: src0.xyz = const[1], src0.w = temp[4], src1.xyz = const[0] MAD temp[6].x, src0.x__, src1.x__, src0.000 MAD temp[5].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[4], src1.xyz = temp[6] MAD temp[5].xyz, src0.xyz, src1.xxx, src0.000 5: src0.xyz = temp[5], src0.w = temp[5] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[1], src1.w = input[1] SEM_WAIT MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 3: src0.xyz = const[1], src0.w = temp[0], src1.xyz = const[0] MAD temp[1].x, src0.x__, src1.x__, src0.0__ MAD temp[0].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[0], src1.xyz = temp[1] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 5: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=19************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 3, tex_end: 0 (code_addr: 004000c0) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t0 t1 t0 bias-> t0.xyz (03800040) w: t0 t1 t0 bias-> t0.w (00800040) xyz: t0.xyz t1.xyz 0.0 op: 00050200 w: t0.w t1.w 0.0 op: 00040509 1: xyz: c1 c0 t0 bias-> t1.x (00840821) w: t0 t0 t0 bias-> t0.w (00800000) xyz: c1.xyz c0.xyz 0.0 op: 00050200 w: t0.w 1.0 0.0 op: 00040889 2: xyz: t0 t1 t0 bias-> t0.xyz (03800040) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t1.xxx 0.0 op: 00050280 w: t0.x t0.x t0.x op: 00000000 3: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], LINEAR DCL OUT[0], COLOR DCL SAMP[0] 0: TEX OUT[0], IN[0], SAMP[0], RECT 1: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX output[0], input[0], RECT[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX output[0], input[0], RECT[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX output[0], input[0], RECT[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX output[0], input[0], RECT[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX output[0], input[0], RECT[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MUL temp[0], input[0], const[0]; 1: TEX temp[1], temp[0], 2D[0]; 2: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0], input[0], const[0]; 1: TEX temp[1], temp[0], 2D[0]; 2: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0].xy, input[0].xy__, const[0].xy__; 1: TEX temp[1], temp[0].xy__, 2D[0]; 2: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MUL temp[0].xy, input[0].xy__, const[0].xy__; 1: TEX temp[1], temp[0].xy__, 2D[0]; 2: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MUL temp[2].xy, input[0].xy__, const[0].xy__; 1: TEX temp[3], temp[2].xy__, 2D[0]; 2: MOV output[0], temp[3]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[2].xy, input[0].xy__, const[0].xy__; 1: TEX temp[3], temp[2].xy__, 2D[0]; 2: MOV output[0], temp[3]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[2].xy, input[0].xy__, const[0].xy__; 1: TEX temp[3], temp[2].xy__, 2D[0]; 2: MOV output[0], temp[3]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[2].xy, input[0].xy__, const[0].xy__; 1: TEX temp[3], temp[2].xy__, 2D[0]; 2: MOV output[0], temp[3]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[0] MAD temp[2].xy, src0.xy_, src1.xy_, src0.000 1: TEX temp[3], temp[2].xy__, 2D[0]; 2: src0.xyz = temp[3], src0.w = temp[3] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[0] MAD temp[2].xy, src0.xy_, src1.xy_, src0.000 1: BEGIN_TEX; 2: TEX temp[3], temp[2].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 3: src0.xyz = temp[3], src0.w = temp[3] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[0] MAD temp[2].xy, src0.xy_, src1.xy_, src0.000 1: BEGIN_TEX; 2: TEX temp[3], temp[2].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 3: src0.xyz = temp[3], src0.w = temp[3] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[0] MAD temp[0].xy, src0.xy_, src1.xy_, src0.00_ 1: BEGIN_TEX; 2: TEX temp[0], temp[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 3: src0.xyz = temp[0], src0.w = temp[0] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=20************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00000000) 0: xyz: t0 c0 t0 bias-> t0.xy (01800800) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c0.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 NODE 1: alu_offset: 1, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400001) TEX: TEX t0, t0, texture[0] (00008000) 1: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], POSITION, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL IN[2], GENERIC[12], PERSPECTIVE DCL IN[3], GENERIC[13], PERSPECTIVE DCL IN[4], GENERIC[14], PERSPECTIVE DCL IN[5], GENERIC[15], PERSPECTIVE DCL IN[6], GENERIC[16], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL CONST[13] DCL CONST[0..8] DCL TEMP[0] DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL IMM[0] FLT32 { 1.0000, 2.0000, -1.0000, 10.0000} IMM[1] FLT32 { 0.0000, -1.0000, 0.0000, 0.0000} 0: MOV TEMP[0], IN[0] 1: MAD TEMP[0].y, IN[0], CONST[13].xxxx, CONST[13].yyyy 2: TEX TEMP[1], IN[1].xyyy, SAMP[3], 2D 3: MUL TEMP[1], TEMP[1], IN[3] 4: MOV TEMP[2].w, TEMP[1].wwww 5: ADD TEMP[3].xyz, IMM[0].xxxx, -TEMP[1].xyzz 6: ADD TEMP[4].x, IMM[0].xxxx, -CONST[8].xxxx 7: MAD TEMP[2].xyz, TEMP[3].xyzz, TEMP[4].xxxx, TEMP[1].xyzz 8: TEX TEMP[1].xyz, IN[1].xyyy, SAMP[2], 2D 9: MAD TEMP[1].xyz, TEMP[1].xyzz, IMM[0].yyyy, IMM[0].zzzz 10: MUL TEMP[3].xyz, TEMP[1].xxxx, IN[5].xyzz 11: MAD TEMP[3].xyz, TEMP[1].yyyy, IN[4].xyzz, TEMP[3].xyzz 12: MAD TEMP[1].xyz, TEMP[1].zzzz, IN[6].xyzz, TEMP[3].xyzz 13: DP3 TEMP[3].x, TEMP[1].xyzz, TEMP[1].xyzz 14: RSQ TEMP[3].x, TEMP[3].xxxx 15: MUL TEMP[1].xyz, TEMP[1].xyzz, TEMP[3].xxxx 16: RCP TEMP[3].x, IN[2].zzzz 17: MIN TEMP[3].x, TEMP[3].xxxx, IMM[0].wwww 18: MUL TEMP[3].x, CONST[6].xxxx, TEMP[3].xxxx 19: MAD TEMP[3].xy, TEMP[1].xyyy, TEMP[3].xxxx, TEMP[0].xyyy 20: TEX TEMP[3].xyz, TEMP[3].xyyy, SAMP[1], RECT 21: MUL TEMP[2].xyz, TEMP[2].xyzz, TEMP[3].xyzz 22: DP3 TEMP[3].x, IN[2].xyzz, IN[2].xyzz 23: RSQ TEMP[3].x, TEMP[3].xxxx 24: MUL TEMP[3].xyz, IN[2].xyzz, TEMP[3].xxxx 25: DP3 TEMP[5].x, TEMP[1].xyzz, TEMP[3].xyzz 26: MUL TEMP[5].xyz, TEMP[5].xxxx, TEMP[1].xyzz 27: MUL TEMP[5].xyz, IMM[0].yyyy, TEMP[5].xyzz 28: ADD TEMP[4].xyz, TEMP[3].xyzz, -TEMP[5].xyzz 29: MUL TEMP[5], CONST[2], TEMP[4].xxxx 30: MAD TEMP[5], CONST[3], TEMP[4].yyyy, TEMP[5] 31: MAD TEMP[4], CONST[4], TEMP[4].zzzz, TEMP[5] 32: ADD TEMP[4].xyz, TEMP[4], CONST[5] 33: TEX TEMP[4].xyz, TEMP[4].xyzz, SAMP[0], CUBE 34: ADD TEMP[5].x, IMM[0].xxxx, -CONST[1].xxxx 35: DP3 TEMP[3].x, -TEMP[3].xyzz, TEMP[1].xyzz 36: MAX TEMP[3].x, TEMP[3].xxxx, IMM[1].xxxx 37: ADD TEMP[3].x, IMM[0].xxxx, -TEMP[3].xxxx 38: POW TEMP[3].x, TEMP[3].xxxx, CONST[1].yyyy 39: MAD TEMP[3].x, TEMP[5].xxxx, TEMP[3].xxxx, CONST[1].xxxx 40: MAX TEMP[3].x, TEMP[3].xxxx, IMM[1].xxxx 41: MUL TEMP[3].xyz, TEMP[4].xyzz, TEMP[3].xxxx 42: MUL TEMP[3].xyz, TEMP[3].xyzz, CONST[8].xxxx 43: MAD TEMP[2].xyz, TEMP[3].xyzz, CONST[7].xxxx, TEMP[2].xyzz 44: DP3 TEMP[1].x, TEMP[1].xyzz, IMM[1].xxyy 45: ABS TEMP[1].x, TEMP[1].xxxx 46: ADD TEMP[1].x, IMM[0].xxxx, -TEMP[1].xxxx 47: POW TEMP[1].x, TEMP[1].xxxx, CONST[0].yyyy 48: MUL TEMP[1].x, TEMP[1].xxxx, CONST[0].xxxx 49: MUL TEMP[1].xyz, TEMP[4].xyzz, TEMP[1].xxxx 50: MUL TEMP[1].xyz, TEMP[1].xyzz, CONST[8].xxxx 51: MAD TEMP[2].xyz, TEMP[1].xyzz, CONST[7].xxxx, TEMP[2].xyzz 52: MOV OUT[0], TEMP[2] 53: END Fragment Program: before compilation # Radeon Compiler Program 0: RCP temp[6].w, input[0].wwww; 1: MUL temp[6].xyz, input[0], temp[6].wwww; 2: MAD temp[6].xyz, temp[6].xyz0, const[16].xyz0, const[17].xyz0; 3: MOV temp[0], temp[6]; 4: MAD temp[0].y, temp[6], const[13].xxxx, const[13].yyyy; 5: TEX temp[1], input[1].xyyy, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: MOV temp[2].w, temp[1].wwww; 8: ADD temp[3].xyz, const[14].xxxx, -temp[1].xyzz; 9: ADD temp[4].x, const[14].xxxx, -const[8].xxxx; 10: MAD temp[2].xyz, temp[3].xyzz, temp[4].xxxx, temp[1].xyzz; 11: TEX temp[1].xyz, input[1].xyyy, 2D[2]; 12: MAD temp[1].xyz, temp[1].xyzz, const[14].yyyy, const[14].zzzz; 13: MUL temp[3].xyz, temp[1].xxxx, input[5].xyzz; 14: MAD temp[3].xyz, temp[1].yyyy, input[4].xyzz, temp[3].xyzz; 15: MAD temp[1].xyz, temp[1].zzzz, input[6].xyzz, temp[3].xyzz; 16: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 17: RSQ temp[3].x, temp[3].xxxx; 18: MUL temp[1].xyz, temp[1].xyzz, temp[3].xxxx; 19: RCP temp[3].x, input[2].zzzz; 20: MIN temp[3].x, temp[3].xxxx, const[14].wwww; 21: MUL temp[3].x, const[6].xxxx, temp[3].xxxx; 22: MAD temp[3].xy, temp[1].xyyy, temp[3].xxxx, temp[0].xyyy; 23: TEX temp[3].xyz, temp[3].xyyy, RECT[1]; 24: MUL temp[2].xyz, temp[2].xyzz, temp[3].xyzz; 25: DP3 temp[3].x, input[2].xyzz, input[2].xyzz; 26: RSQ temp[3].x, temp[3].xxxx; 27: MUL temp[3].xyz, input[2].xyzz, temp[3].xxxx; 28: DP3 temp[5].x, temp[1].xyzz, temp[3].xyzz; 29: MUL temp[5].xyz, temp[5].xxxx, temp[1].xyzz; 30: MUL temp[5].xyz, const[14].yyyy, temp[5].xyzz; 31: ADD temp[4].xyz, temp[3].xyzz, -temp[5].xyzz; 32: MUL temp[5], const[2], temp[4].xxxx; 33: MAD temp[5], const[3], temp[4].yyyy, temp[5]; 34: MAD temp[4], const[4], temp[4].zzzz, temp[5]; 35: ADD temp[4].xyz, temp[4], const[5]; 36: TEX temp[4].xyz, temp[4].xyzz, CUBE[0]; 37: ADD temp[5].x, const[14].xxxx, -const[1].xxxx; 38: DP3 temp[3].x, -temp[3].xyzz, temp[1].xyzz; 39: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 40: ADD temp[3].x, const[14].xxxx, -temp[3].xxxx; 41: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 42: MAD temp[3].x, temp[5].xxxx, temp[3].xxxx, const[1].xxxx; 43: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 44: MUL temp[3].xyz, temp[4].xyzz, temp[3].xxxx; 45: MUL temp[3].xyz, temp[3].xyzz, const[8].xxxx; 46: MAD temp[2].xyz, temp[3].xyzz, const[7].xxxx, temp[2].xyzz; 47: DP3 temp[1].x, temp[1].xyzz, const[15].xxyy; 48: ABS temp[1].x, temp[1].xxxx; 49: ADD temp[1].x, const[14].xxxx, -temp[1].xxxx; 50: POW temp[1].x, temp[1].xxxx, const[0].yyyy; 51: MUL temp[1].x, temp[1].xxxx, const[0].xxxx; 52: MUL temp[1].xyz, temp[4].xyzz, temp[1].xxxx; 53: MUL temp[1].xyz, temp[1].xyzz, const[8].xxxx; 54: MAD temp[2].xyz, temp[1].xyzz, const[7].xxxx, temp[2].xyzz; 55: MOV output[0], temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: RCP temp[6].w, input[0].wwww; 1: MUL temp[6].xyz, input[0], temp[6].wwww; 2: MAD temp[6].xyz, temp[6].xyz0, const[16].xyz0, const[17].xyz0; 3: MOV temp[0], temp[6]; 4: MAD temp[0].y, temp[6], const[13].xxxx, const[13].yyyy; 5: TEX temp[1], input[1].xyyy, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: MOV temp[2].w, temp[1].wwww; 8: ADD temp[3].xyz, const[14].xxxx, -temp[1].xyzz; 9: ADD temp[4].x, const[14].xxxx, -const[8].xxxx; 10: MAD temp[2].xyz, temp[3].xyzz, temp[4].xxxx, temp[1].xyzz; 11: TEX temp[1].xyz, input[1].xyyy, 2D[2]; 12: MAD temp[1].xyz, temp[1].xyzz, const[14].yyyy, const[14].zzzz; 13: MUL temp[3].xyz, temp[1].xxxx, input[5].xyzz; 14: MAD temp[3].xyz, temp[1].yyyy, input[4].xyzz, temp[3].xyzz; 15: MAD temp[1].xyz, temp[1].zzzz, input[6].xyzz, temp[3].xyzz; 16: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 17: RSQ temp[3].x, temp[3].xxxx; 18: MUL temp[1].xyz, temp[1].xyzz, temp[3].xxxx; 19: RCP temp[3].x, input[2].zzzz; 20: MIN temp[3].x, temp[3].xxxx, const[14].wwww; 21: MUL temp[3].x, const[6].xxxx, temp[3].xxxx; 22: MAD temp[3].xy, temp[1].xyyy, temp[3].xxxx, temp[0].xyyy; 23: TEX temp[3].xyz, temp[3].xyyy, RECT[1]; 24: MUL temp[2].xyz, temp[2].xyzz, temp[3].xyzz; 25: DP3 temp[3].x, input[2].xyzz, input[2].xyzz; 26: RSQ temp[3].x, temp[3].xxxx; 27: MUL temp[3].xyz, input[2].xyzz, temp[3].xxxx; 28: DP3 temp[5].x, temp[1].xyzz, temp[3].xyzz; 29: MUL temp[5].xyz, temp[5].xxxx, temp[1].xyzz; 30: MUL temp[5].xyz, const[14].yyyy, temp[5].xyzz; 31: ADD temp[4].xyz, temp[3].xyzz, -temp[5].xyzz; 32: MUL temp[5], const[2], temp[4].xxxx; 33: MAD temp[5], const[3], temp[4].yyyy, temp[5]; 34: MAD temp[4], const[4], temp[4].zzzz, temp[5]; 35: ADD temp[4].xyz, temp[4], const[5]; 36: TEX temp[4].xyz, temp[4].xyzz, CUBE[0]; 37: ADD temp[5].x, const[14].xxxx, -const[1].xxxx; 38: DP3 temp[3].x, -temp[3].xyzz, temp[1].xyzz; 39: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 40: ADD temp[3].x, const[14].xxxx, -temp[3].xxxx; 41: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 42: MAD temp[3].x, temp[5].xxxx, temp[3].xxxx, const[1].xxxx; 43: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 44: MUL temp[3].xyz, temp[4].xyzz, temp[3].xxxx; 45: MUL temp[3].xyz, temp[3].xyzz, const[8].xxxx; 46: MAD temp[2].xyz, temp[3].xyzz, const[7].xxxx, temp[2].xyzz; 47: DP3 temp[1].x, temp[1].xyzz, const[15].xxyy; 48: ABS temp[1].x, temp[1].xxxx; 49: ADD temp[1].x, const[14].xxxx, -temp[1].xxxx; 50: POW temp[1].x, temp[1].xxxx, const[0].yyyy; 51: MUL temp[1].x, temp[1].xxxx, const[0].xxxx; 52: MUL temp[1].xyz, temp[4].xyzz, temp[1].xxxx; 53: MUL temp[1].xyz, temp[1].xyzz, const[8].xxxx; 54: MAD temp[2].xyz, temp[1].xyzz, const[7].xxxx, temp[2].xyzz; 55: MOV output[0], temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: RCP temp[6].w, input[0].wwww; 1: MUL temp[6].xyz, input[0], temp[6].wwww; 2: MAD temp[6].xyz, temp[6].xyz0, const[16].xyz0, const[17].xyz0; 3: MOV temp[0], temp[6]; 4: MAD temp[0].y, temp[6], const[13].xxxx, const[13].yyyy; 5: TEX temp[1], input[1].xyyy, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: MOV temp[2].w, temp[1].wwww; 8: ADD temp[3].xyz, const[14].xxxx, -temp[1].xyzz; 9: ADD temp[4].x, const[14].xxxx, -const[8].xxxx; 10: MAD temp[2].xyz, temp[3].xyzz, temp[4].xxxx, temp[1].xyzz; 11: TEX temp[1].xyz, input[1].xyyy, 2D[2]; 12: MAD temp[1].xyz, temp[1].xyzz, const[14].yyyy, const[14].zzzz; 13: MUL temp[3].xyz, temp[1].xxxx, input[5].xyzz; 14: MAD temp[3].xyz, temp[1].yyyy, input[4].xyzz, temp[3].xyzz; 15: MAD temp[1].xyz, temp[1].zzzz, input[6].xyzz, temp[3].xyzz; 16: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 17: RSQ temp[3].x, temp[3].xxxx; 18: MUL temp[1].xyz, temp[1].xyzz, temp[3].xxxx; 19: RCP temp[3].x, input[2].zzzz; 20: MIN temp[3].x, temp[3].xxxx, const[14].wwww; 21: MUL temp[3].x, const[6].xxxx, temp[3].xxxx; 22: MAD temp[3].xy, temp[1].xyyy, temp[3].xxxx, temp[0].xyyy; 23: TEX temp[3].xyz, temp[3].xyyy, RECT[1]; 24: MUL temp[2].xyz, temp[2].xyzz, temp[3].xyzz; 25: DP3 temp[3].x, input[2].xyzz, input[2].xyzz; 26: RSQ temp[3].x, temp[3].xxxx; 27: MUL temp[3].xyz, input[2].xyzz, temp[3].xxxx; 28: DP3 temp[5].x, temp[1].xyzz, temp[3].xyzz; 29: MUL temp[5].xyz, temp[5].xxxx, temp[1].xyzz; 30: MUL temp[5].xyz, const[14].yyyy, temp[5].xyzz; 31: ADD temp[4].xyz, temp[3].xyzz, -temp[5].xyzz; 32: MUL temp[5], const[2], temp[4].xxxx; 33: MAD temp[5], const[3], temp[4].yyyy, temp[5]; 34: MAD temp[4], const[4], temp[4].zzzz, temp[5]; 35: ADD temp[4].xyz, temp[4], const[5]; 36: TEX temp[4].xyz, temp[4].xyzz, CUBE[0]; 37: ADD temp[5].x, const[14].xxxx, -const[1].xxxx; 38: DP3 temp[3].x, -temp[3].xyzz, temp[1].xyzz; 39: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 40: ADD temp[3].x, const[14].xxxx, -temp[3].xxxx; 41: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 42: MAD temp[3].x, temp[5].xxxx, temp[3].xxxx, const[1].xxxx; 43: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 44: MUL temp[3].xyz, temp[4].xyzz, temp[3].xxxx; 45: MUL temp[3].xyz, temp[3].xyzz, const[8].xxxx; 46: MAD temp[2].xyz, temp[3].xyzz, const[7].xxxx, temp[2].xyzz; 47: DP3 temp[1].x, temp[1].xyzz, const[15].xxyy; 48: ABS temp[1].x, temp[1].xxxx; 49: ADD temp[1].x, const[14].xxxx, -temp[1].xxxx; 50: POW temp[1].x, temp[1].xxxx, const[0].yyyy; 51: MUL temp[1].x, temp[1].xxxx, const[0].xxxx; 52: MUL temp[1].xyz, temp[4].xyzz, temp[1].xxxx; 53: MUL temp[1].xyz, temp[1].xyzz, const[8].xxxx; 54: MAD temp[2].xyz, temp[1].xyzz, const[7].xxxx, temp[2].xyzz; 55: MOV output[0], temp[2]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: RCP temp[6].w, input[0].wwww; 1: MUL temp[6].xyz, input[0], temp[6].wwww; 2: MAD temp[6].xyz, temp[6].xyz0, const[16].xyz0, const[17].xyz0; 3: MOV temp[0], temp[6]; 4: MAD temp[0].y, temp[6], const[13].xxxx, const[13].yyyy; 5: TEX temp[1], input[1].xyyy, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: MOV temp[2].w, temp[1].wwww; 8: ADD temp[3].xyz, const[14].xxxx, -temp[1].xyzz; 9: ADD temp[4].x, const[14].xxxx, -const[8].xxxx; 10: MAD temp[2].xyz, temp[3].xyzz, temp[4].xxxx, temp[1].xyzz; 11: TEX temp[1].xyz, input[1].xyyy, 2D[2]; 12: MAD temp[1].xyz, temp[1].xyzz, const[14].yyyy, const[14].zzzz; 13: MUL temp[3].xyz, temp[1].xxxx, input[5].xyzz; 14: MAD temp[3].xyz, temp[1].yyyy, input[4].xyzz, temp[3].xyzz; 15: MAD temp[1].xyz, temp[1].zzzz, input[6].xyzz, temp[3].xyzz; 16: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 17: RSQ temp[3].x, temp[3].xxxx; 18: MUL temp[1].xyz, temp[1].xyzz, temp[3].xxxx; 19: RCP temp[3].x, input[2].zzzz; 20: MIN temp[3].x, temp[3].xxxx, const[14].wwww; 21: MUL temp[3].x, const[6].xxxx, temp[3].xxxx; 22: MAD temp[3].xy, temp[1].xyyy, temp[3].xxxx, temp[0].xyyy; 23: TEX temp[3].xyz, temp[3].xyyy, RECT[1]; 24: MUL temp[2].xyz, temp[2].xyzz, temp[3].xyzz; 25: DP3 temp[3].x, input[2].xyzz, input[2].xyzz; 26: RSQ temp[3].x, temp[3].xxxx; 27: MUL temp[3].xyz, input[2].xyzz, temp[3].xxxx; 28: DP3 temp[5].x, temp[1].xyzz, temp[3].xyzz; 29: MUL temp[5].xyz, temp[5].xxxx, temp[1].xyzz; 30: MUL temp[5].xyz, const[14].yyyy, temp[5].xyzz; 31: ADD temp[4].xyz, temp[3].xyzz, -temp[5].xyzz; 32: MUL temp[5], const[2], temp[4].xxxx; 33: MAD temp[5], const[3], temp[4].yyyy, temp[5]; 34: MAD temp[4], const[4], temp[4].zzzz, temp[5]; 35: ADD temp[4].xyz, temp[4], const[5]; 36: TEX temp[4].xyz, temp[4].xyzz, CUBE[0]; 37: ADD temp[5].x, const[14].xxxx, -const[1].xxxx; 38: DP3 temp[3].x, -temp[3].xyzz, temp[1].xyzz; 39: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 40: ADD temp[3].x, const[14].xxxx, -temp[3].xxxx; 41: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 42: MAD temp[3].x, temp[5].xxxx, temp[3].xxxx, const[1].xxxx; 43: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 44: MUL temp[3].xyz, temp[4].xyzz, temp[3].xxxx; 45: MUL temp[3].xyz, temp[3].xyzz, const[8].xxxx; 46: MAD temp[2].xyz, temp[3].xyzz, const[7].xxxx, temp[2].xyzz; 47: DP3 temp[1].x, temp[1].xyzz, const[15].xxyy; 48: ABS temp[1].x, temp[1].xxxx; 49: ADD temp[1].x, const[14].xxxx, -temp[1].xxxx; 50: POW temp[1].x, temp[1].xxxx, const[0].yyyy; 51: MUL temp[1].x, temp[1].xxxx, const[0].xxxx; 52: MUL temp[1].xyz, temp[4].xyzz, temp[1].xxxx; 53: MUL temp[1].xyz, temp[1].xyzz, const[8].xxxx; 54: MAD temp[2].xyz, temp[1].xyzz, const[7].xxxx, temp[2].xyzz; 55: MOV output[0], temp[2]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: RCP temp[6].w, input[0].wwww; 1: MUL temp[6].xyz, input[0], temp[6].wwww; 2: MAD temp[6].xyz, temp[6].xyz0, const[16].xyz0, const[17].xyz0; 3: MOV temp[0], temp[6]; 4: MAD temp[0].y, temp[6], const[13].xxxx, const[13].yyyy; 5: TEX temp[1], input[1].xyyy, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: MOV temp[2].w, temp[1].wwww; 8: ADD temp[3].xyz, const[14].xxxx, -temp[1].xyzz; 9: ADD temp[4].x, const[14].xxxx, -const[8].xxxx; 10: MAD temp[2].xyz, temp[3].xyzz, temp[4].xxxx, temp[1].xyzz; 11: TEX temp[1].xyz, input[1].xyyy, 2D[2]; 12: MAD temp[1].xyz, temp[1].xyzz, const[14].yyyy, const[14].zzzz; 13: MUL temp[3].xyz, temp[1].xxxx, input[5].xyzz; 14: MAD temp[3].xyz, temp[1].yyyy, input[4].xyzz, temp[3].xyzz; 15: MAD temp[1].xyz, temp[1].zzzz, input[6].xyzz, temp[3].xyzz; 16: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 17: RSQ temp[3].x, temp[3].xxxx; 18: MUL temp[1].xyz, temp[1].xyzz, temp[3].xxxx; 19: RCP temp[3].x, input[2].zzzz; 20: MIN temp[3].x, temp[3].xxxx, const[14].wwww; 21: MUL temp[3].x, const[6].xxxx, temp[3].xxxx; 22: MAD temp[3].xy, temp[1].xyyy, temp[3].xxxx, temp[0].xyyy; 23: TEX temp[3].xyz, temp[3].xyyy, RECT[1]; 24: MUL temp[2].xyz, temp[2].xyzz, temp[3].xyzz; 25: DP3 temp[3].x, input[2].xyzz, input[2].xyzz; 26: RSQ temp[3].x, temp[3].xxxx; 27: MUL temp[3].xyz, input[2].xyzz, temp[3].xxxx; 28: DP3 temp[5].x, temp[1].xyzz, temp[3].xyzz; 29: MUL temp[5].xyz, temp[5].xxxx, temp[1].xyzz; 30: MUL temp[5].xyz, const[14].yyyy, temp[5].xyzz; 31: ADD temp[4].xyz, temp[3].xyzz, -temp[5].xyzz; 32: MUL temp[5], const[2], temp[4].xxxx; 33: MAD temp[5], const[3], temp[4].yyyy, temp[5]; 34: MAD temp[4], const[4], temp[4].zzzz, temp[5]; 35: ADD temp[4].xyz, temp[4], const[5]; 36: TEX temp[4].xyz, temp[4].xyzz, CUBE[0]; 37: ADD temp[5].x, const[14].xxxx, -const[1].xxxx; 38: DP3 temp[3].x, -temp[3].xyzz, temp[1].xyzz; 39: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 40: ADD temp[3].x, const[14].xxxx, -temp[3].xxxx; 41: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 42: MAD temp[3].x, temp[5].xxxx, temp[3].xxxx, const[1].xxxx; 43: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 44: MUL temp[3].xyz, temp[4].xyzz, temp[3].xxxx; 45: MUL temp[3].xyz, temp[3].xyzz, const[8].xxxx; 46: MAD temp[2].xyz, temp[3].xyzz, const[7].xxxx, temp[2].xyzz; 47: DP3 temp[1].x, temp[1].xyzz, const[15].xxyy; 48: ABS temp[1].x, temp[1].xxxx; 49: ADD temp[1].x, const[14].xxxx, -temp[1].xxxx; 50: POW temp[1].x, temp[1].xxxx, const[0].yyyy; 51: MUL temp[1].x, temp[1].xxxx, const[0].xxxx; 52: MUL temp[1].xyz, temp[4].xyzz, temp[1].xxxx; 53: MUL temp[1].xyz, temp[1].xyzz, const[8].xxxx; 54: MAD temp[2].xyz, temp[1].xyzz, const[7].xxxx, temp[2].xyzz; 55: MOV output[0], temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: RCP temp[6].w, input[0].wwww; 1: MUL temp[6].xyz, input[0], temp[6].wwww; 2: MAD temp[6].xyz, temp[6].xyz0, const[16].xyz0, const[17].xyz0; 3: MOV temp[0], temp[6]; 4: MAD temp[0].y, temp[6], const[13].xxxx, const[13].yyyy; 5: TEX temp[1], input[1].xyyy, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: MOV temp[2].w, temp[1].wwww; 8: ADD temp[3].xyz, const[14].xxxx, -temp[1].xyzz; 9: ADD temp[4].x, const[14].xxxx, -const[8].xxxx; 10: MAD temp[2].xyz, temp[3].xyzz, temp[4].xxxx, temp[1].xyzz; 11: TEX temp[7], input[1].xyyy, 2D[2]; 12: MOV temp[1].xyz, temp[7]; 13: MAD temp[1].xyz, temp[1].xyzz, const[14].yyyy, const[14].zzzz; 14: MUL temp[3].xyz, temp[1].xxxx, input[5].xyzz; 15: MAD temp[3].xyz, temp[1].yyyy, input[4].xyzz, temp[3].xyzz; 16: MAD temp[1].xyz, temp[1].zzzz, input[6].xyzz, temp[3].xyzz; 17: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 18: RSQ temp[3].x, temp[3].xxxx; 19: MUL temp[1].xyz, temp[1].xyzz, temp[3].xxxx; 20: RCP temp[3].x, input[2].zzzz; 21: MIN temp[3].x, temp[3].xxxx, const[14].wwww; 22: MUL temp[3].x, const[6].xxxx, temp[3].xxxx; 23: MAD temp[3].xy, temp[1].xyyy, temp[3].xxxx, temp[0].xyyy; 24: MUL temp[8], temp[3].xyyy, const[18]; 25: TEX temp[9], temp[8], 2D[1]; 26: MOV temp[3].xyz, temp[9]; 27: MUL temp[2].xyz, temp[2].xyzz, temp[3].xyzz; 28: DP3 temp[3].x, input[2].xyzz, input[2].xyzz; 29: RSQ temp[3].x, temp[3].xxxx; 30: MUL temp[3].xyz, input[2].xyzz, temp[3].xxxx; 31: DP3 temp[5].x, temp[1].xyzz, temp[3].xyzz; 32: MUL temp[5].xyz, temp[5].xxxx, temp[1].xyzz; 33: MUL temp[5].xyz, const[14].yyyy, temp[5].xyzz; 34: ADD temp[4].xyz, temp[3].xyzz, -temp[5].xyzz; 35: MUL temp[5], const[2], temp[4].xxxx; 36: MAD temp[5], const[3], temp[4].yyyy, temp[5]; 37: MAD temp[4], const[4], temp[4].zzzz, temp[5]; 38: ADD temp[4].xyz, temp[4], const[5]; 39: TEX temp[10], temp[4].xyzz, CUBE[0]; 40: MOV temp[4].xyz, temp[10]; 41: ADD temp[5].x, const[14].xxxx, -const[1].xxxx; 42: DP3 temp[3].x, -temp[3].xyzz, temp[1].xyzz; 43: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 44: ADD temp[3].x, const[14].xxxx, -temp[3].xxxx; 45: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 46: MAD temp[3].x, temp[5].xxxx, temp[3].xxxx, const[1].xxxx; 47: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 48: MUL temp[3].xyz, temp[4].xyzz, temp[3].xxxx; 49: MUL temp[3].xyz, temp[3].xyzz, const[8].xxxx; 50: MAD temp[2].xyz, temp[3].xyzz, const[7].xxxx, temp[2].xyzz; 51: DP3 temp[1].x, temp[1].xyzz, const[15].xxyy; 52: ABS temp[1].x, temp[1].xxxx; 53: ADD temp[1].x, const[14].xxxx, -temp[1].xxxx; 54: POW temp[1].x, temp[1].xxxx, const[0].yyyy; 55: MUL temp[1].x, temp[1].xxxx, const[0].xxxx; 56: MUL temp[1].xyz, temp[4].xyzz, temp[1].xxxx; 57: MUL temp[1].xyz, temp[1].xyzz, const[8].xxxx; 58: MAD temp[2].xyz, temp[1].xyzz, const[7].xxxx, temp[2].xyzz; 59: MOV output[0], temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: RCP temp[6].w, input[0].wwww; 1: MUL temp[6].xyz, input[0], temp[6].wwww; 2: MAD temp[6].xyz, temp[6].xyz0, const[16].xyz0, const[17].xyz0; 3: MOV temp[0], temp[6]; 4: MAD temp[0].y, temp[6], const[13].xxxx, const[13].yyyy; 5: TEX temp[1], input[1].xyyy, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: MOV temp[2].w, temp[1].wwww; 8: ADD temp[3].xyz, const[14].xxxx, -temp[1].xyzz; 9: ADD temp[4].x, const[14].xxxx, -const[8].xxxx; 10: MAD temp[2].xyz, temp[3].xyzz, temp[4].xxxx, temp[1].xyzz; 11: TEX temp[7], input[1].xyyy, 2D[2]; 12: MOV temp[1].xyz, temp[7]; 13: MAD temp[1].xyz, temp[1].xyzz, const[14].yyyy, const[14].zzzz; 14: MUL temp[3].xyz, temp[1].xxxx, input[5].xyzz; 15: MAD temp[3].xyz, temp[1].yyyy, input[4].xyzz, temp[3].xyzz; 16: MAD temp[1].xyz, temp[1].zzzz, input[6].xyzz, temp[3].xyzz; 17: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 18: RSQ temp[3].x, |temp[3].xxxx|; 19: MUL temp[1].xyz, temp[1].xyzz, temp[3].xxxx; 20: RCP temp[3].x, input[2].zzzz; 21: MIN temp[3].x, temp[3].xxxx, const[14].wwww; 22: MUL temp[3].x, const[6].xxxx, temp[3].xxxx; 23: MAD temp[3].xy, temp[1].xyyy, temp[3].xxxx, temp[0].xyyy; 24: MUL temp[8], temp[3].xyyy, const[18]; 25: TEX temp[9], temp[8], 2D[1]; 26: MOV temp[3].xyz, temp[9]; 27: MUL temp[2].xyz, temp[2].xyzz, temp[3].xyzz; 28: DP3 temp[3].x, input[2].xyzz, input[2].xyzz; 29: RSQ temp[3].x, |temp[3].xxxx|; 30: MUL temp[3].xyz, input[2].xyzz, temp[3].xxxx; 31: DP3 temp[5].x, temp[1].xyzz, temp[3].xyzz; 32: MUL temp[5].xyz, temp[5].xxxx, temp[1].xyzz; 33: MUL temp[5].xyz, const[14].yyyy, temp[5].xyzz; 34: ADD temp[4].xyz, temp[3].xyzz, -temp[5].xyzz; 35: MUL temp[5], const[2], temp[4].xxxx; 36: MAD temp[5], const[3], temp[4].yyyy, temp[5]; 37: MAD temp[4], const[4], temp[4].zzzz, temp[5]; 38: ADD temp[4].xyz, temp[4], const[5]; 39: TEX temp[10], temp[4].xyzz, CUBE[0]; 40: MOV temp[4].xyz, temp[10]; 41: ADD temp[5].x, const[14].xxxx, -const[1].xxxx; 42: DP3 temp[3].x, -temp[3].xyzz, temp[1].xyzz; 43: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 44: ADD temp[3].x, const[14].xxxx, -temp[3].xxxx; 45: LG2 temp[11].w, temp[3].xxxx; 46: MUL temp[11].w, temp[11].wwww, const[1].yyyy; 47: EX2 temp[3].x, temp[11].wwww; 48: MAD temp[3].x, temp[5].xxxx, temp[3].xxxx, const[1].xxxx; 49: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 50: MUL temp[3].xyz, temp[4].xyzz, temp[3].xxxx; 51: MUL temp[3].xyz, temp[3].xyzz, const[8].xxxx; 52: MAD temp[2].xyz, temp[3].xyzz, const[7].xxxx, temp[2].xyzz; 53: DP3 temp[1].x, temp[1].xyzz, const[15].xxyy; 54: MOV temp[1].x, |temp[1].xxxx|; 55: ADD temp[1].x, const[14].xxxx, -temp[1].xxxx; 56: LG2 temp[12].w, temp[1].xxxx; 57: MUL temp[12].w, temp[12].wwww, const[0].yyyy; 58: EX2 temp[1].x, temp[12].wwww; 59: MUL temp[1].x, temp[1].xxxx, const[0].xxxx; 60: MUL temp[1].xyz, temp[4].xyzz, temp[1].xxxx; 61: MUL temp[1].xyz, temp[1].xyzz, const[8].xxxx; 62: MAD temp[2].xyz, temp[1].xyzz, const[7].xxxx, temp[2].xyzz; 63: MOV output[0], temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: RCP temp[6].w, input[0].___w; 1: MUL temp[6].xy, input[0].xy__, temp[6].ww__; 2: MAD temp[6].xy, temp[6].xy__, const[16].xy__, const[17].xy__; 3: MOV temp[0].x, temp[6].x___; 4: MAD temp[0].y, temp[6]._y__, const[13]._x__, const[13]._y__; 5: TEX temp[1], input[1].xy__, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: MOV temp[2].w, temp[1].___w; 8: ADD temp[3].xyz, const[14].xxx_, -temp[1].xyz_; 9: ADD temp[4].x, const[14].x___, -const[8].x___; 10: MAD temp[2].xyz, temp[3].xyz_, temp[4].xxx_, temp[1].xyz_; 11: TEX temp[7].xyz, input[1].xy__, 2D[2]; 12: MOV temp[1].xyz, temp[7].xyz_; 13: MAD temp[1].xyz, temp[1].xyz_, const[14].yyy_, const[14].zzz_; 14: MUL temp[3].xyz, temp[1].xxx_, input[5].xyz_; 15: MAD temp[3].xyz, temp[1].yyy_, input[4].xyz_, temp[3].xyz_; 16: MAD temp[1].xyz, temp[1].zzz_, input[6].xyz_, temp[3].xyz_; 17: DP3 temp[3].x, temp[1].xyz_, temp[1].xyz_; 18: RSQ temp[3].x, |temp[3].x___|; 19: MUL temp[1].xyz, temp[1].xyz_, temp[3].xxx_; 20: RCP temp[3].x, input[2].z___; 21: MIN temp[3].x, temp[3].x___, const[14].w___; 22: MUL temp[3].x, const[6].x___, temp[3].x___; 23: MAD temp[3].xy, temp[1].xy__, temp[3].xx__, temp[0].xy__; 24: MUL temp[8].xy, temp[3].xy__, const[18].xy__; 25: TEX temp[9].xyz, temp[8].xy__, 2D[1]; 26: MOV temp[3].xyz, temp[9].xyz_; 27: MUL temp[2].xyz, temp[2].xyz_, temp[3].xyz_; 28: DP3 temp[3].x, input[2].xyz_, input[2].xyz_; 29: RSQ temp[3].x, |temp[3].x___|; 30: MUL temp[3].xyz, input[2].xyz_, temp[3].xxx_; 31: DP3 temp[5].x, temp[1].xyz_, temp[3].xyz_; 32: MUL temp[5].xyz, temp[5].xxx_, temp[1].xyz_; 33: MUL temp[5].xyz, const[14].yyy_, temp[5].xyz_; 34: ADD temp[4].xyz, temp[3].xyz_, -temp[5].xyz_; 35: MUL temp[5].xyz, const[2].xyz_, temp[4].xxx_; 36: MAD temp[5].xyz, const[3].xyz_, temp[4].yyy_, temp[5].xyz_; 37: MAD temp[4].xyz, const[4].xyz_, temp[4].zzz_, temp[5].xyz_; 38: ADD temp[4].xyz, temp[4].xyz_, const[5].xyz_; 39: TEX temp[10].xyz, temp[4].xyz_, CUBE[0]; 40: MOV temp[4].xyz, temp[10].xyz_; 41: ADD temp[5].x, const[14].x___, -const[1].x___; 42: DP3 temp[3].x, -temp[3].xyz_, temp[1].xyz_; 43: MAX temp[3].x, temp[3].x___, const[15].x___; 44: ADD temp[3].x, const[14].x___, -temp[3].x___; 45: LG2 temp[11].w, temp[3].___x; 46: MUL temp[11].w, temp[11].___w, const[1].___y; 47: EX2 temp[3].x, temp[11].w___; 48: MAD temp[3].x, temp[5].x___, temp[3].x___, const[1].x___; 49: MAX temp[3].x, temp[3].x___, const[15].x___; 50: MUL temp[3].xyz, temp[4].xyz_, temp[3].xxx_; 51: MUL temp[3].xyz, temp[3].xyz_, const[8].xxx_; 52: MAD temp[2].xyz, temp[3].xyz_, const[7].xxx_, temp[2].xyz_; 53: DP3 temp[1].x, temp[1].xyz_, const[15].xxy_; 54: MOV temp[1].x, |temp[1].x___|; 55: ADD temp[1].x, const[14].x___, -temp[1].x___; 56: LG2 temp[12].w, temp[1].___x; 57: MUL temp[12].w, temp[12].___w, const[0].___y; 58: EX2 temp[1].x, temp[12].w___; 59: MUL temp[1].x, temp[1].x___, const[0].x___; 60: MUL temp[1].xyz, temp[4].xyz_, temp[1].xxx_; 61: MUL temp[1].xyz, temp[1].xyz_, const[8].xxx_; 62: MAD temp[2].xyz, temp[1].xyz_, const[7].xxx_, temp[2].xyz_; 63: MOV output[0], temp[2]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: RCP temp[6].w, input[0].___w; 1: MUL temp[6].xy, input[0].xy__, temp[6].ww__; 2: MAD temp[6].xy, temp[6].xy__, const[16].xy__, const[17].xy__; 3: MOV temp[0].x, temp[6].x___; 4: MAD temp[0].y, temp[6]._y__, const[13]._x__, const[13]._y__; 5: TEX temp[1], input[1].xy__, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: MOV temp[2].w, temp[1].___w; 8: ADD temp[3].xyz, const[14].xxx_, -temp[1].xyz_; 9: ADD temp[4].x, const[14].x___, -const[8].x___; 10: MAD temp[2].xyz, temp[3].xyz_, temp[4].xxx_, temp[1].xyz_; 11: TEX temp[7].xyz, input[1].xy__, 2D[2]; 12: MOV temp[1].xyz, temp[7].xyz_; 13: MAD temp[1].xyz, temp[1].xyz_, const[14].yyy_, const[14].zzz_; 14: MUL temp[3].xyz, temp[1].xxx_, input[5].xyz_; 15: MAD temp[3].xyz, temp[1].yyy_, input[4].xyz_, temp[3].xyz_; 16: MAD temp[1].xyz, temp[1].zzz_, input[6].xyz_, temp[3].xyz_; 17: DP3 temp[3].x, temp[1].xyz_, temp[1].xyz_; 18: RSQ temp[3].x, |temp[3].x___|; 19: MUL temp[1].xyz, temp[1].xyz_, temp[3].xxx_; 20: RCP temp[3].x, input[2].z___; 21: MIN temp[3].x, temp[3].x___, const[14].w___; 22: MUL temp[3].x, const[6].x___, temp[3].x___; 23: MAD temp[3].xy, temp[1].xy__, temp[3].xx__, temp[0].xy__; 24: MUL temp[8].xy, temp[3].xy__, const[18].xy__; 25: TEX temp[9].xyz, temp[8].xy__, 2D[1]; 26: MOV temp[3].xyz, temp[9].xyz_; 27: MUL temp[2].xyz, temp[2].xyz_, temp[3].xyz_; 28: DP3 temp[3].x, input[2].xyz_, input[2].xyz_; 29: RSQ temp[3].x, |temp[3].x___|; 30: MUL temp[3].xyz, input[2].xyz_, temp[3].xxx_; 31: DP3 temp[5].x, temp[1].xyz_, temp[3].xyz_; 32: MUL temp[5].xyz, temp[5].xxx_, temp[1].xyz_; 33: MUL temp[5].xyz, const[14].yyy_, temp[5].xyz_; 34: ADD temp[4].xyz, temp[3].xyz_, -temp[5].xyz_; 35: MUL temp[5].xyz, const[2].xyz_, temp[4].xxx_; 36: MAD temp[5].xyz, const[3].xyz_, temp[4].yyy_, temp[5].xyz_; 37: MAD temp[4].xyz, const[4].xyz_, temp[4].zzz_, temp[5].xyz_; 38: ADD temp[4].xyz, temp[4].xyz_, const[5].xyz_; 39: TEX temp[10].xyz, temp[4].xyz_, CUBE[0]; 40: MOV temp[4].xyz, temp[10].xyz_; 41: ADD temp[5].x, const[14].x___, -const[1].x___; 42: DP3 temp[3].x, -temp[3].xyz_, temp[1].xyz_; 43: MAX temp[3].x, temp[3].x___, const[15].x___; 44: ADD temp[3].x, const[14].x___, -temp[3].x___; 45: LG2 temp[11].w, temp[3].___x; 46: MUL temp[11].w, temp[11].___w, const[1].___y; 47: EX2 temp[3].x, temp[11].w___; 48: MAD temp[3].x, temp[5].x___, temp[3].x___, const[1].x___; 49: MAX temp[3].x, temp[3].x___, const[15].x___; 50: MUL temp[3].xyz, temp[4].xyz_, temp[3].xxx_; 51: MUL temp[3].xyz, temp[3].xyz_, const[8].xxx_; 52: MAD temp[2].xyz, temp[3].xyz_, const[7].xxx_, temp[2].xyz_; 53: DP3 temp[1].x, temp[1].xyz_, const[15].xxy_; 54: MOV temp[1].x, |temp[1].x___|; 55: ADD temp[1].x, const[14].x___, -temp[1].x___; 56: LG2 temp[12].w, temp[1].___x; 57: MUL temp[12].w, temp[12].___w, const[0].___y; 58: EX2 temp[1].x, temp[12].w___; 59: MUL temp[1].x, temp[1].x___, const[0].x___; 60: MUL temp[1].xyz, temp[4].xyz_, temp[1].xxx_; 61: MUL temp[1].xyz, temp[1].xyz_, const[8].xxx_; 62: MAD temp[2].xyz, temp[1].xyz_, const[7].xxx_, temp[2].xyz_; 63: MOV output[0], temp[2]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: RCP temp[13].w, input[0].___w; 1: MUL temp[14].xy, input[0].xy__, temp[13].ww__; 2: MAD temp[15].xy, temp[14].xy__, const[16].xy__, const[17].xy__; 3: MOV temp[16].x, temp[15].x___; 4: MAD temp[16].y, temp[15]._y__, const[13]._x__, const[13]._y__; 5: TEX temp[17], input[1].xy__, 2D[3]; 6: MUL temp[18], temp[17], input[3]; 7: MOV temp[19].w, temp[18].___w; 8: ADD temp[20].xyz, const[14].xxx_, -temp[18].xyz_; 9: ADD temp[21].x, const[14].x___, -const[8].x___; 10: MAD temp[22].xyz, temp[20].xyz_, temp[21].xxx_, temp[18].xyz_; 11: TEX temp[23].xyz, input[1].xy__, 2D[2]; 12: MOV temp[24].xyz, temp[23].xyz_; 13: MAD temp[25].xyz, temp[24].xyz_, const[14].yyy_, const[14].zzz_; 14: MUL temp[26].xyz, temp[25].xxx_, input[5].xyz_; 15: MAD temp[27].xyz, temp[25].yyy_, input[4].xyz_, temp[26].xyz_; 16: MAD temp[28].xyz, temp[25].zzz_, input[6].xyz_, temp[27].xyz_; 17: DP3 temp[29].x, temp[28].xyz_, temp[28].xyz_; 18: RSQ temp[30].x, |temp[29].x___|; 19: MUL temp[31].xyz, temp[28].xyz_, temp[30].xxx_; 20: RCP temp[32].x, input[2].z___; 21: MIN temp[33].x, temp[32].x___, const[14].w___; 22: MUL temp[34].x, const[6].x___, temp[33].x___; 23: MAD temp[35].xy, temp[31].xy__, temp[34].xx__, temp[16].xy__; 24: MUL temp[36].xy, temp[35].xy__, const[18].xy__; 25: TEX temp[37].xyz, temp[36].xy__, 2D[1]; 26: MOV temp[38].xyz, temp[37].xyz_; 27: MUL temp[39].xyz, temp[22].xyz_, temp[38].xyz_; 28: DP3 temp[40].x, input[2].xyz_, input[2].xyz_; 29: RSQ temp[41].x, |temp[40].x___|; 30: MUL temp[42].xyz, input[2].xyz_, temp[41].xxx_; 31: DP3 temp[43].x, temp[31].xyz_, temp[42].xyz_; 32: MUL temp[44].xyz, temp[43].xxx_, temp[31].xyz_; 33: MUL temp[45].xyz, const[14].yyy_, temp[44].xyz_; 34: ADD temp[46].xyz, temp[42].xyz_, -temp[45].xyz_; 35: MUL temp[47].xyz, const[2].xyz_, temp[46].xxx_; 36: MAD temp[48].xyz, const[3].xyz_, temp[46].yyy_, temp[47].xyz_; 37: MAD temp[49].xyz, const[4].xyz_, temp[46].zzz_, temp[48].xyz_; 38: ADD temp[50].xyz, temp[49].xyz_, const[5].xyz_; 39: TEX temp[51].xyz, temp[50].xyz_, CUBE[0]; 40: MOV temp[52].xyz, temp[51].xyz_; 41: ADD temp[53].x, const[14].x___, -const[1].x___; 42: DP3 temp[54].x, -temp[42].xyz_, temp[31].xyz_; 43: MAX temp[55].x, temp[54].x___, const[15].x___; 44: ADD temp[56].x, const[14].x___, -temp[55].x___; 45: LG2 temp[57].w, temp[56].___x; 46: MUL temp[58].w, temp[57].___w, const[1].___y; 47: EX2 temp[59].x, temp[58].w___; 48: MAD temp[60].x, temp[53].x___, temp[59].x___, const[1].x___; 49: MAX temp[61].x, temp[60].x___, const[15].x___; 50: MUL temp[62].xyz, temp[52].xyz_, temp[61].xxx_; 51: MUL temp[63].xyz, temp[62].xyz_, const[8].xxx_; 52: MAD temp[64].xyz, temp[63].xyz_, const[7].xxx_, temp[39].xyz_; 53: DP3 temp[65].x, temp[31].xyz_, const[15].xxy_; 54: MOV temp[66].x, |temp[65].x___|; 55: ADD temp[67].x, const[14].x___, -temp[66].x___; 56: LG2 temp[68].w, temp[67].___x; 57: MUL temp[69].w, temp[68].___w, const[0].___y; 58: EX2 temp[70].x, temp[69].w___; 59: MUL temp[71].x, temp[70].x___, const[0].x___; 60: MUL temp[72].xyz, temp[52].xyz_, temp[71].xxx_; 61: MUL temp[73].xyz, temp[72].xyz_, const[8].xxx_; 62: MAD temp[19].xyz, temp[73].xyz_, const[7].xxx_, temp[64].xyz_; 63: MOV output[0], temp[19]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: RCP temp[13].w, input[0].___w; 1: MUL temp[14].xy, input[0].xy__, temp[13].ww__; 2: MAD temp[15].xy, temp[14].xy__, const[16].xy__, const[17].xy__; 3: MOV temp[16].x, temp[15].x___; 4: MAD temp[16].y, temp[15]._y__, const[13]._x__, const[13]._y__; 5: TEX temp[17], input[1].xy__, 2D[3]; 6: MUL temp[18], temp[17], input[3]; 7: MOV temp[19].w, temp[18].___w; 8: ADD temp[20].xyz, none.111_, -temp[18].xyz_; 9: ADD temp[21].x, none.1___, -const[8].x___; 10: MAD temp[22].xyz, temp[20].xyz_, temp[21].xxx_, temp[18].xyz_; 11: TEX temp[23].xyz, input[1].xy__, 2D[2]; 12: MAD temp[25].xyz, temp[23].xyz_, const[14].yyy_, none.-1-1-1_; 13: MUL temp[26].xyz, temp[25].xxx_, input[5].xyz_; 14: MAD temp[27].xyz, temp[25].yyy_, input[4].xyz_, temp[26].xyz_; 15: MAD temp[28].xyz, temp[25].zzz_, input[6].xyz_, temp[27].xyz_; 16: DP3 temp[29].x, temp[28].xyz_, temp[28].xyz_; 17: RSQ temp[30].x, |temp[29].x___|; 18: MUL temp[31].xyz, temp[28].xyz_, temp[30].xxx_; 19: RCP temp[32].x, input[2].z___; 20: MIN temp[33].x, temp[32].x___, const[14].w___; 21: MUL temp[34].x, const[6].x___, temp[33].x___; 22: MAD temp[35].xy, temp[31].xy__, temp[34].xx__, temp[16].xy__; 23: MUL temp[36].xy, temp[35].xy__, const[18].xy__; 24: TEX temp[37].xyz, temp[36].xy__, 2D[1]; 25: MUL temp[39].xyz, temp[22].xyz_, temp[37].xyz_; 26: DP3 temp[40].x, input[2].xyz_, input[2].xyz_; 27: RSQ temp[41].x, |temp[40].x___|; 28: MUL temp[42].xyz, input[2].xyz_, temp[41].xxx_; 29: DP3 temp[43].x, temp[31].xyz_, temp[42].xyz_; 30: MUL temp[45].xyz * 2, temp[43].xxx_, temp[31].xyz_; 31: ADD temp[46].xyz, temp[42].xyz_, -temp[45].xyz_; 32: MUL temp[47].xyz, const[2].xyz_, temp[46].xxx_; 33: MAD temp[48].xyz, const[3].xyz_, temp[46].yyy_, temp[47].xyz_; 34: MAD temp[49].xyz, const[4].xyz_, temp[46].zzz_, temp[48].xyz_; 35: ADD temp[50].xyz, temp[49].xyz_, const[5].xyz_; 36: TEX temp[51].xyz, temp[50].xyz_, CUBE[0]; 37: ADD temp[53].x, none.1___, -const[1].x___; 38: DP3 temp[54].x, -temp[42].xyz_, temp[31].xyz_; 39: MAX temp[55].x, temp[54].x___, none.0___; 40: ADD temp[56].x, none.1___, -temp[55].x___; 41: LG2 temp[57].w, temp[56].___x; 42: MUL temp[58].w, temp[57].___w, const[1].___y; 43: EX2 temp[59].x, temp[58].w___; 44: MAD temp[60].x, temp[53].x___, temp[59].x___, const[1].x___; 45: MAX temp[61].x, temp[60].x___, none.0___; 46: MUL temp[62].xyz, temp[51].xyz_, temp[61].xxx_; 47: MUL temp[63].xyz, temp[62].xyz_, const[8].xxx_; 48: MAD temp[64].xyz, temp[63].xyz_, const[7].xxx_, temp[39].xyz_; 49: DP3 temp[65].x, temp[31].xyz_, none.00-1_; 50: ADD temp[67].x, none.1___, -|temp[65].x___|; 51: LG2 temp[68].w, temp[67].___x; 52: MUL temp[69].w, temp[68].___w, const[0].___y; 53: EX2 temp[70].x, temp[69].w___; 54: MUL temp[71].x, temp[70].x___, const[0].x___; 55: MUL temp[72].xyz, temp[51].xyz_, temp[71].xxx_; 56: MUL temp[73].xyz, temp[72].xyz_, const[8].xxx_; 57: MAD temp[19].xyz, temp[73].xyz_, const[7].xxx_, temp[64].xyz_; 58: MOV output[0], temp[19]; CONST[14] = { 1.0000 2.0000 -1.0000 10.0000 } CONST[15] = { 0.0000 -1.0000 0.0000 0.0000 } CONST[19] = { 0.0000 0.0000 -1.0000 0.0000 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: RCP temp[13].w, input[0].___w; 1: MUL temp[14].xy, input[0].xy__, temp[13].ww__; 2: MAD temp[15].xy, temp[14].xy__, const[16].xy__, const[17].xy__; 3: MOV temp[16].x, temp[15].x___; 4: MAD temp[16].y, temp[15]._y__, const[13]._x__, const[13]._y__; 5: TEX temp[17], input[1].xy__, 2D[3]; 6: MUL temp[18], temp[17], input[3]; 7: MOV temp[19].w, temp[18].___w; 8: ADD temp[20].xyz, none.111_, -temp[18].xyz_; 9: ADD temp[21].x, none.1___, -const[8].x___; 10: MAD temp[22].xyz, temp[20].xyz_, temp[21].xxx_, temp[18].xyz_; 11: TEX temp[23].xyz, input[1].xy__, 2D[2]; 12: MAD temp[25].xyz, temp[23].xyz_, const[14].yyy_, none.-1-1-1_; 13: MUL temp[26].xyz, temp[25].xxx_, input[5].xyz_; 14: MAD temp[27].xyz, temp[25].yyy_, input[4].xyz_, temp[26].xyz_; 15: MAD temp[28].xyz, temp[25].zzz_, input[6].xyz_, temp[27].xyz_; 16: DP3 temp[29].x, temp[28].xyz_, temp[28].xyz_; 17: RSQ temp[30].x, |temp[29].x___|; 18: MUL temp[31].xyz, temp[28].xyz_, temp[30].xxx_; 19: RCP temp[32].x, input[2].z___; 20: MIN temp[33].x, temp[32].x___, const[14].w___; 21: MUL temp[34].x, const[6].x___, temp[33].x___; 22: MAD temp[35].xy, temp[31].xy__, temp[34].xx__, temp[16].xy__; 23: MUL temp[36].xy, temp[35].xy__, const[18].xy__; 24: TEX temp[37].xyz, temp[36].xy__, 2D[1]; 25: MUL temp[39].xyz, temp[22].xyz_, temp[37].xyz_; 26: DP3 temp[40].x, input[2].xyz_, input[2].xyz_; 27: RSQ temp[41].x, |temp[40].x___|; 28: MUL temp[42].xyz, input[2].xyz_, temp[41].xxx_; 29: DP3 temp[43].x, temp[31].xyz_, temp[42].xyz_; 30: MUL temp[45].xyz * 2, temp[43].xxx_, temp[31].xyz_; 31: ADD temp[46].xyz, temp[42].xyz_, -temp[45].xyz_; 32: MUL temp[47].xyz, const[2].xyz_, temp[46].xxx_; 33: MAD temp[48].xyz, const[3].xyz_, temp[46].yyy_, temp[47].xyz_; 34: MAD temp[49].xyz, const[4].xyz_, temp[46].zzz_, temp[48].xyz_; 35: ADD temp[50].xyz, temp[49].xyz_, const[5].xyz_; 36: TEX temp[51].xyz, temp[50].xyz_, CUBE[0]; 37: ADD temp[53].x, none.1___, -const[1].x___; 38: DP3 temp[54].x, -temp[42].xyz_, temp[31].xyz_; 39: MAX temp[55].x, temp[54].x___, none.0___; 40: ADD temp[56].x, none.1___, -temp[55].x___; 41: LG2 temp[57].w, temp[56].___x; 42: MUL temp[58].w, temp[57].___w, const[1].___y; 43: EX2 temp[59].x, temp[58].w___; 44: MAD temp[60].x, temp[53].x___, temp[59].x___, const[1].x___; 45: MAX temp[61].x, temp[60].x___, none.0___; 46: MUL temp[62].xyz, temp[51].xyz_, temp[61].xxx_; 47: MUL temp[63].xyz, temp[62].xyz_, const[8].xxx_; 48: MAD temp[64].xyz, temp[63].xyz_, const[7].xxx_, temp[39].xyz_; 49: DP3 temp[65].x, temp[31].xyz_, const[19].xyz_; 50: ADD temp[67].x, none.1___, -|temp[65].x___|; 51: LG2 temp[68].w, temp[67].___x; 52: MUL temp[69].w, temp[68].___w, const[0].___y; 53: EX2 temp[70].x, temp[69].w___; 54: MUL temp[71].x, temp[70].x___, const[0].x___; 55: MUL temp[72].xyz, temp[51].xyz_, temp[71].xxx_; 56: MUL temp[73].xyz, temp[72].xyz_, const[8].xxx_; 57: MAD temp[19].xyz, temp[73].xyz_, const[7].xxx_, temp[64].xyz_; 58: MOV output[0], temp[19]; CONST[10] = { 1.0000 2.0000 -1.0000 10.0000 } CONST[14] = { 0.0000 0.0000 -1.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: RCP temp[13].w, input[0].___w; 1: MUL temp[14].xy, input[0].xy__, temp[13].ww__; 2: MAD temp[15].xy, temp[14].xy__, const[11].xy__, const[12].xy__; 3: MOV temp[16].x, temp[15].x___; 4: MAD temp[16].y, temp[15]._y__, const[9]._x__, const[9]._y__; 5: TEX temp[17], input[1].xy__, 2D[3]; 6: MUL temp[18], temp[17], input[3]; 7: MOV temp[19].w, temp[18].___w; 8: ADD temp[20].xyz, none.111_, -temp[18].xyz_; 9: ADD temp[21].x, none.1___, -const[8].x___; 10: MAD temp[22].xyz, temp[20].xyz_, temp[21].xxx_, temp[18].xyz_; 11: TEX temp[23].xyz, input[1].xy__, 2D[2]; 12: MAD temp[25].xyz, temp[23].xyz_, const[10].yyy_, none.-1-1-1_; 13: MUL temp[26].xyz, temp[25].xxx_, input[5].xyz_; 14: MAD temp[27].xyz, temp[25].yyy_, input[4].xyz_, temp[26].xyz_; 15: MAD temp[28].xyz, temp[25].zzz_, input[6].xyz_, temp[27].xyz_; 16: DP3 temp[29].x, temp[28].xyz_, temp[28].xyz_; 17: RSQ temp[30].x, |temp[29].x___|; 18: MUL temp[31].xyz, temp[28].xyz_, temp[30].xxx_; 19: RCP temp[32].x, input[2].z___; 20: MIN temp[33].x, temp[32].x___, const[10].w___; 21: MUL temp[34].x, const[6].x___, temp[33].x___; 22: MAD temp[35].xy, temp[31].xy__, temp[34].xx__, temp[16].xy__; 23: MUL temp[36].xy, temp[35].xy__, const[13].xy__; 24: TEX temp[37].xyz, temp[36].xy__, 2D[1]; 25: MUL temp[39].xyz, temp[22].xyz_, temp[37].xyz_; 26: DP3 temp[40].x, input[2].xyz_, input[2].xyz_; 27: RSQ temp[41].x, |temp[40].x___|; 28: MUL temp[42].xyz, input[2].xyz_, temp[41].xxx_; 29: DP3 temp[43].x, temp[31].xyz_, temp[42].xyz_; 30: MUL temp[45].xyz * 2, temp[43].xxx_, temp[31].xyz_; 31: ADD temp[46].xyz, temp[42].xyz_, -temp[45].xyz_; 32: MUL temp[47].xyz, const[2].xyz_, temp[46].xxx_; 33: MAD temp[48].xyz, const[3].xyz_, temp[46].yyy_, temp[47].xyz_; 34: MAD temp[49].xyz, const[4].xyz_, temp[46].zzz_, temp[48].xyz_; 35: ADD temp[50].xyz, temp[49].xyz_, const[5].xyz_; 36: TEX temp[51].xyz, temp[50].xyz_, CUBE[0]; 37: ADD temp[53].x, none.1___, -const[1].x___; 38: DP3 temp[54].x, -temp[42].xyz_, temp[31].xyz_; 39: MAX temp[55].x, temp[54].x___, none.0___; 40: ADD temp[56].x, none.1___, -temp[55].x___; 41: LG2 temp[57].w, temp[56].___x; 42: MUL temp[58].w, temp[57].___w, const[1].___y; 43: EX2 temp[59].x, temp[58].w___; 44: MAD temp[60].x, temp[53].x___, temp[59].x___, const[1].x___; 45: MAX temp[61].x, temp[60].x___, none.0___; 46: MUL temp[62].xyz, temp[51].xyz_, temp[61].xxx_; 47: MUL temp[63].xyz, temp[62].xyz_, const[8].xxx_; 48: MAD temp[64].xyz, temp[63].xyz_, const[7].xxx_, temp[39].xyz_; 49: DP3 temp[65].x, temp[31].xyz_, const[14].xyz_; 50: ADD temp[67].x, none.1___, -|temp[65].x___|; 51: LG2 temp[68].w, temp[67].___x; 52: MUL temp[69].w, temp[68].___w, const[0].___y; 53: EX2 temp[70].x, temp[69].w___; 54: MUL temp[71].x, temp[70].x___, const[0].x___; 55: MUL temp[72].xyz, temp[51].xyz_, temp[71].xxx_; 56: MUL temp[73].xyz, temp[72].xyz_, const[8].xxx_; 57: MAD temp[19].xyz, temp[73].xyz_, const[7].xxx_, temp[64].xyz_; 58: MOV output[0], temp[19]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[13].w, src0.w 1: src0.xyz = input[0], src0.w = temp[13] MAD temp[14].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[14], src1.xyz = const[11], src2.xyz = const[12] MAD temp[15].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[15] MAD temp[16].x, src0.x__, src0.111, src0.000 4: src0.xyz = temp[15], src1.xyz = const[9] MAD temp[16].y, src0._y_, src1._x_, src1._y_ 5: TEX temp[17], input[1].xy__, 2D[3]; 6: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = input[3], src1.w = input[3] MAD temp[18].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[18].w, src0.w, src1.w, src0.0 7: src0.w = temp[18] MAD temp[19].w, src0.w, src0.1, src0.0 8: src0.xyz = temp[18] MAD temp[20].xyz, src0.111, src0.111, -src0.xyz 9: src0.xyz = const[8] MAD temp[21].x, src0.1__, src0.111, -src0.x__ 10: src0.xyz = temp[20], src1.xyz = temp[21], src2.xyz = temp[18] MAD temp[22].xyz, src0.xyz, src1.xxx, src2.xyz 11: TEX temp[23].xyz, input[1].xy__, 2D[2]; 12: src0.xyz = temp[23], src1.xyz = const[10] MAD temp[25].xyz, src0.xyz, src1.yyy, -src0.111 13: src0.xyz = temp[25], src1.xyz = input[5] MAD temp[26].xyz, src0.xxx, src1.xyz, src0.000 14: src0.xyz = temp[25], src1.xyz = input[4], src2.xyz = temp[26] MAD temp[27].xyz, src0.yyy, src1.xyz, src2.xyz 15: src0.xyz = temp[25], src1.xyz = input[6], src2.xyz = temp[27] MAD temp[28].xyz, src0.zzz, src1.xyz, src2.xyz 16: src0.xyz = temp[28] DP3 temp[29].x, src0.xyz, src0.xyz 17: src0.xyz = temp[29] REPL_ALPHA temp[30].x RSQ, |src0.x| 18: src0.xyz = temp[28], src1.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.xxx, src0.000 19: src0.xyz = input[2] REPL_ALPHA temp[32].x RCP, src0.z 20: src0.xyz = temp[32], src0.w = const[10] MIN temp[33].x, src0.x__, src0.w__ 21: src0.xyz = const[6], src1.xyz = temp[33] MAD temp[34].x, src0.x__, src1.x__, src0.000 22: src0.xyz = temp[31], src1.xyz = temp[34], src2.xyz = temp[16] MAD temp[35].xy, src0.xy_, src1.xx_, src2.xy_ 23: src0.xyz = temp[35], src1.xyz = const[13] MAD temp[36].xy, src0.xy_, src1.xy_, src0.000 24: TEX temp[37].xyz, temp[36].xy__, 2D[1]; 25: src0.xyz = temp[22], src1.xyz = temp[37] MAD temp[39].xyz, src0.xyz, src1.xyz, src0.000 26: src0.xyz = input[2] DP3 temp[40].x, src0.xyz, src0.xyz 27: src0.xyz = temp[40] REPL_ALPHA temp[41].x RSQ, |src0.x| 28: src0.xyz = input[2], src1.xyz = temp[41] MAD temp[42].xyz, src0.xyz, src1.xxx, src0.000 29: src0.xyz = temp[31], src1.xyz = temp[42] DP3 temp[43].x, src0.xyz, src1.xyz 30: src0.xyz = temp[43], src1.xyz = temp[31] MAD temp[45].xyz * 2, src0.xxx, src1.xyz, src0.000 31: src0.xyz = temp[42], src1.xyz = temp[45] MAD temp[46].xyz, src0.xyz, src0.111, -src1.xyz 32: src0.xyz = const[2], src1.xyz = temp[46] MAD temp[47].xyz, src0.xyz, src1.xxx, src0.000 33: src0.xyz = const[3], src1.xyz = temp[46], src2.xyz = temp[47] MAD temp[48].xyz, src0.xyz, src1.yyy, src2.xyz 34: src0.xyz = const[4], src1.xyz = temp[46], src2.xyz = temp[48] MAD temp[49].xyz, src0.xyz, src1.zzz, src2.xyz 35: src0.xyz = temp[49], src1.xyz = const[5] MAD temp[50].xyz, src0.xyz, src0.111, src1.xyz 36: TEX temp[51].xyz, temp[50].xyz_, CUBE[0]; 37: src0.xyz = const[1] MAD temp[53].x, src0.1__, src0.111, -src0.x__ 38: src0.xyz = temp[42], src1.xyz = temp[31] DP3 temp[54].x, -src0.xyz, src1.xyz 39: src0.xyz = temp[54] MAX temp[55].x, src0.x__, src0.0__ 40: src0.xyz = temp[55] MAD temp[56].x, src0.1__, src0.111, -src0.x__ 41: src0.xyz = temp[56] LG2 temp[57].w, src0.x 42: src0.xyz = const[1], src0.w = temp[57] MAD temp[58].w, src0.w, src0.y, src0.0 43: src0.w = temp[58] REPL_ALPHA temp[59].x EX2, src0.w 44: src0.xyz = temp[53], src1.xyz = temp[59], src2.xyz = const[1] MAD temp[60].x, src0.x__, src1.x__, src2.x__ 45: src0.xyz = temp[60] MAX temp[61].x, src0.x__, src0.0__ 46: src0.xyz = temp[51], src1.xyz = temp[61] MAD temp[62].xyz, src0.xyz, src1.xxx, src0.000 47: src0.xyz = temp[62], src1.xyz = const[8] MAD temp[63].xyz, src0.xyz, src1.xxx, src0.000 48: src0.xyz = temp[63], src1.xyz = const[7], src2.xyz = temp[39] MAD temp[64].xyz, src0.xyz, src1.xxx, src2.xyz 49: src0.xyz = temp[31], src1.xyz = const[14] DP3 temp[65].x, src0.xyz, src1.xyz 50: src0.xyz = temp[65] MAD temp[67].x, src0.1__, |src0.111|, -|src0.x__| 51: src0.xyz = temp[67] LG2 temp[68].w, src0.x 52: src0.xyz = const[0], src0.w = temp[68] MAD temp[69].w, src0.w, src0.y, src0.0 53: src0.w = temp[69] REPL_ALPHA temp[70].x EX2, src0.w 54: src0.xyz = temp[70], src1.xyz = const[0] MAD temp[71].x, src0.x__, src1.x__, src0.000 55: src0.xyz = temp[51], src1.xyz = temp[71] MAD temp[72].xyz, src0.xyz, src1.xxx, src0.000 56: src0.xyz = temp[72], src1.xyz = const[8] MAD temp[73].xyz, src0.xyz, src1.xxx, src0.000 57: src0.xyz = temp[73], src1.xyz = const[7], src2.xyz = temp[64] MAD temp[19].xyz, src0.xyz, src1.xxx, src2.xyz 58: src0.xyz = temp[19], src0.w = temp[19] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[2] DP3 temp[40].x, src0.xyz, src0.xyz RCP temp[32].w, src0.z 1: src0.xyz = const[1], src1.xyz = temp[40] MAD temp[53].x, src0.1__, src0.111, -src0.x__ RSQ temp[41].w, |src1.x| 2: src0.xyz = input[2], src0.w = temp[41], src1.xyz = temp[41], src1.w = temp[32], src2.w = const[10] MAD temp[42].xyz, src0.xyz, src0.www, src0.000 MIN temp[33].w, src1.w, src2.w 3: src0.xyz = const[8], src0.w = input[0] MAD temp[21].x, src0.1__, src0.111, -src0.x__ RCP temp[13].w, src0.w 4: src0.xyz = input[0], src0.w = temp[13], src1.xyz = const[6], src1.w = temp[33] MAD temp[14].xy, src0.xy_, src0.ww_, src0.000 MAD temp[34].w, src1.x, src1.w, src0.0 5: src0.xyz = temp[14], src1.xyz = const[11], src2.xyz = const[12] MAD temp[15].xy, src0.xy_, src1.xy_, src2.xy_ 6: src0.xyz = temp[15], src1.xyz = const[9] MAD temp[16].y, src0._y_, src1._x_, src1._y_ 7: src0.xyz = temp[15] MAD temp[16].x, src0.x__, src0.111, src0.000 8: BEGIN_TEX; 9: TEX temp[17], input[1].xy__, 2D[3]; 10: TEX temp[23].xyz, input[1].xy__, 2D[2] SEM_WAIT SEM_ACQUIRE; 11: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = input[3], src1.w = input[3] SEM_WAIT MAD temp[18].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[18].w, src0.w, src1.w, src0.0 12: src0.xyz = temp[23], src0.w = temp[18], src1.xyz = const[10] MAD temp[25].xyz, src0.xyz, src1.yyy, -src0.111 MAD temp[19].w, src0.w, src0.1, src0.0 13: src0.xyz = temp[18] MAD temp[20].xyz, src0.111, src0.111, -src0.xyz 14: src0.xyz = temp[25], src1.xyz = input[5] MAD temp[26].xyz, src0.xxx, src1.xyz, src0.000 15: src0.xyz = temp[20], src1.xyz = temp[21], src2.xyz = temp[18] MAD temp[22].xyz, src0.xyz, src1.xxx, src2.xyz 16: src0.xyz = temp[25], src1.xyz = input[4], src2.xyz = temp[26] MAD temp[27].xyz, src0.yyy, src1.xyz, src2.xyz 17: src0.xyz = temp[25], src1.xyz = input[6], src2.xyz = temp[27] MAD temp[28].xyz, src0.zzz, src1.xyz, src2.xyz 18: src0.xyz = temp[28] DP3 temp[29].x, src0.xyz, src0.xyz 19: src0.xyz = temp[29] REPL_ALPHA temp[30].x RSQ, |src0.x| 20: src0.xyz = temp[28], src1.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.xxx, src0.000 21: src0.xyz = temp[31], src0.w = temp[34], src1.xyz = temp[34], src2.xyz = temp[16] MAD temp[35].xy, src0.xy_, src0.ww_, src2.xy_ 22: src0.xyz = temp[31], src1.xyz = const[14] DP3 temp[65].x, src0.xyz, src1.xyz 23: src0.xyz = temp[42], src1.xyz = temp[31], src2.xyz = temp[65] DP3 temp[54].x, -src0.xyz, src1.xyz MAD temp[67].w, src0.1, |src0.1|, -|src2.x| 24: src0.xyz = temp[31], src0.w = temp[67], src1.xyz = temp[42] DP3 temp[43].x, src0.xyz, src1.xyz LG2 temp[68].w, src0.w 25: src0.xyz = temp[35], src1.xyz = const[13], src2.xyz = temp[54] MAD temp[36].xy, src0.xy_, src1.xy_, src0.000 MAX temp[55].w, src2.x, src0.0 26: src0.xyz = temp[43], src0.w = temp[68], src1.xyz = temp[31], src2.xyz = const[0] MAD temp[45].xyz * 2, src0.xxx, src1.xyz, src0.000 MAD temp[69].w, src0.w, src2.y, src0.0 27: src0.xyz = temp[42], src0.w = temp[55], src1.xyz = temp[45] MAD temp[46].xyz, src0.xyz, src0.111, -src1.xyz MAD temp[56].w, src0.1, src0.1, -src0.w 28: src0.xyz = const[2], src0.w = temp[56], src1.xyz = temp[46] MAD temp[47].xyz, src0.xyz, src1.xxx, src0.000 LG2 temp[57].w, src0.w 29: src0.xyz = const[3], src0.w = temp[69], src1.xyz = temp[46], src2.xyz = temp[47] MAD temp[48].xyz, src0.xyz, src1.yyy, src2.xyz EX2 temp[70].w, src0.w 30: src0.xyz = temp[70], src0.w = temp[70], src1.xyz = const[0], src1.w = temp[57], src2.xyz = const[1] MAD temp[71].x, src0.w__, src1.x__, src0.000 MAD temp[58].w, src1.w, src2.y, src0.0 31: src0.xyz = const[4], src1.xyz = temp[46], src2.xyz = temp[48] MAD temp[49].xyz, src0.xyz, src1.zzz, src2.xyz 32: src0.w = temp[58] REPL_ALPHA temp[59].x EX2, src0.w 33: src0.xyz = temp[49], src1.xyz = const[5] MAD temp[50].xyz, src0.xyz, src0.111, src1.xyz 34: src0.xyz = temp[53], src1.xyz = temp[59], src2.xyz = const[1] MAD temp[60].w, src0.x, src1.x, src2.x 35: src0.xyz = temp[60], src0.w = temp[60] MAX temp[61].x, src0.w__, src0.0__ 36: BEGIN_TEX; 37: TEX temp[37].xyz, temp[36].xy__, 2D[1]; 38: TEX temp[51].xyz, temp[50].xyz_, CUBE[0] SEM_WAIT SEM_ACQUIRE; 39: src0.xyz = temp[22], src1.xyz = temp[37] SEM_WAIT MAD temp[39].xyz, src0.xyz, src1.xyz, src0.000 40: src0.xyz = temp[51], src1.xyz = temp[71] MAD temp[72].xyz, src0.xyz, src1.xxx, src0.000 41: src0.xyz = temp[51], src1.xyz = temp[61] MAD temp[62].xyz, src0.xyz, src1.xxx, src0.000 42: src0.xyz = temp[72], src1.xyz = const[8] MAD temp[73].xyz, src0.xyz, src1.xxx, src0.000 43: src0.xyz = temp[62], src1.xyz = const[8] MAD temp[63].xyz, src0.xyz, src1.xxx, src0.000 44: src0.xyz = temp[63], src1.xyz = const[7], src2.xyz = temp[39] MAD temp[64].xyz, src0.xyz, src1.xxx, src2.xyz 45: src0.xyz = temp[73], src1.xyz = const[7], src2.xyz = temp[64] MAD temp[19].xyz, src0.xyz, src1.xxx, src2.xyz 46: src0.xyz = temp[19], src0.w = temp[19] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[2] DP3 temp[40].x, src0.xyz, src0.xyz RCP temp[32].w, src0.z 1: src0.xyz = const[1], src1.xyz = temp[40] MAD temp[53].x, src0.1__, src0.111, -src0.x__ RSQ temp[41].w, |src1.x| 2: src0.xyz = input[2], src0.w = temp[41], src1.w = temp[32], src2.w = const[10] MAD temp[42].xyz, src0.xyz, src0.www, src0.000 MIN temp[33].w, src1.w, src2.w 3: src0.xyz = const[8], src0.w = input[0] MAD temp[21].x, src0.1__, src0.111, -src0.x__ RCP temp[13].w, src0.w 4: src0.xyz = input[0], src0.w = temp[13], src1.xyz = const[6], src1.w = temp[33] MAD temp[14].xy, src0.xy_, src0.ww_, src0.000 MAD temp[34].w, src1.x, src1.w, src0.0 5: src0.xyz = temp[14], src1.xyz = const[11], src2.xyz = const[12] MAD temp[15].xy, src0.xy_, src1.xy_, src2.xy_ 6: src0.xyz = temp[15], src1.xyz = const[9] MAD temp[16].y, src0._y_, src1._x_, src1._y_ 7: src0.xyz = temp[15] MAD temp[16].x, src0.x__, src0.111, src0.000 8: BEGIN_TEX; 9: TEX temp[17], input[1].xy__, 2D[3]; 10: TEX temp[23].xyz, input[1].xy__, 2D[2] SEM_WAIT SEM_ACQUIRE; 11: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = input[3], src1.w = input[3] SEM_WAIT MAD temp[18].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[18].w, src0.w, src1.w, src0.0 12: src0.xyz = temp[23], src0.w = temp[18], src1.xyz = const[10] MAD temp[25].xyz, src0.xyz, src1.yyy, -src0.111 MAD temp[19].w, src0.w, src0.1, src0.0 13: src0.xyz = temp[18] MAD temp[20].xyz, src0.111, src0.111, -src0.xyz 14: src0.xyz = temp[25], src1.xyz = input[5] MAD temp[26].xyz, src0.xxx, src1.xyz, src0.000 15: src0.xyz = temp[20], src1.xyz = temp[21], src2.xyz = temp[18] MAD temp[22].xyz, src0.xyz, src1.xxx, src2.xyz 16: src0.xyz = temp[25], src1.xyz = input[4], src2.xyz = temp[26] MAD temp[27].xyz, src0.yyy, src1.xyz, src2.xyz 17: src0.xyz = temp[25], src1.xyz = input[6], src2.xyz = temp[27] MAD temp[28].xyz, src0.zzz, src1.xyz, src2.xyz 18: src0.xyz = temp[28] DP3 temp[29].x, src0.xyz, src0.xyz 19: src0.xyz = temp[29] REPL_ALPHA temp[30].x RSQ, |src0.x| 20: src0.xyz = temp[28], src1.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.xxx, src0.000 21: src0.xyz = temp[31], src0.w = temp[34], src2.xyz = temp[16] MAD temp[35].xy, src0.xy_, src0.ww_, src2.xy_ 22: src0.xyz = temp[31], src1.xyz = const[14] DP3 temp[65].x, src0.xyz, src1.xyz 23: src0.xyz = temp[42], src1.xyz = temp[31], src2.xyz = temp[65] DP3 temp[54].x, -src0.xyz, src1.xyz MAD temp[67].w, src0.1, |src0.1|, -|src2.x| 24: src0.xyz = temp[31], src0.w = temp[67], src1.xyz = temp[42] DP3 temp[43].x, src0.xyz, src1.xyz LG2 temp[68].w, src0.w 25: src0.xyz = temp[35], src1.xyz = const[13], src2.xyz = temp[54] MAD temp[36].xy, src0.xy_, src1.xy_, src0.000 MAX temp[55].w, src2.x, src0.0 26: src0.xyz = temp[43], src0.w = temp[68], src1.xyz = temp[31], src2.xyz = const[0] MAD temp[45].xyz * 2, src0.xxx, src1.xyz, src0.000 MAD temp[69].w, src0.w, src2.y, src0.0 27: src0.xyz = temp[42], src0.w = temp[55], src1.xyz = temp[45] MAD temp[46].xyz, src0.xyz, src0.111, -src1.xyz MAD temp[56].w, src0.1, src0.1, -src0.w 28: src0.xyz = const[2], src0.w = temp[56], src1.xyz = temp[46] MAD temp[47].xyz, src0.xyz, src1.xxx, src0.000 LG2 temp[57].w, src0.w 29: src0.xyz = const[3], src0.w = temp[69], src1.xyz = temp[46], src2.xyz = temp[47] MAD temp[48].xyz, src0.xyz, src1.yyy, src2.xyz EX2 temp[70].w, src0.w 30: src0.w = temp[70], src1.xyz = const[0], src1.w = temp[57], src2.xyz = const[1] MAD temp[71].x, src0.w__, src1.x__, src0.000 MAD temp[58].w, src1.w, src2.y, src0.0 31: src0.xyz = const[4], src1.xyz = temp[46], src2.xyz = temp[48] MAD temp[49].xyz, src0.xyz, src1.zzz, src2.xyz 32: src0.w = temp[58] REPL_ALPHA temp[59].x EX2, src0.w 33: src0.xyz = temp[49], src1.xyz = const[5] MAD temp[50].xyz, src0.xyz, src0.111, src1.xyz 34: src0.xyz = temp[53], src1.xyz = temp[59], src2.xyz = const[1] MAD temp[60].w, src0.x, src1.x, src2.x 35: src0.w = temp[60] MAX temp[61].x, src0.w__, src0.0__ 36: BEGIN_TEX; 37: TEX temp[37].xyz, temp[36].xy__, 2D[1]; 38: TEX temp[51].xyz, temp[50].xyz_, CUBE[0] SEM_WAIT SEM_ACQUIRE; 39: src0.xyz = temp[22], src1.xyz = temp[37] SEM_WAIT MAD temp[39].xyz, src0.xyz, src1.xyz, src0.000 40: src0.xyz = temp[51], src1.xyz = temp[71] MAD temp[72].xyz, src0.xyz, src1.xxx, src0.000 41: src0.xyz = temp[51], src1.xyz = temp[61] MAD temp[62].xyz, src0.xyz, src1.xxx, src0.000 42: src0.xyz = temp[72], src1.xyz = const[8] MAD temp[73].xyz, src0.xyz, src1.xxx, src0.000 43: src0.xyz = temp[62], src1.xyz = const[8] MAD temp[63].xyz, src0.xyz, src1.xxx, src0.000 44: src0.xyz = temp[63], src1.xyz = const[7], src2.xyz = temp[39] MAD temp[64].xyz, src0.xyz, src1.xxx, src2.xyz 45: src0.xyz = temp[73], src1.xyz = const[7], src2.xyz = temp[64] MAD temp[19].xyz, src0.xyz, src1.xxx, src2.xyz 46: src0.xyz = temp[19], src0.w = temp[19] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[1] DP3 temp[0].z, src0.xyz, src0.xyz RCP temp[0].w, src0.z 1: src0.xyz = const[1], src1.xyz = temp[0] MAD temp[0].z, src0.__1, src0.__1, -src0.__x RSQ temp[1].w, |src1.z| 2: src0.xyz = input[1], src0.w = temp[1], src1.w = temp[0], src2.w = const[10] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 MIN temp[0].w, src1.w, src2.w 3: src0.xyz = const[8], src0.w = input[6] MAD temp[6].z, src0.__1, src0.__1, -src0.__x RCP temp[1].w, src0.w 4: src0.xyz = input[6], src0.w = temp[1], src1.xyz = const[6], src1.w = temp[0] MAD temp[6].xy, src0.xy_, src0.ww_, src0.00_ MAD temp[0].w, src1.x, src1.w, src0.0 5: src0.xyz = temp[6], src1.xyz = const[11], src2.xyz = const[12] MAD temp[6].xy, src0.xy_, src1.xy_, src2.xy_ 6: src0.xyz = temp[6], src1.xyz = const[9] MAD temp[7].y, src0._y_, src1._x_, src1._y_ 7: src0.xyz = temp[6] MAD temp[7].x, src0.x__, src0.11_, src0.00_ 8: BEGIN_TEX; 9: TEX temp[8], input[0].xy__, 2D[3]; 10: TEX temp[9].xyz, input[0].xy__, 2D[2] SEM_WAIT SEM_ACQUIRE; 11: src0.xyz = temp[8], src0.w = temp[8], src1.xyz = input[2], src1.w = input[2] SEM_WAIT MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[1].w, src0.w, src1.w, src0.0 12: src0.xyz = temp[9], src0.w = temp[1], src1.xyz = const[10] MAD temp[8].xyz, src0.xyz, src1.yyy, -src0.111 MAD temp[1].w, src0.w, src0.1, src0.0 13: src0.xyz = temp[2] MAD temp[9].xyz, src0.111, src0.111, -src0.xyz 14: src0.xyz = temp[8], src1.xyz = input[4] MAD temp[4].xyz, src0.xxx, src1.xyz, src0.000 15: src0.xyz = temp[9], src1.xyz = temp[6], src2.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.zzz, src2.xyz 16: src0.xyz = temp[8], src1.xyz = input[3], src2.xyz = temp[4] MAD temp[3].xyz, src0.yyy, src1.xyz, src2.xyz 17: src0.xyz = temp[8], src1.xyz = input[5], src2.xyz = temp[3] MAD temp[3].xyz, src0.zzz, src1.xyz, src2.xyz 18: src0.xyz = temp[3] DP3 temp[0].x, src0.xyz, src0.xyz 19: src0.xyz = temp[0] REPL_ALPHA temp[0].x RSQ, |src0.x| 20: src0.xyz = temp[3], src1.xyz = temp[0] MAD temp[3].xyz, src0.xyz, src1.xxx, src0.000 21: src0.xyz = temp[3], src0.w = temp[0], src2.xyz = temp[7] MAD temp[0].xy, src0.xy_, src0.ww_, src2.xy_ 22: src0.xyz = temp[3], src1.xyz = const[14] DP3 temp[4].x, src0.xyz, src1.xyz 23: src0.xyz = temp[1], src1.xyz = temp[3], src2.xyz = temp[4] DP3 temp[4].x, -src0.xyz, src1.xyz MAD temp[0].w, src0.1, |src0.1|, -|src2.x| 24: src0.xyz = temp[3], src0.w = temp[0], src1.xyz = temp[1] DP3 temp[4].y, src0.xyz, src1.xyz LG2 temp[0].w, src0.w 25: src0.xyz = temp[0], src1.xyz = const[13], src2.xyz = temp[4] MAD temp[0].xy, src0.xy_, src1.xy_, src0.00_ MAX temp[2].w, src2.x, src0.0 26: src0.xyz = temp[4], src0.w = temp[0], src1.xyz = temp[3], src2.xyz = const[0] MAD temp[3].xyz * 2, src0.yyy, src1.xyz, src0.000 MAD temp[0].w, src0.w, src2.y, src0.0 27: src0.xyz = temp[1], src0.w = temp[2], src1.xyz = temp[3] MAD temp[1].xyz, src0.xyz, src0.111, -src1.xyz MAD temp[2].w, src0.1, src0.1, -src0.w 28: src0.xyz = const[2], src0.w = temp[2], src1.xyz = temp[1] MAD temp[3].xyz, src0.xyz, src1.xxx, src0.000 LG2 temp[2].w, src0.w 29: src0.xyz = const[3], src0.w = temp[0], src1.xyz = temp[1], src2.xyz = temp[3] MAD temp[3].xyz, src0.xyz, src1.yyy, src2.xyz EX2 temp[0].w, src0.w 30: src0.w = temp[0], src1.xyz = const[0], src1.w = temp[2], src2.xyz = const[1] MAD temp[4].x, src0.w__, src1.x__, src0.0__ MAD temp[0].w, src1.w, src2.y, src0.0 31: src0.xyz = const[4], src1.xyz = temp[1], src2.xyz = temp[3] MAD temp[1].xyz, src0.xyz, src1.zzz, src2.xyz 32: src0.w = temp[0] REPL_ALPHA temp[3].x EX2, src0.w 33: src0.xyz = temp[1], src1.xyz = const[5] MAD temp[1].xyz, src0.xyz, src0.111, src1.xyz 34: src0.xyz = temp[0], src1.xyz = temp[3], src2.xyz = const[1] MAD temp[0].w, src0.z, src1.x, src2.x 35: src0.w = temp[0] MAX temp[0].z, src0.__w, src0.__0 36: BEGIN_TEX; 37: TEX temp[3].xyz, temp[0].xy__, 2D[1]; 38: TEX temp[5].xyz, temp[1].xyz_, CUBE[0] SEM_WAIT SEM_ACQUIRE; 39: src0.xyz = temp[2], src1.xyz = temp[3] SEM_WAIT MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 40: src0.xyz = temp[5], src1.xyz = temp[4] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 41: src0.xyz = temp[5], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.zzz, src0.000 42: src0.xyz = temp[2], src1.xyz = const[8] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 43: src0.xyz = temp[0], src1.xyz = const[8] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 44: src0.xyz = temp[0], src1.xyz = const[7], src2.xyz = temp[1] MAD temp[0].xyz, src0.xyz, src1.xxx, src2.xyz 45: src0.xyz = temp[2], src1.xyz = const[7], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xxx, src2.xyz 46: src0.xyz = temp[0], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=21************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 7, tex_end: 0 (code_addr: 000001c0) 0: xyz: t1 t0 t0 bias-> t0.z (02000001) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t1.xyz t1.xyz t1.xxx op: 00804000 w: t1.z t1.x t1.x op: 05000002 1: xyz: c1 t0 t0 bias-> t0.z (02000021) w: t0 t0 t0 bias-> t1.w (00840000) xyz: 1.0 1.0 -c1.xxx op: 00084a95 w: |t0.z| c1.x c1.x op: 05800045 2: xyz: t1 t32 t0 bias-> t1.xyz (03840001) w: t1 t0 c10 bias-> t0.w (0082a001) xyz: t1.xyz t1.www 0.0 op: 00050600 w: t0.w c10.w t1.x op: 0100058a 3: xyz: c8 t0 t0 bias-> t6.z (02180028) w: t6 t0 t0 bias-> t1.w (00840006) xyz: 1.0 1.0 -c8.xxx op: 00084a95 w: t6.w c8.x c8.x op: 05000009 4: xyz: t6 c6 t0 bias-> t6.xy (01980986) w: t1 t0 t0 bias-> t0.w (00800001) xyz: t6.xyz t1.www 0.0 op: 00050600 w: c6.x t0.w 0.0 op: 00040503 5: xyz: t6 c11 c12 bias-> t6.xy (019acac6) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz c11.xyz c12.xyz op: 00020200 w: t6.x t6.x t6.x op: 00000000 6: xyz: t6 c9 t0 bias-> t7.y (011c0a46) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz c9.xxx c9.xyz op: 00010280 w: t6.x t6.x t6.x op: 00000000 7: xyz: t6 t0 t0 bias-> t7.x (009c0006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz 1.0 0.0 op: 00050a80 w: t6.x t6.x t6.x op: 00000000 NODE 1: alu_offset: 8, tex_offset: 0, alu_end: 24, tex_end: 1 (code_addr: 00020608) TEX: TEX t8, t0, texture[3] (00009a00) TEX t9, t0, texture[2] (00009240) 8: xyz: t8 t2 t0 bias-> t2.xyz (03880088) w: t8 t2 t0 bias-> t1.w (00840088) xyz: t8.xyz t2.xyz 0.0 op: 00050200 w: t8.w t2.w 0.0 op: 00040509 9: xyz: t9 c10 t0 bias-> t8.xyz (03a00a89) w: t1 t0 t0 bias-> t1.w (00840001) xyz: t9.xyz c10.yyy -1.0 op: 000d4300 w: t1.w 1.0 0.0 op: 00040889 10: xyz: t2 t0 t0 bias-> t9.xyz (03a40002) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t2.xyz op: 00080a95 w: t2.x t2.x t2.x op: 00000000 11: xyz: t8 t4 t0 bias-> t4.xyz (03900108) w: t0 t0 t0 bias-> (00000000) xyz: t8.xxx t4.xyz 0.0 op: 00050201 w: t8.x t8.x t8.x op: 00000000 12: xyz: t9 t6 t2 bias-> t2.xyz (03882189) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz t6.zzz t2.xyz op: 00020380 w: t9.x t9.x t9.x op: 00000000 13: xyz: t8 t3 t4 bias-> t3.xyz (038c40c8) w: t0 t0 t0 bias-> (00000000) xyz: t8.yyy t3.xyz t4.xyz op: 00020202 w: t8.x t8.x t8.x op: 00000000 14: xyz: t8 t5 t3 bias-> t3.xyz (038c3148) w: t0 t0 t0 bias-> (00000000) xyz: t8.zzz t5.xyz t3.xyz op: 00020203 w: t8.x t8.x t8.x op: 00000000 15: xyz: t3 t0 t0 bias-> t0.x (00800003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t3.xyz t3.xxx op: 00804000 w: t3.x t3.x t3.x op: 00000000 16: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.x| t0.x t0.x op: 05800040 17: xyz: t3 t0 t0 bias-> t3.xyz (038c0003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t0.xxx 0.0 op: 00050280 w: t3.x t3.x t3.x op: 00000000 18: xyz: t3 t32 t7 bias-> t0.xy (01807003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t0.www t7.xyz op: 00020600 w: t3.x t3.x t3.x op: 00000000 19: xyz: t3 c14 t0 bias-> t4.x (00900b83) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c14.xyz t3.xxx op: 00804200 w: t3.x t3.x t3.x op: 00000000 20: xyz: t1 t3 t4 bias-> t4.x (009040c1) w: t0 t0 t0 bias-> t0.w (00800000) xyz: -t1.xyz t3.xyz t1.xxx op: 00804220 w: 1.0 |1.0| -|t4.x| op: 0019a891 21: xyz: t3 t1 t0 bias-> t4.y (01100043) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t3.xyz t1.xyz t3.xxx op: 00804200 w: t0.w t3.x t3.x op: 04800009 22: xyz: t0 c13 t4 bias-> t0.xy (01804b40) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t0.xyz c13.xyz 0.0 op: 00050200 w: t4.x 0.0 t0.x op: 01800806 23: xyz: t4 t3 c0 bias-> t3.xyz (038e00c4) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t4.yyy t3.xyz 0.0 op: 08050202 w: t0.w c0.y 0.0 op: 00040389 24: xyz: t1 t3 t0 bias-> t1.xyz (038400c1) w: t2 t0 t0 bias-> t2.w (00880002) xyz: t1.xyz 1.0 -t3.xyz op: 00090a80 w: 1.0 1.0 -t2.w op: 000a4891 25: xyz: c2 t1 t0 bias-> t3.xyz (038c0062) w: t2 t0 t0 bias-> t2.w (00880002) xyz: c2.xyz t1.xxx 0.0 op: 00050280 w: t2.w c2.x c2.x op: 04800009 26: xyz: c3 t1 t3 bias-> t3.xyz (038c3063) w: t0 t0 t0 bias-> t0.w (00800000) xyz: c3.xyz t1.yyy t3.xyz op: 00020300 w: t0.w c3.x c3.x op: 04000009 27: xyz: t32 c0 c1 bias-> t4.x (00921800) w: t0 t2 t0 bias-> t0.w (00800080) xyz: t0.www c0.xyz 0.0 op: 0005020c w: t2.w c1.y 0.0 op: 0004038a 28: xyz: c4 t1 t3 bias-> t1.xyz (03843064) w: t0 t0 t0 bias-> (00000000) xyz: c4.xyz t1.zzz t3.xyz op: 00020380 w: c4.x c4.x c4.x op: 00000000 29: xyz: t0 t0 t0 bias-> t3.x (008c0000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: t0.w t0.x t0.x op: 04000009 30: xyz: t1 c5 t0 bias-> t1.xyz (03840941) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 c5.xyz op: 00010a80 w: t1.x t1.x t1.x op: 00000000 31: xyz: t0 t3 c1 bias-> (000210c0) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: t0.z t3.x c1.x op: 00018182 32: xyz: t32 t0 t0 bias-> t0.z (02000000) w: t0 t0 t0 bias-> (00000000) xyz: t0.www 0.0 t32.xxx op: 02804a0c w: t32.x t32.x t32.x op: 00000000 NODE 2: alu_offset: 33, tex_offset: 2, alu_end: 7, tex_end: 1 (code_addr: 004221e1) TEX: TEX t3, t0, texture[1] (000088c0) TEX t5, t1, texture[0] (00008141) 33: xyz: t2 t3 t0 bias-> t1.xyz (038400c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t3.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 34: xyz: t5 t4 t0 bias-> t2.xyz (03880105) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t4.xxx 0.0 op: 00050280 w: t5.x t5.x t5.x op: 00000000 35: xyz: t5 t0 t0 bias-> t0.xyz (03800005) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t0.zzz 0.0 op: 00050380 w: t5.x t5.x t5.x op: 00000000 36: xyz: t2 c8 t0 bias-> t2.xyz (03880a02) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c8.xxx 0.0 op: 00050280 w: t2.x t2.x t2.x op: 00000000 37: xyz: t0 c8 t0 bias-> t0.xyz (03800a00) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c8.xxx 0.0 op: 00050280 w: t0.x t0.x t0.x op: 00000000 38: xyz: t0 c7 t1 bias-> t0.xyz (038019c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c7.xxx t1.xyz op: 00020280 w: t0.x t0.x t0.x op: 00000000 39: xyz: t2 c7 t0 bias-> t0.xyz (038009c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c7.xxx t0.xyz op: 00020280 w: t2.x t2.x t2.x op: 00000000 40: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t1 t0 t0 bias-> o0.w (01000001) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t1.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL IN[1], GENERIC[12], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0..1] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL 0: TEX TEMP[0], IN[0].xyyy, SAMP[0], 2D 1: MUL TEMP[0], TEMP[0], IN[1] 2: MUL TEMP[1].x, TEMP[0].wwww, CONST[1].xxxx 3: MOV TEMP[1].w, TEMP[1].xxxx 4: MUL TEMP[1].xyz, TEMP[0].xyzz, CONST[0].xxxx 5: MOV OUT[0], TEMP[1] 6: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MUL temp[1].x, temp[0].wwww, const[1].xxxx; 3: MOV temp[1].w, temp[1].xxxx; 4: MUL temp[1].xyz, temp[0].xyzz, const[0].xxxx; 5: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MUL temp[1].x, temp[0].wwww, const[1].xxxx; 3: MOV temp[1].w, temp[1].xxxx; 4: MUL temp[1].xyz, temp[0].xyzz, const[0].xxxx; 5: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MUL temp[1].x, temp[0].wwww, const[1].xxxx; 3: MOV temp[1].w, temp[1].xxxx; 4: MUL temp[1].xyz, temp[0].xyzz, const[0].xxxx; 5: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MUL temp[1].x, temp[0].wwww, const[1].xxxx; 3: MOV temp[1].w, temp[1].xxxx; 4: MUL temp[1].xyz, temp[0].xyzz, const[0].xxxx; 5: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MUL temp[1].x, temp[0].wwww, const[1].xxxx; 3: MOV temp[1].w, temp[1].xxxx; 4: MUL temp[1].xyz, temp[0].xyzz, const[0].xxxx; 5: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MUL temp[1].x, temp[0].wwww, const[1].xxxx; 3: MOV temp[1].w, temp[1].xxxx; 4: MUL temp[1].xyz, temp[0].xyzz, const[0].xxxx; 5: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MUL temp[1].x, temp[0].wwww, const[1].xxxx; 3: MOV temp[1].w, temp[1].xxxx; 4: MUL temp[1].xyz, temp[0].xyzz, const[0].xxxx; 5: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MUL temp[1].x, temp[0].w___, const[1].x___; 3: MOV temp[1].w, temp[1].___x; 4: MUL temp[1].xyz, temp[0].xyz_, const[0].xxx_; 5: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MUL temp[1].x, temp[0].w___, const[1].x___; 3: MOV temp[1].w, temp[1].___x; 4: MUL temp[1].xyz, temp[0].xyz_, const[0].xxx_; 5: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[2], input[0].xy__, 2D[0]; 1: MUL temp[3], temp[2], input[1]; 2: MUL temp[4].x, temp[3].w___, const[1].x___; 3: MOV temp[5].w, temp[4].___x; 4: MUL temp[5].xyz, temp[3].xyz_, const[0].xxx_; 5: MOV output[0], temp[5]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[2], input[0].xy__, 2D[0]; 1: MUL temp[3], temp[2], input[1]; 2: MUL temp[4].x, temp[3].w___, const[1].x___; 3: MOV temp[5].w, temp[4].___x; 4: MUL temp[5].xyz, temp[3].xyz_, const[0].xxx_; 5: MOV output[0], temp[5]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[2], input[0].xy__, 2D[0]; 1: MUL temp[3], temp[2], input[1]; 2: MUL temp[4].x, temp[3].w___, const[1].x___; 3: MOV temp[5].w, temp[4].___x; 4: MUL temp[5].xyz, temp[3].xyz_, const[0].xxx_; 5: MOV output[0], temp[5]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[2], input[0].xy__, 2D[0]; 1: MUL temp[3], temp[2], input[1]; 2: MUL temp[4].x, temp[3].w___, const[1].x___; 3: MOV temp[5].w, temp[4].___x; 4: MUL temp[5].xyz, temp[3].xyz_, const[0].xxx_; 5: MOV output[0], temp[5]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[2], input[0].xy__, 2D[0]; 1: src0.xyz = temp[2], src0.w = temp[2], src1.xyz = input[1], src1.w = input[1] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[3].w, src0.w, src1.w, src0.0 2: src0.xyz = const[1], src0.w = temp[3] MAD temp[4].x, src0.w__, src0.x__, src0.000 3: src0.xyz = temp[4] MAD temp[5].w, src0.x, src0.1, src0.0 4: src0.xyz = temp[3], src1.xyz = const[0] MAD temp[5].xyz, src0.xyz, src1.xxx, src0.000 5: src0.xyz = temp[5], src0.w = temp[5] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[2], src0.w = temp[2], src1.xyz = input[1], src1.w = input[1] SEM_WAIT MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[3].w, src0.w, src1.w, src0.0 3: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = const[0], src2.xyz = const[1] MAD temp[5].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[4].w, src0.w, src2.x, src0.0 4: src0.xyz = temp[4], src0.w = temp[4] MAD temp[5].w, src0.w, src0.1, src0.0 5: src0.xyz = temp[5], src0.w = temp[5] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[2], src0.w = temp[2], src1.xyz = input[1], src1.w = input[1] SEM_WAIT MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[3].w, src0.w, src1.w, src0.0 3: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = const[0], src2.xyz = const[1] MAD temp[5].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[4].w, src0.w, src2.x, src0.0 4: src0.w = temp[4] MAD temp[5].w, src0.w, src0.1, src0.0 5: src0.xyz = temp[5], src0.w = temp[5] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[1], src1.w = input[1] SEM_WAIT MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0], src2.xyz = const[1] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[0].w, src0.w, src2.x, src0.0 4: src0.w = temp[0] MAD temp[0].w, src0.w, src0.1, src0.0 5: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=22************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 3, tex_end: 0 (code_addr: 004000c0) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t0 t1 t0 bias-> t0.xyz (03800040) w: t0 t1 t0 bias-> t0.w (00800040) xyz: t0.xyz t1.xyz 0.0 op: 00050200 w: t0.w t1.w 0.0 op: 00040509 1: xyz: t0 c0 c1 bias-> t0.xyz (03821800) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xyz c0.xxx 0.0 op: 00050280 w: t0.w c1.x 0.0 op: 00040309 2: xyz: t0 t0 t0 bias-> (00000000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: t0.w 1.0 0.0 op: 00040889 3: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, COLOR DCL IN[1], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0], LOCAL 0: TXP TEMP[0], IN[1].xyyw, SAMP[0], RECT 1: MUL TEMP[0], TEMP[0], IN[0] 2: MOV OUT[0], TEMP[0] 3: END Fragment Program: before compilation # Radeon Compiler Program 0: TXP temp[0], input[1].xyyw, RECT[0]; 1: MUL temp[0], temp[0], input[0]; 2: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TXP temp[0], input[1].xyyw, RECT[0]; 1: MUL temp[0], temp[0], input[0]; 2: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TXP temp[0], input[1].xyyw, RECT[0]; 1: MUL temp[0], temp[0], input[0]; 2: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TXP temp[0], input[1].xyyw, RECT[0]; 1: MUL temp[0], temp[0], input[0]; 2: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TXP temp[0], input[1].xyyw, RECT[0]; 1: MUL temp[0], temp[0], input[0]; 2: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MUL temp[1], input[1].xyyw, const[0]; 1: TXP temp[0], temp[1], 2D[0]; 2: MUL temp[0], temp[0], input[0]; 3: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[1], input[1].xyyw, const[0]; 1: TXP temp[0], temp[1], 2D[0]; 2: MUL temp[0], temp[0], input[0]; 3: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[1].xyw, input[1].xy_w, const[0].xy_w; 1: TXP temp[0], temp[1].xy_w, 2D[0]; 2: MUL temp[0], temp[0], input[0]; 3: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MUL temp[1].xyw, input[1].xy_w, const[0].xy_w; 1: TXP temp[0], temp[1].xy_w, 2D[0]; 2: MUL temp[0], temp[0], input[0]; 3: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MUL temp[2].xyw, input[1].xy_w, const[0].xy_w; 1: TXP temp[3], temp[2].xy_w, 2D[0]; 2: MUL temp[4], temp[3], input[0]; 3: MOV output[0], temp[4]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[2].xyw, input[1].xy_w, const[0].xy_w; 1: TXP temp[3], temp[2].xy_w, 2D[0]; 2: MUL temp[4], temp[3], input[0]; 3: MOV output[0], temp[4]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[2].xyw, input[1].xy_w, const[0].xy_w; 1: TXP temp[3], temp[2].xy_w, 2D[0]; 2: MUL temp[4], temp[3], input[0]; 3: MOV output[0], temp[4]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[2].xyw, input[1].xy_w, const[0].xy_w; 1: TXP temp[3], temp[2].xy_w, 2D[0]; 2: MUL temp[4], temp[3], input[0]; 3: MOV output[0], temp[4]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[1], src0.w = input[1], src1.xyz = const[0], src1.w = const[0] MAD temp[2].xy, src0.xy_, src1.xy_, src0.000 MAD temp[2].w, src0.w, src1.w, src0.0 1: TXP temp[3], temp[2].xy_w, 2D[0]; 2: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = input[0], src1.w = input[0] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[4].w, src0.w, src1.w, src0.0 3: src0.xyz = temp[4], src0.w = temp[4] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[1], src0.w = input[1], src1.xyz = const[0], src1.w = const[0] MAD temp[2].xy, src0.xy_, src1.xy_, src0.000 MAD temp[2].w, src0.w, src1.w, src0.0 1: BEGIN_TEX; 2: TXP temp[3], temp[2].xy_w, 2D[0] SEM_WAIT SEM_ACQUIRE; 3: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = input[0], src1.w = input[0] SEM_WAIT MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[4].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[4], src0.w = temp[4] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[1], src0.w = input[1], src1.xyz = const[0], src1.w = const[0] MAD temp[2].xy, src0.xy_, src1.xy_, src0.000 MAD temp[2].w, src0.w, src1.w, src0.0 1: BEGIN_TEX; 2: TXP temp[3], temp[2].xy_w, 2D[0] SEM_WAIT SEM_ACQUIRE; 3: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = input[0], src1.w = input[0] SEM_WAIT MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[4].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[4], src0.w = temp[4] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[1], src0.w = input[1], src1.xyz = const[0], src1.w = const[0] MAD temp[1].xy, src0.xy_, src1.xy_, src0.00_ MAD temp[1].w, src0.w, src1.w, src0.0 1: BEGIN_TEX; 2: TXP temp[1], temp[1].xy_w, 2D[0] SEM_WAIT SEM_ACQUIRE; 3: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] SEM_WAIT MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=23************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00000000) 0: xyz: t1 c0 t0 bias-> t1.xy (01840801) w: t1 c0 t0 bias-> t1.w (00840801) xyz: t1.xyz c0.xyz 0.0 op: 00050200 w: t1.w c0.w 0.0 op: 00040509 NODE 1: alu_offset: 1, tex_offset: 0, alu_end: 1, tex_end: 0 (code_addr: 00400041) TEX: TXP t1, t1, texture[0] (00018041) 1: xyz: t1 t0 t0 bias-> t0.xyz (03800001) w: t1 t0 t0 bias-> t0.w (00800001) xyz: t1.xyz t0.xyz 0.0 op: 00050200 w: t1.w t0.w 0.0 op: 00040509 2: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL OUT[0], COLOR IMM[0] FLT32 { 1.0000, 0.0000, 0.0000, 0.0000} 0: MOV OUT[0], IMM[0].xxxx 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], none.1111; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], none.1111; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], none.1111; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: MAD color[0].xyz, src0.111, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: MAD color[0].xyz, src0.111, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: MAD color[0].xyz, src0.111, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: MAD color[0].xyz, src0.111, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 pc=24************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: 1.0 1.0 0.0 op: 00050a95 w: 1.0 1.0 0.0 op: 00040891 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0], LOCAL 0: TEX TEMP[0], IN[0].xyyy, SAMP[0], 2D 1: MOV OUT[0], TEMP[0] 2: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[1], src0.w = temp[1] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[1], src0.w = temp[1] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[0], src0.w = temp[0] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=25************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], PERSPECTIVE DCL IN[1], GENERIC[12], PERSPECTIVE DCL IN[2], GENERIC[13], PERSPECTIVE DCL IN[3], GENERIC[14], PERSPECTIVE DCL IN[4], GENERIC[15], PERSPECTIVE DCL OUT[0], COLOR DCL OUT[1], COLOR[1] DCL OUT[2], COLOR[2] DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL IMM[0] FLT32 { -0.5000, 0.5000, 255.0000, 0.0039} 0: TEX TEMP[0], IN[0].xyyy, SAMP[2], 2D 1: TEX TEMP[1].xyz, IN[0].xyyy, SAMP[1], 2D 2: ADD TEMP[2].xyz, TEMP[1].xyzz, IMM[0].xxxx 3: MUL TEMP[3].xyz, TEMP[2].xxxx, IN[3].xyzz 4: MAD TEMP[3].xyz, TEMP[2].yyyy, IN[2].xyzz, TEMP[3].xyzz 5: MAD TEMP[3].xyz, TEMP[2].zzzz, IN[4].xyzz, TEMP[3].xyzz 6: DP3 TEMP[4].x, TEMP[3].xyzz, TEMP[3].xyzz 7: RSQ TEMP[4].x, TEMP[4].xxxx 8: MUL TEMP[3].xyz, TEMP[3].xyzz, TEMP[4].xxxx 9: MAD TEMP[1].xyz, TEMP[3].xyzz, IMM[0].yyyy, IMM[0].yyyy 10: MUL TEMP[3].x, IN[1].xxxx, IMM[0].zzzz 11: FLR TEMP[4].x, TEMP[3].xxxx 12: MOV TEMP[5].x, TEMP[4].xxxx 13: ADD TEMP[3].x, TEMP[3].xxxx, -TEMP[4].xxxx 14: MUL TEMP[3].x, TEMP[3].xxxx, IMM[0].zzzz 15: FLR TEMP[4].x, TEMP[3].xxxx 16: MOV TEMP[5].y, TEMP[4].xxxx 17: ADD TEMP[3].x, TEMP[3].xxxx, -TEMP[4].xxxx 18: MOV TEMP[5].z, TEMP[3].xxxx 19: MUL TEMP[5].xy, TEMP[5].xyyy, IMM[0].wwww 20: MOV TEMP[2].xyz, TEMP[5].xyzx 21: TEX TEMP[3].xy, IN[0].xyyy, SAMP[0], 2D 22: MOV TEMP[1].w, TEMP[3].xxxx 23: MOV TEMP[2].w, TEMP[3].yyyy 24: MOV OUT[0], TEMP[0] 25: MOV OUT[1], TEMP[1] 26: MOV OUT[2], TEMP[2] 27: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[2]; 1: TEX temp[1].xyz, input[0].xyyy, 2D[1]; 2: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 3: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 4: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 5: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 6: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 7: RSQ temp[4].x, temp[4].xxxx; 8: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 9: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 10: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 11: FLR temp[4].x, temp[3].xxxx; 12: MOV temp[5].x, temp[4].xxxx; 13: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 14: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 15: FLR temp[4].x, temp[3].xxxx; 16: MOV temp[5].y, temp[4].xxxx; 17: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 18: MOV temp[5].z, temp[3].xxxx; 19: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 20: MOV temp[2].xyz, temp[5].xyzx; 21: TEX temp[3].xy, input[0].xyyy, 2D[0]; 22: MOV temp[1].w, temp[3].xxxx; 23: MOV temp[2].w, temp[3].yyyy; 24: MOV output[0], temp[0]; 25: MOV output[1], temp[1]; 26: MOV output[2], temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[2]; 1: TEX temp[1].xyz, input[0].xyyy, 2D[1]; 2: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 3: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 4: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 5: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 6: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 7: RSQ temp[4].x, temp[4].xxxx; 8: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 9: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 10: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 11: FLR temp[4].x, temp[3].xxxx; 12: MOV temp[5].x, temp[4].xxxx; 13: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 14: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 15: FLR temp[4].x, temp[3].xxxx; 16: MOV temp[5].y, temp[4].xxxx; 17: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 18: MOV temp[5].z, temp[3].xxxx; 19: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 20: MOV temp[2].xyz, temp[5].xyzx; 21: TEX temp[3].xy, input[0].xyyy, 2D[0]; 22: MOV temp[1].w, temp[3].xxxx; 23: MOV temp[2].w, temp[3].yyyy; 24: MOV output[0], temp[0]; 25: MOV output[1], temp[1]; 26: MOV output[2], temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[2]; 1: TEX temp[1].xyz, input[0].xyyy, 2D[1]; 2: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 3: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 4: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 5: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 6: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 7: RSQ temp[4].x, temp[4].xxxx; 8: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 9: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 10: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 11: FLR temp[4].x, temp[3].xxxx; 12: MOV temp[5].x, temp[4].xxxx; 13: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 14: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 15: FLR temp[4].x, temp[3].xxxx; 16: MOV temp[5].y, temp[4].xxxx; 17: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 18: MOV temp[5].z, temp[3].xxxx; 19: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 20: MOV temp[2].xyz, temp[5].xyzx; 21: TEX temp[3].xy, input[0].xyyy, 2D[0]; 22: MOV temp[1].w, temp[3].xxxx; 23: MOV temp[2].w, temp[3].yyyy; 24: MOV output[0], temp[0]; 25: MOV output[1], temp[1]; 26: MOV output[2], temp[2]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[2]; 1: TEX temp[1].xyz, input[0].xyyy, 2D[1]; 2: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 3: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 4: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 5: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 6: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 7: RSQ temp[4].x, temp[4].xxxx; 8: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 9: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 10: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 11: FLR temp[4].x, temp[3].xxxx; 12: MOV temp[5].x, temp[4].xxxx; 13: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 14: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 15: FLR temp[4].x, temp[3].xxxx; 16: MOV temp[5].y, temp[4].xxxx; 17: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 18: MOV temp[5].z, temp[3].xxxx; 19: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 20: MOV temp[2].xyz, temp[5].xyzx; 21: TEX temp[3].xy, input[0].xyyy, 2D[0]; 22: MOV temp[1].w, temp[3].xxxx; 23: MOV temp[2].w, temp[3].yyyy; 24: MOV output[0], temp[0]; 25: MOV output[1], temp[1]; 26: MOV output[2], temp[2]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[2]; 1: TEX temp[1].xyz, input[0].xyyy, 2D[1]; 2: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 3: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 4: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 5: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 6: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 7: RSQ temp[4].x, temp[4].xxxx; 8: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 9: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 10: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 11: FLR temp[4].x, temp[3].xxxx; 12: MOV temp[5].x, temp[4].xxxx; 13: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 14: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 15: FLR temp[4].x, temp[3].xxxx; 16: MOV temp[5].y, temp[4].xxxx; 17: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 18: MOV temp[5].z, temp[3].xxxx; 19: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 20: MOV temp[2].xyz, temp[5].xyzx; 21: TEX temp[3].xy, input[0].xyyy, 2D[0]; 22: MOV temp[1].w, temp[3].xxxx; 23: MOV temp[2].w, temp[3].yyyy; 24: MOV output[0], temp[0]; 25: MOV output[1], temp[1]; 26: MOV output[2], temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[2]; 1: TEX temp[6], input[0].xyyy, 2D[1]; 2: MOV temp[1].xyz, temp[6]; 3: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 4: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 5: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 6: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 7: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 10: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 11: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 12: FLR temp[4].x, temp[3].xxxx; 13: MOV temp[5].x, temp[4].xxxx; 14: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 15: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 16: FLR temp[4].x, temp[3].xxxx; 17: MOV temp[5].y, temp[4].xxxx; 18: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 19: MOV temp[5].z, temp[3].xxxx; 20: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 21: MOV temp[2].xyz, temp[5].xyzx; 22: TEX temp[7], input[0].xyyy, 2D[0]; 23: MOV temp[3].xy, temp[7]; 24: MOV temp[1].w, temp[3].xxxx; 25: MOV temp[2].w, temp[3].yyyy; 26: MOV output[0], temp[0]; 27: MOV output[1], temp[1]; 28: MOV output[2], temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[2]; 1: TEX temp[6], input[0].xyyy, 2D[1]; 2: MOV temp[1].xyz, temp[6]; 3: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 4: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 5: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 6: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 7: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 8: RSQ temp[4].x, |temp[4].xxxx|; 9: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 10: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 11: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 12: FRC temp[4].x, temp[3].xxxx; 13: ADD temp[4].x, temp[3].xxxx, -temp[4]; 14: MOV temp[5].x, temp[4].xxxx; 15: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 16: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 17: FRC temp[4].x, temp[3].xxxx; 18: ADD temp[4].x, temp[3].xxxx, -temp[4]; 19: MOV temp[5].y, temp[4].xxxx; 20: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 21: MOV temp[5].z, temp[3].xxxx; 22: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 23: MOV temp[2].xyz, temp[5].xyzx; 24: TEX temp[7], input[0].xyyy, 2D[0]; 25: MOV temp[3].xy, temp[7]; 26: MOV temp[1].w, temp[3].xxxx; 27: MOV temp[2].w, temp[3].yyyy; 28: MOV output[0], temp[0]; 29: MOV output[1], temp[1]; 30: MOV output[2], temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[2]; 1: TEX temp[6].xyz, input[0].xy__, 2D[1]; 2: MOV temp[1].xyz, temp[6].xyz_; 3: ADD temp[2].xyz, temp[1].xyz_, const[0].xxx_; 4: MUL temp[3].xyz, temp[2].xxx_, input[3].xyz_; 5: MAD temp[3].xyz, temp[2].yyy_, input[2].xyz_, temp[3].xyz_; 6: MAD temp[3].xyz, temp[2].zzz_, input[4].xyz_, temp[3].xyz_; 7: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[3].xyz, temp[3].xyz_, temp[4].xxx_; 10: MAD temp[1].xyz, temp[3].xyz_, const[0].yyy_, const[0].yyy_; 11: MUL temp[3].x, input[1].x___, const[0].z___; 12: FRC temp[4].x, temp[3].x___; 13: ADD temp[4].x, temp[3].x___, -temp[4].x___; 14: MOV temp[5].x, temp[4].x___; 15: ADD temp[3].x, temp[3].x___, -temp[4].x___; 16: MUL temp[3].x, temp[3].x___, const[0].z___; 17: FRC temp[4].x, temp[3].x___; 18: ADD temp[4].x, temp[3].x___, -temp[4].x___; 19: MOV temp[5].y, temp[4]._x__; 20: ADD temp[3].x, temp[3].x___, -temp[4].x___; 21: MOV temp[5].z, temp[3].__x_; 22: MUL temp[5].xy, temp[5].xy__, const[0].ww__; 23: MOV temp[2].xyz, temp[5].xyz_; 24: TEX temp[7].xy, input[0].xy__, 2D[0]; 25: MOV temp[3].xy, temp[7].xy__; 26: MOV temp[1].w, temp[3].___x; 27: MOV temp[2].w, temp[3].___y; 28: MOV output[0], temp[0]; 29: MOV output[1], temp[1]; 30: MOV output[2], temp[2]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[2]; 1: TEX temp[6].xyz, input[0].xy__, 2D[1]; 2: MOV temp[1].xyz, temp[6].xyz_; 3: ADD temp[2].xyz, temp[1].xyz_, const[0].xxx_; 4: MUL temp[3].xyz, temp[2].xxx_, input[3].xyz_; 5: MAD temp[3].xyz, temp[2].yyy_, input[2].xyz_, temp[3].xyz_; 6: MAD temp[3].xyz, temp[2].zzz_, input[4].xyz_, temp[3].xyz_; 7: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[3].xyz, temp[3].xyz_, temp[4].xxx_; 10: MAD temp[1].xyz, temp[3].xyz_, const[0].yyy_, const[0].yyy_; 11: MUL temp[3].x, input[1].x___, const[0].z___; 12: FRC temp[4].x, temp[3].x___; 13: ADD temp[4].x, temp[3].x___, -temp[4].x___; 14: MOV temp[5].x, temp[4].x___; 15: ADD temp[3].x, temp[3].x___, -temp[4].x___; 16: MUL temp[3].x, temp[3].x___, const[0].z___; 17: FRC temp[4].x, temp[3].x___; 18: ADD temp[4].x, temp[3].x___, -temp[4].x___; 19: MOV temp[5].y, temp[4]._x__; 20: ADD temp[3].x, temp[3].x___, -temp[4].x___; 21: MOV temp[5].z, temp[3].__x_; 22: MUL temp[5].xy, temp[5].xy__, const[0].ww__; 23: MOV temp[2].xyz, temp[5].xyz_; 24: TEX temp[7].xy, input[0].xy__, 2D[0]; 25: MOV temp[3].xy, temp[7].xy__; 26: MOV temp[1].w, temp[3].___x; 27: MOV temp[2].w, temp[3].___y; 28: MOV output[0], temp[0]; 29: MOV output[1], temp[1]; 30: MOV output[2], temp[2]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[8], input[0].xy__, 2D[2]; 1: TEX temp[9].xyz, input[0].xy__, 2D[1]; 2: MOV temp[10].xyz, temp[9].xyz_; 3: ADD temp[11].xyz, temp[10].xyz_, const[0].xxx_; 4: MUL temp[12].xyz, temp[11].xxx_, input[3].xyz_; 5: MAD temp[13].xyz, temp[11].yyy_, input[2].xyz_, temp[12].xyz_; 6: MAD temp[14].xyz, temp[11].zzz_, input[4].xyz_, temp[13].xyz_; 7: DP3 temp[15].x, temp[14].xyz_, temp[14].xyz_; 8: RSQ temp[16].x, |temp[15].x___|; 9: MUL temp[17].xyz, temp[14].xyz_, temp[16].xxx_; 10: MAD temp[18].xyz, temp[17].xyz_, const[0].yyy_, const[0].yyy_; 11: MUL temp[19].x, input[1].x___, const[0].z___; 12: FRC temp[20].x, temp[19].x___; 13: ADD temp[21].x, temp[19].x___, -temp[20].x___; 14: MOV temp[22].x, temp[21].x___; 15: ADD temp[23].x, temp[19].x___, -temp[21].x___; 16: MUL temp[24].x, temp[23].x___, const[0].z___; 17: FRC temp[25].x, temp[24].x___; 18: ADD temp[26].x, temp[24].x___, -temp[25].x___; 19: MOV temp[22].y, temp[26]._x__; 20: ADD temp[27].x, temp[24].x___, -temp[26].x___; 21: MOV temp[28].z, temp[27].__x_; 22: MUL temp[28].xy, temp[22].xy__, const[0].ww__; 23: MOV temp[29].xyz, temp[28].xyz_; 24: TEX temp[30].xy, input[0].xy__, 2D[0]; 25: MOV temp[31].xy, temp[30].xy__; 26: MOV temp[18].w, temp[31].___x; 27: MOV temp[29].w, temp[31].___y; 28: MOV output[0], temp[8]; 29: MOV output[1], temp[18]; 30: MOV output[2], temp[29]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[8], input[0].xy__, 2D[2]; 1: TEX temp[9].xyz, input[0].xy__, 2D[1]; 2: ADD temp[11].xyz, temp[9].xyz_, none.-H-H-H_; 3: MUL temp[12].xyz, temp[11].xxx_, input[3].xyz_; 4: MAD temp[13].xyz, temp[11].yyy_, input[2].xyz_, temp[12].xyz_; 5: MAD temp[14].xyz, temp[11].zzz_, input[4].xyz_, temp[13].xyz_; 6: DP3 temp[15].x, temp[14].xyz_, temp[14].xyz_; 7: RSQ temp[16].x, |temp[15].x___|; 8: MUL temp[17].xyz, temp[14].xyz_, temp[16].xxx_; 9: MAD temp[18].xyz, temp[17].xyz_, none.HHH_, none.HHH_; 10: MUL temp[19].x, input[1].x___, const[0].z___; 11: FRC temp[20].x, temp[19].x___; 12: MOV temp[22].x, (temp[19] - temp[20]).x___; 13: ADD temp[23].x, temp[19].x___, -(temp[19] - temp[20]).x___; 14: MUL temp[24].x, temp[23].x___, const[0].z___; 15: FRC temp[25].x, temp[24].x___; 16: MOV temp[22].y, (temp[24] - temp[25])._x__; 17: ADD temp[27].x, temp[24].x___, -(temp[24] - temp[25]).x___; 18: MOV temp[28].z, temp[27].__x_; 19: MUL temp[28].xy, temp[22].xy__, const[0].ww__; 20: MOV temp[29].xyz, temp[28].xyz_; 21: TEX temp[30].xy, input[0].xy__, 2D[0]; 22: MOV temp[18].w, temp[30].___x; 23: MOV temp[29].w, temp[30].___y; 24: MOV output[0], temp[8]; 25: MOV output[1], temp[18]; 26: MOV output[2], temp[29]; CONST[0] = { -0.5000 0.5000 255.0000 0.0039 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[8], input[0].xy__, 2D[2]; 1: TEX temp[9].xyz, input[0].xy__, 2D[1]; 2: ADD temp[11].xyz, temp[9].xyz_, none.-H-H-H_; 3: MUL temp[12].xyz, temp[11].xxx_, input[3].xyz_; 4: MAD temp[13].xyz, temp[11].yyy_, input[2].xyz_, temp[12].xyz_; 5: MAD temp[14].xyz, temp[11].zzz_, input[4].xyz_, temp[13].xyz_; 6: DP3 temp[15].x, temp[14].xyz_, temp[14].xyz_; 7: RSQ temp[16].x, |temp[15].x___|; 8: MUL temp[17].xyz, temp[14].xyz_, temp[16].xxx_; 9: MAD temp[18].xyz, temp[17].xyz_, none.HHH_, none.HHH_; 10: MUL temp[19].x, input[1].x___, const[0].z___; 11: FRC temp[20].x, temp[19].x___; 12: MOV temp[22].x, (temp[19] - temp[20]).x___; 13: ADD temp[23].x, temp[19].x___, -(temp[19] - temp[20]).x___; 14: MUL temp[24].x, temp[23].x___, const[0].z___; 15: FRC temp[25].x, temp[24].x___; 16: MOV temp[22].y, (temp[24] - temp[25])._x__; 17: ADD temp[27].x, temp[24].x___, -(temp[24] - temp[25]).x___; 18: MOV temp[28].z, temp[27].__x_; 19: MUL temp[28].xy, temp[22].xy__, const[0].ww__; 20: MOV temp[29].xyz, temp[28].xyz_; 21: TEX temp[30].xy, input[0].xy__, 2D[0]; 22: MOV temp[18].w, temp[30].___x; 23: MOV temp[29].w, temp[30].___y; 24: MOV output[0], temp[8]; 25: MOV output[1], temp[18]; 26: MOV output[2], temp[29]; CONST[0] = { -0.5000 0.5000 255.0000 0.0039 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[8], input[0].xy__, 2D[2]; 1: TEX temp[9].xyz, input[0].xy__, 2D[1]; 2: ADD temp[11].xyz, temp[9].xyz_, none.-H-H-H_; 3: MUL temp[12].xyz, temp[11].xxx_, input[3].xyz_; 4: MAD temp[13].xyz, temp[11].yyy_, input[2].xyz_, temp[12].xyz_; 5: MAD temp[14].xyz, temp[11].zzz_, input[4].xyz_, temp[13].xyz_; 6: DP3 temp[15].x, temp[14].xyz_, temp[14].xyz_; 7: RSQ temp[16].x, |temp[15].x___|; 8: MUL temp[17].xyz, temp[14].xyz_, temp[16].xxx_; 9: MAD temp[18].xyz, temp[17].xyz_, none.HHH_, none.HHH_; 10: MUL temp[19].x, input[1].x___, const[0].z___; 11: FRC temp[20].x, temp[19].x___; 12: MOV temp[22].x, (temp[19] - temp[20]).x___; 13: ADD temp[23].x, temp[19].x___, -(temp[19] - temp[20]).x___; 14: MUL temp[24].x, temp[23].x___, const[0].z___; 15: FRC temp[25].x, temp[24].x___; 16: MOV temp[22].y, (temp[24] - temp[25])._x__; 17: ADD temp[27].x, temp[24].x___, -(temp[24] - temp[25]).x___; 18: MOV temp[28].z, temp[27].__x_; 19: MUL temp[28].xy, temp[22].xy__, const[0].ww__; 20: MOV temp[29].xyz, temp[28].xyz_; 21: TEX temp[30].xy, input[0].xy__, 2D[0]; 22: MOV temp[18].w, temp[30].___x; 23: MOV temp[29].w, temp[30].___y; 24: MOV output[0], temp[8]; 25: MOV output[1], temp[18]; 26: MOV output[2], temp[29]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[8], input[0].xy__, 2D[2]; 1: TEX temp[9].xyz, input[0].xy__, 2D[1]; 2: src0.xyz = temp[9] MAD temp[11].xyz, src0.xyz, src0.111, -src0.HHH 3: src0.xyz = temp[11], src1.xyz = input[3] MAD temp[12].xyz, src0.xxx, src1.xyz, src0.000 4: src0.xyz = temp[11], src1.xyz = input[2], src2.xyz = temp[12] MAD temp[13].xyz, src0.yyy, src1.xyz, src2.xyz 5: src0.xyz = temp[11], src1.xyz = input[4], src2.xyz = temp[13] MAD temp[14].xyz, src0.zzz, src1.xyz, src2.xyz 6: src0.xyz = temp[14] DP3 temp[15].x, src0.xyz, src0.xyz 7: src0.xyz = temp[15] REPL_ALPHA temp[16].x RSQ, |src0.x| 8: src0.xyz = temp[14], src1.xyz = temp[16] MAD temp[17].xyz, src0.xyz, src1.xxx, src0.000 9: src0.xyz = temp[17] MAD temp[18].xyz, src0.xyz, src0.HHH, src0.HHH 10: src0.xyz = input[1], src1.xyz = const[0] MAD temp[19].x, src0.x__, src1.z__, src0.000 11: src0.xyz = temp[19] FRC temp[20].x, src0.x__ 12: src0.xyz = temp[20], src1.xyz = temp[19], srcp.xyz = (src1 - src0) MAD temp[22].x, srcp.x__, src0.111, src0.000 13: src0.xyz = temp[20], src1.xyz = temp[19], srcp.xyz = (src1 - src0) MAD temp[23].x, src1.x__, src0.111, -srcp.x__ 14: src0.xyz = temp[23], src1.xyz = const[0] MAD temp[24].x, src0.x__, src1.z__, src0.000 15: src0.xyz = temp[24] FRC temp[25].x, src0.x__ 16: src0.xyz = temp[25], src1.xyz = temp[24], srcp.xyz = (src1 - src0) MAD temp[22].y, srcp._x_, src0.111, src0.000 17: src0.xyz = temp[25], src1.xyz = temp[24], srcp.xyz = (src1 - src0) MAD temp[27].x, src1.x__, src0.111, -srcp.x__ 18: src0.xyz = temp[27] MAD temp[28].z, src0.__x, src0.111, src0.000 19: src0.xyz = temp[22], src0.w = const[0] MAD temp[28].xy, src0.xy_, src0.ww_, src0.000 20: src0.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src0.111, src0.000 21: TEX temp[30].xy, input[0].xy__, 2D[0]; 22: src0.xyz = temp[30] MAD temp[18].w, src0.x, src0.1, src0.0 23: src0.xyz = temp[30] MAD temp[29].w, src0.y, src0.1, src0.0 24: src0.xyz = temp[8], src0.w = temp[8] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 25: src0.xyz = temp[18], src0.w = temp[18] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 26: src0.xyz = temp[29], src0.w = temp[29] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[8], input[0].xy__, 2D[2]; 2: TEX temp[9].xyz, input[0].xy__, 2D[1]; 3: TEX temp[30].xy, input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 4: src0.xyz = input[1], src1.xyz = const[0], src2.xyz = temp[30] SEM_WAIT MAD temp[19].x, src0.x__, src1.z__, src0.000 MAD temp[18].w, src2.x, src0.1, src0.0 5: src0.xyz = temp[9], src1.xyz = temp[30] MAD temp[11].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[29].w, src1.y, src0.1, src0.0 6: src0.xyz = temp[19] FRC temp[20].x, src0.x__ 7: src0.xyz = temp[11], src1.xyz = input[3] MAD temp[12].xyz, src0.xxx, src1.xyz, src0.000 8: src0.xyz = temp[20], src1.xyz = temp[19], srcp.xyz = (src1 - src0) MAD temp[22].x, srcp.x__, src0.111, src0.000 9: src0.xyz = temp[20], src1.xyz = temp[19], srcp.xyz = (src1 - src0) MAD temp[23].w, src1.x, src0.1, -srcp.x 10: src0.xyz = temp[11], src1.xyz = input[2], src2.xyz = temp[12] MAD temp[13].xyz, src0.yyy, src1.xyz, src2.xyz 11: src0.xyz = temp[23], src0.w = temp[23], src1.xyz = const[0] MAD temp[24].x, src0.w__, src1.z__, src0.000 12: src0.xyz = temp[11], src1.xyz = input[4], src2.xyz = temp[13] MAD temp[14].xyz, src0.zzz, src1.xyz, src2.xyz 13: src0.xyz = temp[24] FRC temp[25].x, src0.x__ 14: src0.xyz = temp[25], src1.xyz = temp[24], src2.xyz = temp[14], srcp.xyz = (src1 - src0) DP3 temp[15].x, src2.xyz, src2.xyz MAD temp[27].w, src1.x, src0.1, -srcp.x 15: src0.xyz = temp[25], src1.xyz = temp[24], src2.xyz = temp[15], srcp.xyz = (src1 - src0) MAD temp[22].y, srcp._x_, src0.111, src0.000 RSQ temp[16].w, |src2.x| 16: src0.xyz = temp[27], src0.w = temp[27] MAD temp[28].z, src0.__w, src0.111, src0.000 17: src0.xyz = temp[14], src0.w = temp[16], src1.xyz = temp[16] MAD temp[17].xyz, src0.xyz, src0.www, src0.000 18: src0.xyz = temp[22], src0.w = const[0] MAD temp[28].xy, src0.xy_, src0.ww_, src0.000 19: src0.xyz = temp[17] MAD temp[18].xyz, src0.xyz, src0.HHH, src0.HHH 20: src0.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src0.111, src0.000 21: src0.xyz = temp[8], src0.w = temp[8] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 22: src0.xyz = temp[18], src0.w = temp[18] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 23: src0.xyz = temp[29], src0.w = temp[29] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[8], input[0].xy__, 2D[2]; 2: TEX temp[9].xyz, input[0].xy__, 2D[1]; 3: TEX temp[30].xy, input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 4: src0.xyz = input[1], src1.xyz = const[0], src2.xyz = temp[30] SEM_WAIT MAD temp[19].x, src0.x__, src1.z__, src0.000 MAD temp[18].w, src2.x, src0.1, src0.0 5: src0.xyz = temp[9], src1.xyz = temp[30] MAD temp[11].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[29].w, src1.y, src0.1, src0.0 6: src0.xyz = temp[19] FRC temp[20].x, src0.x__ 7: src0.xyz = temp[11], src1.xyz = input[3] MAD temp[12].xyz, src0.xxx, src1.xyz, src0.000 8: src0.xyz = temp[20], src1.xyz = temp[19], srcp.xyz = (src1 - src0) MAD temp[22].x, srcp.x__, src0.111, src0.000 9: src0.xyz = temp[20], src1.xyz = temp[19], srcp.xyz = (src1 - src0) MAD temp[23].w, src1.x, src0.1, -srcp.x 10: src0.xyz = temp[11], src1.xyz = input[2], src2.xyz = temp[12] MAD temp[13].xyz, src0.yyy, src1.xyz, src2.xyz 11: src0.w = temp[23], src1.xyz = const[0] MAD temp[24].x, src0.w__, src1.z__, src0.000 12: src0.xyz = temp[11], src1.xyz = input[4], src2.xyz = temp[13] MAD temp[14].xyz, src0.zzz, src1.xyz, src2.xyz 13: src0.xyz = temp[24] FRC temp[25].x, src0.x__ 14: src0.xyz = temp[25], src1.xyz = temp[24], src2.xyz = temp[14], srcp.xyz = (src1 - src0) DP3 temp[15].x, src2.xyz, src2.xyz MAD temp[27].w, src1.x, src0.1, -srcp.x 15: src0.xyz = temp[25], src1.xyz = temp[24], src2.xyz = temp[15], srcp.xyz = (src1 - src0) MAD temp[22].y, srcp._x_, src0.111, src0.000 RSQ temp[16].w, |src2.x| 16: src0.w = temp[27] MAD temp[28].z, src0.__w, src0.111, src0.000 17: src0.xyz = temp[14], src0.w = temp[16] MAD temp[17].xyz, src0.xyz, src0.www, src0.000 18: src0.xyz = temp[22], src0.w = const[0] MAD temp[28].xy, src0.xy_, src0.ww_, src0.000 19: src0.xyz = temp[17] MAD temp[18].xyz, src0.xyz, src0.HHH, src0.HHH 20: src0.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src0.111, src0.000 21: src0.xyz = temp[8], src0.w = temp[8] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 22: src0.xyz = temp[18], src0.w = temp[18] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 23: src0.xyz = temp[29], src0.w = temp[29] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[5], input[0].xy__, 2D[2]; 2: TEX temp[6].xyz, input[0].xy__, 2D[1]; 3: TEX temp[0].xy, input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 4: src0.xyz = input[1], src1.xyz = const[0], src2.xyz = temp[0] SEM_WAIT MAD temp[1].x, src0.x__, src1.z__, src0.0__ MAD temp[1].w, src2.x, src0.1, src0.0 5: src0.xyz = temp[6], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[0].w, src1.y, src0.1, src0.0 6: src0.xyz = temp[1] FRC temp[6].x, src0.x__ 7: src0.xyz = temp[0], src1.xyz = input[3] MAD temp[3].xyz, src0.xxx, src1.xyz, src0.000 8: src0.xyz = temp[6], src1.xyz = temp[1], srcp.xyz = (src1 - src0) MAD temp[7].x, srcp.x__, src0.11_, src0.00_ 9: src0.xyz = temp[6], src1.xyz = temp[1], srcp.xyz = (src1 - src0) MAD temp[2].w, src1.x, src0.1, -srcp.x 10: src0.xyz = temp[0], src1.xyz = input[2], src2.xyz = temp[3] MAD temp[1].xyz, src0.yyy, src1.xyz, src2.xyz 11: src0.w = temp[2], src1.xyz = const[0] MAD temp[2].x, src0.w__, src1.z__, src0.0__ 12: src0.xyz = temp[0], src1.xyz = input[4], src2.xyz = temp[1] MAD temp[0].xyz, src0.zzz, src1.xyz, src2.xyz 13: src0.xyz = temp[2] FRC temp[1].x, src0.x__ 14: src0.xyz = temp[1], src1.xyz = temp[2], src2.xyz = temp[0], srcp.xyz = (src1 - src0) DP3 temp[1].y, src2.xyz, src2.xyz MAD temp[2].w, src1.x, src0.1, -srcp.x 15: src0.xyz = temp[1], src1.xyz = temp[2], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD temp[7].y, srcp._x_, src0.11_, src0.00_ RSQ temp[3].w, |src2.y| 16: src0.w = temp[2] MAD temp[1].z, src0.__w, src0.111, src0.000 17: src0.xyz = temp[0], src0.w = temp[3] MAD temp[0].xyz, src0.xyz, src0.www, src0.000 18: src0.xyz = temp[7], src0.w = const[0] MAD temp[1].xy, src0.xy_, src0.ww_, src0.000 19: src0.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.HHH, src0.HHH 20: src0.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src0.111, src0.000 21: src0.xyz = temp[5], src0.w = temp[5] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 22: src0.xyz = temp[0], src0.w = temp[1] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 23: src0.xyz = temp[1], src0.w = temp[0] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 pc=26************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 19, tex_end: 2 (code_addr: 004404c0) TEX: TEX t5, t0, texture[2] (00009140) TEX t6, t0, texture[1] (00008980) TEX t0, t0, texture[0] (00008000) 0: xyz: t1 c0 t0 bias-> t1.x (00840801) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t1.xyz c0.zzz 0.0 op: 00050380 w: t0.x 1.0 0.0 op: 00040886 1: xyz: t6 t0 t0 bias-> t0.xyz (03800006) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t6.xyz 1.0 -0.5 op: 000d8a80 w: t0.y 1.0 0.0 op: 00040884 2: xyz: t1 t0 t0 bias-> t6.x (00980001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t1.xxx t1.xxx op: 04804080 w: t1.x t1.x t1.x op: 00000000 3: xyz: t0 t3 t0 bias-> t3.xyz (038c00c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t3.xyz 0.0 op: 00050201 w: t0.x t0.x t0.x op: 00000000 4: xyz: t6 t1 t0 sub-> t7.x (009c0046) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xyz 1.0 0.0 op: 00250a8f w: t6.x t6.x t6.x op: 00000000 5: xyz: t6 t1 t0 sub-> (00000046) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t6.xxx t6.xxx t6.xxx op: 00204081 w: t1.x 1.0 -srcp.x op: 000b0883 6: xyz: t0 t2 t3 bias-> t1.xyz (03843080) w: t0 t0 t0 bias-> (00000000) xyz: t0.yyy t2.xyz t3.xyz op: 00020202 w: t0.x t0.x t0.x op: 00000000 7: xyz: t0 c0 t0 bias-> t2.x (00880800) w: t2 t0 t0 bias-> (00000002) xyz: t2.www c0.zzz 0.0 op: 0005038c w: t0.x t0.x t0.x op: 00000000 8: xyz: t0 t4 t1 bias-> t0.xyz (03801100) w: t0 t0 t0 bias-> (00000000) xyz: t0.zzz t4.xyz t1.xyz op: 00020203 w: t0.x t0.x t0.x op: 00000000 9: xyz: t2 t0 t0 bias-> t1.x (00840002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t2.xxx t2.xxx op: 84804080 NOP w: t2.x t2.x t2.x op: 00000000 10: xyz: t1 t2 t0 sub-> t1.y (01040081) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t0.xyz t0.xyz t1.xxx op: 00a04408 w: t2.x 1.0 -srcp.x op: 000b0883 11: xyz: t1 t2 t1 sub-> t7.y (011c1081) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: srcp.xxx 1.0 0.0 op: 00250a90 w: |t1.y| t1.x t1.x op: 05800047 12: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t2 t0 t0 bias-> (00000002) xyz: t2.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 13: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t3 t0 t0 bias-> (00000003) xyz: t0.xyz t3.www 0.0 op: 00050600 w: t0.x t0.x t0.x op: 00000000 14: xyz: t7 t0 t0 bias-> t1.xy (01840007) w: c0 t0 t0 bias-> (00000020) xyz: t7.xyz c0.www 0.0 op: 00050600 w: t7.x t7.x t7.x op: 00000000 15: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 0.5 0.5 op: 00058b00 w: t0.x t0.x t0.x op: 00000000 16: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 17: xyz: t5 t0 t0 bias-> o0.xyz (1c000005) w: t5 t0 t0 bias-> o0.w (01000005) xyz: t5.xyz 1.0 0.0 op: 00050a80 w: t5.w 1.0 0.0 op: 00040889 18: xyz: t0 t0 t0 bias-> o1.xyz (3c000000) w: t1 t0 t0 bias-> o1.w (03000001) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t1.w 1.0 0.0 op: 00040889 19: xyz: t1 t0 t0 bias-> o2.xyz (5c000001) w: t0 t0 t0 bias-> o2.w (05000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], PERSPECTIVE DCL IN[1], GENERIC[12], PERSPECTIVE DCL IN[2], GENERIC[13], PERSPECTIVE DCL OUT[0], COLOR DCL OUT[1], COLOR[1] DCL OUT[2], COLOR[2] DCL SAMP[0] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL IMM[0] FLT32 { 0.5000, 255.0000, 0.0039, 0.0000} 0: TEX TEMP[0], IN[0].xyyy, SAMP[0], 2D 1: DP3 TEMP[1].x, IN[2].xyzz, IN[2].xyzz 2: RSQ TEMP[2].x, TEMP[1].xxxx 3: MUL TEMP[3].xyz, IN[2].xyzz, TEMP[2].xxxx 4: MAD TEMP[1].xyz, TEMP[3].xyzz, IMM[0].xxxx, IMM[0].xxxx 5: MUL TEMP[3].x, IN[1].xxxx, IMM[0].yyyy 6: FLR TEMP[4].x, TEMP[3].xxxx 7: MOV TEMP[5].x, TEMP[4].xxxx 8: ADD TEMP[3].x, TEMP[3].xxxx, -TEMP[4].xxxx 9: MUL TEMP[3].x, TEMP[3].xxxx, IMM[0].yyyy 10: FLR TEMP[4].x, TEMP[3].xxxx 11: MOV TEMP[5].y, TEMP[4].xxxx 12: ADD TEMP[3].x, TEMP[3].xxxx, -TEMP[4].xxxx 13: MOV TEMP[5].z, TEMP[3].xxxx 14: MUL TEMP[5].xy, TEMP[5].xyyy, IMM[0].zzzz 15: MOV TEMP[2].xyz, TEMP[5].xyzx 16: MOV TEMP[1].w, IMM[0].wwww 17: MOV TEMP[2].w, IMM[0].wwww 18: MOV OUT[0], TEMP[0] 19: MOV OUT[1], TEMP[1] 20: MOV OUT[2], TEMP[2] 21: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: MOV temp[1].w, const[0].wwww; 17: MOV temp[2].w, const[0].wwww; 18: MOV output[0], temp[0]; 19: MOV output[1], temp[1]; 20: MOV output[2], temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: MOV temp[1].w, const[0].wwww; 17: MOV temp[2].w, const[0].wwww; 18: MOV output[0], temp[0]; 19: MOV output[1], temp[1]; 20: MOV output[2], temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: MOV temp[1].w, const[0].wwww; 17: MOV temp[2].w, const[0].wwww; 18: MOV output[0], temp[0]; 19: MOV output[1], temp[1]; 20: MOV output[2], temp[2]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: MOV temp[1].w, const[0].wwww; 17: MOV temp[2].w, const[0].wwww; 18: MOV output[0], temp[0]; 19: MOV output[1], temp[1]; 20: MOV output[2], temp[2]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: MOV temp[1].w, const[0].wwww; 17: MOV temp[2].w, const[0].wwww; 18: MOV output[0], temp[0]; 19: MOV output[1], temp[1]; 20: MOV output[2], temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: MOV temp[1].w, const[0].wwww; 17: MOV temp[2].w, const[0].wwww; 18: MOV output[0], temp[0]; 19: MOV output[1], temp[1]; 20: MOV output[2], temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, |temp[1].xxxx|; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FRC temp[4].x, temp[3].xxxx; 7: ADD temp[4].x, temp[3].xxxx, -temp[4]; 8: MOV temp[5].x, temp[4].xxxx; 9: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 10: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 11: FRC temp[4].x, temp[3].xxxx; 12: ADD temp[4].x, temp[3].xxxx, -temp[4]; 13: MOV temp[5].y, temp[4].xxxx; 14: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 15: MOV temp[5].z, temp[3].xxxx; 16: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 17: MOV temp[2].xyz, temp[5].xyzx; 18: MOV temp[1].w, const[0].wwww; 19: MOV temp[2].w, const[0].wwww; 20: MOV output[0], temp[0]; 21: MOV output[1], temp[1]; 22: MOV output[2], temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: DP3 temp[1].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[2].x, |temp[1].x___|; 3: MUL temp[3].xyz, input[2].xyz_, temp[2].xxx_; 4: MAD temp[1].xyz, temp[3].xyz_, const[0].xxx_, const[0].xxx_; 5: MUL temp[3].x, input[1].x___, const[0].y___; 6: FRC temp[4].x, temp[3].x___; 7: ADD temp[4].x, temp[3].x___, -temp[4].x___; 8: MOV temp[5].x, temp[4].x___; 9: ADD temp[3].x, temp[3].x___, -temp[4].x___; 10: MUL temp[3].x, temp[3].x___, const[0].y___; 11: FRC temp[4].x, temp[3].x___; 12: ADD temp[4].x, temp[3].x___, -temp[4].x___; 13: MOV temp[5].y, temp[4]._x__; 14: ADD temp[3].x, temp[3].x___, -temp[4].x___; 15: MOV temp[5].z, temp[3].__x_; 16: MUL temp[5].xy, temp[5].xy__, const[0].zz__; 17: MOV temp[2].xyz, temp[5].xyz_; 18: MOV temp[1].w, const[0].___w; 19: MOV temp[2].w, const[0].___w; 20: MOV output[0], temp[0]; 21: MOV output[1], temp[1]; 22: MOV output[2], temp[2]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: DP3 temp[1].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[2].x, |temp[1].x___|; 3: MUL temp[3].xyz, input[2].xyz_, temp[2].xxx_; 4: MAD temp[1].xyz, temp[3].xyz_, const[0].xxx_, const[0].xxx_; 5: MUL temp[3].x, input[1].x___, const[0].y___; 6: FRC temp[4].x, temp[3].x___; 7: ADD temp[4].x, temp[3].x___, -temp[4].x___; 8: MOV temp[5].x, temp[4].x___; 9: ADD temp[3].x, temp[3].x___, -temp[4].x___; 10: MUL temp[3].x, temp[3].x___, const[0].y___; 11: FRC temp[4].x, temp[3].x___; 12: ADD temp[4].x, temp[3].x___, -temp[4].x___; 13: MOV temp[5].y, temp[4]._x__; 14: ADD temp[3].x, temp[3].x___, -temp[4].x___; 15: MOV temp[5].z, temp[3].__x_; 16: MUL temp[5].xy, temp[5].xy__, const[0].zz__; 17: MOV temp[2].xyz, temp[5].xyz_; 18: MOV temp[1].w, const[0].___w; 19: MOV temp[2].w, const[0].___w; 20: MOV output[0], temp[0]; 21: MOV output[1], temp[1]; 22: MOV output[2], temp[2]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[6], input[0].xy__, 2D[0]; 1: DP3 temp[7].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[8].x, |temp[7].x___|; 3: MUL temp[9].xyz, input[2].xyz_, temp[8].xxx_; 4: MAD temp[10].xyz, temp[9].xyz_, const[0].xxx_, const[0].xxx_; 5: MUL temp[11].x, input[1].x___, const[0].y___; 6: FRC temp[12].x, temp[11].x___; 7: ADD temp[13].x, temp[11].x___, -temp[12].x___; 8: MOV temp[14].x, temp[13].x___; 9: ADD temp[15].x, temp[11].x___, -temp[13].x___; 10: MUL temp[16].x, temp[15].x___, const[0].y___; 11: FRC temp[17].x, temp[16].x___; 12: ADD temp[18].x, temp[16].x___, -temp[17].x___; 13: MOV temp[14].y, temp[18]._x__; 14: ADD temp[19].x, temp[16].x___, -temp[18].x___; 15: MOV temp[20].z, temp[19].__x_; 16: MUL temp[20].xy, temp[14].xy__, const[0].zz__; 17: MOV temp[21].xyz, temp[20].xyz_; 18: MOV temp[10].w, const[0].___w; 19: MOV temp[21].w, const[0].___w; 20: MOV output[0], temp[6]; 21: MOV output[1], temp[10]; 22: MOV output[2], temp[21]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[6], input[0].xy__, 2D[0]; 1: DP3 temp[7].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[8].x, |temp[7].x___|; 3: MUL temp[9].xyz, input[2].xyz_, temp[8].xxx_; 4: MAD temp[10].xyz, temp[9].xyz_, none.HHH_, none.HHH_; 5: MUL temp[11].x, input[1].x___, const[0].y___; 6: FRC temp[12].x, temp[11].x___; 7: MOV temp[14].x, (temp[11] - temp[12]).x___; 8: ADD temp[15].x, temp[11].x___, -(temp[11] - temp[12]).x___; 9: MUL temp[16].x, temp[15].x___, const[0].y___; 10: FRC temp[17].x, temp[16].x___; 11: MOV temp[14].y, (temp[16] - temp[17])._x__; 12: ADD temp[19].x, temp[16].x___, -(temp[16] - temp[17]).x___; 13: MOV temp[20].z, temp[19].__x_; 14: MUL temp[20].xy, temp[14].xy__, const[0].zz__; 15: MOV temp[21].xyz, temp[20].xyz_; 16: MOV temp[10].w, none.___0; 17: MOV temp[21].w, none.___0; 18: MOV output[0], temp[6]; 19: MOV output[1], temp[10]; 20: MOV output[2], temp[21]; CONST[0] = { 0.5000 255.0000 0.0039 0.0000 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[6], input[0].xy__, 2D[0]; 1: DP3 temp[7].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[8].x, |temp[7].x___|; 3: MUL temp[9].xyz, input[2].xyz_, temp[8].xxx_; 4: MAD temp[10].xyz, temp[9].xyz_, none.HHH_, none.HHH_; 5: MUL temp[11].x, input[1].x___, const[0].y___; 6: FRC temp[12].x, temp[11].x___; 7: MOV temp[14].x, (temp[11] - temp[12]).x___; 8: ADD temp[15].x, temp[11].x___, -(temp[11] - temp[12]).x___; 9: MUL temp[16].x, temp[15].x___, const[0].y___; 10: FRC temp[17].x, temp[16].x___; 11: MOV temp[14].y, (temp[16] - temp[17])._x__; 12: ADD temp[19].x, temp[16].x___, -(temp[16] - temp[17]).x___; 13: MOV temp[20].z, temp[19].__x_; 14: MUL temp[20].xy, temp[14].xy__, const[0].zz__; 15: MOV temp[21].xyz, temp[20].xyz_; 16: MOV temp[10].w, none.___0; 17: MOV temp[21].w, none.___0; 18: MOV output[0], temp[6]; 19: MOV output[1], temp[10]; 20: MOV output[2], temp[21]; CONST[0] = { 0.5000 255.0000 0.0039 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[6], input[0].xy__, 2D[0]; 1: DP3 temp[7].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[8].x, |temp[7].x___|; 3: MUL temp[9].xyz, input[2].xyz_, temp[8].xxx_; 4: MAD temp[10].xyz, temp[9].xyz_, none.HHH_, none.HHH_; 5: MUL temp[11].x, input[1].x___, const[0].y___; 6: FRC temp[12].x, temp[11].x___; 7: MOV temp[14].x, (temp[11] - temp[12]).x___; 8: ADD temp[15].x, temp[11].x___, -(temp[11] - temp[12]).x___; 9: MUL temp[16].x, temp[15].x___, const[0].y___; 10: FRC temp[17].x, temp[16].x___; 11: MOV temp[14].y, (temp[16] - temp[17])._x__; 12: ADD temp[19].x, temp[16].x___, -(temp[16] - temp[17]).x___; 13: MOV temp[20].z, temp[19].__x_; 14: MUL temp[20].xy, temp[14].xy__, const[0].zz__; 15: MOV temp[21].xyz, temp[20].xyz_; 16: MOV temp[10].w, none.___0; 17: MOV temp[21].w, none.___0; 18: MOV output[0], temp[6]; 19: MOV output[1], temp[10]; 20: MOV output[2], temp[21]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[6], input[0].xy__, 2D[0]; 1: src0.xyz = input[2] DP3 temp[7].x, src0.xyz, src0.xyz 2: src0.xyz = temp[7] REPL_ALPHA temp[8].x RSQ, |src0.x| 3: src0.xyz = input[2], src1.xyz = temp[8] MAD temp[9].xyz, src0.xyz, src1.xxx, src0.000 4: src0.xyz = temp[9] MAD temp[10].xyz, src0.xyz, src0.HHH, src0.HHH 5: src0.xyz = input[1], src1.xyz = const[0] MAD temp[11].x, src0.x__, src1.y__, src0.000 6: src0.xyz = temp[11] FRC temp[12].x, src0.x__ 7: src0.xyz = temp[12], src1.xyz = temp[11], srcp.xyz = (src1 - src0) MAD temp[14].x, srcp.x__, src0.111, src0.000 8: src0.xyz = temp[12], src1.xyz = temp[11], srcp.xyz = (src1 - src0) MAD temp[15].x, src1.x__, src0.111, -srcp.x__ 9: src0.xyz = temp[15], src1.xyz = const[0] MAD temp[16].x, src0.x__, src1.y__, src0.000 10: src0.xyz = temp[16] FRC temp[17].x, src0.x__ 11: src0.xyz = temp[17], src1.xyz = temp[16], srcp.xyz = (src1 - src0) MAD temp[14].y, srcp._x_, src0.111, src0.000 12: src0.xyz = temp[17], src1.xyz = temp[16], srcp.xyz = (src1 - src0) MAD temp[19].x, src1.x__, src0.111, -srcp.x__ 13: src0.xyz = temp[19] MAD temp[20].z, src0.__x, src0.111, src0.000 14: src0.xyz = temp[14], src1.xyz = const[0] MAD temp[20].xy, src0.xy_, src1.zz_, src0.000 15: src0.xyz = temp[20] MAD temp[21].xyz, src0.xyz, src0.111, src0.000 16: MAD temp[10].w, src0.0, src0.1, src0.0 17: MAD temp[21].w, src0.0, src0.1, src0.0 18: src0.xyz = temp[6], src0.w = temp[6] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 19: src0.xyz = temp[10], src0.w = temp[10] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 20: src0.xyz = temp[21], src0.w = temp[21] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[6], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = input[1], src1.xyz = const[0] MAD temp[11].x, src0.x__, src1.y__, src0.000 MAD temp[21].w, src0.0, src0.1, src0.0 3: src0.xyz = input[2] DP3 temp[7].x, src0.xyz, src0.xyz MAD temp[10].w, src0.0, src0.1, src0.0 4: src0.xyz = temp[11], src1.xyz = temp[7] FRC temp[12].x, src0.x__ RSQ temp[8].w, |src1.x| 5: src0.xyz = temp[12], src1.xyz = temp[11], srcp.xyz = (src1 - src0) MAD temp[14].x, srcp.x__, src0.111, src0.000 6: src0.xyz = input[2], src0.w = temp[8], src1.xyz = temp[8] MAD temp[9].xyz, src0.xyz, src0.www, src0.000 7: src0.xyz = temp[12], src1.xyz = temp[11], src2.xyz = temp[9], srcp.xyz = (src1 - src0) MAD temp[10].xyz, src2.xyz, src0.HHH, src0.HHH MAD temp[15].w, src1.x, src0.1, -srcp.x 8: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = const[0] MAD temp[16].x, src0.w__, src1.y__, src0.000 9: src0.xyz = temp[16] FRC temp[17].x, src0.x__ 10: src0.xyz = temp[17], src1.xyz = temp[16], srcp.xyz = (src1 - src0) MAD temp[14].y, srcp._x_, src0.111, src0.000 11: src0.xyz = temp[17], src1.xyz = temp[16], srcp.xyz = (src1 - src0) MAD temp[19].w, src1.x, src0.1, -srcp.x 12: src0.xyz = temp[14], src1.xyz = const[0] MAD temp[20].xy, src0.xy_, src1.zz_, src0.000 13: src0.xyz = temp[19], src0.w = temp[19] MAD temp[20].z, src0.__w, src0.111, src0.000 14: src0.xyz = temp[20] MAD temp[21].xyz, src0.xyz, src0.111, src0.000 15: src0.xyz = temp[6], src0.w = temp[6] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 16: src0.xyz = temp[10], src0.w = temp[10] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 17: src0.xyz = temp[21], src0.w = temp[21] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[6], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = input[1], src1.xyz = const[0] MAD temp[11].x, src0.x__, src1.y__, src0.000 MAD temp[21].w, src0.0, src0.1, src0.0 3: src0.xyz = input[2] DP3 temp[7].x, src0.xyz, src0.xyz MAD temp[10].w, src0.0, src0.1, src0.0 4: src0.xyz = temp[11], src1.xyz = temp[7] FRC temp[12].x, src0.x__ RSQ temp[8].w, |src1.x| 5: src0.xyz = temp[12], src1.xyz = temp[11], srcp.xyz = (src1 - src0) MAD temp[14].x, srcp.x__, src0.111, src0.000 6: src0.xyz = input[2], src0.w = temp[8] MAD temp[9].xyz, src0.xyz, src0.www, src0.000 7: src0.xyz = temp[12], src1.xyz = temp[11], src2.xyz = temp[9], srcp.xyz = (src1 - src0) MAD temp[10].xyz, src2.xyz, src0.HHH, src0.HHH MAD temp[15].w, src1.x, src0.1, -srcp.x 8: src0.w = temp[15], src1.xyz = const[0] MAD temp[16].x, src0.w__, src1.y__, src0.000 9: src0.xyz = temp[16] FRC temp[17].x, src0.x__ 10: src0.xyz = temp[17], src1.xyz = temp[16], srcp.xyz = (src1 - src0) MAD temp[14].y, srcp._x_, src0.111, src0.000 11: src0.xyz = temp[17], src1.xyz = temp[16], srcp.xyz = (src1 - src0) MAD temp[19].w, src1.x, src0.1, -srcp.x 12: src0.xyz = temp[14], src1.xyz = const[0] MAD temp[20].xy, src0.xy_, src1.zz_, src0.000 13: src0.w = temp[19] MAD temp[20].z, src0.__w, src0.111, src0.000 14: src0.xyz = temp[20] MAD temp[21].xyz, src0.xyz, src0.111, src0.000 15: src0.xyz = temp[6], src0.w = temp[6] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 16: src0.xyz = temp[10], src0.w = temp[10] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 17: src0.xyz = temp[21], src0.w = temp[21] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = input[1], src1.xyz = const[0] MAD temp[1].x, src0.x__, src1.y__, src0.0__ MAD temp[1].w, src0.0, src0.1, src0.0 3: src0.xyz = input[2] DP3 temp[1].y, src0.xyz, src0.xyz MAD temp[2].w, src0.0, src0.1, src0.0 4: src0.xyz = temp[1], src1.xyz = temp[1] FRC temp[3].x, src0.x__ RSQ temp[3].w, |src1.y| 5: src0.xyz = temp[3], src1.xyz = temp[1], srcp.xyz = (src1 - src0) MAD temp[4].x, srcp.x__, src0.11_, src0.00_ 6: src0.xyz = input[2], src0.w = temp[3] MAD temp[2].xyz, src0.xyz, src0.www, src0.000 7: src0.xyz = temp[3], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD temp[1].xyz, src2.xyz, src0.HHH, src0.HHH MAD temp[3].w, src1.x, src0.1, -srcp.x 8: src0.w = temp[3], src1.xyz = const[0] MAD temp[2].x, src0.w__, src1.y__, src0.0__ 9: src0.xyz = temp[2] FRC temp[3].x, src0.x__ 10: src0.xyz = temp[3], src1.xyz = temp[2], srcp.xyz = (src1 - src0) MAD temp[4].y, srcp._x_, src0.11_, src0.00_ 11: src0.xyz = temp[3], src1.xyz = temp[2], srcp.xyz = (src1 - src0) MAD temp[3].w, src1.x, src0.1, -srcp.x 12: src0.xyz = temp[4], src1.xyz = const[0] MAD temp[2].xy, src0.xy_, src1.zz_, src0.000 13: src0.w = temp[3] MAD temp[2].z, src0.__w, src0.111, src0.000 14: src0.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src0.111, src0.000 15: src0.xyz = temp[0], src0.w = temp[0] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 16: src0.xyz = temp[1], src0.w = temp[2] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 17: src0.xyz = temp[2], src0.w = temp[1] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 pc=27************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 15, tex_end: 0 (code_addr: 004003c0) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t1 c0 t0 bias-> t1.x (00840801) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t1.xyz c0.yyy 0.0 op: 00050300 w: 0.0 1.0 0.0 op: 00040890 1: xyz: t2 t0 t0 bias-> t1.y (01040002) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: 0.0 1.0 0.0 op: 00040890 2: xyz: t1 t1 t0 bias-> t3.x (008c0041) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: t1.xyz t1.xxx t1.xxx op: 84804080 NOP w: |t1.y| t1.x t1.x op: 05800044 3: xyz: t3 t1 t0 sub-> t4.x (00900043) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xyz 1.0 0.0 op: 00250a8f w: t3.x t3.x t3.x op: 00000000 4: xyz: t2 t0 t0 bias-> t2.xyz (03880002) w: t3 t0 t0 bias-> (00000003) xyz: t2.xyz t3.www 0.0 op: 00050600 w: t2.x t2.x t2.x op: 00000000 5: xyz: t3 t1 t2 sub-> t1.xyz (03842043) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: t2.xyz 0.5 0.5 op: 00258b08 w: t1.x 1.0 -srcp.x op: 000b0883 6: xyz: t0 c0 t0 bias-> t2.x (00880800) w: t3 t0 t0 bias-> (00000003) xyz: t3.www c0.yyy 0.0 op: 0005030c w: t0.x t0.x t0.x op: 00000000 7: xyz: t2 t0 t0 bias-> t3.x (008c0002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t2.xxx t2.xxx op: 84804080 NOP w: t2.x t2.x t2.x op: 00000000 8: xyz: t3 t2 t0 sub-> t4.y (01100083) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xxx 1.0 0.0 op: 00250a90 w: t3.x t3.x t3.x op: 00000000 9: xyz: t3 t2 t0 sub-> (00000083) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: t3.xxx t3.xxx t3.xxx op: 00204081 w: t2.x 1.0 -srcp.x op: 000b0883 10: xyz: t4 c0 t0 bias-> t2.xy (01880804) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz c0.zzz 0.0 op: 00050380 w: t4.x t4.x t4.x op: 00000000 11: xyz: t0 t0 t0 bias-> t2.z (02080000) w: t3 t0 t0 bias-> (00000003) xyz: t3.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 12: xyz: t2 t0 t0 bias-> t2.xyz (03880002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz 1.0 0.0 op: 00050a80 w: t2.x t2.x t2.x op: 00000000 13: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 14: xyz: t1 t0 t0 bias-> o1.xyz (3c000001) w: t2 t0 t0 bias-> o1.w (03000002) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t2.w 1.0 0.0 op: 00040889 15: xyz: t2 t0 t0 bias-> o2.xyz (5c000002) w: t1 t0 t0 bias-> o2.w (05000001) xyz: t2.xyz 1.0 0.0 op: 00050a80 w: t1.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], PERSPECTIVE DCL IN[1], GENERIC[12], PERSPECTIVE DCL IN[2], GENERIC[13], PERSPECTIVE DCL IN[3], GENERIC[14], PERSPECTIVE DCL IN[4], GENERIC[15], PERSPECTIVE DCL OUT[0], COLOR DCL OUT[1], COLOR[1] DCL OUT[2], COLOR[2] DCL SAMP[0] DCL SAMP[1] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL IMM[0] FLT32 { -0.5000, 0.5000, 255.0000, 0.0039} IMM[1] FLT32 { 0.0000, 0.0000, 0.0000, 0.0000} 0: TEX TEMP[0], IN[0].xyyy, SAMP[1], 2D 1: TEX TEMP[1].xyz, IN[0].xyyy, SAMP[0], 2D 2: ADD TEMP[2].xyz, TEMP[1].xyzz, IMM[0].xxxx 3: MUL TEMP[3].xyz, TEMP[2].xxxx, IN[3].xyzz 4: MAD TEMP[3].xyz, TEMP[2].yyyy, IN[2].xyzz, TEMP[3].xyzz 5: MAD TEMP[3].xyz, TEMP[2].zzzz, IN[4].xyzz, TEMP[3].xyzz 6: DP3 TEMP[4].x, TEMP[3].xyzz, TEMP[3].xyzz 7: RSQ TEMP[4].x, TEMP[4].xxxx 8: MUL TEMP[3].xyz, TEMP[3].xyzz, TEMP[4].xxxx 9: MAD TEMP[1].xyz, TEMP[3].xyzz, IMM[0].yyyy, IMM[0].yyyy 10: MUL TEMP[3].x, IN[1].xxxx, IMM[0].zzzz 11: FLR TEMP[4].x, TEMP[3].xxxx 12: MOV TEMP[5].x, TEMP[4].xxxx 13: ADD TEMP[3].x, TEMP[3].xxxx, -TEMP[4].xxxx 14: MUL TEMP[3].x, TEMP[3].xxxx, IMM[0].zzzz 15: FLR TEMP[4].x, TEMP[3].xxxx 16: MOV TEMP[5].y, TEMP[4].xxxx 17: ADD TEMP[3].x, TEMP[3].xxxx, -TEMP[4].xxxx 18: MOV TEMP[5].z, TEMP[3].xxxx 19: MUL TEMP[5].xy, TEMP[5].xyyy, IMM[0].wwww 20: MOV TEMP[2].xyz, TEMP[5].xyzx 21: MOV TEMP[1].w, IMM[1].xxxx 22: MOV TEMP[2].w, IMM[1].xxxx 23: MOV OUT[0], TEMP[0] 24: MOV OUT[1], TEMP[1] 25: MOV OUT[2], TEMP[2] 26: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[1]; 1: TEX temp[1].xyz, input[0].xyyy, 2D[0]; 2: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 3: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 4: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 5: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 6: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 7: RSQ temp[4].x, temp[4].xxxx; 8: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 9: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 10: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 11: FLR temp[4].x, temp[3].xxxx; 12: MOV temp[5].x, temp[4].xxxx; 13: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 14: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 15: FLR temp[4].x, temp[3].xxxx; 16: MOV temp[5].y, temp[4].xxxx; 17: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 18: MOV temp[5].z, temp[3].xxxx; 19: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 20: MOV temp[2].xyz, temp[5].xyzx; 21: MOV temp[1].w, temp[0].0000; 22: MOV temp[2].w, temp[0].0000; 23: MOV output[0], temp[0]; 24: MOV output[1], temp[1]; 25: MOV output[2], temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[1]; 1: TEX temp[1].xyz, input[0].xyyy, 2D[0]; 2: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 3: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 4: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 5: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 6: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 7: RSQ temp[4].x, temp[4].xxxx; 8: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 9: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 10: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 11: FLR temp[4].x, temp[3].xxxx; 12: MOV temp[5].x, temp[4].xxxx; 13: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 14: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 15: FLR temp[4].x, temp[3].xxxx; 16: MOV temp[5].y, temp[4].xxxx; 17: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 18: MOV temp[5].z, temp[3].xxxx; 19: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 20: MOV temp[2].xyz, temp[5].xyzx; 21: MOV temp[1].w, temp[0].0000; 22: MOV temp[2].w, temp[0].0000; 23: MOV output[0], temp[0]; 24: MOV output[1], temp[1]; 25: MOV output[2], temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[1]; 1: TEX temp[1].xyz, input[0].xyyy, 2D[0]; 2: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 3: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 4: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 5: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 6: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 7: RSQ temp[4].x, temp[4].xxxx; 8: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 9: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 10: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 11: FLR temp[4].x, temp[3].xxxx; 12: MOV temp[5].x, temp[4].xxxx; 13: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 14: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 15: FLR temp[4].x, temp[3].xxxx; 16: MOV temp[5].y, temp[4].xxxx; 17: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 18: MOV temp[5].z, temp[3].xxxx; 19: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 20: MOV temp[2].xyz, temp[5].xyzx; 21: MOV temp[1].w, temp[0].0000; 22: MOV temp[2].w, temp[0].0000; 23: MOV output[0], temp[0]; 24: MOV output[1], temp[1]; 25: MOV output[2], temp[2]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[1]; 1: TEX temp[1].xyz, input[0].xyyy, 2D[0]; 2: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 3: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 4: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 5: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 6: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 7: RSQ temp[4].x, temp[4].xxxx; 8: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 9: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 10: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 11: FLR temp[4].x, temp[3].xxxx; 12: MOV temp[5].x, temp[4].xxxx; 13: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 14: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 15: FLR temp[4].x, temp[3].xxxx; 16: MOV temp[5].y, temp[4].xxxx; 17: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 18: MOV temp[5].z, temp[3].xxxx; 19: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 20: MOV temp[2].xyz, temp[5].xyzx; 21: MOV temp[1].w, temp[0].0000; 22: MOV temp[2].w, temp[0].0000; 23: MOV output[0], temp[0]; 24: MOV output[1], temp[1]; 25: MOV output[2], temp[2]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[1]; 1: TEX temp[1].xyz, input[0].xyyy, 2D[0]; 2: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 3: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 4: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 5: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 6: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 7: RSQ temp[4].x, temp[4].xxxx; 8: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 9: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 10: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 11: FLR temp[4].x, temp[3].xxxx; 12: MOV temp[5].x, temp[4].xxxx; 13: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 14: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 15: FLR temp[4].x, temp[3].xxxx; 16: MOV temp[5].y, temp[4].xxxx; 17: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 18: MOV temp[5].z, temp[3].xxxx; 19: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 20: MOV temp[2].xyz, temp[5].xyzx; 21: MOV temp[1].w, temp[0].0000; 22: MOV temp[2].w, temp[0].0000; 23: MOV output[0], temp[0]; 24: MOV output[1], temp[1]; 25: MOV output[2], temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[1]; 1: TEX temp[6], input[0].xyyy, 2D[0]; 2: MOV temp[1].xyz, temp[6]; 3: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 4: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 5: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 6: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 7: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 10: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 11: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 12: FLR temp[4].x, temp[3].xxxx; 13: MOV temp[5].x, temp[4].xxxx; 14: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 15: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 16: FLR temp[4].x, temp[3].xxxx; 17: MOV temp[5].y, temp[4].xxxx; 18: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 19: MOV temp[5].z, temp[3].xxxx; 20: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 21: MOV temp[2].xyz, temp[5].xyzx; 22: MOV temp[1].w, temp[0].0000; 23: MOV temp[2].w, temp[0].0000; 24: MOV output[0], temp[0]; 25: MOV output[1], temp[1]; 26: MOV output[2], temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[1]; 1: TEX temp[6], input[0].xyyy, 2D[0]; 2: MOV temp[1].xyz, temp[6]; 3: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 4: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 5: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 6: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 7: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 8: RSQ temp[4].x, |temp[4].xxxx|; 9: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 10: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 11: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 12: FRC temp[4].x, temp[3].xxxx; 13: ADD temp[4].x, temp[3].xxxx, -temp[4]; 14: MOV temp[5].x, temp[4].xxxx; 15: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 16: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 17: FRC temp[4].x, temp[3].xxxx; 18: ADD temp[4].x, temp[3].xxxx, -temp[4]; 19: MOV temp[5].y, temp[4].xxxx; 20: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 21: MOV temp[5].z, temp[3].xxxx; 22: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 23: MOV temp[2].xyz, temp[5].xyzx; 24: MOV temp[1].w, temp[0].0000; 25: MOV temp[2].w, temp[0].0000; 26: MOV output[0], temp[0]; 27: MOV output[1], temp[1]; 28: MOV output[2], temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[1]; 1: TEX temp[6].xyz, input[0].xy__, 2D[0]; 2: MOV temp[1].xyz, temp[6].xyz_; 3: ADD temp[2].xyz, temp[1].xyz_, const[0].xxx_; 4: MUL temp[3].xyz, temp[2].xxx_, input[3].xyz_; 5: MAD temp[3].xyz, temp[2].yyy_, input[2].xyz_, temp[3].xyz_; 6: MAD temp[3].xyz, temp[2].zzz_, input[4].xyz_, temp[3].xyz_; 7: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[3].xyz, temp[3].xyz_, temp[4].xxx_; 10: MAD temp[1].xyz, temp[3].xyz_, const[0].yyy_, const[0].yyy_; 11: MUL temp[3].x, input[1].x___, const[0].z___; 12: FRC temp[4].x, temp[3].x___; 13: ADD temp[4].x, temp[3].x___, -temp[4].x___; 14: MOV temp[5].x, temp[4].x___; 15: ADD temp[3].x, temp[3].x___, -temp[4].x___; 16: MUL temp[3].x, temp[3].x___, const[0].z___; 17: FRC temp[4].x, temp[3].x___; 18: ADD temp[4].x, temp[3].x___, -temp[4].x___; 19: MOV temp[5].y, temp[4]._x__; 20: ADD temp[3].x, temp[3].x___, -temp[4].x___; 21: MOV temp[5].z, temp[3].__x_; 22: MUL temp[5].xy, temp[5].xy__, const[0].ww__; 23: MOV temp[2].xyz, temp[5].xyz_; 24: MOV temp[1].w, temp[0].___0; 25: MOV temp[2].w, temp[0].___0; 26: MOV output[0], temp[0]; 27: MOV output[1], temp[1]; 28: MOV output[2], temp[2]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[1]; 1: TEX temp[6].xyz, input[0].xy__, 2D[0]; 2: MOV temp[1].xyz, temp[6].xyz_; 3: ADD temp[2].xyz, temp[1].xyz_, const[0].xxx_; 4: MUL temp[3].xyz, temp[2].xxx_, input[3].xyz_; 5: MAD temp[3].xyz, temp[2].yyy_, input[2].xyz_, temp[3].xyz_; 6: MAD temp[3].xyz, temp[2].zzz_, input[4].xyz_, temp[3].xyz_; 7: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[3].xyz, temp[3].xyz_, temp[4].xxx_; 10: MAD temp[1].xyz, temp[3].xyz_, const[0].yyy_, const[0].yyy_; 11: MUL temp[3].x, input[1].x___, const[0].z___; 12: FRC temp[4].x, temp[3].x___; 13: ADD temp[4].x, temp[3].x___, -temp[4].x___; 14: MOV temp[5].x, temp[4].x___; 15: ADD temp[3].x, temp[3].x___, -temp[4].x___; 16: MUL temp[3].x, temp[3].x___, const[0].z___; 17: FRC temp[4].x, temp[3].x___; 18: ADD temp[4].x, temp[3].x___, -temp[4].x___; 19: MOV temp[5].y, temp[4]._x__; 20: ADD temp[3].x, temp[3].x___, -temp[4].x___; 21: MOV temp[5].z, temp[3].__x_; 22: MUL temp[5].xy, temp[5].xy__, const[0].ww__; 23: MOV temp[2].xyz, temp[5].xyz_; 24: MOV temp[1].w, temp[0].___0; 25: MOV temp[2].w, temp[0].___0; 26: MOV output[0], temp[0]; 27: MOV output[1], temp[1]; 28: MOV output[2], temp[2]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[7], input[0].xy__, 2D[1]; 1: TEX temp[8].xyz, input[0].xy__, 2D[0]; 2: MOV temp[9].xyz, temp[8].xyz_; 3: ADD temp[10].xyz, temp[9].xyz_, const[0].xxx_; 4: MUL temp[11].xyz, temp[10].xxx_, input[3].xyz_; 5: MAD temp[12].xyz, temp[10].yyy_, input[2].xyz_, temp[11].xyz_; 6: MAD temp[13].xyz, temp[10].zzz_, input[4].xyz_, temp[12].xyz_; 7: DP3 temp[14].x, temp[13].xyz_, temp[13].xyz_; 8: RSQ temp[15].x, |temp[14].x___|; 9: MUL temp[16].xyz, temp[13].xyz_, temp[15].xxx_; 10: MAD temp[17].xyz, temp[16].xyz_, const[0].yyy_, const[0].yyy_; 11: MUL temp[18].x, input[1].x___, const[0].z___; 12: FRC temp[19].x, temp[18].x___; 13: ADD temp[20].x, temp[18].x___, -temp[19].x___; 14: MOV temp[21].x, temp[20].x___; 15: ADD temp[22].x, temp[18].x___, -temp[20].x___; 16: MUL temp[23].x, temp[22].x___, const[0].z___; 17: FRC temp[24].x, temp[23].x___; 18: ADD temp[25].x, temp[23].x___, -temp[24].x___; 19: MOV temp[21].y, temp[25]._x__; 20: ADD temp[26].x, temp[23].x___, -temp[25].x___; 21: MOV temp[27].z, temp[26].__x_; 22: MUL temp[27].xy, temp[21].xy__, const[0].ww__; 23: MOV temp[28].xyz, temp[27].xyz_; 24: MOV temp[17].w, temp[0].___0; 25: MOV temp[28].w, temp[0].___0; 26: MOV output[0], temp[7]; 27: MOV output[1], temp[17]; 28: MOV output[2], temp[28]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[7], input[0].xy__, 2D[1]; 1: TEX temp[8].xyz, input[0].xy__, 2D[0]; 2: ADD temp[10].xyz, temp[8].xyz_, none.-H-H-H_; 3: MUL temp[11].xyz, temp[10].xxx_, input[3].xyz_; 4: MAD temp[12].xyz, temp[10].yyy_, input[2].xyz_, temp[11].xyz_; 5: MAD temp[13].xyz, temp[10].zzz_, input[4].xyz_, temp[12].xyz_; 6: DP3 temp[14].x, temp[13].xyz_, temp[13].xyz_; 7: RSQ temp[15].x, |temp[14].x___|; 8: MUL temp[16].xyz, temp[13].xyz_, temp[15].xxx_; 9: MAD temp[17].xyz, temp[16].xyz_, none.HHH_, none.HHH_; 10: MUL temp[18].x, input[1].x___, const[0].z___; 11: FRC temp[19].x, temp[18].x___; 12: MOV temp[21].x, (temp[18] - temp[19]).x___; 13: ADD temp[22].x, temp[18].x___, -(temp[18] - temp[19]).x___; 14: MUL temp[23].x, temp[22].x___, const[0].z___; 15: FRC temp[24].x, temp[23].x___; 16: MOV temp[21].y, (temp[23] - temp[24])._x__; 17: ADD temp[26].x, temp[23].x___, -(temp[23] - temp[24]).x___; 18: MOV temp[27].z, temp[26].__x_; 19: MUL temp[27].xy, temp[21].xy__, const[0].ww__; 20: MOV temp[28].xyz, temp[27].xyz_; 21: MOV temp[17].w, none.___0; 22: MOV temp[28].w, none.___0; 23: MOV output[0], temp[7]; 24: MOV output[1], temp[17]; 25: MOV output[2], temp[28]; CONST[0] = { -0.5000 0.5000 255.0000 0.0039 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[7], input[0].xy__, 2D[1]; 1: TEX temp[8].xyz, input[0].xy__, 2D[0]; 2: ADD temp[10].xyz, temp[8].xyz_, none.-H-H-H_; 3: MUL temp[11].xyz, temp[10].xxx_, input[3].xyz_; 4: MAD temp[12].xyz, temp[10].yyy_, input[2].xyz_, temp[11].xyz_; 5: MAD temp[13].xyz, temp[10].zzz_, input[4].xyz_, temp[12].xyz_; 6: DP3 temp[14].x, temp[13].xyz_, temp[13].xyz_; 7: RSQ temp[15].x, |temp[14].x___|; 8: MUL temp[16].xyz, temp[13].xyz_, temp[15].xxx_; 9: MAD temp[17].xyz, temp[16].xyz_, none.HHH_, none.HHH_; 10: MUL temp[18].x, input[1].x___, const[0].z___; 11: FRC temp[19].x, temp[18].x___; 12: MOV temp[21].x, (temp[18] - temp[19]).x___; 13: ADD temp[22].x, temp[18].x___, -(temp[18] - temp[19]).x___; 14: MUL temp[23].x, temp[22].x___, const[0].z___; 15: FRC temp[24].x, temp[23].x___; 16: MOV temp[21].y, (temp[23] - temp[24])._x__; 17: ADD temp[26].x, temp[23].x___, -(temp[23] - temp[24]).x___; 18: MOV temp[27].z, temp[26].__x_; 19: MUL temp[27].xy, temp[21].xy__, const[0].ww__; 20: MOV temp[28].xyz, temp[27].xyz_; 21: MOV temp[17].w, none.___0; 22: MOV temp[28].w, none.___0; 23: MOV output[0], temp[7]; 24: MOV output[1], temp[17]; 25: MOV output[2], temp[28]; CONST[0] = { -0.5000 0.5000 255.0000 0.0039 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[7], input[0].xy__, 2D[1]; 1: TEX temp[8].xyz, input[0].xy__, 2D[0]; 2: ADD temp[10].xyz, temp[8].xyz_, none.-H-H-H_; 3: MUL temp[11].xyz, temp[10].xxx_, input[3].xyz_; 4: MAD temp[12].xyz, temp[10].yyy_, input[2].xyz_, temp[11].xyz_; 5: MAD temp[13].xyz, temp[10].zzz_, input[4].xyz_, temp[12].xyz_; 6: DP3 temp[14].x, temp[13].xyz_, temp[13].xyz_; 7: RSQ temp[15].x, |temp[14].x___|; 8: MUL temp[16].xyz, temp[13].xyz_, temp[15].xxx_; 9: MAD temp[17].xyz, temp[16].xyz_, none.HHH_, none.HHH_; 10: MUL temp[18].x, input[1].x___, const[0].z___; 11: FRC temp[19].x, temp[18].x___; 12: MOV temp[21].x, (temp[18] - temp[19]).x___; 13: ADD temp[22].x, temp[18].x___, -(temp[18] - temp[19]).x___; 14: MUL temp[23].x, temp[22].x___, const[0].z___; 15: FRC temp[24].x, temp[23].x___; 16: MOV temp[21].y, (temp[23] - temp[24])._x__; 17: ADD temp[26].x, temp[23].x___, -(temp[23] - temp[24]).x___; 18: MOV temp[27].z, temp[26].__x_; 19: MUL temp[27].xy, temp[21].xy__, const[0].ww__; 20: MOV temp[28].xyz, temp[27].xyz_; 21: MOV temp[17].w, none.___0; 22: MOV temp[28].w, none.___0; 23: MOV output[0], temp[7]; 24: MOV output[1], temp[17]; 25: MOV output[2], temp[28]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[7], input[0].xy__, 2D[1]; 1: TEX temp[8].xyz, input[0].xy__, 2D[0]; 2: src0.xyz = temp[8] MAD temp[10].xyz, src0.xyz, src0.111, -src0.HHH 3: src0.xyz = temp[10], src1.xyz = input[3] MAD temp[11].xyz, src0.xxx, src1.xyz, src0.000 4: src0.xyz = temp[10], src1.xyz = input[2], src2.xyz = temp[11] MAD temp[12].xyz, src0.yyy, src1.xyz, src2.xyz 5: src0.xyz = temp[10], src1.xyz = input[4], src2.xyz = temp[12] MAD temp[13].xyz, src0.zzz, src1.xyz, src2.xyz 6: src0.xyz = temp[13] DP3 temp[14].x, src0.xyz, src0.xyz 7: src0.xyz = temp[14] REPL_ALPHA temp[15].x RSQ, |src0.x| 8: src0.xyz = temp[13], src1.xyz = temp[15] MAD temp[16].xyz, src0.xyz, src1.xxx, src0.000 9: src0.xyz = temp[16] MAD temp[17].xyz, src0.xyz, src0.HHH, src0.HHH 10: src0.xyz = input[1], src1.xyz = const[0] MAD temp[18].x, src0.x__, src1.z__, src0.000 11: src0.xyz = temp[18] FRC temp[19].x, src0.x__ 12: src0.xyz = temp[19], src1.xyz = temp[18], srcp.xyz = (src1 - src0) MAD temp[21].x, srcp.x__, src0.111, src0.000 13: src0.xyz = temp[19], src1.xyz = temp[18], srcp.xyz = (src1 - src0) MAD temp[22].x, src1.x__, src0.111, -srcp.x__ 14: src0.xyz = temp[22], src1.xyz = const[0] MAD temp[23].x, src0.x__, src1.z__, src0.000 15: src0.xyz = temp[23] FRC temp[24].x, src0.x__ 16: src0.xyz = temp[24], src1.xyz = temp[23], srcp.xyz = (src1 - src0) MAD temp[21].y, srcp._x_, src0.111, src0.000 17: src0.xyz = temp[24], src1.xyz = temp[23], srcp.xyz = (src1 - src0) MAD temp[26].x, src1.x__, src0.111, -srcp.x__ 18: src0.xyz = temp[26] MAD temp[27].z, src0.__x, src0.111, src0.000 19: src0.xyz = temp[21], src0.w = const[0] MAD temp[27].xy, src0.xy_, src0.ww_, src0.000 20: src0.xyz = temp[27] MAD temp[28].xyz, src0.xyz, src0.111, src0.000 21: MAD temp[17].w, src0.0, src0.1, src0.0 22: MAD temp[28].w, src0.0, src0.1, src0.0 23: src0.xyz = temp[7], src0.w = temp[7] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 24: src0.xyz = temp[17], src0.w = temp[17] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 25: src0.xyz = temp[28], src0.w = temp[28] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[7], input[0].xy__, 2D[1]; 2: TEX temp[8].xyz, input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 3: src0.xyz = temp[8] SEM_WAIT MAD temp[10].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[28].w, src0.0, src0.1, src0.0 4: src0.xyz = input[1], src1.xyz = const[0] MAD temp[18].x, src0.x__, src1.z__, src0.000 MAD temp[17].w, src0.0, src0.1, src0.0 5: src0.xyz = temp[10], src1.xyz = input[3] MAD temp[11].xyz, src0.xxx, src1.xyz, src0.000 6: src0.xyz = temp[10], src1.xyz = input[2], src2.xyz = temp[11] MAD temp[12].xyz, src0.yyy, src1.xyz, src2.xyz 7: src0.xyz = temp[18] FRC temp[19].x, src0.x__ 8: src0.xyz = temp[10], src1.xyz = input[4], src2.xyz = temp[12] MAD temp[13].xyz, src0.zzz, src1.xyz, src2.xyz 9: src0.xyz = temp[19], src1.xyz = temp[18], src2.xyz = temp[13], srcp.xyz = (src1 - src0) DP3 temp[14].x, src2.xyz, src2.xyz MAD temp[22].w, src1.x, src0.1, -srcp.x 10: src0.xyz = temp[19], src1.xyz = temp[18], src2.xyz = temp[14], srcp.xyz = (src1 - src0) MAD temp[21].x, srcp.x__, src0.111, src0.000 RSQ temp[15].w, |src2.x| 11: src0.xyz = temp[22], src0.w = temp[22], src1.xyz = const[0] MAD temp[23].x, src0.w__, src1.z__, src0.000 12: src0.xyz = temp[13], src0.w = temp[15], src1.xyz = temp[15] MAD temp[16].xyz, src0.xyz, src0.www, src0.000 13: src0.xyz = temp[23] FRC temp[24].x, src0.x__ 14: src0.xyz = temp[24], src1.xyz = temp[23], src2.xyz = temp[16], srcp.xyz = (src1 - src0) MAD temp[17].xyz, src2.xyz, src0.HHH, src0.HHH MAD temp[26].w, src1.x, src0.1, -srcp.x 15: src0.xyz = temp[24], src1.xyz = temp[23], srcp.xyz = (src1 - src0) MAD temp[21].y, srcp._x_, src0.111, src0.000 16: src0.xyz = temp[26], src0.w = temp[26] MAD temp[27].z, src0.__w, src0.111, src0.000 17: src0.xyz = temp[21], src0.w = const[0] MAD temp[27].xy, src0.xy_, src0.ww_, src0.000 18: src0.xyz = temp[27] MAD temp[28].xyz, src0.xyz, src0.111, src0.000 19: src0.xyz = temp[7], src0.w = temp[7] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 20: src0.xyz = temp[17], src0.w = temp[17] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 21: src0.xyz = temp[28], src0.w = temp[28] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[7], input[0].xy__, 2D[1]; 2: TEX temp[8].xyz, input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 3: src0.xyz = temp[8] SEM_WAIT MAD temp[10].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[28].w, src0.0, src0.1, src0.0 4: src0.xyz = input[1], src1.xyz = const[0] MAD temp[18].x, src0.x__, src1.z__, src0.000 MAD temp[17].w, src0.0, src0.1, src0.0 5: src0.xyz = temp[10], src1.xyz = input[3] MAD temp[11].xyz, src0.xxx, src1.xyz, src0.000 6: src0.xyz = temp[10], src1.xyz = input[2], src2.xyz = temp[11] MAD temp[12].xyz, src0.yyy, src1.xyz, src2.xyz 7: src0.xyz = temp[18] FRC temp[19].x, src0.x__ 8: src0.xyz = temp[10], src1.xyz = input[4], src2.xyz = temp[12] MAD temp[13].xyz, src0.zzz, src1.xyz, src2.xyz 9: src0.xyz = temp[19], src1.xyz = temp[18], src2.xyz = temp[13], srcp.xyz = (src1 - src0) DP3 temp[14].x, src2.xyz, src2.xyz MAD temp[22].w, src1.x, src0.1, -srcp.x 10: src0.xyz = temp[19], src1.xyz = temp[18], src2.xyz = temp[14], srcp.xyz = (src1 - src0) MAD temp[21].x, srcp.x__, src0.111, src0.000 RSQ temp[15].w, |src2.x| 11: src0.w = temp[22], src1.xyz = const[0] MAD temp[23].x, src0.w__, src1.z__, src0.000 12: src0.xyz = temp[13], src0.w = temp[15] MAD temp[16].xyz, src0.xyz, src0.www, src0.000 13: src0.xyz = temp[23] FRC temp[24].x, src0.x__ 14: src0.xyz = temp[24], src1.xyz = temp[23], src2.xyz = temp[16], srcp.xyz = (src1 - src0) MAD temp[17].xyz, src2.xyz, src0.HHH, src0.HHH MAD temp[26].w, src1.x, src0.1, -srcp.x 15: src0.xyz = temp[24], src1.xyz = temp[23], srcp.xyz = (src1 - src0) MAD temp[21].y, srcp._x_, src0.111, src0.000 16: src0.w = temp[26] MAD temp[27].z, src0.__w, src0.111, src0.000 17: src0.xyz = temp[21], src0.w = const[0] MAD temp[27].xy, src0.xy_, src0.ww_, src0.000 18: src0.xyz = temp[27] MAD temp[28].xyz, src0.xyz, src0.111, src0.000 19: src0.xyz = temp[7], src0.w = temp[7] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 20: src0.xyz = temp[17], src0.w = temp[17] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 21: src0.xyz = temp[28], src0.w = temp[28] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[5], input[0].xy__, 2D[1]; 2: TEX temp[0].xyz, input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 3: src0.xyz = temp[0] SEM_WAIT MAD temp[0].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[0].w, src0.0, src0.1, src0.0 4: src0.xyz = input[1], src1.xyz = const[0] MAD temp[1].x, src0.x__, src1.z__, src0.0__ MAD temp[1].w, src0.0, src0.1, src0.0 5: src0.xyz = temp[0], src1.xyz = input[3] MAD temp[3].xyz, src0.xxx, src1.xyz, src0.000 6: src0.xyz = temp[0], src1.xyz = input[2], src2.xyz = temp[3] MAD temp[2].xyz, src0.yyy, src1.xyz, src2.xyz 7: src0.xyz = temp[1] FRC temp[3].x, src0.x__ 8: src0.xyz = temp[0], src1.xyz = input[4], src2.xyz = temp[2] MAD temp[0].xyz, src0.zzz, src1.xyz, src2.xyz 9: src0.xyz = temp[3], src1.xyz = temp[1], src2.xyz = temp[0], srcp.xyz = (src1 - src0) DP3 temp[1].y, src2.xyz, src2.xyz MAD temp[2].w, src1.x, src0.1, -srcp.x 10: src0.xyz = temp[3], src1.xyz = temp[1], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD temp[1].x, srcp.x__, src0.11_, src0.00_ RSQ temp[3].w, |src2.y| 11: src0.w = temp[2], src1.xyz = const[0] MAD temp[2].x, src0.w__, src1.z__, src0.0__ 12: src0.xyz = temp[0], src0.w = temp[3] MAD temp[0].xyz, src0.xyz, src0.www, src0.000 13: src0.xyz = temp[2] FRC temp[3].x, src0.x__ 14: src0.xyz = temp[3], src1.xyz = temp[2], src2.xyz = temp[0], srcp.xyz = (src1 - src0) MAD temp[0].xyz, src2.xyz, src0.HHH, src0.HHH MAD temp[2].w, src1.x, src0.1, -srcp.x 15: src0.xyz = temp[3], src1.xyz = temp[2], srcp.xyz = (src1 - src0) MAD temp[1].y, srcp._x_, src0.11_, src0.00_ 16: src0.w = temp[2] MAD temp[2].z, src0.__w, src0.111, src0.000 17: src0.xyz = temp[1], src0.w = const[0] MAD temp[2].xy, src0.xy_, src0.ww_, src0.000 18: src0.xyz = temp[2] MAD temp[1].xyz, src0.xyz, src0.111, src0.000 19: src0.xyz = temp[5], src0.w = temp[5] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 20: src0.xyz = temp[0], src0.w = temp[1] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 21: src0.xyz = temp[1], src0.w = temp[0] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 pc=28************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 18, tex_end: 1 (code_addr: 00420480) TEX: TEX t5, t0, texture[1] (00008940) TEX t0, t0, texture[0] (00008000) 0: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xyz 1.0 -0.5 op: 000d8a80 w: 0.0 1.0 0.0 op: 00040890 1: xyz: t1 c0 t0 bias-> t1.x (00840801) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t1.xyz c0.zzz 0.0 op: 00050380 w: 0.0 1.0 0.0 op: 00040890 2: xyz: t0 t3 t0 bias-> t3.xyz (038c00c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t3.xyz 0.0 op: 00050201 w: t0.x t0.x t0.x op: 00000000 3: xyz: t0 t2 t3 bias-> t2.xyz (03883080) w: t0 t0 t0 bias-> (00000000) xyz: t0.yyy t2.xyz t3.xyz op: 00020202 w: t0.x t0.x t0.x op: 00000000 4: xyz: t1 t0 t0 bias-> t3.x (008c0001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t1.xxx t1.xxx op: 04804080 w: t1.x t1.x t1.x op: 00000000 5: xyz: t0 t4 t2 bias-> t0.xyz (03802100) w: t0 t0 t0 bias-> (00000000) xyz: t0.zzz t4.xyz t2.xyz op: 00020203 w: t0.x t0.x t0.x op: 00000000 6: xyz: t3 t1 t0 sub-> t1.y (01040043) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t0.xyz t0.xyz t3.xxx op: 00a04408 w: t1.x 1.0 -srcp.x op: 000b0883 7: xyz: t3 t1 t1 sub-> t1.x (00841043) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: srcp.xyz 1.0 0.0 op: 00250a8f w: |t1.y| t3.x t3.x op: 05800047 8: xyz: t0 c0 t0 bias-> t2.x (00880800) w: t2 t0 t0 bias-> (00000002) xyz: t2.www c0.zzz 0.0 op: 0005038c w: t0.x t0.x t0.x op: 00000000 9: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t3 t0 t0 bias-> (00000003) xyz: t0.xyz t3.www 0.0 op: 00050600 w: t0.x t0.x t0.x op: 00000000 10: xyz: t2 t0 t0 bias-> t3.x (008c0002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t2.xxx t2.xxx op: 84804080 NOP w: t2.x t2.x t2.x op: 00000000 11: xyz: t3 t2 t0 sub-> t0.xyz (03800083) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t0.xyz 0.5 0.5 op: 00258b08 w: t2.x 1.0 -srcp.x op: 000b0883 12: xyz: t3 t2 t0 sub-> t1.y (01040083) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xxx 1.0 0.0 op: 00250a90 w: t3.x t3.x t3.x op: 00000000 13: xyz: t0 t0 t0 bias-> t2.z (02080000) w: t2 t0 t0 bias-> (00000002) xyz: t2.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 14: xyz: t1 t0 t0 bias-> t2.xy (01880001) w: c0 t0 t0 bias-> (00000020) xyz: t1.xyz c0.www 0.0 op: 00050600 w: t1.x t1.x t1.x op: 00000000 15: xyz: t2 t0 t0 bias-> t1.xyz (03840002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz 1.0 0.0 op: 00050a80 w: t2.x t2.x t2.x op: 00000000 16: xyz: t5 t0 t0 bias-> o0.xyz (1c000005) w: t5 t0 t0 bias-> o0.w (01000005) xyz: t5.xyz 1.0 0.0 op: 00050a80 w: t5.w 1.0 0.0 op: 00040889 17: xyz: t0 t0 t0 bias-> o1.xyz (3c000000) w: t1 t0 t0 bias-> o1.w (03000001) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t1.w 1.0 0.0 op: 00040889 18: xyz: t1 t0 t0 bias-> o2.xyz (5c000001) w: t0 t0 t0 bias-> o2.w (05000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL IN[1], GENERIC[12], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0], LOCAL 0: TEX TEMP[0], IN[0].xyyy, SAMP[0], 2D 1: MUL TEMP[0], TEMP[0], IN[1] 2: MOV OUT[0], TEMP[0] 3: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MUL temp[2], temp[1], input[1]; 2: MOV output[0], temp[2]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MUL temp[2], temp[1], input[1]; 2: MOV output[0], temp[2]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MUL temp[2], temp[1], input[1]; 2: MOV output[0], temp[2]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MUL temp[2], temp[1], input[1]; 2: MOV output[0], temp[2]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[1], src1.w = input[1] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[2].w, src0.w, src1.w, src0.0 2: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[1], src1.w = input[1] SEM_WAIT MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[2].w, src0.w, src1.w, src0.0 3: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[1], src1.w = input[1] SEM_WAIT MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[2].w, src0.w, src1.w, src0.0 3: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[1], src1.w = input[1] SEM_WAIT MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 3: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=29************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 1, tex_end: 0 (code_addr: 00400040) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t0 t1 t0 bias-> t0.xyz (03800040) w: t0 t1 t0 bias-> t0.w (00800040) xyz: t0.xyz t1.xyz 0.0 op: 00050200 w: t0.w t1.w 0.0 op: 00040509 1: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], LINEAR 0: END Fragment Program: before compilation # Radeon Compiler Program Fragment Program: after 'rewrite depth out' # Radeon Compiler Program Fragment Program: after 'transform KILP' # Radeon Compiler Program Fragment Program: after 'transform loops' # Radeon Compiler Program Fragment Program: after 'emulate branches' # Radeon Compiler Program Fragment Program: after 'transform TEX' # Radeon Compiler Program Fragment Program: after 'native rewrite' # Radeon Compiler Program Fragment Program: after 'deadcode' # Radeon Compiler Program Fragment Program: after 'emulate loops' # Radeon Compiler Program Fragment Program: after 'register rename' # Radeon Compiler Program Fragment Program: after 'dataflow optimize' # Radeon Compiler Program Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program Fragment Program: after 'dead constants' # Radeon Compiler Program Fragment Program: after 'pair translate' # Radeon Compiler Program Fragment Program: after 'pair scheduling' # Radeon Compiler Program Fragment Program: after 'dead sources' # Radeon Compiler Program Fragment Program: after 'register allocation' # Radeon Compiler Program pc=30************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00000000) 0: xyz: t0 t0 t0 bias-> (00000000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: t0.x t0.x t0.x op: 00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], POSITION, LINEAR DCL IN[1], GENERIC[12], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL CONST[13..14] DCL CONST[6..12] DCL TEMP[0] DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL DCL TEMP[6], LOCAL DCL TEMP[7], LOCAL DCL TEMP[8], LOCAL DCL TEMP[9], LOCAL IMM[0] FLT32 { 1.0000, 0.0039, 0.0000, 2.0000} IMM[1] FLT32 { -1.0000, 0.0000, 10.0000, 0.0000} 0: MOV TEMP[0], IN[0] 1: MAD TEMP[0].y, IN[0], CONST[14].xxxx, CONST[14].yyyy 2: TEX TEMP[1], TEMP[0].xyyy, SAMP[4], RECT 3: TEX TEMP[2], TEMP[0].xyyy, SAMP[3], RECT 4: RCP TEMP[3].x, IN[1].zzzz 5: MUL TEMP[3].xy, IN[1].xyyy, TEMP[3].xxxx 6: MOV TEMP[3].z, CONST[10].xxxx 7: DP3 TEMP[4].x, TEMP[2].xyzz, IMM[0].xyzz 8: MUL TEMP[3].xyz, TEMP[3].xyzz, TEMP[4].xxxx 9: ADD TEMP[4].xyz, CONST[13].xyzz, -TEMP[3].xyzz 10: MUL TEMP[4].xyz, TEMP[4].xyzz, CONST[12].xxxx 11: DP3 TEMP[5].x, TEMP[4].xyzz, TEMP[4].xyzz 12: RSQ TEMP[5].x, TEMP[5].xxxx 13: MUL TEMP[5].xyz, TEMP[4].xyzz, TEMP[5].xxxx 14: MUL TEMP[6], CONST[6], TEMP[3].xxxx 15: MAD TEMP[6], CONST[7], TEMP[3].yyyy, TEMP[6] 16: MAD TEMP[6], CONST[8], TEMP[3].zzzz, TEMP[6] 17: ADD TEMP[6], TEMP[6], CONST[9] 18: MAD TEMP[7].xyz, TEMP[1].xyzz, IMM[0].wwww, IMM[1].xxxx 19: DP3 TEMP[8].x, TEMP[7].xyzz, TEMP[7].xyzz 20: RSQ TEMP[8].x, TEMP[8].xxxx 21: MUL TEMP[7].xyz, TEMP[7].xyzz, TEMP[8].xxxx 22: MOV TEMP[3].xyz, -TEMP[3].xyzx 23: DP3 TEMP[8].x, TEMP[3].xyzz, TEMP[3].xyzz 24: RSQ TEMP[8].x, TEMP[8].xxxx 25: MAD TEMP[3].xyz, TEMP[3].xyzz, TEMP[8].xxxx, TEMP[5].xyzz 26: TEX TEMP[8].xyz, TEMP[0].xyyy, SAMP[5], RECT 27: MUL TEMP[8].xyz, TEMP[8].xyzz, CONST[11].xyzz 28: DP3 TEMP[5].x, TEMP[5].xyzz, TEMP[7].xyzz 29: MAX TEMP[5].x, TEMP[5].xxxx, IMM[1].yyyy 30: MUL TEMP[1].x, CONST[11].wwww, TEMP[1].wwww 31: DP3 TEMP[9].x, TEMP[3].xyzz, TEMP[3].xyzz 32: RSQ TEMP[9].x, TEMP[9].xxxx 33: MUL TEMP[3].xyz, TEMP[3].xyzz, TEMP[9].xxxx 34: DP3_SAT TEMP[3].x, TEMP[3].xyzz, TEMP[7].xyzz 35: MUL TEMP[2].x, TEMP[2].wwww, IMM[1].zzzz 36: EX2 TEMP[2].x, TEMP[2].xxxx 37: ADD TEMP[2].x, TEMP[2].xxxx, IMM[0].xxxx 38: POW TEMP[2].x, TEMP[3].xxxx, TEMP[2].xxxx 39: MUL TEMP[1].x, TEMP[1].xxxx, TEMP[2].xxxx 40: MUL TEMP[1].xyz, TEMP[1].xxxx, CONST[11].xyzz 41: MAD TEMP[1].xyz, TEMP[8].xyzz, TEMP[5].xxxx, TEMP[1].xyzz 42: TXP TEMP[2].xyz, TEMP[6].xyyw, SAMP[1], 2D 43: MUL TEMP[1].xyz, TEMP[1].xyzz, TEMP[2].xyzz 44: DP3 TEMP[2].x, TEMP[4].xyzz, TEMP[4].xyzz 45: TEX TEMP[2].x, TEMP[2].xxxx, SAMP[2], 1D 46: TXP TEMP[3].x, TEMP[6], SAMP[0], SHADOW2D 47: MUL TEMP[2].x, TEMP[2].xxxx, TEMP[3].xxxx 48: MUL TEMP[1].xyz, TEMP[1].xyzz, TEMP[2].xxxx 49: MOV OUT[0], TEMP[1] 50: END Fragment Program: before compilation # Radeon Compiler Program 0: RCP temp[10].w, input[0].wwww; 1: MUL temp[10].xyz, input[0], temp[10].wwww; 2: MAD temp[10].xyz, temp[10].xyz0, const[17].xyz0, const[18].xyz0; 3: MOV temp[0], temp[10]; 4: MAD temp[0].y, temp[10], const[14].xxxx, const[14].yyyy; 5: TEX temp[1], temp[0].xyyy, RECT[4]; 6: TEX temp[2], temp[0].xyyy, RECT[3]; 7: RCP temp[3].x, input[1].zzzz; 8: MUL temp[3].xy, input[1].xyyy, temp[3].xxxx; 9: MOV temp[3].z, const[10].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, const[15].xyzz; 11: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 12: ADD temp[4].xyz, const[13].xyzz, -temp[3].xyzz; 13: MUL temp[4].xyz, temp[4].xyzz, const[12].xxxx; 14: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 15: RSQ temp[5].x, temp[5].xxxx; 16: MUL temp[5].xyz, temp[4].xyzz, temp[5].xxxx; 17: MUL temp[6], const[6], temp[3].xxxx; 18: MAD temp[6], const[7], temp[3].yyyy, temp[6]; 19: MAD temp[6], const[8], temp[3].zzzz, temp[6]; 20: ADD temp[6], temp[6], const[9]; 21: MAD temp[7].xyz, temp[1].xyzz, const[15].wwww, const[16].xxxx; 22: DP3 temp[8].x, temp[7].xyzz, temp[7].xyzz; 23: RSQ temp[8].x, temp[8].xxxx; 24: MUL temp[7].xyz, temp[7].xyzz, temp[8].xxxx; 25: MOV temp[3].xyz, -temp[3].xyzx; 26: DP3 temp[8].x, temp[3].xyzz, temp[3].xyzz; 27: RSQ temp[8].x, temp[8].xxxx; 28: MAD temp[3].xyz, temp[3].xyzz, temp[8].xxxx, temp[5].xyzz; 29: TEX temp[8].xyz, temp[0].xyyy, RECT[5]; 30: MUL temp[8].xyz, temp[8].xyzz, const[11].xyzz; 31: DP3 temp[5].x, temp[5].xyzz, temp[7].xyzz; 32: MAX temp[5].x, temp[5].xxxx, const[16].yyyy; 33: MUL temp[1].x, const[11].wwww, temp[1].wwww; 34: DP3 temp[9].x, temp[3].xyzz, temp[3].xyzz; 35: RSQ temp[9].x, temp[9].xxxx; 36: MUL temp[3].xyz, temp[3].xyzz, temp[9].xxxx; 37: DP3_SAT temp[3].x, temp[3].xyzz, temp[7].xyzz; 38: MUL temp[2].x, temp[2].wwww, const[16].zzzz; 39: EX2 temp[2].x, temp[2].xxxx; 40: ADD temp[2].x, temp[2].xxxx, const[15].xxxx; 41: POW temp[2].x, temp[3].xxxx, temp[2].xxxx; 42: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 43: MUL temp[1].xyz, temp[1].xxxx, const[11].xyzz; 44: MAD temp[1].xyz, temp[8].xyzz, temp[5].xxxx, temp[1].xyzz; 45: TXP temp[2].xyz, temp[6].xyyw, 2D[1]; 46: MUL temp[1].xyz, temp[1].xyzz, temp[2].xyzz; 47: DP3 temp[2].x, temp[4].xyzz, temp[4].xyzz; 48: TEX temp[2].x, temp[2].xxxx, 1D[2]; 49: TXP temp[3].x, temp[6], 2DSHADOW[0]; 50: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 51: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 52: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: RCP temp[10].w, input[0].wwww; 1: MUL temp[10].xyz, input[0], temp[10].wwww; 2: MAD temp[10].xyz, temp[10].xyz0, const[17].xyz0, const[18].xyz0; 3: MOV temp[0], temp[10]; 4: MAD temp[0].y, temp[10], const[14].xxxx, const[14].yyyy; 5: TEX temp[1], temp[0].xyyy, RECT[4]; 6: TEX temp[2], temp[0].xyyy, RECT[3]; 7: RCP temp[3].x, input[1].zzzz; 8: MUL temp[3].xy, input[1].xyyy, temp[3].xxxx; 9: MOV temp[3].z, const[10].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, const[15].xyzz; 11: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 12: ADD temp[4].xyz, const[13].xyzz, -temp[3].xyzz; 13: MUL temp[4].xyz, temp[4].xyzz, const[12].xxxx; 14: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 15: RSQ temp[5].x, temp[5].xxxx; 16: MUL temp[5].xyz, temp[4].xyzz, temp[5].xxxx; 17: MUL temp[6], const[6], temp[3].xxxx; 18: MAD temp[6], const[7], temp[3].yyyy, temp[6]; 19: MAD temp[6], const[8], temp[3].zzzz, temp[6]; 20: ADD temp[6], temp[6], const[9]; 21: MAD temp[7].xyz, temp[1].xyzz, const[15].wwww, const[16].xxxx; 22: DP3 temp[8].x, temp[7].xyzz, temp[7].xyzz; 23: RSQ temp[8].x, temp[8].xxxx; 24: MUL temp[7].xyz, temp[7].xyzz, temp[8].xxxx; 25: MOV temp[3].xyz, -temp[3].xyzx; 26: DP3 temp[8].x, temp[3].xyzz, temp[3].xyzz; 27: RSQ temp[8].x, temp[8].xxxx; 28: MAD temp[3].xyz, temp[3].xyzz, temp[8].xxxx, temp[5].xyzz; 29: TEX temp[8].xyz, temp[0].xyyy, RECT[5]; 30: MUL temp[8].xyz, temp[8].xyzz, const[11].xyzz; 31: DP3 temp[5].x, temp[5].xyzz, temp[7].xyzz; 32: MAX temp[5].x, temp[5].xxxx, const[16].yyyy; 33: MUL temp[1].x, const[11].wwww, temp[1].wwww; 34: DP3 temp[9].x, temp[3].xyzz, temp[3].xyzz; 35: RSQ temp[9].x, temp[9].xxxx; 36: MUL temp[3].xyz, temp[3].xyzz, temp[9].xxxx; 37: DP3_SAT temp[3].x, temp[3].xyzz, temp[7].xyzz; 38: MUL temp[2].x, temp[2].wwww, const[16].zzzz; 39: EX2 temp[2].x, temp[2].xxxx; 40: ADD temp[2].x, temp[2].xxxx, const[15].xxxx; 41: POW temp[2].x, temp[3].xxxx, temp[2].xxxx; 42: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 43: MUL temp[1].xyz, temp[1].xxxx, const[11].xyzz; 44: MAD temp[1].xyz, temp[8].xyzz, temp[5].xxxx, temp[1].xyzz; 45: TXP temp[2].xyz, temp[6].xyyw, 2D[1]; 46: MUL temp[1].xyz, temp[1].xyzz, temp[2].xyzz; 47: DP3 temp[2].x, temp[4].xyzz, temp[4].xyzz; 48: TEX temp[2].x, temp[2].xxxx, 1D[2]; 49: TXP temp[3].x, temp[6], 2DSHADOW[0]; 50: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 51: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 52: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: RCP temp[10].w, input[0].wwww; 1: MUL temp[10].xyz, input[0], temp[10].wwww; 2: MAD temp[10].xyz, temp[10].xyz0, const[17].xyz0, const[18].xyz0; 3: MOV temp[0], temp[10]; 4: MAD temp[0].y, temp[10], const[14].xxxx, const[14].yyyy; 5: TEX temp[1], temp[0].xyyy, RECT[4]; 6: TEX temp[2], temp[0].xyyy, RECT[3]; 7: RCP temp[3].x, input[1].zzzz; 8: MUL temp[3].xy, input[1].xyyy, temp[3].xxxx; 9: MOV temp[3].z, const[10].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, const[15].xyzz; 11: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 12: ADD temp[4].xyz, const[13].xyzz, -temp[3].xyzz; 13: MUL temp[4].xyz, temp[4].xyzz, const[12].xxxx; 14: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 15: RSQ temp[5].x, temp[5].xxxx; 16: MUL temp[5].xyz, temp[4].xyzz, temp[5].xxxx; 17: MUL temp[6], const[6], temp[3].xxxx; 18: MAD temp[6], const[7], temp[3].yyyy, temp[6]; 19: MAD temp[6], const[8], temp[3].zzzz, temp[6]; 20: ADD temp[6], temp[6], const[9]; 21: MAD temp[7].xyz, temp[1].xyzz, const[15].wwww, const[16].xxxx; 22: DP3 temp[8].x, temp[7].xyzz, temp[7].xyzz; 23: RSQ temp[8].x, temp[8].xxxx; 24: MUL temp[7].xyz, temp[7].xyzz, temp[8].xxxx; 25: MOV temp[3].xyz, -temp[3].xyzx; 26: DP3 temp[8].x, temp[3].xyzz, temp[3].xyzz; 27: RSQ temp[8].x, temp[8].xxxx; 28: MAD temp[3].xyz, temp[3].xyzz, temp[8].xxxx, temp[5].xyzz; 29: TEX temp[8].xyz, temp[0].xyyy, RECT[5]; 30: MUL temp[8].xyz, temp[8].xyzz, const[11].xyzz; 31: DP3 temp[5].x, temp[5].xyzz, temp[7].xyzz; 32: MAX temp[5].x, temp[5].xxxx, const[16].yyyy; 33: MUL temp[1].x, const[11].wwww, temp[1].wwww; 34: DP3 temp[9].x, temp[3].xyzz, temp[3].xyzz; 35: RSQ temp[9].x, temp[9].xxxx; 36: MUL temp[3].xyz, temp[3].xyzz, temp[9].xxxx; 37: DP3_SAT temp[3].x, temp[3].xyzz, temp[7].xyzz; 38: MUL temp[2].x, temp[2].wwww, const[16].zzzz; 39: EX2 temp[2].x, temp[2].xxxx; 40: ADD temp[2].x, temp[2].xxxx, const[15].xxxx; 41: POW temp[2].x, temp[3].xxxx, temp[2].xxxx; 42: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 43: MUL temp[1].xyz, temp[1].xxxx, const[11].xyzz; 44: MAD temp[1].xyz, temp[8].xyzz, temp[5].xxxx, temp[1].xyzz; 45: TXP temp[2].xyz, temp[6].xyyw, 2D[1]; 46: MUL temp[1].xyz, temp[1].xyzz, temp[2].xyzz; 47: DP3 temp[2].x, temp[4].xyzz, temp[4].xyzz; 48: TEX temp[2].x, temp[2].xxxx, 1D[2]; 49: TXP temp[3].x, temp[6], 2DSHADOW[0]; 50: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 51: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 52: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: RCP temp[10].w, input[0].wwww; 1: MUL temp[10].xyz, input[0], temp[10].wwww; 2: MAD temp[10].xyz, temp[10].xyz0, const[17].xyz0, const[18].xyz0; 3: MOV temp[0], temp[10]; 4: MAD temp[0].y, temp[10], const[14].xxxx, const[14].yyyy; 5: TEX temp[1], temp[0].xyyy, RECT[4]; 6: TEX temp[2], temp[0].xyyy, RECT[3]; 7: RCP temp[3].x, input[1].zzzz; 8: MUL temp[3].xy, input[1].xyyy, temp[3].xxxx; 9: MOV temp[3].z, const[10].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, const[15].xyzz; 11: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 12: ADD temp[4].xyz, const[13].xyzz, -temp[3].xyzz; 13: MUL temp[4].xyz, temp[4].xyzz, const[12].xxxx; 14: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 15: RSQ temp[5].x, temp[5].xxxx; 16: MUL temp[5].xyz, temp[4].xyzz, temp[5].xxxx; 17: MUL temp[6], const[6], temp[3].xxxx; 18: MAD temp[6], const[7], temp[3].yyyy, temp[6]; 19: MAD temp[6], const[8], temp[3].zzzz, temp[6]; 20: ADD temp[6], temp[6], const[9]; 21: MAD temp[7].xyz, temp[1].xyzz, const[15].wwww, const[16].xxxx; 22: DP3 temp[8].x, temp[7].xyzz, temp[7].xyzz; 23: RSQ temp[8].x, temp[8].xxxx; 24: MUL temp[7].xyz, temp[7].xyzz, temp[8].xxxx; 25: MOV temp[3].xyz, -temp[3].xyzx; 26: DP3 temp[8].x, temp[3].xyzz, temp[3].xyzz; 27: RSQ temp[8].x, temp[8].xxxx; 28: MAD temp[3].xyz, temp[3].xyzz, temp[8].xxxx, temp[5].xyzz; 29: TEX temp[8].xyz, temp[0].xyyy, RECT[5]; 30: MUL temp[8].xyz, temp[8].xyzz, const[11].xyzz; 31: DP3 temp[5].x, temp[5].xyzz, temp[7].xyzz; 32: MAX temp[5].x, temp[5].xxxx, const[16].yyyy; 33: MUL temp[1].x, const[11].wwww, temp[1].wwww; 34: DP3 temp[9].x, temp[3].xyzz, temp[3].xyzz; 35: RSQ temp[9].x, temp[9].xxxx; 36: MUL temp[3].xyz, temp[3].xyzz, temp[9].xxxx; 37: DP3_SAT temp[3].x, temp[3].xyzz, temp[7].xyzz; 38: MUL temp[2].x, temp[2].wwww, const[16].zzzz; 39: EX2 temp[2].x, temp[2].xxxx; 40: ADD temp[2].x, temp[2].xxxx, const[15].xxxx; 41: POW temp[2].x, temp[3].xxxx, temp[2].xxxx; 42: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 43: MUL temp[1].xyz, temp[1].xxxx, const[11].xyzz; 44: MAD temp[1].xyz, temp[8].xyzz, temp[5].xxxx, temp[1].xyzz; 45: TXP temp[2].xyz, temp[6].xyyw, 2D[1]; 46: MUL temp[1].xyz, temp[1].xyzz, temp[2].xyzz; 47: DP3 temp[2].x, temp[4].xyzz, temp[4].xyzz; 48: TEX temp[2].x, temp[2].xxxx, 1D[2]; 49: TXP temp[3].x, temp[6], 2DSHADOW[0]; 50: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 51: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 52: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: RCP temp[10].w, input[0].wwww; 1: MUL temp[10].xyz, input[0], temp[10].wwww; 2: MAD temp[10].xyz, temp[10].xyz0, const[17].xyz0, const[18].xyz0; 3: MOV temp[0], temp[10]; 4: MAD temp[0].y, temp[10], const[14].xxxx, const[14].yyyy; 5: TEX temp[1], temp[0].xyyy, RECT[4]; 6: TEX temp[2], temp[0].xyyy, RECT[3]; 7: RCP temp[3].x, input[1].zzzz; 8: MUL temp[3].xy, input[1].xyyy, temp[3].xxxx; 9: MOV temp[3].z, const[10].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, const[15].xyzz; 11: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 12: ADD temp[4].xyz, const[13].xyzz, -temp[3].xyzz; 13: MUL temp[4].xyz, temp[4].xyzz, const[12].xxxx; 14: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 15: RSQ temp[5].x, temp[5].xxxx; 16: MUL temp[5].xyz, temp[4].xyzz, temp[5].xxxx; 17: MUL temp[6], const[6], temp[3].xxxx; 18: MAD temp[6], const[7], temp[3].yyyy, temp[6]; 19: MAD temp[6], const[8], temp[3].zzzz, temp[6]; 20: ADD temp[6], temp[6], const[9]; 21: MAD temp[7].xyz, temp[1].xyzz, const[15].wwww, const[16].xxxx; 22: DP3 temp[8].x, temp[7].xyzz, temp[7].xyzz; 23: RSQ temp[8].x, temp[8].xxxx; 24: MUL temp[7].xyz, temp[7].xyzz, temp[8].xxxx; 25: MOV temp[3].xyz, -temp[3].xyzx; 26: DP3 temp[8].x, temp[3].xyzz, temp[3].xyzz; 27: RSQ temp[8].x, temp[8].xxxx; 28: MAD temp[3].xyz, temp[3].xyzz, temp[8].xxxx, temp[5].xyzz; 29: TEX temp[8].xyz, temp[0].xyyy, RECT[5]; 30: MUL temp[8].xyz, temp[8].xyzz, const[11].xyzz; 31: DP3 temp[5].x, temp[5].xyzz, temp[7].xyzz; 32: MAX temp[5].x, temp[5].xxxx, const[16].yyyy; 33: MUL temp[1].x, const[11].wwww, temp[1].wwww; 34: DP3 temp[9].x, temp[3].xyzz, temp[3].xyzz; 35: RSQ temp[9].x, temp[9].xxxx; 36: MUL temp[3].xyz, temp[3].xyzz, temp[9].xxxx; 37: DP3_SAT temp[3].x, temp[3].xyzz, temp[7].xyzz; 38: MUL temp[2].x, temp[2].wwww, const[16].zzzz; 39: EX2 temp[2].x, temp[2].xxxx; 40: ADD temp[2].x, temp[2].xxxx, const[15].xxxx; 41: POW temp[2].x, temp[3].xxxx, temp[2].xxxx; 42: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 43: MUL temp[1].xyz, temp[1].xxxx, const[11].xyzz; 44: MAD temp[1].xyz, temp[8].xyzz, temp[5].xxxx, temp[1].xyzz; 45: TXP temp[2].xyz, temp[6].xyyw, 2D[1]; 46: MUL temp[1].xyz, temp[1].xyzz, temp[2].xyzz; 47: DP3 temp[2].x, temp[4].xyzz, temp[4].xyzz; 48: TEX temp[2].x, temp[2].xxxx, 1D[2]; 49: TXP temp[3].x, temp[6], 2DSHADOW[0]; 50: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 51: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 52: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: RCP temp[10].w, input[0].wwww; 1: MUL temp[10].xyz, input[0], temp[10].wwww; 2: MAD temp[10].xyz, temp[10].xyz0, const[17].xyz0, const[18].xyz0; 3: MOV temp[0], temp[10]; 4: MAD temp[0].y, temp[10], const[14].xxxx, const[14].yyyy; 5: MUL temp[11], temp[0].xyyy, const[19]; 6: TEX temp[1], temp[11], 2D[4]; 7: MUL temp[12], temp[0].xyyy, const[20]; 8: TEX temp[2], temp[12], 2D[3]; 9: RCP temp[3].x, input[1].zzzz; 10: MUL temp[3].xy, input[1].xyyy, temp[3].xxxx; 11: MOV temp[3].z, const[10].xxxx; 12: DP3 temp[4].x, temp[2].xyzz, const[15].xyzz; 13: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 14: ADD temp[4].xyz, const[13].xyzz, -temp[3].xyzz; 15: MUL temp[4].xyz, temp[4].xyzz, const[12].xxxx; 16: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 17: RSQ temp[5].x, temp[5].xxxx; 18: MUL temp[5].xyz, temp[4].xyzz, temp[5].xxxx; 19: MUL temp[6], const[6], temp[3].xxxx; 20: MAD temp[6], const[7], temp[3].yyyy, temp[6]; 21: MAD temp[6], const[8], temp[3].zzzz, temp[6]; 22: ADD temp[6], temp[6], const[9]; 23: MAD temp[7].xyz, temp[1].xyzz, const[15].wwww, const[16].xxxx; 24: DP3 temp[8].x, temp[7].xyzz, temp[7].xyzz; 25: RSQ temp[8].x, temp[8].xxxx; 26: MUL temp[7].xyz, temp[7].xyzz, temp[8].xxxx; 27: MOV temp[3].xyz, -temp[3].xyzx; 28: DP3 temp[8].x, temp[3].xyzz, temp[3].xyzz; 29: RSQ temp[8].x, temp[8].xxxx; 30: MAD temp[3].xyz, temp[3].xyzz, temp[8].xxxx, temp[5].xyzz; 31: MUL temp[13], temp[0].xyyy, const[21]; 32: TEX temp[14], temp[13], 2D[5]; 33: MOV temp[8].xyz, temp[14]; 34: MUL temp[8].xyz, temp[8].xyzz, const[11].xyzz; 35: DP3 temp[5].x, temp[5].xyzz, temp[7].xyzz; 36: MAX temp[5].x, temp[5].xxxx, const[16].yyyy; 37: MUL temp[1].x, const[11].wwww, temp[1].wwww; 38: DP3 temp[9].x, temp[3].xyzz, temp[3].xyzz; 39: RSQ temp[9].x, temp[9].xxxx; 40: MUL temp[3].xyz, temp[3].xyzz, temp[9].xxxx; 41: DP3_SAT temp[3].x, temp[3].xyzz, temp[7].xyzz; 42: MUL temp[2].x, temp[2].wwww, const[16].zzzz; 43: EX2 temp[2].x, temp[2].xxxx; 44: ADD temp[2].x, temp[2].xxxx, const[15].xxxx; 45: POW temp[2].x, temp[3].xxxx, temp[2].xxxx; 46: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 47: MUL temp[1].xyz, temp[1].xxxx, const[11].xyzz; 48: MAD temp[1].xyz, temp[8].xyzz, temp[5].xxxx, temp[1].xyzz; 49: TXP temp[15], temp[6].xyyw, 2D[1]; 50: MOV temp[2].xyz, temp[15]; 51: MUL temp[1].xyz, temp[1].xyzz, temp[2].xyzz; 52: DP3 temp[2].x, temp[4].xyzz, temp[4].xyzz; 53: TEX temp[16], temp[2].xxxx, 1D[2]; 54: MOV temp[2].x, temp[16]; 55: TXP temp[17], temp[6], 2DSHADOW[0]; 56: RCP temp[18].w, temp[6].wwww; 57: MUL_SAT temp[18].w, temp[6].zzzz, temp[18].wwww; 58: ADD temp[18].w, -temp[18].wwww, temp[17].xxxx; 59: CMP temp[3].x, temp[18].www1, none.0001, none.1111; 60: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 61: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 62: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: RCP temp[10].w, input[0].wwww; 1: MUL temp[10].xyz, input[0], temp[10].wwww; 2: MAD temp[10].xyz, temp[10].xyz0, const[17].xyz0, const[18].xyz0; 3: MOV temp[0], temp[10]; 4: MAD temp[0].y, temp[10], const[14].xxxx, const[14].yyyy; 5: MUL temp[11], temp[0].xyyy, const[19]; 6: TEX temp[1], temp[11], 2D[4]; 7: MUL temp[12], temp[0].xyyy, const[20]; 8: TEX temp[2], temp[12], 2D[3]; 9: RCP temp[3].x, input[1].zzzz; 10: MUL temp[3].xy, input[1].xyyy, temp[3].xxxx; 11: MOV temp[3].z, const[10].xxxx; 12: DP3 temp[4].x, temp[2].xyzz, const[15].xyzz; 13: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 14: ADD temp[4].xyz, const[13].xyzz, -temp[3].xyzz; 15: MUL temp[4].xyz, temp[4].xyzz, const[12].xxxx; 16: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 17: RSQ temp[5].x, |temp[5].xxxx|; 18: MUL temp[5].xyz, temp[4].xyzz, temp[5].xxxx; 19: MUL temp[6], const[6], temp[3].xxxx; 20: MAD temp[6], const[7], temp[3].yyyy, temp[6]; 21: MAD temp[6], const[8], temp[3].zzzz, temp[6]; 22: ADD temp[6], temp[6], const[9]; 23: MAD temp[7].xyz, temp[1].xyzz, const[15].wwww, const[16].xxxx; 24: DP3 temp[8].x, temp[7].xyzz, temp[7].xyzz; 25: RSQ temp[8].x, |temp[8].xxxx|; 26: MUL temp[7].xyz, temp[7].xyzz, temp[8].xxxx; 27: MOV temp[3].xyz, -temp[3].xyzx; 28: DP3 temp[8].x, temp[3].xyzz, temp[3].xyzz; 29: RSQ temp[8].x, |temp[8].xxxx|; 30: MAD temp[3].xyz, temp[3].xyzz, temp[8].xxxx, temp[5].xyzz; 31: MUL temp[13], temp[0].xyyy, const[21]; 32: TEX temp[14], temp[13], 2D[5]; 33: MOV temp[8].xyz, temp[14]; 34: MUL temp[8].xyz, temp[8].xyzz, const[11].xyzz; 35: DP3 temp[5].x, temp[5].xyzz, temp[7].xyzz; 36: MAX temp[5].x, temp[5].xxxx, const[16].yyyy; 37: MUL temp[1].x, const[11].wwww, temp[1].wwww; 38: DP3 temp[9].x, temp[3].xyzz, temp[3].xyzz; 39: RSQ temp[9].x, |temp[9].xxxx|; 40: MUL temp[3].xyz, temp[3].xyzz, temp[9].xxxx; 41: DP3_SAT temp[3].x, temp[3].xyzz, temp[7].xyzz; 42: MUL temp[2].x, temp[2].wwww, const[16].zzzz; 43: EX2 temp[2].x, temp[2].xxxx; 44: ADD temp[2].x, temp[2].xxxx, const[15].xxxx; 45: LG2 temp[19].w, temp[3].xxxx; 46: MUL temp[19].w, temp[19].wwww, temp[2].xxxx; 47: EX2 temp[2].x, temp[19].wwww; 48: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 49: MUL temp[1].xyz, temp[1].xxxx, const[11].xyzz; 50: MAD temp[1].xyz, temp[8].xyzz, temp[5].xxxx, temp[1].xyzz; 51: TXP temp[15], temp[6].xyyw, 2D[1]; 52: MOV temp[2].xyz, temp[15]; 53: MUL temp[1].xyz, temp[1].xyzz, temp[2].xyzz; 54: DP3 temp[2].x, temp[4].xyzz, temp[4].xyzz; 55: TEX temp[16], temp[2].xxxx, 1D[2]; 56: MOV temp[2].x, temp[16]; 57: TXP temp[17], temp[6], 2DSHADOW[0]; 58: RCP temp[18].w, temp[6].wwww; 59: MUL_SAT temp[18].w, temp[6].zzzz, temp[18].wwww; 60: ADD temp[18].w, -temp[18].wwww, temp[17].xxxx; 61: CMP temp[3].x, temp[18].www1, none.0001, none.1111; 62: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 63: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 64: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: RCP temp[10].w, input[0].___w; 1: MUL temp[10].xy, input[0].xy__, temp[10].ww__; 2: MAD temp[10].xy, temp[10].xy__, const[17].xy__, const[18].xy__; 3: MOV temp[0].x, temp[10].x___; 4: MAD temp[0].y, temp[10]._y__, const[14]._x__, const[14]._y__; 5: MUL temp[11].xy, temp[0].xy__, const[19].xy__; 6: TEX temp[1], temp[11].xy__, 2D[4]; 7: MUL temp[12].xy, temp[0].xy__, const[20].xy__; 8: TEX temp[2], temp[12].xy__, 2D[3]; 9: RCP temp[3].x, input[1].z___; 10: MUL temp[3].xy, input[1].xy__, temp[3].xx__; 11: MOV temp[3].z, const[10].__x_; 12: DP3 temp[4].x, temp[2].xyz_, const[15].xyz_; 13: MUL temp[3].xyz, temp[3].xyz_, temp[4].xxx_; 14: ADD temp[4].xyz, const[13].xyz_, -temp[3].xyz_; 15: MUL temp[4].xyz, temp[4].xyz_, const[12].xxx_; 16: DP3 temp[5].x, temp[4].xyz_, temp[4].xyz_; 17: RSQ temp[5].x, |temp[5].x___|; 18: MUL temp[5].xyz, temp[4].xyz_, temp[5].xxx_; 19: MUL temp[6], const[6], temp[3].xxxx; 20: MAD temp[6], const[7], temp[3].yyyy, temp[6]; 21: MAD temp[6], const[8], temp[3].zzzz, temp[6]; 22: ADD temp[6], temp[6], const[9]; 23: MAD temp[7].xyz, temp[1].xyz_, const[15].www_, const[16].xxx_; 24: DP3 temp[8].x, temp[7].xyz_, temp[7].xyz_; 25: RSQ temp[8].x, |temp[8].x___|; 26: MUL temp[7].xyz, temp[7].xyz_, temp[8].xxx_; 27: MOV temp[3].xyz, -temp[3].xyz_; 28: DP3 temp[8].x, temp[3].xyz_, temp[3].xyz_; 29: RSQ temp[8].x, |temp[8].x___|; 30: MAD temp[3].xyz, temp[3].xyz_, temp[8].xxx_, temp[5].xyz_; 31: MUL temp[13].xy, temp[0].xy__, const[21].xy__; 32: TEX temp[14].xyz, temp[13].xy__, 2D[5]; 33: MOV temp[8].xyz, temp[14].xyz_; 34: MUL temp[8].xyz, temp[8].xyz_, const[11].xyz_; 35: DP3 temp[5].x, temp[5].xyz_, temp[7].xyz_; 36: MAX temp[5].x, temp[5].x___, const[16].y___; 37: MUL temp[1].x, const[11].w___, temp[1].w___; 38: DP3 temp[9].x, temp[3].xyz_, temp[3].xyz_; 39: RSQ temp[9].x, |temp[9].x___|; 40: MUL temp[3].xyz, temp[3].xyz_, temp[9].xxx_; 41: DP3_SAT temp[3].x, temp[3].xyz_, temp[7].xyz_; 42: MUL temp[2].x, temp[2].w___, const[16].z___; 43: EX2 temp[2].x, temp[2].x___; 44: ADD temp[2].x, temp[2].x___, const[15].x___; 45: LG2 temp[19].w, temp[3].___x; 46: MUL temp[19].w, temp[19].___w, temp[2].___x; 47: EX2 temp[2].x, temp[19].w___; 48: MUL temp[1].x, temp[1].x___, temp[2].x___; 49: MUL temp[1].xyz, temp[1].xxx_, const[11].xyz_; 50: MAD temp[1].xyz, temp[8].xyz_, temp[5].xxx_, temp[1].xyz_; 51: TXP temp[15].xyz, temp[6].xy_w, 2D[1]; 52: MOV temp[2].xyz, temp[15].xyz_; 53: MUL temp[1].xyz, temp[1].xyz_, temp[2].xyz_; 54: DP3 temp[2].x, temp[4].xyz_, temp[4].xyz_; 55: TEX temp[16].x, temp[2].x___, 1D[2]; 56: MOV temp[2].x, temp[16].x___; 57: TXP temp[17].x, temp[6].xy_w, 2DSHADOW[0]; 58: RCP temp[18].w, temp[6].___w; 59: MUL_SAT temp[18].w, temp[6].___z, temp[18].___w; 60: ADD temp[18].w, -temp[18].___w, temp[17].___x; 61: CMP temp[3].x, temp[18].w___, none.0___, none.1___; 62: MUL temp[2].x, temp[2].x___, temp[3].x___; 63: MUL temp[1].xyz, temp[1].xyz_, temp[2].xxx_; 64: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: RCP temp[10].w, input[0].___w; 1: MUL temp[10].xy, input[0].xy__, temp[10].ww__; 2: MAD temp[10].xy, temp[10].xy__, const[17].xy__, const[18].xy__; 3: MOV temp[0].x, temp[10].x___; 4: MAD temp[0].y, temp[10]._y__, const[14]._x__, const[14]._y__; 5: MUL temp[11].xy, temp[0].xy__, const[19].xy__; 6: TEX temp[1], temp[11].xy__, 2D[4]; 7: MUL temp[12].xy, temp[0].xy__, const[20].xy__; 8: TEX temp[2], temp[12].xy__, 2D[3]; 9: RCP temp[3].x, input[1].z___; 10: MUL temp[3].xy, input[1].xy__, temp[3].xx__; 11: MOV temp[3].z, const[10].__x_; 12: DP3 temp[4].x, temp[2].xyz_, const[15].xyz_; 13: MUL temp[3].xyz, temp[3].xyz_, temp[4].xxx_; 14: ADD temp[4].xyz, const[13].xyz_, -temp[3].xyz_; 15: MUL temp[4].xyz, temp[4].xyz_, const[12].xxx_; 16: DP3 temp[5].x, temp[4].xyz_, temp[4].xyz_; 17: RSQ temp[5].x, |temp[5].x___|; 18: MUL temp[5].xyz, temp[4].xyz_, temp[5].xxx_; 19: MUL temp[6], const[6], temp[3].xxxx; 20: MAD temp[6], const[7], temp[3].yyyy, temp[6]; 21: MAD temp[6], const[8], temp[3].zzzz, temp[6]; 22: ADD temp[6], temp[6], const[9]; 23: MAD temp[7].xyz, temp[1].xyz_, const[15].www_, const[16].xxx_; 24: DP3 temp[8].x, temp[7].xyz_, temp[7].xyz_; 25: RSQ temp[8].x, |temp[8].x___|; 26: MUL temp[7].xyz, temp[7].xyz_, temp[8].xxx_; 27: MOV temp[3].xyz, -temp[3].xyz_; 28: DP3 temp[8].x, temp[3].xyz_, temp[3].xyz_; 29: RSQ temp[8].x, |temp[8].x___|; 30: MAD temp[3].xyz, temp[3].xyz_, temp[8].xxx_, temp[5].xyz_; 31: MUL temp[13].xy, temp[0].xy__, const[21].xy__; 32: TEX temp[14].xyz, temp[13].xy__, 2D[5]; 33: MOV temp[8].xyz, temp[14].xyz_; 34: MUL temp[8].xyz, temp[8].xyz_, const[11].xyz_; 35: DP3 temp[5].x, temp[5].xyz_, temp[7].xyz_; 36: MAX temp[5].x, temp[5].x___, const[16].y___; 37: MUL temp[1].x, const[11].w___, temp[1].w___; 38: DP3 temp[9].x, temp[3].xyz_, temp[3].xyz_; 39: RSQ temp[9].x, |temp[9].x___|; 40: MUL temp[3].xyz, temp[3].xyz_, temp[9].xxx_; 41: DP3_SAT temp[3].x, temp[3].xyz_, temp[7].xyz_; 42: MUL temp[2].x, temp[2].w___, const[16].z___; 43: EX2 temp[2].x, temp[2].x___; 44: ADD temp[2].x, temp[2].x___, const[15].x___; 45: LG2 temp[19].w, temp[3].___x; 46: MUL temp[19].w, temp[19].___w, temp[2].___x; 47: EX2 temp[2].x, temp[19].w___; 48: MUL temp[1].x, temp[1].x___, temp[2].x___; 49: MUL temp[1].xyz, temp[1].xxx_, const[11].xyz_; 50: MAD temp[1].xyz, temp[8].xyz_, temp[5].xxx_, temp[1].xyz_; 51: TXP temp[15].xyz, temp[6].xy_w, 2D[1]; 52: MOV temp[2].xyz, temp[15].xyz_; 53: MUL temp[1].xyz, temp[1].xyz_, temp[2].xyz_; 54: DP3 temp[2].x, temp[4].xyz_, temp[4].xyz_; 55: TEX temp[16].x, temp[2].x___, 1D[2]; 56: MOV temp[2].x, temp[16].x___; 57: TXP temp[17].x, temp[6].xy_w, 2DSHADOW[0]; 58: RCP temp[18].w, temp[6].___w; 59: MUL_SAT temp[18].w, temp[6].___z, temp[18].___w; 60: ADD temp[18].w, -temp[18].___w, temp[17].___x; 61: CMP temp[3].x, temp[18].w___, none.0___, none.1___; 62: MUL temp[2].x, temp[2].x___, temp[3].x___; 63: MUL temp[1].xyz, temp[1].xyz_, temp[2].xxx_; 64: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: RCP temp[20].w, input[0].___w; 1: MUL temp[21].xy, input[0].xy__, temp[20].ww__; 2: MAD temp[22].xy, temp[21].xy__, const[17].xy__, const[18].xy__; 3: MOV temp[23].x, temp[22].x___; 4: MAD temp[23].y, temp[22]._y__, const[14]._x__, const[14]._y__; 5: MUL temp[24].xy, temp[23].xy__, const[19].xy__; 6: TEX temp[25], temp[24].xy__, 2D[4]; 7: MUL temp[26].xy, temp[23].xy__, const[20].xy__; 8: TEX temp[27], temp[26].xy__, 2D[3]; 9: RCP temp[28].x, input[1].z___; 10: MUL temp[29].xy, input[1].xy__, temp[28].xx__; 11: MOV temp[29].z, const[10].__x_; 12: DP3 temp[30].x, temp[27].xyz_, const[15].xyz_; 13: MUL temp[31].xyz, temp[29].xyz_, temp[30].xxx_; 14: ADD temp[32].xyz, const[13].xyz_, -temp[31].xyz_; 15: MUL temp[33].xyz, temp[32].xyz_, const[12].xxx_; 16: DP3 temp[34].x, temp[33].xyz_, temp[33].xyz_; 17: RSQ temp[35].x, |temp[34].x___|; 18: MUL temp[36].xyz, temp[33].xyz_, temp[35].xxx_; 19: MUL temp[37], const[6], temp[31].xxxx; 20: MAD temp[38], const[7], temp[31].yyyy, temp[37]; 21: MAD temp[39], const[8], temp[31].zzzz, temp[38]; 22: ADD temp[40], temp[39], const[9]; 23: MAD temp[41].xyz, temp[25].xyz_, const[15].www_, const[16].xxx_; 24: DP3 temp[42].x, temp[41].xyz_, temp[41].xyz_; 25: RSQ temp[43].x, |temp[42].x___|; 26: MUL temp[44].xyz, temp[41].xyz_, temp[43].xxx_; 27: MOV temp[45].xyz, -temp[31].xyz_; 28: DP3 temp[46].x, temp[45].xyz_, temp[45].xyz_; 29: RSQ temp[47].x, |temp[46].x___|; 30: MAD temp[48].xyz, temp[45].xyz_, temp[47].xxx_, temp[36].xyz_; 31: MUL temp[49].xy, temp[23].xy__, const[21].xy__; 32: TEX temp[50].xyz, temp[49].xy__, 2D[5]; 33: MOV temp[51].xyz, temp[50].xyz_; 34: MUL temp[52].xyz, temp[51].xyz_, const[11].xyz_; 35: DP3 temp[53].x, temp[36].xyz_, temp[44].xyz_; 36: MAX temp[54].x, temp[53].x___, const[16].y___; 37: MUL temp[55].x, const[11].w___, temp[25].w___; 38: DP3 temp[56].x, temp[48].xyz_, temp[48].xyz_; 39: RSQ temp[57].x, |temp[56].x___|; 40: MUL temp[58].xyz, temp[48].xyz_, temp[57].xxx_; 41: DP3_SAT temp[59].x, temp[58].xyz_, temp[44].xyz_; 42: MUL temp[60].x, temp[27].w___, const[16].z___; 43: EX2 temp[61].x, temp[60].x___; 44: ADD temp[62].x, temp[61].x___, const[15].x___; 45: LG2 temp[63].w, temp[59].___x; 46: MUL temp[64].w, temp[63].___w, temp[62].___x; 47: EX2 temp[65].x, temp[64].w___; 48: MUL temp[66].x, temp[55].x___, temp[65].x___; 49: MUL temp[67].xyz, temp[66].xxx_, const[11].xyz_; 50: MAD temp[68].xyz, temp[52].xyz_, temp[54].xxx_, temp[67].xyz_; 51: TXP temp[69].xyz, temp[40].xy_w, 2D[1]; 52: MOV temp[70].xyz, temp[69].xyz_; 53: MUL temp[71].xyz, temp[68].xyz_, temp[70].xyz_; 54: DP3 temp[72].x, temp[33].xyz_, temp[33].xyz_; 55: TEX temp[73].x, temp[72].x___, 1D[2]; 56: MOV temp[74].x, temp[73].x___; 57: TXP temp[75].x, temp[40].xy_w, 2DSHADOW[0]; 58: RCP temp[76].w, temp[40].___w; 59: MUL_SAT temp[77].w, temp[40].___z, temp[76].___w; 60: ADD temp[78].w, -temp[77].___w, temp[75].___x; 61: CMP temp[79].x, temp[78].w___, none.0___, none.1___; 62: MUL temp[80].x, temp[74].x___, temp[79].x___; 63: MUL temp[25].xyz, temp[71].xyz_, temp[80].xxx_; 64: MOV output[0], temp[25]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: RCP temp[20].w, input[0].___w; 1: MUL temp[21].xy, input[0].xy__, temp[20].ww__; 2: MAD temp[22].xy, temp[21].xy__, const[17].xy__, const[18].xy__; 3: MOV temp[23].x, temp[22].x___; 4: MAD temp[23].y, temp[22]._y__, const[14]._x__, const[14]._y__; 5: MUL temp[24].xy, temp[23].xy__, const[19].xy__; 6: TEX temp[25], temp[24].xy__, 2D[4]; 7: MUL temp[26].xy, temp[23].xy__, const[20].xy__; 8: TEX temp[27], temp[26].xy__, 2D[3]; 9: RCP temp[28].x, input[1].z___; 10: MUL temp[29].xy, input[1].xy__, temp[28].xx__; 11: MOV temp[29].z, const[10].__x_; 12: DP3 temp[30].x, temp[27].xyz_, const[15].xyz_; 13: MUL temp[31].xyz, temp[29].xyz_, temp[30].xxx_; 14: MUL temp[33].xyz, (const[13] - temp[31]).xyz_, const[12].xxx_; 15: DP3 temp[34].x, temp[33].xyz_, temp[33].xyz_; 16: RSQ temp[35].x, |temp[34].x___|; 17: MUL temp[36].xyz, temp[33].xyz_, temp[35].xxx_; 18: MUL temp[37], const[6], temp[31].xxxx; 19: MAD temp[38], const[7], temp[31].yyyy, temp[37]; 20: MAD temp[39], const[8], temp[31].zzzz, temp[38]; 21: ADD temp[40], temp[39], const[9]; 22: MAD temp[41].xyz, temp[25].xyz_, const[15].www_, none.-1-1-1_; 23: DP3 temp[42].x, temp[41].xyz_, temp[41].xyz_; 24: RSQ temp[43].x, |temp[42].x___|; 25: MUL temp[44].xyz, temp[41].xyz_, temp[43].xxx_; 26: DP3 temp[46].x, temp[31].-x-y-z_, temp[31].-x-y-z_; 27: RSQ temp[47].x, |temp[46].x___|; 28: MAD temp[48].xyz, temp[31].-x-y-z_, temp[47].xxx_, temp[36].xyz_; 29: MUL temp[49].xy, temp[23].xy__, const[21].xy__; 30: TEX temp[50].xyz, temp[49].xy__, 2D[5]; 31: MUL temp[52].xyz, temp[50].xyz_, const[11].xyz_; 32: DP3 temp[53].x, temp[36].xyz_, temp[44].xyz_; 33: MAX temp[54].x, temp[53].x___, none.0___; 34: MUL temp[55].x, const[11].w___, temp[25].w___; 35: DP3 temp[56].x, temp[48].xyz_, temp[48].xyz_; 36: RSQ temp[57].x, |temp[56].x___|; 37: MUL temp[58].xyz, temp[48].xyz_, temp[57].xxx_; 38: DP3_SAT temp[59].x, temp[58].xyz_, temp[44].xyz_; 39: MUL temp[60].x, temp[27].w___, const[16].z___; 40: EX2 temp[61].x, temp[60].x___; 41: ADD temp[62].x, temp[61].x___, none.1___; 42: LG2 temp[63].w, temp[59].___x; 43: MUL temp[64].w, temp[63].___w, temp[62].___x; 44: EX2 temp[65].x, temp[64].w___; 45: MUL temp[66].x, temp[55].x___, temp[65].x___; 46: MUL temp[67].xyz, temp[66].xxx_, const[11].xyz_; 47: MAD temp[68].xyz, temp[52].xyz_, temp[54].xxx_, temp[67].xyz_; 48: TXP temp[69].xyz, temp[40].xy_w, 2D[1]; 49: MUL temp[71].xyz, temp[68].xyz_, temp[69].xyz_; 50: DP3 temp[72].x, temp[33].xyz_, temp[33].xyz_; 51: TEX temp[73].x, temp[72].x___, 1D[2]; 52: TXP temp[75].x, temp[40].xy_w, 2DSHADOW[0]; 53: RCP temp[76].w, temp[40].___w; 54: MUL_SAT temp[77].w, temp[40].___z, temp[76].___w; 55: ADD temp[78].w, -temp[77].___w, temp[75].___x; 56: CMP temp[79].x, temp[78].w___, none.0___, none.1___; 57: MUL temp[80].x, temp[73].x___, temp[79].x___; 58: MUL temp[25].xyz, temp[71].xyz_, temp[80].xxx_; 59: MOV output[0], temp[25]; CONST[15] = { 1.0000 0.0039 0.0000 2.0000 } CONST[16] = { -1.0000 0.0000 10.0000 0.0000 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: RCP temp[20].w, input[0].___w; 1: MUL temp[21].xy, input[0].xy__, temp[20].ww__; 2: MAD temp[22].xy, temp[21].xy__, const[17].xy__, const[18].xy__; 3: MOV temp[23].x, temp[22].x___; 4: MAD temp[23].y, temp[22]._y__, const[14]._x__, const[14]._y__; 5: MUL temp[24].xy, temp[23].xy__, const[19].xy__; 6: TEX temp[25], temp[24].xy__, 2D[4]; 7: MUL temp[26].xy, temp[23].xy__, const[20].xy__; 8: TEX temp[27], temp[26].xy__, 2D[3]; 9: RCP temp[28].x, input[1].z___; 10: MUL temp[29].xy, input[1].xy__, temp[28].xx__; 11: MOV temp[29].z, const[10].__x_; 12: DP3 temp[30].x, temp[27].xyz_, const[15].xyz_; 13: MUL temp[31].xyz, temp[29].xyz_, temp[30].xxx_; 14: MUL temp[33].xyz, (const[13] - temp[31]).xyz_, const[12].xxx_; 15: DP3 temp[34].x, temp[33].xyz_, temp[33].xyz_; 16: RSQ temp[35].x, |temp[34].x___|; 17: MUL temp[36].xyz, temp[33].xyz_, temp[35].xxx_; 18: MUL temp[37], const[6], temp[31].xxxx; 19: MAD temp[38], const[7], temp[31].yyyy, temp[37]; 20: MAD temp[39], const[8], temp[31].zzzz, temp[38]; 21: ADD temp[40], temp[39], const[9]; 22: MAD temp[41].xyz, temp[25].xyz_, const[15].www_, none.-1-1-1_; 23: DP3 temp[42].x, temp[41].xyz_, temp[41].xyz_; 24: RSQ temp[43].x, |temp[42].x___|; 25: MUL temp[44].xyz, temp[41].xyz_, temp[43].xxx_; 26: DP3 temp[46].x, temp[31].-x-y-z_, temp[31].-x-y-z_; 27: RSQ temp[47].x, |temp[46].x___|; 28: MAD temp[48].xyz, temp[31].-x-y-z_, temp[47].xxx_, temp[36].xyz_; 29: MUL temp[49].xy, temp[23].xy__, const[21].xy__; 30: TEX temp[50].xyz, temp[49].xy__, 2D[5]; 31: MUL temp[52].xyz, temp[50].xyz_, const[11].xyz_; 32: DP3 temp[53].x, temp[36].xyz_, temp[44].xyz_; 33: MAX temp[54].x, temp[53].x___, none.0___; 34: MUL temp[55].x, const[11].w___, temp[25].w___; 35: DP3 temp[56].x, temp[48].xyz_, temp[48].xyz_; 36: RSQ temp[57].x, |temp[56].x___|; 37: MUL temp[58].xyz, temp[48].xyz_, temp[57].xxx_; 38: DP3_SAT temp[59].x, temp[58].xyz_, temp[44].xyz_; 39: MUL temp[60].x, temp[27].w___, const[16].z___; 40: EX2 temp[61].x, temp[60].x___; 41: ADD temp[62].x, temp[61].x___, none.1___; 42: LG2 temp[63].w, temp[59].___x; 43: MUL temp[64].w, temp[63].___w, temp[62].___x; 44: EX2 temp[65].x, temp[64].w___; 45: MUL temp[66].x, temp[55].x___, temp[65].x___; 46: MUL temp[67].xyz, temp[66].xxx_, const[11].xyz_; 47: MAD temp[68].xyz, temp[52].xyz_, temp[54].xxx_, temp[67].xyz_; 48: TXP temp[69].xyz, temp[40].xy_w, 2D[1]; 49: MUL temp[71].xyz, temp[68].xyz_, temp[69].xyz_; 50: DP3 temp[72].x, temp[33].xyz_, temp[33].xyz_; 51: TEX temp[73].x, temp[72].x___, 1D[2]; 52: TXP temp[75].x, temp[40].xy_w, 2DSHADOW[0]; 53: RCP temp[76].w, temp[40].___w; 54: MUL_SAT temp[77].w, temp[40].___z, temp[76].___w; 55: ADD temp[78].w, -temp[77].___w, temp[75].___x; 56: CMP temp[79].x, temp[78].w___, none.0___, none.1___; 57: MUL temp[80].x, temp[73].x___, temp[79].x___; 58: MUL temp[25].xyz, temp[71].xyz_, temp[80].xxx_; 59: MOV output[0], temp[25]; CONST[9] = { 1.0000 0.0039 0.0000 2.0000 } CONST[10] = { -1.0000 0.0000 10.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: RCP temp[20].w, input[0].___w; 1: MUL temp[21].xy, input[0].xy__, temp[20].ww__; 2: MAD temp[22].xy, temp[21].xy__, const[11].xy__, const[12].xy__; 3: MOV temp[23].x, temp[22].x___; 4: MAD temp[23].y, temp[22]._y__, const[8]._x__, const[8]._y__; 5: MUL temp[24].xy, temp[23].xy__, const[13].xy__; 6: TEX temp[25], temp[24].xy__, 2D[4]; 7: MUL temp[26].xy, temp[23].xy__, const[14].xy__; 8: TEX temp[27], temp[26].xy__, 2D[3]; 9: RCP temp[28].x, input[1].z___; 10: MUL temp[29].xy, input[1].xy__, temp[28].xx__; 11: MOV temp[29].z, const[4].__x_; 12: DP3 temp[30].x, temp[27].xyz_, const[9].xyz_; 13: MUL temp[31].xyz, temp[29].xyz_, temp[30].xxx_; 14: MUL temp[33].xyz, (const[7] - temp[31]).xyz_, const[6].xxx_; 15: DP3 temp[34].x, temp[33].xyz_, temp[33].xyz_; 16: RSQ temp[35].x, |temp[34].x___|; 17: MUL temp[36].xyz, temp[33].xyz_, temp[35].xxx_; 18: MUL temp[37], const[0], temp[31].xxxx; 19: MAD temp[38], const[1], temp[31].yyyy, temp[37]; 20: MAD temp[39], const[2], temp[31].zzzz, temp[38]; 21: ADD temp[40], temp[39], const[3]; 22: MAD temp[41].xyz, temp[25].xyz_, const[9].www_, none.-1-1-1_; 23: DP3 temp[42].x, temp[41].xyz_, temp[41].xyz_; 24: RSQ temp[43].x, |temp[42].x___|; 25: MUL temp[44].xyz, temp[41].xyz_, temp[43].xxx_; 26: DP3 temp[46].x, temp[31].-x-y-z_, temp[31].-x-y-z_; 27: RSQ temp[47].x, |temp[46].x___|; 28: MAD temp[48].xyz, temp[31].-x-y-z_, temp[47].xxx_, temp[36].xyz_; 29: MUL temp[49].xy, temp[23].xy__, const[15].xy__; 30: TEX temp[50].xyz, temp[49].xy__, 2D[5]; 31: MUL temp[52].xyz, temp[50].xyz_, const[5].xyz_; 32: DP3 temp[53].x, temp[36].xyz_, temp[44].xyz_; 33: MAX temp[54].x, temp[53].x___, none.0___; 34: MUL temp[55].x, const[5].w___, temp[25].w___; 35: DP3 temp[56].x, temp[48].xyz_, temp[48].xyz_; 36: RSQ temp[57].x, |temp[56].x___|; 37: MUL temp[58].xyz, temp[48].xyz_, temp[57].xxx_; 38: DP3_SAT temp[59].x, temp[58].xyz_, temp[44].xyz_; 39: MUL temp[60].x, temp[27].w___, const[10].z___; 40: EX2 temp[61].x, temp[60].x___; 41: ADD temp[62].x, temp[61].x___, none.1___; 42: LG2 temp[63].w, temp[59].___x; 43: MUL temp[64].w, temp[63].___w, temp[62].___x; 44: EX2 temp[65].x, temp[64].w___; 45: MUL temp[66].x, temp[55].x___, temp[65].x___; 46: MUL temp[67].xyz, temp[66].xxx_, const[5].xyz_; 47: MAD temp[68].xyz, temp[52].xyz_, temp[54].xxx_, temp[67].xyz_; 48: TXP temp[69].xyz, temp[40].xy_w, 2D[1]; 49: MUL temp[71].xyz, temp[68].xyz_, temp[69].xyz_; 50: DP3 temp[72].x, temp[33].xyz_, temp[33].xyz_; 51: TEX temp[73].x, temp[72].x___, 1D[2]; 52: TXP temp[75].x, temp[40].xy_w, 2DSHADOW[0]; 53: RCP temp[76].w, temp[40].___w; 54: MUL_SAT temp[77].w, temp[40].___z, temp[76].___w; 55: ADD temp[78].w, -temp[77].___w, temp[75].___x; 56: CMP temp[79].x, temp[78].w___, none.0___, none.1___; 57: MUL temp[80].x, temp[73].x___, temp[79].x___; 58: MUL temp[25].xyz, temp[71].xyz_, temp[80].xxx_; 59: MOV output[0], temp[25]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[20].w, src0.w 1: src0.xyz = input[0], src0.w = temp[20] MAD temp[21].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[21], src1.xyz = const[11], src2.xyz = const[12] MAD temp[22].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[22] MAD temp[23].x, src0.x__, src0.111, src0.000 4: src0.xyz = temp[22], src1.xyz = const[8] MAD temp[23].y, src0._y_, src1._x_, src1._y_ 5: src0.xyz = temp[23], src1.xyz = const[13] MAD temp[24].xy, src0.xy_, src1.xy_, src0.000 6: TEX temp[25], temp[24].xy__, 2D[4]; 7: src0.xyz = temp[23], src1.xyz = const[14] MAD temp[26].xy, src0.xy_, src1.xy_, src0.000 8: TEX temp[27], temp[26].xy__, 2D[3]; 9: src0.xyz = input[1] REPL_ALPHA temp[28].x RCP, src0.z 10: src0.xyz = input[1], src1.xyz = temp[28] MAD temp[29].xy, src0.xy_, src1.xx_, src0.000 11: src0.xyz = const[4] MAD temp[29].z, src0.__x, src0.111, src0.000 12: src0.xyz = temp[27], src1.xyz = const[9] DP3 temp[30].x, src0.xyz, src1.xyz 13: src0.xyz = temp[29], src1.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.xxx, src0.000 14: src0.xyz = temp[31], src1.xyz = const[7], src2.xyz = const[6], srcp.xyz = (src1 - src0) MAD temp[33].xyz, srcp.xyz, src2.xxx, src0.000 15: src0.xyz = temp[33] DP3 temp[34].x, src0.xyz, src0.xyz 16: src0.xyz = temp[34] REPL_ALPHA temp[35].x RSQ, |src0.x| 17: src0.xyz = temp[33], src1.xyz = temp[35] MAD temp[36].xyz, src0.xyz, src1.xxx, src0.000 18: src0.xyz = const[0], src0.w = const[0], src1.xyz = temp[31] MAD temp[37].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[37].w, src0.w, src1.x, src0.0 19: src0.xyz = const[1], src0.w = const[1], src1.xyz = temp[31], src1.w = temp[37], src2.xyz = temp[37] MAD temp[38].xyz, src0.xyz, src1.yyy, src2.xyz MAD temp[38].w, src0.w, src1.y, src1.w 20: src0.xyz = const[2], src0.w = const[2], src1.xyz = temp[31], src1.w = temp[38], src2.xyz = temp[38] MAD temp[39].xyz, src0.xyz, src1.zzz, src2.xyz MAD temp[39].w, src0.w, src1.z, src1.w 21: src0.xyz = temp[39], src0.w = temp[39], src1.xyz = const[3], src1.w = const[3] MAD temp[40].xyz, src0.xyz, src0.111, src1.xyz MAD temp[40].w, src0.w, src0.1, src1.w 22: src0.xyz = temp[25], src0.w = const[9] MAD temp[41].xyz, src0.xyz, src0.www, -src0.111 23: src0.xyz = temp[41] DP3 temp[42].x, src0.xyz, src0.xyz 24: src0.xyz = temp[42] REPL_ALPHA temp[43].x RSQ, |src0.x| 25: src0.xyz = temp[41], src1.xyz = temp[43] MAD temp[44].xyz, src0.xyz, src1.xxx, src0.000 26: src0.xyz = temp[31] DP3 temp[46].x, -src0.xyz, -src0.xyz 27: src0.xyz = temp[46] REPL_ALPHA temp[47].x RSQ, |src0.x| 28: src0.xyz = temp[31], src1.xyz = temp[47], src2.xyz = temp[36] MAD temp[48].xyz, -src0.xyz, src1.xxx, src2.xyz 29: src0.xyz = temp[23], src1.xyz = const[15] MAD temp[49].xy, src0.xy_, src1.xy_, src0.000 30: TEX temp[50].xyz, temp[49].xy__, 2D[5]; 31: src0.xyz = temp[50], src1.xyz = const[5] MAD temp[52].xyz, src0.xyz, src1.xyz, src0.000 32: src0.xyz = temp[36], src1.xyz = temp[44] DP3 temp[53].x, src0.xyz, src1.xyz 33: src0.xyz = temp[53] MAX temp[54].x, src0.x__, src0.0__ 34: src0.w = const[5], src1.w = temp[25] MAD temp[55].x, src0.w__, src1.w__, src0.000 35: src0.xyz = temp[48] DP3 temp[56].x, src0.xyz, src0.xyz 36: src0.xyz = temp[56] REPL_ALPHA temp[57].x RSQ, |src0.x| 37: src0.xyz = temp[48], src1.xyz = temp[57] MAD temp[58].xyz, src0.xyz, src1.xxx, src0.000 38: src0.xyz = temp[58], src1.xyz = temp[44] DP3_SAT temp[59].x, src0.xyz, src1.xyz 39: src0.xyz = const[10], src0.w = temp[27] MAD temp[60].x, src0.w__, src0.z__, src0.000 40: src0.xyz = temp[60] REPL_ALPHA temp[61].x EX2, src0.x 41: src0.xyz = temp[61] MAD temp[62].x, src0.x__, src0.111, src0.1__ 42: src0.xyz = temp[59] LG2 temp[63].w, src0.x 43: src0.xyz = temp[62], src0.w = temp[63] MAD temp[64].w, src0.w, src0.x, src0.0 44: src0.w = temp[64] REPL_ALPHA temp[65].x EX2, src0.w 45: src0.xyz = temp[55], src1.xyz = temp[65] MAD temp[66].x, src0.x__, src1.x__, src0.000 46: src0.xyz = temp[66], src1.xyz = const[5] MAD temp[67].xyz, src0.xxx, src1.xyz, src0.000 47: src0.xyz = temp[52], src1.xyz = temp[54], src2.xyz = temp[67] MAD temp[68].xyz, src0.xyz, src1.xxx, src2.xyz 48: TXP temp[69].xyz, temp[40].xy_w, 2D[1]; 49: src0.xyz = temp[68], src1.xyz = temp[69] MAD temp[71].xyz, src0.xyz, src1.xyz, src0.000 50: src0.xyz = temp[33] DP3 temp[72].x, src0.xyz, src0.xyz 51: TEX temp[73].x, temp[72].x___, 1D[2]; 52: TXP temp[75].x, temp[40].xy_w, 2DSHADOW[0]; 53: src0.w = temp[40] RCP temp[76].w, src0.w 54: src0.xyz = temp[40], src0.w = temp[76] MAD_SAT temp[77].w, src0.z, src0.w, src0.0 55: src0.xyz = temp[75], src0.w = temp[77] MAD temp[78].w, -src0.w, src0.1, src0.x 56: src0.w = temp[78] CMP temp[79].x, src0.1__, src0.0__, src0.w__ 57: src0.xyz = temp[73], src1.xyz = temp[79] MAD temp[80].x, src0.x__, src1.x__, src0.000 58: src0.xyz = temp[71], src1.xyz = temp[80] MAD temp[25].xyz, src0.xyz, src1.xxx, src0.000 59: src0.xyz = temp[25], src0.w = temp[25] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = const[4], src0.w = input[0] MAD temp[29].z, src0.__x, src0.111, src0.000 RCP temp[20].w, src0.w 1: src0.xyz = input[0], src0.w = temp[20], src1.xyz = input[1] MAD temp[21].xy, src0.xy_, src0.ww_, src0.000 RCP temp[28].w, src1.z 2: src0.xyz = temp[21], src1.xyz = const[11], src2.xyz = const[12] MAD temp[22].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = input[1], src0.w = temp[28], src1.xyz = temp[28] MAD temp[29].xy, src0.xy_, src0.ww_, src0.000 4: src0.xyz = temp[22], src1.xyz = const[8] MAD temp[23].y, src0._y_, src1._x_, src1._y_ 5: src0.xyz = temp[22] MAD temp[23].x, src0.x__, src0.111, src0.000 6: src0.xyz = temp[23], src1.xyz = const[15] MAD temp[49].xy, src0.xy_, src1.xy_, src0.000 7: src0.xyz = temp[23], src1.xyz = const[14] MAD temp[26].xy, src0.xy_, src1.xy_, src0.000 8: src0.xyz = temp[23], src1.xyz = const[13] MAD temp[24].xy, src0.xy_, src1.xy_, src0.000 9: BEGIN_TEX; 10: TEX temp[50].xyz, temp[49].xy__, 2D[5]; 11: TEX temp[27], temp[26].xy__, 2D[3]; 12: TEX temp[25], temp[24].xy__, 2D[4] SEM_WAIT SEM_ACQUIRE; 13: src0.xyz = temp[27], src0.w = const[5], src1.xyz = const[9], src1.w = temp[25] SEM_WAIT DP3 temp[30].x, src0.xyz, src1.xyz MAD temp[55].w, src0.w, src1.w, src0.0 14: src0.xyz = temp[50], src0.w = temp[27], src1.xyz = const[5], src2.xyz = const[10] MAD temp[52].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[60].w, src0.w, src2.z, src0.0 15: src0.xyz = temp[25], src0.w = const[9] MAD temp[41].xyz, src0.xyz, src0.www, -src0.111 16: src0.xyz = temp[29], src1.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.xxx, src0.000 17: src0.xyz = temp[41], src0.w = temp[60] DP3 temp[42].x, src0.xyz, src0.xyz EX2 temp[61].w, src0.w 18: src0.xyz = temp[31], src0.w = temp[61], src1.xyz = const[7], src2.xyz = const[6], srcp.xyz = (src1 - src0) MAD temp[33].xyz, srcp.xyz, src2.xxx, src0.000 MAD temp[62].w, src0.w, src0.1, src0.1 19: src0.xyz = temp[31], src1.xyz = temp[42] DP3 temp[46].x, -src0.xyz, -src0.xyz RSQ temp[43].w, |src1.x| 20: src0.xyz = temp[33], src1.xyz = temp[46] DP3 temp[72].x, src0.xyz, src0.xyz RSQ temp[47].w, |src1.x| 21: src0.xyz = const[0], src0.w = const[0], src1.xyz = temp[31] MAD temp[37].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[37].w, src0.w, src1.x, src0.0 22: src0.xyz = temp[41], src0.w = temp[43], src1.xyz = temp[43] MAD temp[44].xyz, src0.xyz, src0.www, src0.000 23: src0.xyz = const[1], src0.w = const[1], src1.xyz = temp[31], src1.w = temp[37], src2.xyz = temp[37] MAD temp[38].xyz, src0.xyz, src1.yyy, src2.xyz MAD temp[38].w, src0.w, src1.y, src1.w 24: src0.xyz = temp[33] DP3 temp[34].x, src0.xyz, src0.xyz 25: src0.xyz = const[2], src0.w = const[2], src1.xyz = temp[31], src1.w = temp[38], src2.xyz = temp[38] MAD temp[39].xyz, src0.xyz, src1.zzz, src2.xyz MAD temp[39].w, src0.w, src1.z, src1.w 26: src0.xyz = temp[39], src0.w = temp[39], src1.xyz = const[3], src1.w = const[3] MAD temp[40].xyz, src0.xyz, src0.111, src1.xyz MAD temp[40].w, src0.w, src0.1, src1.w 27: src0.xyz = temp[34] RSQ temp[35].w, |src0.x| 28: src0.xyz = temp[33], src0.w = temp[35], src1.xyz = temp[35], src1.w = temp[40] MAD temp[36].xyz, src0.xyz, src0.www, src0.000 RCP temp[76].w, src1.w 29: src0.xyz = temp[36], src0.w = temp[76], src1.xyz = temp[44], src2.xyz = temp[40] DP3 temp[53].x, src0.xyz, src1.xyz MAD_SAT temp[77].w, src2.z, src0.w, src0.0 30: src0.xyz = temp[31], src0.w = temp[47], src1.xyz = temp[47], src2.xyz = temp[36] MAD temp[48].xyz, -src0.xyz, src0.www, src2.xyz 31: src0.xyz = temp[48], src1.xyz = temp[53] DP3 temp[56].x, src0.xyz, src0.xyz MAX temp[54].w, src1.x, src0.0 32: src0.xyz = temp[56] REPL_ALPHA temp[57].x RSQ, |src0.x| 33: src0.xyz = temp[48], src1.xyz = temp[57] MAD temp[58].xyz, src0.xyz, src1.xxx, src0.000 34: src0.xyz = temp[58], src1.xyz = temp[44] DP3_SAT temp[59].x, src0.xyz, src1.xyz 35: src0.xyz = temp[59] LG2 temp[63].w, src0.x 36: src0.xyz = temp[62], src0.w = temp[63], src1.w = temp[62] MAD temp[64].w, src0.w, src1.w, src0.0 37: src0.w = temp[64] REPL_ALPHA temp[65].x EX2, src0.w 38: src0.xyz = temp[55], src0.w = temp[55], src1.xyz = temp[65] MAD temp[66].x, src0.w__, src1.x__, src0.000 39: src0.xyz = temp[66], src1.xyz = const[5] MAD temp[67].xyz, src0.xxx, src1.xyz, src0.000 40: src0.xyz = temp[52], src0.w = temp[54], src1.xyz = temp[54], src2.xyz = temp[67] MAD temp[68].xyz, src0.xyz, src0.www, src2.xyz 41: BEGIN_TEX; 42: TEX temp[73].x, temp[72].x___, 1D[2]; 43: TXP temp[75].x, temp[40].xy_w, 2DSHADOW[0]; 44: TXP temp[69].xyz, temp[40].xy_w, 2D[1] SEM_WAIT SEM_ACQUIRE; 45: src0.xyz = temp[68], src0.w = temp[77], src1.xyz = temp[69], src2.xyz = temp[75] SEM_WAIT MAD temp[71].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[78].w, -src0.w, src0.1, src2.x 46: src0.w = temp[78] CMP temp[79].x, src0.1__, src0.0__, src0.w__ 47: src0.xyz = temp[73], src1.xyz = temp[79] MAD temp[80].x, src0.x__, src1.x__, src0.000 48: src0.xyz = temp[71], src1.xyz = temp[80] MAD temp[25].xyz, src0.xyz, src1.xxx, src0.000 49: src0.xyz = temp[25], src0.w = temp[25] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = const[4], src0.w = input[0] MAD temp[29].z, src0.__x, src0.111, src0.000 RCP temp[20].w, src0.w 1: src0.xyz = input[0], src0.w = temp[20], src1.xyz = input[1] MAD temp[21].xy, src0.xy_, src0.ww_, src0.000 RCP temp[28].w, src1.z 2: src0.xyz = temp[21], src1.xyz = const[11], src2.xyz = const[12] MAD temp[22].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = input[1], src0.w = temp[28] MAD temp[29].xy, src0.xy_, src0.ww_, src0.000 4: src0.xyz = temp[22], src1.xyz = const[8] MAD temp[23].y, src0._y_, src1._x_, src1._y_ 5: src0.xyz = temp[22] MAD temp[23].x, src0.x__, src0.111, src0.000 6: src0.xyz = temp[23], src1.xyz = const[15] MAD temp[49].xy, src0.xy_, src1.xy_, src0.000 7: src0.xyz = temp[23], src1.xyz = const[14] MAD temp[26].xy, src0.xy_, src1.xy_, src0.000 8: src0.xyz = temp[23], src1.xyz = const[13] MAD temp[24].xy, src0.xy_, src1.xy_, src0.000 9: BEGIN_TEX; 10: TEX temp[50].xyz, temp[49].xy__, 2D[5]; 11: TEX temp[27], temp[26].xy__, 2D[3]; 12: TEX temp[25], temp[24].xy__, 2D[4] SEM_WAIT SEM_ACQUIRE; 13: src0.xyz = temp[27], src0.w = const[5], src1.xyz = const[9], src1.w = temp[25] SEM_WAIT DP3 temp[30].x, src0.xyz, src1.xyz MAD temp[55].w, src0.w, src1.w, src0.0 14: src0.xyz = temp[50], src0.w = temp[27], src1.xyz = const[5], src2.xyz = const[10] MAD temp[52].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[60].w, src0.w, src2.z, src0.0 15: src0.xyz = temp[25], src0.w = const[9] MAD temp[41].xyz, src0.xyz, src0.www, -src0.111 16: src0.xyz = temp[29], src1.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.xxx, src0.000 17: src0.xyz = temp[41], src0.w = temp[60] DP3 temp[42].x, src0.xyz, src0.xyz EX2 temp[61].w, src0.w 18: src0.xyz = temp[31], src0.w = temp[61], src1.xyz = const[7], src2.xyz = const[6], srcp.xyz = (src1 - src0) MAD temp[33].xyz, srcp.xyz, src2.xxx, src0.000 MAD temp[62].w, src0.w, src0.1, src0.1 19: src0.xyz = temp[31], src1.xyz = temp[42] DP3 temp[46].x, -src0.xyz, -src0.xyz RSQ temp[43].w, |src1.x| 20: src0.xyz = temp[33], src1.xyz = temp[46] DP3 temp[72].x, src0.xyz, src0.xyz RSQ temp[47].w, |src1.x| 21: src0.xyz = const[0], src0.w = const[0], src1.xyz = temp[31] MAD temp[37].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[37].w, src0.w, src1.x, src0.0 22: src0.xyz = temp[41], src0.w = temp[43] MAD temp[44].xyz, src0.xyz, src0.www, src0.000 23: src0.xyz = const[1], src0.w = const[1], src1.xyz = temp[31], src1.w = temp[37], src2.xyz = temp[37] MAD temp[38].xyz, src0.xyz, src1.yyy, src2.xyz MAD temp[38].w, src0.w, src1.y, src1.w 24: src0.xyz = temp[33] DP3 temp[34].x, src0.xyz, src0.xyz 25: src0.xyz = const[2], src0.w = const[2], src1.xyz = temp[31], src1.w = temp[38], src2.xyz = temp[38] MAD temp[39].xyz, src0.xyz, src1.zzz, src2.xyz MAD temp[39].w, src0.w, src1.z, src1.w 26: src0.xyz = temp[39], src0.w = temp[39], src1.xyz = const[3], src1.w = const[3] MAD temp[40].xyz, src0.xyz, src0.111, src1.xyz MAD temp[40].w, src0.w, src0.1, src1.w 27: src0.xyz = temp[34] RSQ temp[35].w, |src0.x| 28: src0.xyz = temp[33], src0.w = temp[35], src1.w = temp[40] MAD temp[36].xyz, src0.xyz, src0.www, src0.000 RCP temp[76].w, src1.w 29: src0.xyz = temp[36], src0.w = temp[76], src1.xyz = temp[44], src2.xyz = temp[40] DP3 temp[53].x, src0.xyz, src1.xyz MAD_SAT temp[77].w, src2.z, src0.w, src0.0 30: src0.xyz = temp[31], src0.w = temp[47], src2.xyz = temp[36] MAD temp[48].xyz, -src0.xyz, src0.www, src2.xyz 31: src0.xyz = temp[48], src1.xyz = temp[53] DP3 temp[56].x, src0.xyz, src0.xyz MAX temp[54].w, src1.x, src0.0 32: src0.xyz = temp[56] REPL_ALPHA temp[57].x RSQ, |src0.x| 33: src0.xyz = temp[48], src1.xyz = temp[57] MAD temp[58].xyz, src0.xyz, src1.xxx, src0.000 34: src0.xyz = temp[58], src1.xyz = temp[44] DP3_SAT temp[59].x, src0.xyz, src1.xyz 35: src0.xyz = temp[59] LG2 temp[63].w, src0.x 36: src0.w = temp[63], src1.w = temp[62] MAD temp[64].w, src0.w, src1.w, src0.0 37: src0.w = temp[64] REPL_ALPHA temp[65].x EX2, src0.w 38: src0.w = temp[55], src1.xyz = temp[65] MAD temp[66].x, src0.w__, src1.x__, src0.000 39: src0.xyz = temp[66], src1.xyz = const[5] MAD temp[67].xyz, src0.xxx, src1.xyz, src0.000 40: src0.xyz = temp[52], src0.w = temp[54], src2.xyz = temp[67] MAD temp[68].xyz, src0.xyz, src0.www, src2.xyz 41: BEGIN_TEX; 42: TEX temp[73].x, temp[72].x___, 1D[2]; 43: TXP temp[75].x, temp[40].xy_w, 2DSHADOW[0]; 44: TXP temp[69].xyz, temp[40].xy_w, 2D[1] SEM_WAIT SEM_ACQUIRE; 45: src0.xyz = temp[68], src0.w = temp[77], src1.xyz = temp[69], src2.xyz = temp[75] SEM_WAIT MAD temp[71].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[78].w, -src0.w, src0.1, src2.x 46: src0.w = temp[78] CMP temp[79].x, src0.1__, src0.0__, src0.w__ 47: src0.xyz = temp[73], src1.xyz = temp[79] MAD temp[80].x, src0.x__, src1.x__, src0.000 48: src0.xyz = temp[71], src1.xyz = temp[80] MAD temp[25].xyz, src0.xyz, src1.xxx, src0.000 49: src0.xyz = temp[25], src0.w = temp[25] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = const[4], src0.w = input[1] MAD temp[2].z, src0.__x, src0.111, src0.000 RCP temp[0].w, src0.w 1: src0.xyz = input[1], src0.w = temp[0], src1.xyz = input[0] MAD temp[1].xy, src0.xy_, src0.ww_, src0.00_ RCP temp[0].w, src1.z 2: src0.xyz = temp[1], src1.xyz = const[11], src2.xyz = const[12] MAD temp[1].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = input[0], src0.w = temp[0] MAD temp[2].xy, src0.xy_, src0.ww_, src0.000 4: src0.xyz = temp[1], src1.xyz = const[8] MAD temp[0].y, src0._y_, src1._x_, src1._y_ 5: src0.xyz = temp[1] MAD temp[0].x, src0.x__, src0.11_, src0.00_ 6: src0.xyz = temp[0], src1.xyz = const[15] MAD temp[1].xy, src0.xy_, src1.xy_, src0.00_ 7: src0.xyz = temp[0], src1.xyz = const[14] MAD temp[3].xy, src0.xy_, src1.xy_, src0.00_ 8: src0.xyz = temp[0], src1.xyz = const[13] MAD temp[0].xy, src0.xy_, src1.xy_, src0.00_ 9: BEGIN_TEX; 10: TEX temp[1].xyz, temp[1].xy__, 2D[5]; 11: TEX temp[3], temp[3].xy__, 2D[3]; 12: TEX temp[0], temp[0].xy__, 2D[4] SEM_WAIT SEM_ACQUIRE; 13: src0.xyz = temp[3], src0.w = const[5], src1.xyz = const[9], src1.w = temp[0] SEM_WAIT DP3 temp[4].x, src0.xyz, src1.xyz MAD temp[2].w, src0.w, src1.w, src0.0 14: src0.xyz = temp[1], src0.w = temp[3], src1.xyz = const[5], src2.xyz = const[10] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[1].w, src0.w, src2.z, src0.0 15: src0.xyz = temp[0], src0.w = const[9] MAD temp[3].xyz, src0.xyz, src0.www, -src0.111 16: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 17: src0.xyz = temp[3], src0.w = temp[1] DP3 temp[4].x, src0.xyz, src0.xyz EX2 temp[1].w, src0.w 18: src0.xyz = temp[2], src0.w = temp[1], src1.xyz = const[7], src2.xyz = const[6], srcp.xyz = (src1 - src0) MAD temp[5].xyz, srcp.xyz, src2.xxx, src0.000 MAD temp[1].w, src0.w, src0.1, src0.1 19: src0.xyz = temp[2], src1.xyz = temp[4] DP3 temp[4].x, -src0.xyz, -src0.xyz RSQ temp[3].w, |src1.x| 20: src0.xyz = temp[5], src1.xyz = temp[4] DP3 temp[4].x, src0.xyz, src0.xyz RSQ temp[4].w, |src1.x| 21: src0.xyz = const[0], src0.w = const[0], src1.xyz = temp[2] MAD temp[6].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[5].w, src0.w, src1.x, src0.0 22: src0.xyz = temp[3], src0.w = temp[3] MAD temp[3].xyz, src0.xyz, src0.www, src0.000 23: src0.xyz = const[1], src0.w = const[1], src1.xyz = temp[2], src1.w = temp[5], src2.xyz = temp[6] MAD temp[6].xyz, src0.xyz, src1.yyy, src2.xyz MAD temp[3].w, src0.w, src1.y, src1.w 24: src0.xyz = temp[5] DP3 temp[4].y, src0.xyz, src0.xyz 25: src0.xyz = const[2], src0.w = const[2], src1.xyz = temp[2], src1.w = temp[3], src2.xyz = temp[6] MAD temp[6].xyz, src0.xyz, src1.zzz, src2.xyz MAD temp[3].w, src0.w, src1.z, src1.w 26: src0.xyz = temp[6], src0.w = temp[3], src1.xyz = const[3], src1.w = const[3] MAD temp[6].xyz, src0.xyz, src0.111, src1.xyz MAD temp[6].w, src0.w, src0.1, src1.w 27: src0.xyz = temp[4] RSQ temp[3].w, |src0.y| 28: src0.xyz = temp[5], src0.w = temp[3], src1.w = temp[6] MAD temp[5].xyz, src0.xyz, src0.www, src0.000 RCP temp[3].w, src1.w 29: src0.xyz = temp[5], src0.w = temp[3], src1.xyz = temp[3], src2.xyz = temp[6] DP3 temp[4].y, src0.xyz, src1.xyz MAD_SAT temp[3].w, src2.z, src0.w, src0.0 30: src0.xyz = temp[2], src0.w = temp[4], src2.xyz = temp[5] MAD temp[2].xyz, -src0.xyz, src0.www, src2.xyz 31: src0.xyz = temp[2], src1.xyz = temp[4] DP3 temp[4].y, src0.xyz, src0.xyz MAX temp[4].w, src1.y, src0.0 32: src0.xyz = temp[4] REPL_ALPHA temp[4].y RSQ, |src0.y| 33: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[2].xyz, src0.xyz, src1.yyy, src0.000 34: src0.xyz = temp[2], src1.xyz = temp[3] DP3_SAT temp[2].x, src0.xyz, src1.xyz 35: src0.xyz = temp[2] LG2 temp[5].w, src0.x 36: src0.w = temp[5], src1.w = temp[1] MAD temp[1].w, src0.w, src1.w, src0.0 37: src0.w = temp[1] REPL_ALPHA temp[2].x EX2, src0.w 38: src0.w = temp[2], src1.xyz = temp[2] MAD temp[2].x, src0.w__, src1.x__, src0.0__ 39: src0.xyz = temp[2], src1.xyz = const[5] MAD temp[2].xyz, src0.xxx, src1.xyz, src0.000 40: src0.xyz = temp[1], src0.w = temp[4], src2.xyz = temp[2] MAD temp[1].xyz, src0.xyz, src0.www, src2.xyz 41: BEGIN_TEX; 42: TEX temp[2].x, temp[4].x___, 1D[2]; 43: TXP temp[4].x, temp[6].xy_w, 2DSHADOW[0]; 44: TXP temp[5].xyz, temp[6].xy_w, 2D[1] SEM_WAIT SEM_ACQUIRE; 45: src0.xyz = temp[1], src0.w = temp[3], src1.xyz = temp[5], src2.xyz = temp[4] SEM_WAIT MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[1].w, -src0.w, src0.1, src2.x 46: src0.w = temp[1] CMP temp[3].x, src0.1__, src0.0__, src0.w__ 47: src0.xyz = temp[2], src1.xyz = temp[3] MAD temp[2].x, src0.x__, src1.x__, src0.0__ 48: src0.xyz = temp[1], src1.xyz = temp[2] MAD temp[1].xyz, src0.xyz, src1.xxx, src0.000 49: src0.xyz = temp[1], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=31************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 8, tex_end: 0 (code_addr: 00000200) 0: xyz: c4 t0 t0 bias-> t2.z (02080024) w: t1 t0 t0 bias-> t0.w (00800001) xyz: c4.xxx 1.0 0.0 op: 00050a81 w: t1.w c4.x c4.x op: 05000009 1: xyz: t1 t0 t0 bias-> t1.xy (01840001) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t1.xyz t0.www 0.0 op: 00050600 w: t0.z t1.x t1.x op: 05000005 2: xyz: t1 c11 c12 bias-> t1.xy (0186cac1) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c11.xyz c12.xyz op: 00020200 w: t1.x t1.x t1.x op: 00000000 3: xyz: t0 t0 t0 bias-> t2.xy (01880000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.www 0.0 op: 00050600 w: t0.x t0.x t0.x op: 00000000 4: xyz: t1 c8 t0 bias-> t0.y (01000a01) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c8.xxx c8.xyz op: 00010280 w: t1.x t1.x t1.x op: 00000000 5: xyz: t1 t0 t0 bias-> t0.x (00800001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 6: xyz: t0 c15 t0 bias-> t1.xy (01840bc0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c15.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 7: xyz: t0 c14 t0 bias-> t3.xy (018c0b80) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c14.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 8: xyz: t0 c13 t0 bias-> t0.xy (01800b40) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c13.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 NODE 1: alu_offset: 9, tex_offset: 0, alu_end: 27, tex_end: 2 (code_addr: 000406c9) TEX: TEX t1, t1, texture[5] (0000a841) TEX t3, t3, texture[3] (000098c3) TEX t0, t0, texture[4] (0000a000) 9: xyz: t3 c9 t0 bias-> t4.x (00900a43) w: c5 t0 t0 bias-> t2.w (00880025) xyz: t3.xyz c9.xyz t3.xxx op: 00804200 w: c5.w t0.w 0.0 op: 00040509 10: xyz: t1 c5 c10 bias-> t1.xyz (0386a941) w: t3 t0 t0 bias-> t1.w (00840003) xyz: t1.xyz c5.xyz 0.0 op: 00050200 w: t3.w c10.z 0.0 op: 00040409 11: xyz: t0 t0 t0 bias-> t3.xyz (038c0000) w: c9 t0 t0 bias-> (00000029) xyz: t0.xyz c9.www -1.0 op: 000d4600 w: t0.x t0.x t0.x op: 00000000 12: xyz: t2 t4 t0 bias-> t2.xyz (03880102) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t4.xxx 0.0 op: 00050280 w: t2.x t2.x t2.x op: 00000000 13: xyz: t3 t0 t0 bias-> t4.x (00900003) w: t1 t0 t0 bias-> t1.w (00840001) xyz: t3.xyz t3.xyz t3.xxx op: 00804000 w: t1.w t3.x t3.x op: 04000009 14: xyz: t2 c7 c6 sub-> t5.xyz (039669c2) w: t1 t0 t0 bias-> t1.w (00840001) xyz: srcp.xyz c6.xxx 0.0 op: 0025048f w: t1.w 1.0 1.0 op: 00044889 15: xyz: t2 t4 t0 bias-> t4.x (00900102) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: -t2.xyz -t2.xyz t2.xxx op: 00805020 w: |t4.x| t2.x t2.x op: 05800043 16: xyz: t5 t4 t0 bias-> t4.x (00900105) w: t0 t0 t0 bias-> t4.w (00900000) xyz: t5.xyz t5.xyz t5.xxx op: 00804000 w: |t4.x| t5.x t5.x op: 05800043 17: xyz: c0 t2 t0 bias-> t6.xyz (039800a0) w: c0 t0 t0 bias-> t5.w (00940020) xyz: c0.xyz t2.xxx 0.0 op: 00050280 w: c0.w t2.x 0.0 op: 00040189 18: xyz: t3 t32 t0 bias-> t3.xyz (038c0003) w: t3 t0 t0 bias-> (00000003) xyz: t3.xyz t3.www 0.0 op: 00050600 w: t3.x t3.x t3.x op: 00000000 19: xyz: c1 t2 t6 bias-> t6.xyz (039860a1) w: c1 t5 t0 bias-> t3.w (008c0161) xyz: c1.xyz t2.yyy t6.xyz op: 00020300 w: c1.w t2.y t5.w op: 00028209 20: xyz: t5 t0 t0 bias-> t4.y (01100005) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t5.xyz t5.xxx op: 00804000 w: t5.x t5.x t5.x op: 00000000 21: xyz: c2 t2 t6 bias-> t6.xyz (039860a2) w: c2 t3 t0 bias-> t3.w (008c00e2) xyz: c2.xyz t2.zzz t6.xyz op: 00020380 w: c2.w t2.z t3.w op: 00028289 22: xyz: t6 c3 t0 bias-> t6.xyz (039808c6) w: t3 c3 t0 bias-> t6.w (009808c3) xyz: t6.xyz 1.0 c3.xyz op: 00010a80 w: t3.w 1.0 c3.w op: 00028889 23: xyz: t4 t0 t0 bias-> (00000004) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: t4.xxx t4.xxx t4.xxx op: 00004081 w: |t4.y| t4.x t4.x op: 05800041 24: xyz: t5 t32 t0 bias-> t5.xyz (03940005) w: t3 t6 t0 bias-> t3.w (008c0183) xyz: t5.xyz t3.www 0.0 op: 00050600 w: t6.w t5.x t5.x op: 0500000a 25: xyz: t5 t3 t6 bias-> t4.y (011060c5) w: t3 t0 t0 bias-> t3.w (008c0003) xyz: t5.xyz t3.xyz t5.xxx op: 00804200 w: t6.z t3.w 0.0 op: 40040488 26: xyz: t2 t32 t5 bias-> t2.xyz (03885002) w: t4 t0 t0 bias-> (00000004) xyz: -t2.xyz t4.www t5.xyz op: 00020620 w: t2.x t2.x t2.x op: 00000000 27: xyz: t2 t4 t0 bias-> t4.y (01100102) w: t0 t0 t0 bias-> t4.w (00900000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: t4.y 0.0 t2.x op: 01800804 28: xyz: t4 t0 t0 bias-> t4.y (01100004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xxx t4.xxx t4.xxx op: 05004081 w: |t4.y| t4.x t4.x op: 05800041 29: xyz: t2 t4 t0 bias-> t2.xyz (03880102) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t4.yyy 0.0 op: 00050300 w: t2.x t2.x t2.x op: 00000000 30: xyz: t2 t3 t0 bias-> t2.x (008800c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t3.xyz t2.xxx op: 40804200 w: t2.x t2.x t2.x op: 00000000 31: xyz: t2 t0 t0 bias-> (00000002) w: t0 t0 t0 bias-> t5.w (00940000) xyz: t2.xxx t2.xxx t2.xxx op: 00004081 w: t2.x t2.x t2.x op: 04800000 32: xyz: t32 t0 t0 bias-> (00000000) w: t5 t1 t0 bias-> t1.w (00840045) xyz: t32.xxx t32.xxx t32.xxx op: 00004081 w: t5.w t1.w 0.0 op: 00040509 33: xyz: t0 t0 t0 bias-> t2.x (00880000) w: t1 t0 t0 bias-> (00000001) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: t1.w t0.x t0.x op: 04000009 34: xyz: t32 t2 t0 bias-> t2.x (00880080) w: t2 t0 t0 bias-> (00000002) xyz: t2.www t2.xyz 0.0 op: 0005020c w: t32.x t32.x t32.x op: 00000000 35: xyz: t2 c5 t0 bias-> t2.xyz (03880942) w: t0 t0 t0 bias-> (00000000) xyz: t2.xxx c5.xyz 0.0 op: 00050201 w: t2.x t2.x t2.x op: 00000000 36: xyz: t1 t32 t2 bias-> t1.xyz (03842001) w: t4 t0 t0 bias-> (00000004) xyz: t1.xyz t4.www t2.xyz op: 00020600 w: t1.x t1.x t1.x op: 00000000 NODE 2: alu_offset: 37, tex_offset: 3, alu_end: 4, tex_end: 2 (code_addr: 00443125) TEX: TEX t2, t4, texture[2] (00009084) TXP t4, t6, texture[0] (00018106) TXP t5, t6, texture[1] (00018946) 37: xyz: t1 t5 t4 bias-> t1.xyz (03844141) w: t3 t0 t0 bias-> t1.w (00840003) xyz: t1.xyz t5.xyz 0.0 op: 00050200 w: -t3.w 1.0 t4.x op: 000188a9 38: xyz: t0 t0 t0 bias-> t3.x (008c0000) w: t1 t0 t0 bias-> (00000001) xyz: 1.0 0.0 t1.www op: 04030a15 w: t0.x t0.x t0.x op: 00000000 39: xyz: t2 t3 t0 bias-> t2.x (008800c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t3.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 40: xyz: t1 t2 t0 bias-> t1.xyz (03840081) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t2.xxx 0.0 op: 00050280 w: t1.x t1.x t1.x op: 00000000 41: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], POSITION, LINEAR DCL IN[1], GENERIC[12], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL CONST[7..8] DCL CONST[4..6] DCL TEMP[0] DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL IMM[0] FLT32 { 1.0000, 0.0039, 0.0000, 2.0000} IMM[1] FLT32 { -1.0000, 0.0000, 0.0000, 0.0000} 0: MOV TEMP[0], IN[0] 1: MAD TEMP[0].y, IN[0], CONST[8].xxxx, CONST[8].yyyy 2: RCP TEMP[1].x, IN[1].zzzz 3: MUL TEMP[1].xy, IN[1].xyyy, TEMP[1].xxxx 4: MOV TEMP[1].z, CONST[4].xxxx 5: TEX TEMP[2].xyz, TEMP[0].xyyy, SAMP[1], RECT 6: DP3 TEMP[2].x, TEMP[2].xyzz, IMM[0].xyzz 7: MUL TEMP[1].xyz, TEMP[1].xyzz, TEMP[2].xxxx 8: ADD TEMP[1].xyz, CONST[7].xyzz, -TEMP[1].xyzz 9: MUL TEMP[1].xyz, TEMP[1].xyzz, CONST[6].xxxx 10: TEX TEMP[2].xyz, TEMP[0].xyyy, SAMP[3], RECT 11: MUL TEMP[2].xyz, TEMP[2].xyzz, CONST[5].xyzz 12: DP3 TEMP[3].x, TEMP[1].xyzz, TEMP[1].xyzz 13: RSQ TEMP[3].x, TEMP[3].xxxx 14: MUL TEMP[3].xyz, TEMP[1].xyzz, TEMP[3].xxxx 15: TEX TEMP[4].xyz, TEMP[0].xyyy, SAMP[2], RECT 16: MAD TEMP[4].xyz, TEMP[4].xyzz, IMM[0].wwww, IMM[1].xxxx 17: DP3 TEMP[3].x, TEMP[3].xyzz, TEMP[4].xyzz 18: MAX TEMP[3].x, TEMP[3].xxxx, IMM[1].yyyy 19: MUL TEMP[2].xyz, TEMP[2].xyzz, TEMP[3].xxxx 20: DP3 TEMP[1].x, TEMP[1].xyzz, TEMP[1].xyzz 21: TEX TEMP[1].x, TEMP[1].xxxx, SAMP[0], 1D 22: MUL TEMP[1].xyz, TEMP[2].xyzz, TEMP[1].xxxx 23: MOV OUT[0], TEMP[1] 24: END Fragment Program: before compilation # Radeon Compiler Program 0: RCP temp[5].w, input[0].wwww; 1: MUL temp[5].xyz, input[0], temp[5].wwww; 2: MAD temp[5].xyz, temp[5].xyz0, const[11].xyz0, const[12].xyz0; 3: MOV temp[0], temp[5]; 4: MAD temp[0].y, temp[5], const[8].xxxx, const[8].yyyy; 5: RCP temp[1].x, input[1].zzzz; 6: MUL temp[1].xy, input[1].xyyy, temp[1].xxxx; 7: MOV temp[1].z, const[4].xxxx; 8: TEX temp[2].xyz, temp[0].xyyy, RECT[1]; 9: DP3 temp[2].x, temp[2].xyzz, const[9].xyzz; 10: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 11: ADD temp[1].xyz, const[7].xyzz, -temp[1].xyzz; 12: MUL temp[1].xyz, temp[1].xyzz, const[6].xxxx; 13: TEX temp[2].xyz, temp[0].xyyy, RECT[3]; 14: MUL temp[2].xyz, temp[2].xyzz, const[5].xyzz; 15: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 16: RSQ temp[3].x, temp[3].xxxx; 17: MUL temp[3].xyz, temp[1].xyzz, temp[3].xxxx; 18: TEX temp[4].xyz, temp[0].xyyy, RECT[2]; 19: MAD temp[4].xyz, temp[4].xyzz, const[9].wwww, const[10].xxxx; 20: DP3 temp[3].x, temp[3].xyzz, temp[4].xyzz; 21: MAX temp[3].x, temp[3].xxxx, const[10].yyyy; 22: MUL temp[2].xyz, temp[2].xyzz, temp[3].xxxx; 23: DP3 temp[1].x, temp[1].xyzz, temp[1].xyzz; 24: TEX temp[1].x, temp[1].xxxx, 1D[0]; 25: MUL temp[1].xyz, temp[2].xyzz, temp[1].xxxx; 26: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: RCP temp[5].w, input[0].wwww; 1: MUL temp[5].xyz, input[0], temp[5].wwww; 2: MAD temp[5].xyz, temp[5].xyz0, const[11].xyz0, const[12].xyz0; 3: MOV temp[0], temp[5]; 4: MAD temp[0].y, temp[5], const[8].xxxx, const[8].yyyy; 5: RCP temp[1].x, input[1].zzzz; 6: MUL temp[1].xy, input[1].xyyy, temp[1].xxxx; 7: MOV temp[1].z, const[4].xxxx; 8: TEX temp[2].xyz, temp[0].xyyy, RECT[1]; 9: DP3 temp[2].x, temp[2].xyzz, const[9].xyzz; 10: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 11: ADD temp[1].xyz, const[7].xyzz, -temp[1].xyzz; 12: MUL temp[1].xyz, temp[1].xyzz, const[6].xxxx; 13: TEX temp[2].xyz, temp[0].xyyy, RECT[3]; 14: MUL temp[2].xyz, temp[2].xyzz, const[5].xyzz; 15: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 16: RSQ temp[3].x, temp[3].xxxx; 17: MUL temp[3].xyz, temp[1].xyzz, temp[3].xxxx; 18: TEX temp[4].xyz, temp[0].xyyy, RECT[2]; 19: MAD temp[4].xyz, temp[4].xyzz, const[9].wwww, const[10].xxxx; 20: DP3 temp[3].x, temp[3].xyzz, temp[4].xyzz; 21: MAX temp[3].x, temp[3].xxxx, const[10].yyyy; 22: MUL temp[2].xyz, temp[2].xyzz, temp[3].xxxx; 23: DP3 temp[1].x, temp[1].xyzz, temp[1].xyzz; 24: TEX temp[1].x, temp[1].xxxx, 1D[0]; 25: MUL temp[1].xyz, temp[2].xyzz, temp[1].xxxx; 26: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: RCP temp[5].w, input[0].wwww; 1: MUL temp[5].xyz, input[0], temp[5].wwww; 2: MAD temp[5].xyz, temp[5].xyz0, const[11].xyz0, const[12].xyz0; 3: MOV temp[0], temp[5]; 4: MAD temp[0].y, temp[5], const[8].xxxx, const[8].yyyy; 5: RCP temp[1].x, input[1].zzzz; 6: MUL temp[1].xy, input[1].xyyy, temp[1].xxxx; 7: MOV temp[1].z, const[4].xxxx; 8: TEX temp[2].xyz, temp[0].xyyy, RECT[1]; 9: DP3 temp[2].x, temp[2].xyzz, const[9].xyzz; 10: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 11: ADD temp[1].xyz, const[7].xyzz, -temp[1].xyzz; 12: MUL temp[1].xyz, temp[1].xyzz, const[6].xxxx; 13: TEX temp[2].xyz, temp[0].xyyy, RECT[3]; 14: MUL temp[2].xyz, temp[2].xyzz, const[5].xyzz; 15: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 16: RSQ temp[3].x, temp[3].xxxx; 17: MUL temp[3].xyz, temp[1].xyzz, temp[3].xxxx; 18: TEX temp[4].xyz, temp[0].xyyy, RECT[2]; 19: MAD temp[4].xyz, temp[4].xyzz, const[9].wwww, const[10].xxxx; 20: DP3 temp[3].x, temp[3].xyzz, temp[4].xyzz; 21: MAX temp[3].x, temp[3].xxxx, const[10].yyyy; 22: MUL temp[2].xyz, temp[2].xyzz, temp[3].xxxx; 23: DP3 temp[1].x, temp[1].xyzz, temp[1].xyzz; 24: TEX temp[1].x, temp[1].xxxx, 1D[0]; 25: MUL temp[1].xyz, temp[2].xyzz, temp[1].xxxx; 26: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: RCP temp[5].w, input[0].wwww; 1: MUL temp[5].xyz, input[0], temp[5].wwww; 2: MAD temp[5].xyz, temp[5].xyz0, const[11].xyz0, const[12].xyz0; 3: MOV temp[0], temp[5]; 4: MAD temp[0].y, temp[5], const[8].xxxx, const[8].yyyy; 5: RCP temp[1].x, input[1].zzzz; 6: MUL temp[1].xy, input[1].xyyy, temp[1].xxxx; 7: MOV temp[1].z, const[4].xxxx; 8: TEX temp[2].xyz, temp[0].xyyy, RECT[1]; 9: DP3 temp[2].x, temp[2].xyzz, const[9].xyzz; 10: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 11: ADD temp[1].xyz, const[7].xyzz, -temp[1].xyzz; 12: MUL temp[1].xyz, temp[1].xyzz, const[6].xxxx; 13: TEX temp[2].xyz, temp[0].xyyy, RECT[3]; 14: MUL temp[2].xyz, temp[2].xyzz, const[5].xyzz; 15: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 16: RSQ temp[3].x, temp[3].xxxx; 17: MUL temp[3].xyz, temp[1].xyzz, temp[3].xxxx; 18: TEX temp[4].xyz, temp[0].xyyy, RECT[2]; 19: MAD temp[4].xyz, temp[4].xyzz, const[9].wwww, const[10].xxxx; 20: DP3 temp[3].x, temp[3].xyzz, temp[4].xyzz; 21: MAX temp[3].x, temp[3].xxxx, const[10].yyyy; 22: MUL temp[2].xyz, temp[2].xyzz, temp[3].xxxx; 23: DP3 temp[1].x, temp[1].xyzz, temp[1].xyzz; 24: TEX temp[1].x, temp[1].xxxx, 1D[0]; 25: MUL temp[1].xyz, temp[2].xyzz, temp[1].xxxx; 26: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: RCP temp[5].w, input[0].wwww; 1: MUL temp[5].xyz, input[0], temp[5].wwww; 2: MAD temp[5].xyz, temp[5].xyz0, const[11].xyz0, const[12].xyz0; 3: MOV temp[0], temp[5]; 4: MAD temp[0].y, temp[5], const[8].xxxx, const[8].yyyy; 5: RCP temp[1].x, input[1].zzzz; 6: MUL temp[1].xy, input[1].xyyy, temp[1].xxxx; 7: MOV temp[1].z, const[4].xxxx; 8: TEX temp[2].xyz, temp[0].xyyy, RECT[1]; 9: DP3 temp[2].x, temp[2].xyzz, const[9].xyzz; 10: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 11: ADD temp[1].xyz, const[7].xyzz, -temp[1].xyzz; 12: MUL temp[1].xyz, temp[1].xyzz, const[6].xxxx; 13: TEX temp[2].xyz, temp[0].xyyy, RECT[3]; 14: MUL temp[2].xyz, temp[2].xyzz, const[5].xyzz; 15: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 16: RSQ temp[3].x, temp[3].xxxx; 17: MUL temp[3].xyz, temp[1].xyzz, temp[3].xxxx; 18: TEX temp[4].xyz, temp[0].xyyy, RECT[2]; 19: MAD temp[4].xyz, temp[4].xyzz, const[9].wwww, const[10].xxxx; 20: DP3 temp[3].x, temp[3].xyzz, temp[4].xyzz; 21: MAX temp[3].x, temp[3].xxxx, const[10].yyyy; 22: MUL temp[2].xyz, temp[2].xyzz, temp[3].xxxx; 23: DP3 temp[1].x, temp[1].xyzz, temp[1].xyzz; 24: TEX temp[1].x, temp[1].xxxx, 1D[0]; 25: MUL temp[1].xyz, temp[2].xyzz, temp[1].xxxx; 26: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: RCP temp[5].w, input[0].wwww; 1: MUL temp[5].xyz, input[0], temp[5].wwww; 2: MAD temp[5].xyz, temp[5].xyz0, const[11].xyz0, const[12].xyz0; 3: MOV temp[0], temp[5]; 4: MAD temp[0].y, temp[5], const[8].xxxx, const[8].yyyy; 5: RCP temp[1].x, input[1].zzzz; 6: MUL temp[1].xy, input[1].xyyy, temp[1].xxxx; 7: MOV temp[1].z, const[4].xxxx; 8: MUL temp[6], temp[0].xyyy, const[13]; 9: TEX temp[7], temp[6], 2D[1]; 10: MOV temp[2].xyz, temp[7]; 11: DP3 temp[2].x, temp[2].xyzz, const[9].xyzz; 12: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 13: ADD temp[1].xyz, const[7].xyzz, -temp[1].xyzz; 14: MUL temp[1].xyz, temp[1].xyzz, const[6].xxxx; 15: MUL temp[8], temp[0].xyyy, const[14]; 16: TEX temp[9], temp[8], 2D[3]; 17: MOV temp[2].xyz, temp[9]; 18: MUL temp[2].xyz, temp[2].xyzz, const[5].xyzz; 19: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 20: RSQ temp[3].x, temp[3].xxxx; 21: MUL temp[3].xyz, temp[1].xyzz, temp[3].xxxx; 22: MUL temp[10], temp[0].xyyy, const[15]; 23: TEX temp[11], temp[10], 2D[2]; 24: MOV temp[4].xyz, temp[11]; 25: MAD temp[4].xyz, temp[4].xyzz, const[9].wwww, const[10].xxxx; 26: DP3 temp[3].x, temp[3].xyzz, temp[4].xyzz; 27: MAX temp[3].x, temp[3].xxxx, const[10].yyyy; 28: MUL temp[2].xyz, temp[2].xyzz, temp[3].xxxx; 29: DP3 temp[1].x, temp[1].xyzz, temp[1].xyzz; 30: TEX temp[12], temp[1].xxxx, 1D[0]; 31: MOV temp[1].x, temp[12]; 32: MUL temp[1].xyz, temp[2].xyzz, temp[1].xxxx; 33: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: RCP temp[5].w, input[0].wwww; 1: MUL temp[5].xyz, input[0], temp[5].wwww; 2: MAD temp[5].xyz, temp[5].xyz0, const[11].xyz0, const[12].xyz0; 3: MOV temp[0], temp[5]; 4: MAD temp[0].y, temp[5], const[8].xxxx, const[8].yyyy; 5: RCP temp[1].x, input[1].zzzz; 6: MUL temp[1].xy, input[1].xyyy, temp[1].xxxx; 7: MOV temp[1].z, const[4].xxxx; 8: MUL temp[6], temp[0].xyyy, const[13]; 9: TEX temp[7], temp[6], 2D[1]; 10: MOV temp[2].xyz, temp[7]; 11: DP3 temp[2].x, temp[2].xyzz, const[9].xyzz; 12: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 13: ADD temp[1].xyz, const[7].xyzz, -temp[1].xyzz; 14: MUL temp[1].xyz, temp[1].xyzz, const[6].xxxx; 15: MUL temp[8], temp[0].xyyy, const[14]; 16: TEX temp[9], temp[8], 2D[3]; 17: MOV temp[2].xyz, temp[9]; 18: MUL temp[2].xyz, temp[2].xyzz, const[5].xyzz; 19: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 20: RSQ temp[3].x, |temp[3].xxxx|; 21: MUL temp[3].xyz, temp[1].xyzz, temp[3].xxxx; 22: MUL temp[10], temp[0].xyyy, const[15]; 23: TEX temp[11], temp[10], 2D[2]; 24: MOV temp[4].xyz, temp[11]; 25: MAD temp[4].xyz, temp[4].xyzz, const[9].wwww, const[10].xxxx; 26: DP3 temp[3].x, temp[3].xyzz, temp[4].xyzz; 27: MAX temp[3].x, temp[3].xxxx, const[10].yyyy; 28: MUL temp[2].xyz, temp[2].xyzz, temp[3].xxxx; 29: DP3 temp[1].x, temp[1].xyzz, temp[1].xyzz; 30: TEX temp[12], temp[1].xxxx, 1D[0]; 31: MOV temp[1].x, temp[12]; 32: MUL temp[1].xyz, temp[2].xyzz, temp[1].xxxx; 33: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: RCP temp[5].w, input[0].___w; 1: MUL temp[5].xy, input[0].xy__, temp[5].ww__; 2: MAD temp[5].xy, temp[5].xy__, const[11].xy__, const[12].xy__; 3: MOV temp[0].x, temp[5].x___; 4: MAD temp[0].y, temp[5]._y__, const[8]._x__, const[8]._y__; 5: RCP temp[1].x, input[1].z___; 6: MUL temp[1].xy, input[1].xy__, temp[1].xx__; 7: MOV temp[1].z, const[4].__x_; 8: MUL temp[6].xy, temp[0].xy__, const[13].xy__; 9: TEX temp[7].xyz, temp[6].xy__, 2D[1]; 10: MOV temp[2].xyz, temp[7].xyz_; 11: DP3 temp[2].x, temp[2].xyz_, const[9].xyz_; 12: MUL temp[1].xyz, temp[1].xyz_, temp[2].xxx_; 13: ADD temp[1].xyz, const[7].xyz_, -temp[1].xyz_; 14: MUL temp[1].xyz, temp[1].xyz_, const[6].xxx_; 15: MUL temp[8].xy, temp[0].xy__, const[14].xy__; 16: TEX temp[9].xyz, temp[8].xy__, 2D[3]; 17: MOV temp[2].xyz, temp[9].xyz_; 18: MUL temp[2].xyz, temp[2].xyz_, const[5].xyz_; 19: DP3 temp[3].x, temp[1].xyz_, temp[1].xyz_; 20: RSQ temp[3].x, |temp[3].x___|; 21: MUL temp[3].xyz, temp[1].xyz_, temp[3].xxx_; 22: MUL temp[10].xy, temp[0].xy__, const[15].xy__; 23: TEX temp[11].xyz, temp[10].xy__, 2D[2]; 24: MOV temp[4].xyz, temp[11].xyz_; 25: MAD temp[4].xyz, temp[4].xyz_, const[9].www_, const[10].xxx_; 26: DP3 temp[3].x, temp[3].xyz_, temp[4].xyz_; 27: MAX temp[3].x, temp[3].x___, const[10].y___; 28: MUL temp[2].xyz, temp[2].xyz_, temp[3].xxx_; 29: DP3 temp[1].x, temp[1].xyz_, temp[1].xyz_; 30: TEX temp[12].x, temp[1].x___, 1D[0]; 31: MOV temp[1].x, temp[12].x___; 32: MUL temp[1].xyz, temp[2].xyz_, temp[1].xxx_; 33: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: RCP temp[5].w, input[0].___w; 1: MUL temp[5].xy, input[0].xy__, temp[5].ww__; 2: MAD temp[5].xy, temp[5].xy__, const[11].xy__, const[12].xy__; 3: MOV temp[0].x, temp[5].x___; 4: MAD temp[0].y, temp[5]._y__, const[8]._x__, const[8]._y__; 5: RCP temp[1].x, input[1].z___; 6: MUL temp[1].xy, input[1].xy__, temp[1].xx__; 7: MOV temp[1].z, const[4].__x_; 8: MUL temp[6].xy, temp[0].xy__, const[13].xy__; 9: TEX temp[7].xyz, temp[6].xy__, 2D[1]; 10: MOV temp[2].xyz, temp[7].xyz_; 11: DP3 temp[2].x, temp[2].xyz_, const[9].xyz_; 12: MUL temp[1].xyz, temp[1].xyz_, temp[2].xxx_; 13: ADD temp[1].xyz, const[7].xyz_, -temp[1].xyz_; 14: MUL temp[1].xyz, temp[1].xyz_, const[6].xxx_; 15: MUL temp[8].xy, temp[0].xy__, const[14].xy__; 16: TEX temp[9].xyz, temp[8].xy__, 2D[3]; 17: MOV temp[2].xyz, temp[9].xyz_; 18: MUL temp[2].xyz, temp[2].xyz_, const[5].xyz_; 19: DP3 temp[3].x, temp[1].xyz_, temp[1].xyz_; 20: RSQ temp[3].x, |temp[3].x___|; 21: MUL temp[3].xyz, temp[1].xyz_, temp[3].xxx_; 22: MUL temp[10].xy, temp[0].xy__, const[15].xy__; 23: TEX temp[11].xyz, temp[10].xy__, 2D[2]; 24: MOV temp[4].xyz, temp[11].xyz_; 25: MAD temp[4].xyz, temp[4].xyz_, const[9].www_, const[10].xxx_; 26: DP3 temp[3].x, temp[3].xyz_, temp[4].xyz_; 27: MAX temp[3].x, temp[3].x___, const[10].y___; 28: MUL temp[2].xyz, temp[2].xyz_, temp[3].xxx_; 29: DP3 temp[1].x, temp[1].xyz_, temp[1].xyz_; 30: TEX temp[12].x, temp[1].x___, 1D[0]; 31: MOV temp[1].x, temp[12].x___; 32: MUL temp[1].xyz, temp[2].xyz_, temp[1].xxx_; 33: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: RCP temp[13].w, input[0].___w; 1: MUL temp[14].xy, input[0].xy__, temp[13].ww__; 2: MAD temp[15].xy, temp[14].xy__, const[11].xy__, const[12].xy__; 3: MOV temp[16].x, temp[15].x___; 4: MAD temp[16].y, temp[15]._y__, const[8]._x__, const[8]._y__; 5: RCP temp[17].x, input[1].z___; 6: MUL temp[18].xy, input[1].xy__, temp[17].xx__; 7: MOV temp[18].z, const[4].__x_; 8: MUL temp[19].xy, temp[16].xy__, const[13].xy__; 9: TEX temp[20].xyz, temp[19].xy__, 2D[1]; 10: MOV temp[21].xyz, temp[20].xyz_; 11: DP3 temp[22].x, temp[21].xyz_, const[9].xyz_; 12: MUL temp[23].xyz, temp[18].xyz_, temp[22].xxx_; 13: ADD temp[24].xyz, const[7].xyz_, -temp[23].xyz_; 14: MUL temp[25].xyz, temp[24].xyz_, const[6].xxx_; 15: MUL temp[26].xy, temp[16].xy__, const[14].xy__; 16: TEX temp[27].xyz, temp[26].xy__, 2D[3]; 17: MOV temp[28].xyz, temp[27].xyz_; 18: MUL temp[29].xyz, temp[28].xyz_, const[5].xyz_; 19: DP3 temp[30].x, temp[25].xyz_, temp[25].xyz_; 20: RSQ temp[31].x, |temp[30].x___|; 21: MUL temp[32].xyz, temp[25].xyz_, temp[31].xxx_; 22: MUL temp[33].xy, temp[16].xy__, const[15].xy__; 23: TEX temp[34].xyz, temp[33].xy__, 2D[2]; 24: MOV temp[35].xyz, temp[34].xyz_; 25: MAD temp[36].xyz, temp[35].xyz_, const[9].www_, const[10].xxx_; 26: DP3 temp[37].x, temp[32].xyz_, temp[36].xyz_; 27: MAX temp[38].x, temp[37].x___, const[10].y___; 28: MUL temp[39].xyz, temp[29].xyz_, temp[38].xxx_; 29: DP3 temp[40].x, temp[25].xyz_, temp[25].xyz_; 30: TEX temp[41].x, temp[40].x___, 1D[0]; 31: MOV temp[42].x, temp[41].x___; 32: MUL temp[43].xyz, temp[39].xyz_, temp[42].xxx_; 33: MOV output[0], temp[43]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: RCP temp[13].w, input[0].___w; 1: MUL temp[14].xy, input[0].xy__, temp[13].ww__; 2: MAD temp[15].xy, temp[14].xy__, const[11].xy__, const[12].xy__; 3: MOV temp[16].x, temp[15].x___; 4: MAD temp[16].y, temp[15]._y__, const[8]._x__, const[8]._y__; 5: RCP temp[17].x, input[1].z___; 6: MUL temp[18].xy, input[1].xy__, temp[17].xx__; 7: MOV temp[18].z, const[4].__x_; 8: MUL temp[19].xy, temp[16].xy__, const[13].xy__; 9: TEX temp[20].xyz, temp[19].xy__, 2D[1]; 10: DP3 temp[22].x, temp[20].xyz_, const[9].xyz_; 11: MUL temp[23].xyz, temp[18].xyz_, temp[22].xxx_; 12: MUL temp[25].xyz, (const[7] - temp[23]).xyz_, const[6].xxx_; 13: MUL temp[26].xy, temp[16].xy__, const[14].xy__; 14: TEX temp[27].xyz, temp[26].xy__, 2D[3]; 15: MUL temp[29].xyz, temp[27].xyz_, const[5].xyz_; 16: DP3 temp[30].x, temp[25].xyz_, temp[25].xyz_; 17: RSQ temp[31].x, |temp[30].x___|; 18: MUL temp[32].xyz, temp[25].xyz_, temp[31].xxx_; 19: MUL temp[33].xy, temp[16].xy__, const[15].xy__; 20: TEX temp[34].xyz, temp[33].xy__, 2D[2]; 21: MAD temp[36].xyz, temp[34].xyz_, const[9].www_, none.-1-1-1_; 22: DP3 temp[37].x, temp[32].xyz_, temp[36].xyz_; 23: MAX temp[38].x, temp[37].x___, none.0___; 24: MUL temp[39].xyz, temp[29].xyz_, temp[38].xxx_; 25: DP3 temp[40].x, temp[25].xyz_, temp[25].xyz_; 26: TEX temp[41].x, temp[40].x___, 1D[0]; 27: MUL temp[43].xyz, temp[39].xyz_, temp[41].xxx_; 28: MOV output[0], temp[43]; CONST[9] = { 1.0000 0.0039 0.0000 2.0000 } CONST[10] = { -1.0000 0.0000 0.0000 0.0000 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: RCP temp[13].w, input[0].___w; 1: MUL temp[14].xy, input[0].xy__, temp[13].ww__; 2: MAD temp[15].xy, temp[14].xy__, const[11].xy__, const[12].xy__; 3: MOV temp[16].x, temp[15].x___; 4: MAD temp[16].y, temp[15]._y__, const[8]._x__, const[8]._y__; 5: RCP temp[17].x, input[1].z___; 6: MUL temp[18].xy, input[1].xy__, temp[17].xx__; 7: MOV temp[18].z, const[4].__x_; 8: MUL temp[19].xy, temp[16].xy__, const[13].xy__; 9: TEX temp[20].xyz, temp[19].xy__, 2D[1]; 10: DP3 temp[22].x, temp[20].xyz_, const[9].xyz_; 11: MUL temp[23].xyz, temp[18].xyz_, temp[22].xxx_; 12: MUL temp[25].xyz, (const[7] - temp[23]).xyz_, const[6].xxx_; 13: MUL temp[26].xy, temp[16].xy__, const[14].xy__; 14: TEX temp[27].xyz, temp[26].xy__, 2D[3]; 15: MUL temp[29].xyz, temp[27].xyz_, const[5].xyz_; 16: DP3 temp[30].x, temp[25].xyz_, temp[25].xyz_; 17: RSQ temp[31].x, |temp[30].x___|; 18: MUL temp[32].xyz, temp[25].xyz_, temp[31].xxx_; 19: MUL temp[33].xy, temp[16].xy__, const[15].xy__; 20: TEX temp[34].xyz, temp[33].xy__, 2D[2]; 21: MAD temp[36].xyz, temp[34].xyz_, const[9].www_, none.-1-1-1_; 22: DP3 temp[37].x, temp[32].xyz_, temp[36].xyz_; 23: MAX temp[38].x, temp[37].x___, none.0___; 24: MUL temp[39].xyz, temp[29].xyz_, temp[38].xxx_; 25: DP3 temp[40].x, temp[25].xyz_, temp[25].xyz_; 26: TEX temp[41].x, temp[40].x___, 1D[0]; 27: MUL temp[43].xyz, temp[39].xyz_, temp[41].xxx_; 28: MOV output[0], temp[43]; CONST[5] = { 1.0000 0.0039 0.0000 2.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: RCP temp[13].w, input[0].___w; 1: MUL temp[14].xy, input[0].xy__, temp[13].ww__; 2: MAD temp[15].xy, temp[14].xy__, const[6].xy__, const[7].xy__; 3: MOV temp[16].x, temp[15].x___; 4: MAD temp[16].y, temp[15]._y__, const[4]._x__, const[4]._y__; 5: RCP temp[17].x, input[1].z___; 6: MUL temp[18].xy, input[1].xy__, temp[17].xx__; 7: MOV temp[18].z, const[0].__x_; 8: MUL temp[19].xy, temp[16].xy__, const[8].xy__; 9: TEX temp[20].xyz, temp[19].xy__, 2D[1]; 10: DP3 temp[22].x, temp[20].xyz_, const[5].xyz_; 11: MUL temp[23].xyz, temp[18].xyz_, temp[22].xxx_; 12: MUL temp[25].xyz, (const[3] - temp[23]).xyz_, const[2].xxx_; 13: MUL temp[26].xy, temp[16].xy__, const[9].xy__; 14: TEX temp[27].xyz, temp[26].xy__, 2D[3]; 15: MUL temp[29].xyz, temp[27].xyz_, const[1].xyz_; 16: DP3 temp[30].x, temp[25].xyz_, temp[25].xyz_; 17: RSQ temp[31].x, |temp[30].x___|; 18: MUL temp[32].xyz, temp[25].xyz_, temp[31].xxx_; 19: MUL temp[33].xy, temp[16].xy__, const[10].xy__; 20: TEX temp[34].xyz, temp[33].xy__, 2D[2]; 21: MAD temp[36].xyz, temp[34].xyz_, const[5].www_, none.-1-1-1_; 22: DP3 temp[37].x, temp[32].xyz_, temp[36].xyz_; 23: MAX temp[38].x, temp[37].x___, none.0___; 24: MUL temp[39].xyz, temp[29].xyz_, temp[38].xxx_; 25: DP3 temp[40].x, temp[25].xyz_, temp[25].xyz_; 26: TEX temp[41].x, temp[40].x___, 1D[0]; 27: MUL temp[43].xyz, temp[39].xyz_, temp[41].xxx_; 28: MOV output[0], temp[43]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[13].w, src0.w 1: src0.xyz = input[0], src0.w = temp[13] MAD temp[14].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[14], src1.xyz = const[6], src2.xyz = const[7] MAD temp[15].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[15] MAD temp[16].x, src0.x__, src0.111, src0.000 4: src0.xyz = temp[15], src1.xyz = const[4] MAD temp[16].y, src0._y_, src1._x_, src1._y_ 5: src0.xyz = input[1] REPL_ALPHA temp[17].x RCP, src0.z 6: src0.xyz = input[1], src1.xyz = temp[17] MAD temp[18].xy, src0.xy_, src1.xx_, src0.000 7: src0.xyz = const[0] MAD temp[18].z, src0.__x, src0.111, src0.000 8: src0.xyz = temp[16], src1.xyz = const[8] MAD temp[19].xy, src0.xy_, src1.xy_, src0.000 9: TEX temp[20].xyz, temp[19].xy__, 2D[1]; 10: src0.xyz = temp[20], src1.xyz = const[5] DP3 temp[22].x, src0.xyz, src1.xyz 11: src0.xyz = temp[18], src1.xyz = temp[22] MAD temp[23].xyz, src0.xyz, src1.xxx, src0.000 12: src0.xyz = temp[23], src1.xyz = const[3], src2.xyz = const[2], srcp.xyz = (src1 - src0) MAD temp[25].xyz, srcp.xyz, src2.xxx, src0.000 13: src0.xyz = temp[16], src1.xyz = const[9] MAD temp[26].xy, src0.xy_, src1.xy_, src0.000 14: TEX temp[27].xyz, temp[26].xy__, 2D[3]; 15: src0.xyz = temp[27], src1.xyz = const[1] MAD temp[29].xyz, src0.xyz, src1.xyz, src0.000 16: src0.xyz = temp[25] DP3 temp[30].x, src0.xyz, src0.xyz 17: src0.xyz = temp[30] REPL_ALPHA temp[31].x RSQ, |src0.x| 18: src0.xyz = temp[25], src1.xyz = temp[31] MAD temp[32].xyz, src0.xyz, src1.xxx, src0.000 19: src0.xyz = temp[16], src1.xyz = const[10] MAD temp[33].xy, src0.xy_, src1.xy_, src0.000 20: TEX temp[34].xyz, temp[33].xy__, 2D[2]; 21: src0.xyz = temp[34], src0.w = const[5] MAD temp[36].xyz, src0.xyz, src0.www, -src0.111 22: src0.xyz = temp[32], src1.xyz = temp[36] DP3 temp[37].x, src0.xyz, src1.xyz 23: src0.xyz = temp[37] MAX temp[38].x, src0.x__, src0.0__ 24: src0.xyz = temp[29], src1.xyz = temp[38] MAD temp[39].xyz, src0.xyz, src1.xxx, src0.000 25: src0.xyz = temp[25] DP3 temp[40].x, src0.xyz, src0.xyz 26: TEX temp[41].x, temp[40].x___, 1D[0]; 27: src0.xyz = temp[39], src1.xyz = temp[41] MAD temp[43].xyz, src0.xyz, src1.xxx, src0.000 28: src0.xyz = temp[43], src0.w = temp[43] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = const[0], src0.w = input[0] MAD temp[18].z, src0.__x, src0.111, src0.000 RCP temp[13].w, src0.w 1: src0.xyz = input[0], src0.w = temp[13], src1.xyz = input[1] MAD temp[14].xy, src0.xy_, src0.ww_, src0.000 RCP temp[17].w, src1.z 2: src0.xyz = temp[14], src1.xyz = const[6], src2.xyz = const[7] MAD temp[15].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = input[1], src0.w = temp[17], src1.xyz = temp[17] MAD temp[18].xy, src0.xy_, src0.ww_, src0.000 4: src0.xyz = temp[15], src1.xyz = const[4] MAD temp[16].y, src0._y_, src1._x_, src1._y_ 5: src0.xyz = temp[15] MAD temp[16].x, src0.x__, src0.111, src0.000 6: src0.xyz = temp[16], src1.xyz = const[10] MAD temp[33].xy, src0.xy_, src1.xy_, src0.000 7: src0.xyz = temp[16], src1.xyz = const[9] MAD temp[26].xy, src0.xy_, src1.xy_, src0.000 8: src0.xyz = temp[16], src1.xyz = const[8] MAD temp[19].xy, src0.xy_, src1.xy_, src0.000 9: BEGIN_TEX; 10: TEX temp[34].xyz, temp[33].xy__, 2D[2]; 11: TEX temp[27].xyz, temp[26].xy__, 2D[3]; 12: TEX temp[20].xyz, temp[19].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 13: src0.xyz = temp[34], src0.w = const[5] SEM_WAIT MAD temp[36].xyz, src0.xyz, src0.www, -src0.111 14: src0.xyz = temp[27], src1.xyz = const[1] MAD temp[29].xyz, src0.xyz, src1.xyz, src0.000 15: src0.xyz = temp[20], src1.xyz = const[5] DP3 temp[22].x, src0.xyz, src1.xyz 16: src0.xyz = temp[18], src1.xyz = temp[22] MAD temp[23].xyz, src0.xyz, src1.xxx, src0.000 17: src0.xyz = temp[23], src1.xyz = const[3], src2.xyz = const[2], srcp.xyz = (src1 - src0) MAD temp[25].xyz, srcp.xyz, src2.xxx, src0.000 18: src0.xyz = temp[25] DP3 temp[40].x, src0.xyz, src0.xyz 19: src0.xyz = temp[25] DP3 temp[30].x, src0.xyz, src0.xyz 20: src0.xyz = temp[30] REPL_ALPHA temp[31].x RSQ, |src0.x| 21: src0.xyz = temp[25], src1.xyz = temp[31] MAD temp[32].xyz, src0.xyz, src1.xxx, src0.000 22: src0.xyz = temp[32], src1.xyz = temp[36] DP3 temp[37].x, src0.xyz, src1.xyz 23: src0.xyz = temp[37] MAX temp[38].x, src0.x__, src0.0__ 24: src0.xyz = temp[29], src1.xyz = temp[38] MAD temp[39].xyz, src0.xyz, src1.xxx, src0.000 25: BEGIN_TEX; 26: TEX temp[41].x, temp[40].x___, 1D[0] SEM_WAIT SEM_ACQUIRE; 27: src0.xyz = temp[39], src1.xyz = temp[41] SEM_WAIT MAD temp[43].xyz, src0.xyz, src1.xxx, src0.000 28: src0.xyz = temp[43], src0.w = temp[43] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = const[0], src0.w = input[0] MAD temp[18].z, src0.__x, src0.111, src0.000 RCP temp[13].w, src0.w 1: src0.xyz = input[0], src0.w = temp[13], src1.xyz = input[1] MAD temp[14].xy, src0.xy_, src0.ww_, src0.000 RCP temp[17].w, src1.z 2: src0.xyz = temp[14], src1.xyz = const[6], src2.xyz = const[7] MAD temp[15].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = input[1], src0.w = temp[17] MAD temp[18].xy, src0.xy_, src0.ww_, src0.000 4: src0.xyz = temp[15], src1.xyz = const[4] MAD temp[16].y, src0._y_, src1._x_, src1._y_ 5: src0.xyz = temp[15] MAD temp[16].x, src0.x__, src0.111, src0.000 6: src0.xyz = temp[16], src1.xyz = const[10] MAD temp[33].xy, src0.xy_, src1.xy_, src0.000 7: src0.xyz = temp[16], src1.xyz = const[9] MAD temp[26].xy, src0.xy_, src1.xy_, src0.000 8: src0.xyz = temp[16], src1.xyz = const[8] MAD temp[19].xy, src0.xy_, src1.xy_, src0.000 9: BEGIN_TEX; 10: TEX temp[34].xyz, temp[33].xy__, 2D[2]; 11: TEX temp[27].xyz, temp[26].xy__, 2D[3]; 12: TEX temp[20].xyz, temp[19].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 13: src0.xyz = temp[34], src0.w = const[5] SEM_WAIT MAD temp[36].xyz, src0.xyz, src0.www, -src0.111 14: src0.xyz = temp[27], src1.xyz = const[1] MAD temp[29].xyz, src0.xyz, src1.xyz, src0.000 15: src0.xyz = temp[20], src1.xyz = const[5] DP3 temp[22].x, src0.xyz, src1.xyz 16: src0.xyz = temp[18], src1.xyz = temp[22] MAD temp[23].xyz, src0.xyz, src1.xxx, src0.000 17: src0.xyz = temp[23], src1.xyz = const[3], src2.xyz = const[2], srcp.xyz = (src1 - src0) MAD temp[25].xyz, srcp.xyz, src2.xxx, src0.000 18: src0.xyz = temp[25] DP3 temp[40].x, src0.xyz, src0.xyz 19: src0.xyz = temp[25] DP3 temp[30].x, src0.xyz, src0.xyz 20: src0.xyz = temp[30] REPL_ALPHA temp[31].x RSQ, |src0.x| 21: src0.xyz = temp[25], src1.xyz = temp[31] MAD temp[32].xyz, src0.xyz, src1.xxx, src0.000 22: src0.xyz = temp[32], src1.xyz = temp[36] DP3 temp[37].x, src0.xyz, src1.xyz 23: src0.xyz = temp[37] MAX temp[38].x, src0.x__, src0.0__ 24: src0.xyz = temp[29], src1.xyz = temp[38] MAD temp[39].xyz, src0.xyz, src1.xxx, src0.000 25: BEGIN_TEX; 26: TEX temp[41].x, temp[40].x___, 1D[0] SEM_WAIT SEM_ACQUIRE; 27: src0.xyz = temp[39], src1.xyz = temp[41] SEM_WAIT MAD temp[43].xyz, src0.xyz, src1.xxx, src0.000 28: src0.xyz = temp[43], src0.w = temp[43] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = const[0], src0.w = input[1] MAD temp[2].z, src0.__x, src0.111, src0.000 RCP temp[0].w, src0.w 1: src0.xyz = input[1], src0.w = temp[0], src1.xyz = input[0] MAD temp[1].xy, src0.xy_, src0.ww_, src0.00_ RCP temp[0].w, src1.z 2: src0.xyz = temp[1], src1.xyz = const[6], src2.xyz = const[7] MAD temp[1].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = input[0], src0.w = temp[0] MAD temp[2].xy, src0.xy_, src0.ww_, src0.000 4: src0.xyz = temp[1], src1.xyz = const[4] MAD temp[0].y, src0._y_, src1._x_, src1._y_ 5: src0.xyz = temp[1] MAD temp[0].x, src0.x__, src0.11_, src0.00_ 6: src0.xyz = temp[0], src1.xyz = const[10] MAD temp[1].xy, src0.xy_, src1.xy_, src0.00_ 7: src0.xyz = temp[0], src1.xyz = const[9] MAD temp[3].xy, src0.xy_, src1.xy_, src0.00_ 8: src0.xyz = temp[0], src1.xyz = const[8] MAD temp[0].xy, src0.xy_, src1.xy_, src0.00_ 9: BEGIN_TEX; 10: TEX temp[1].xyz, temp[1].xy__, 2D[2]; 11: TEX temp[3].xyz, temp[3].xy__, 2D[3]; 12: TEX temp[0].xyz, temp[0].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 13: src0.xyz = temp[1], src0.w = const[5] SEM_WAIT MAD temp[1].xyz, src0.xyz, src0.www, -src0.111 14: src0.xyz = temp[3], src1.xyz = const[1] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 15: src0.xyz = temp[0], src1.xyz = const[5] DP3 temp[0].x, src0.xyz, src1.xyz 16: src0.xyz = temp[2], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 17: src0.xyz = temp[0], src1.xyz = const[3], src2.xyz = const[2], srcp.xyz = (src1 - src0) MAD temp[0].xyz, srcp.xyz, src2.xxx, src0.000 18: src0.xyz = temp[0] DP3 temp[2].x, src0.xyz, src0.xyz 19: src0.xyz = temp[0] DP3 temp[2].y, src0.xyz, src0.xyz 20: src0.xyz = temp[2] REPL_ALPHA temp[2].y RSQ, |src0.y| 21: src0.xyz = temp[0], src1.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src1.yyy, src0.000 22: src0.xyz = temp[0], src1.xyz = temp[1] DP3 temp[0].x, src0.xyz, src1.xyz 23: src0.xyz = temp[0] MAX temp[0].x, src0.x__, src0.0__ 24: src0.xyz = temp[3], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 25: BEGIN_TEX; 26: TEX temp[1].x, temp[2].x___, 1D[0] SEM_WAIT SEM_ACQUIRE; 27: src0.xyz = temp[0], src1.xyz = temp[1] SEM_WAIT MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 28: src0.xyz = temp[0], src0.w = temp[43] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 r300compiler error: Too many hardware temporaries used. r300 FP: Compiler Error: Too many hardware temporaries used. Using a dummy shader instead. r300: Initial fragment program FRAG DCL OUT[0], COLOR IMM[0] FLT32 { 0.0000, 1.0000, 0.0000, 0.0000} 0: MOV OUT[0], IMM[0].xxxy 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], none.0001; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], none.0001; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], none.0001; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: MAD color[0].xyz, src0.000, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: MAD color[0].xyz, src0.000, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: MAD color[0].xyz, src0.000, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: MAD color[0].xyz, src0.000, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 pc=32************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: 1.0 1.0 0.0 op: 00040891 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], POSITION, LINEAR DCL IN[1], GENERIC[12], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL CONST[6..7] DCL CONST[4..5] DCL TEMP[0] DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL DCL TEMP[6], LOCAL DCL TEMP[7], LOCAL DCL TEMP[8], LOCAL IMM[0] FLT32 { 1.0000, 0.0039, 0.0000, 2.0000} IMM[1] FLT32 { -1.0000, 0.0000, 10.0000, 0.0000} 0: MOV TEMP[0], IN[0] 1: MAD TEMP[0].y, IN[0], CONST[7].xxxx, CONST[7].yyyy 2: TEX TEMP[1], TEMP[0].xyyy, SAMP[2], RECT 3: TEX TEMP[2], TEMP[0].xyyy, SAMP[1], RECT 4: DP3 TEMP[3].x, TEMP[2].xyzz, IMM[0].xyzz 5: MUL TEMP[3].xyz, IN[1].xyzz, TEMP[3].xxxx 6: ADD TEMP[4].xyz, CONST[6].xyzz, -TEMP[3].xyzz 7: MUL TEMP[4].xyz, TEMP[4].xyzz, CONST[5].xxxx 8: DP3 TEMP[5].x, TEMP[4].xyzz, TEMP[4].xyzz 9: RSQ TEMP[5].x, TEMP[5].xxxx 10: MUL TEMP[5].xyz, TEMP[4].xyzz, TEMP[5].xxxx 11: MAD TEMP[6].xyz, TEMP[1].xyzz, IMM[0].wwww, IMM[1].xxxx 12: DP3 TEMP[7].x, TEMP[6].xyzz, TEMP[6].xyzz 13: RSQ TEMP[7].x, TEMP[7].xxxx 14: MUL TEMP[6].xyz, TEMP[6].xyzz, TEMP[7].xxxx 15: MOV TEMP[3].xyz, -TEMP[3].xyzx 16: DP3 TEMP[7].x, TEMP[3].xyzz, TEMP[3].xyzz 17: RSQ TEMP[7].x, TEMP[7].xxxx 18: MAD TEMP[3].xyz, TEMP[3].xyzz, TEMP[7].xxxx, TEMP[5].xyzz 19: TEX TEMP[7].xyz, TEMP[0].xyyy, SAMP[3], RECT 20: MUL TEMP[7].xyz, TEMP[7].xyzz, CONST[4].xyzz 21: DP3 TEMP[5].x, TEMP[5].xyzz, TEMP[6].xyzz 22: MAX TEMP[5].x, TEMP[5].xxxx, IMM[1].yyyy 23: MUL TEMP[1].x, CONST[4].wwww, TEMP[1].wwww 24: DP3 TEMP[8].x, TEMP[3].xyzz, TEMP[3].xyzz 25: RSQ TEMP[8].x, TEMP[8].xxxx 26: MUL TEMP[3].xyz, TEMP[3].xyzz, TEMP[8].xxxx 27: DP3_SAT TEMP[3].x, TEMP[3].xyzz, TEMP[6].xyzz 28: MUL TEMP[2].x, TEMP[2].wwww, IMM[1].zzzz 29: EX2 TEMP[2].x, TEMP[2].xxxx 30: ADD TEMP[2].x, TEMP[2].xxxx, IMM[0].xxxx 31: POW TEMP[2].x, TEMP[3].xxxx, TEMP[2].xxxx 32: MUL TEMP[1].x, TEMP[1].xxxx, TEMP[2].xxxx 33: MUL TEMP[1].xyz, TEMP[1].xxxx, CONST[4].xyzz 34: MAD TEMP[1].xyz, TEMP[7].xyzz, TEMP[5].xxxx, TEMP[1].xyzz 35: DP3 TEMP[2].x, TEMP[4].xyzz, TEMP[4].xyzz 36: TEX TEMP[2].x, TEMP[2].xxxx, SAMP[0], 1D 37: MUL TEMP[1].xyz, TEMP[1].xyzz, TEMP[2].xxxx 38: MOV OUT[0], TEMP[1] 39: END Fragment Program: before compilation # Radeon Compiler Program 0: RCP temp[9].w, input[0].wwww; 1: MUL temp[9].xyz, input[0], temp[9].wwww; 2: MAD temp[9].xyz, temp[9].xyz0, const[10].xyz0, const[11].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[7].xxxx, const[7].yyyy; 5: TEX temp[1], temp[0].xyyy, RECT[2]; 6: TEX temp[2], temp[0].xyyy, RECT[1]; 7: DP3 temp[3].x, temp[2].xyzz, const[8].xyzz; 8: MUL temp[3].xyz, input[1].xyzz, temp[3].xxxx; 9: ADD temp[4].xyz, const[6].xyzz, -temp[3].xyzz; 10: MUL temp[4].xyz, temp[4].xyzz, const[5].xxxx; 11: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 12: RSQ temp[5].x, temp[5].xxxx; 13: MUL temp[5].xyz, temp[4].xyzz, temp[5].xxxx; 14: MAD temp[6].xyz, temp[1].xyzz, const[8].wwww, const[9].xxxx; 15: DP3 temp[7].x, temp[6].xyzz, temp[6].xyzz; 16: RSQ temp[7].x, temp[7].xxxx; 17: MUL temp[6].xyz, temp[6].xyzz, temp[7].xxxx; 18: MOV temp[3].xyz, -temp[3].xyzx; 19: DP3 temp[7].x, temp[3].xyzz, temp[3].xyzz; 20: RSQ temp[7].x, temp[7].xxxx; 21: MAD temp[3].xyz, temp[3].xyzz, temp[7].xxxx, temp[5].xyzz; 22: TEX temp[7].xyz, temp[0].xyyy, RECT[3]; 23: MUL temp[7].xyz, temp[7].xyzz, const[4].xyzz; 24: DP3 temp[5].x, temp[5].xyzz, temp[6].xyzz; 25: MAX temp[5].x, temp[5].xxxx, const[9].yyyy; 26: MUL temp[1].x, const[4].wwww, temp[1].wwww; 27: DP3 temp[8].x, temp[3].xyzz, temp[3].xyzz; 28: RSQ temp[8].x, temp[8].xxxx; 29: MUL temp[3].xyz, temp[3].xyzz, temp[8].xxxx; 30: DP3_SAT temp[3].x, temp[3].xyzz, temp[6].xyzz; 31: MUL temp[2].x, temp[2].wwww, const[9].zzzz; 32: EX2 temp[2].x, temp[2].xxxx; 33: ADD temp[2].x, temp[2].xxxx, const[8].xxxx; 34: POW temp[2].x, temp[3].xxxx, temp[2].xxxx; 35: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 36: MUL temp[1].xyz, temp[1].xxxx, const[4].xyzz; 37: MAD temp[1].xyz, temp[7].xyzz, temp[5].xxxx, temp[1].xyzz; 38: DP3 temp[2].x, temp[4].xyzz, temp[4].xyzz; 39: TEX temp[2].x, temp[2].xxxx, 1D[0]; 40: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 41: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: RCP temp[9].w, input[0].wwww; 1: MUL temp[9].xyz, input[0], temp[9].wwww; 2: MAD temp[9].xyz, temp[9].xyz0, const[10].xyz0, const[11].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[7].xxxx, const[7].yyyy; 5: TEX temp[1], temp[0].xyyy, RECT[2]; 6: TEX temp[2], temp[0].xyyy, RECT[1]; 7: DP3 temp[3].x, temp[2].xyzz, const[8].xyzz; 8: MUL temp[3].xyz, input[1].xyzz, temp[3].xxxx; 9: ADD temp[4].xyz, const[6].xyzz, -temp[3].xyzz; 10: MUL temp[4].xyz, temp[4].xyzz, const[5].xxxx; 11: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 12: RSQ temp[5].x, temp[5].xxxx; 13: MUL temp[5].xyz, temp[4].xyzz, temp[5].xxxx; 14: MAD temp[6].xyz, temp[1].xyzz, const[8].wwww, const[9].xxxx; 15: DP3 temp[7].x, temp[6].xyzz, temp[6].xyzz; 16: RSQ temp[7].x, temp[7].xxxx; 17: MUL temp[6].xyz, temp[6].xyzz, temp[7].xxxx; 18: MOV temp[3].xyz, -temp[3].xyzx; 19: DP3 temp[7].x, temp[3].xyzz, temp[3].xyzz; 20: RSQ temp[7].x, temp[7].xxxx; 21: MAD temp[3].xyz, temp[3].xyzz, temp[7].xxxx, temp[5].xyzz; 22: TEX temp[7].xyz, temp[0].xyyy, RECT[3]; 23: MUL temp[7].xyz, temp[7].xyzz, const[4].xyzz; 24: DP3 temp[5].x, temp[5].xyzz, temp[6].xyzz; 25: MAX temp[5].x, temp[5].xxxx, const[9].yyyy; 26: MUL temp[1].x, const[4].wwww, temp[1].wwww; 27: DP3 temp[8].x, temp[3].xyzz, temp[3].xyzz; 28: RSQ temp[8].x, temp[8].xxxx; 29: MUL temp[3].xyz, temp[3].xyzz, temp[8].xxxx; 30: DP3_SAT temp[3].x, temp[3].xyzz, temp[6].xyzz; 31: MUL temp[2].x, temp[2].wwww, const[9].zzzz; 32: EX2 temp[2].x, temp[2].xxxx; 33: ADD temp[2].x, temp[2].xxxx, const[8].xxxx; 34: POW temp[2].x, temp[3].xxxx, temp[2].xxxx; 35: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 36: MUL temp[1].xyz, temp[1].xxxx, const[4].xyzz; 37: MAD temp[1].xyz, temp[7].xyzz, temp[5].xxxx, temp[1].xyzz; 38: DP3 temp[2].x, temp[4].xyzz, temp[4].xyzz; 39: TEX temp[2].x, temp[2].xxxx, 1D[0]; 40: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 41: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: RCP temp[9].w, input[0].wwww; 1: MUL temp[9].xyz, input[0], temp[9].wwww; 2: MAD temp[9].xyz, temp[9].xyz0, const[10].xyz0, const[11].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[7].xxxx, const[7].yyyy; 5: TEX temp[1], temp[0].xyyy, RECT[2]; 6: TEX temp[2], temp[0].xyyy, RECT[1]; 7: DP3 temp[3].x, temp[2].xyzz, const[8].xyzz; 8: MUL temp[3].xyz, input[1].xyzz, temp[3].xxxx; 9: ADD temp[4].xyz, const[6].xyzz, -temp[3].xyzz; 10: MUL temp[4].xyz, temp[4].xyzz, const[5].xxxx; 11: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 12: RSQ temp[5].x, temp[5].xxxx; 13: MUL temp[5].xyz, temp[4].xyzz, temp[5].xxxx; 14: MAD temp[6].xyz, temp[1].xyzz, const[8].wwww, const[9].xxxx; 15: DP3 temp[7].x, temp[6].xyzz, temp[6].xyzz; 16: RSQ temp[7].x, temp[7].xxxx; 17: MUL temp[6].xyz, temp[6].xyzz, temp[7].xxxx; 18: MOV temp[3].xyz, -temp[3].xyzx; 19: DP3 temp[7].x, temp[3].xyzz, temp[3].xyzz; 20: RSQ temp[7].x, temp[7].xxxx; 21: MAD temp[3].xyz, temp[3].xyzz, temp[7].xxxx, temp[5].xyzz; 22: TEX temp[7].xyz, temp[0].xyyy, RECT[3]; 23: MUL temp[7].xyz, temp[7].xyzz, const[4].xyzz; 24: DP3 temp[5].x, temp[5].xyzz, temp[6].xyzz; 25: MAX temp[5].x, temp[5].xxxx, const[9].yyyy; 26: MUL temp[1].x, const[4].wwww, temp[1].wwww; 27: DP3 temp[8].x, temp[3].xyzz, temp[3].xyzz; 28: RSQ temp[8].x, temp[8].xxxx; 29: MUL temp[3].xyz, temp[3].xyzz, temp[8].xxxx; 30: DP3_SAT temp[3].x, temp[3].xyzz, temp[6].xyzz; 31: MUL temp[2].x, temp[2].wwww, const[9].zzzz; 32: EX2 temp[2].x, temp[2].xxxx; 33: ADD temp[2].x, temp[2].xxxx, const[8].xxxx; 34: POW temp[2].x, temp[3].xxxx, temp[2].xxxx; 35: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 36: MUL temp[1].xyz, temp[1].xxxx, const[4].xyzz; 37: MAD temp[1].xyz, temp[7].xyzz, temp[5].xxxx, temp[1].xyzz; 38: DP3 temp[2].x, temp[4].xyzz, temp[4].xyzz; 39: TEX temp[2].x, temp[2].xxxx, 1D[0]; 40: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 41: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: RCP temp[9].w, input[0].wwww; 1: MUL temp[9].xyz, input[0], temp[9].wwww; 2: MAD temp[9].xyz, temp[9].xyz0, const[10].xyz0, const[11].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[7].xxxx, const[7].yyyy; 5: TEX temp[1], temp[0].xyyy, RECT[2]; 6: TEX temp[2], temp[0].xyyy, RECT[1]; 7: DP3 temp[3].x, temp[2].xyzz, const[8].xyzz; 8: MUL temp[3].xyz, input[1].xyzz, temp[3].xxxx; 9: ADD temp[4].xyz, const[6].xyzz, -temp[3].xyzz; 10: MUL temp[4].xyz, temp[4].xyzz, const[5].xxxx; 11: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 12: RSQ temp[5].x, temp[5].xxxx; 13: MUL temp[5].xyz, temp[4].xyzz, temp[5].xxxx; 14: MAD temp[6].xyz, temp[1].xyzz, const[8].wwww, const[9].xxxx; 15: DP3 temp[7].x, temp[6].xyzz, temp[6].xyzz; 16: RSQ temp[7].x, temp[7].xxxx; 17: MUL temp[6].xyz, temp[6].xyzz, temp[7].xxxx; 18: MOV temp[3].xyz, -temp[3].xyzx; 19: DP3 temp[7].x, temp[3].xyzz, temp[3].xyzz; 20: RSQ temp[7].x, temp[7].xxxx; 21: MAD temp[3].xyz, temp[3].xyzz, temp[7].xxxx, temp[5].xyzz; 22: TEX temp[7].xyz, temp[0].xyyy, RECT[3]; 23: MUL temp[7].xyz, temp[7].xyzz, const[4].xyzz; 24: DP3 temp[5].x, temp[5].xyzz, temp[6].xyzz; 25: MAX temp[5].x, temp[5].xxxx, const[9].yyyy; 26: MUL temp[1].x, const[4].wwww, temp[1].wwww; 27: DP3 temp[8].x, temp[3].xyzz, temp[3].xyzz; 28: RSQ temp[8].x, temp[8].xxxx; 29: MUL temp[3].xyz, temp[3].xyzz, temp[8].xxxx; 30: DP3_SAT temp[3].x, temp[3].xyzz, temp[6].xyzz; 31: MUL temp[2].x, temp[2].wwww, const[9].zzzz; 32: EX2 temp[2].x, temp[2].xxxx; 33: ADD temp[2].x, temp[2].xxxx, const[8].xxxx; 34: POW temp[2].x, temp[3].xxxx, temp[2].xxxx; 35: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 36: MUL temp[1].xyz, temp[1].xxxx, const[4].xyzz; 37: MAD temp[1].xyz, temp[7].xyzz, temp[5].xxxx, temp[1].xyzz; 38: DP3 temp[2].x, temp[4].xyzz, temp[4].xyzz; 39: TEX temp[2].x, temp[2].xxxx, 1D[0]; 40: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 41: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: RCP temp[9].w, input[0].wwww; 1: MUL temp[9].xyz, input[0], temp[9].wwww; 2: MAD temp[9].xyz, temp[9].xyz0, const[10].xyz0, const[11].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[7].xxxx, const[7].yyyy; 5: TEX temp[1], temp[0].xyyy, RECT[2]; 6: TEX temp[2], temp[0].xyyy, RECT[1]; 7: DP3 temp[3].x, temp[2].xyzz, const[8].xyzz; 8: MUL temp[3].xyz, input[1].xyzz, temp[3].xxxx; 9: ADD temp[4].xyz, const[6].xyzz, -temp[3].xyzz; 10: MUL temp[4].xyz, temp[4].xyzz, const[5].xxxx; 11: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 12: RSQ temp[5].x, temp[5].xxxx; 13: MUL temp[5].xyz, temp[4].xyzz, temp[5].xxxx; 14: MAD temp[6].xyz, temp[1].xyzz, const[8].wwww, const[9].xxxx; 15: DP3 temp[7].x, temp[6].xyzz, temp[6].xyzz; 16: RSQ temp[7].x, temp[7].xxxx; 17: MUL temp[6].xyz, temp[6].xyzz, temp[7].xxxx; 18: MOV temp[3].xyz, -temp[3].xyzx; 19: DP3 temp[7].x, temp[3].xyzz, temp[3].xyzz; 20: RSQ temp[7].x, temp[7].xxxx; 21: MAD temp[3].xyz, temp[3].xyzz, temp[7].xxxx, temp[5].xyzz; 22: TEX temp[7].xyz, temp[0].xyyy, RECT[3]; 23: MUL temp[7].xyz, temp[7].xyzz, const[4].xyzz; 24: DP3 temp[5].x, temp[5].xyzz, temp[6].xyzz; 25: MAX temp[5].x, temp[5].xxxx, const[9].yyyy; 26: MUL temp[1].x, const[4].wwww, temp[1].wwww; 27: DP3 temp[8].x, temp[3].xyzz, temp[3].xyzz; 28: RSQ temp[8].x, temp[8].xxxx; 29: MUL temp[3].xyz, temp[3].xyzz, temp[8].xxxx; 30: DP3_SAT temp[3].x, temp[3].xyzz, temp[6].xyzz; 31: MUL temp[2].x, temp[2].wwww, const[9].zzzz; 32: EX2 temp[2].x, temp[2].xxxx; 33: ADD temp[2].x, temp[2].xxxx, const[8].xxxx; 34: POW temp[2].x, temp[3].xxxx, temp[2].xxxx; 35: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 36: MUL temp[1].xyz, temp[1].xxxx, const[4].xyzz; 37: MAD temp[1].xyz, temp[7].xyzz, temp[5].xxxx, temp[1].xyzz; 38: DP3 temp[2].x, temp[4].xyzz, temp[4].xyzz; 39: TEX temp[2].x, temp[2].xxxx, 1D[0]; 40: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 41: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: RCP temp[9].w, input[0].wwww; 1: MUL temp[9].xyz, input[0], temp[9].wwww; 2: MAD temp[9].xyz, temp[9].xyz0, const[10].xyz0, const[11].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[7].xxxx, const[7].yyyy; 5: MUL temp[10], temp[0].xyyy, const[12]; 6: TEX temp[1], temp[10], 2D[2]; 7: MUL temp[11], temp[0].xyyy, const[13]; 8: TEX temp[2], temp[11], 2D[1]; 9: DP3 temp[3].x, temp[2].xyzz, const[8].xyzz; 10: MUL temp[3].xyz, input[1].xyzz, temp[3].xxxx; 11: ADD temp[4].xyz, const[6].xyzz, -temp[3].xyzz; 12: MUL temp[4].xyz, temp[4].xyzz, const[5].xxxx; 13: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 14: RSQ temp[5].x, temp[5].xxxx; 15: MUL temp[5].xyz, temp[4].xyzz, temp[5].xxxx; 16: MAD temp[6].xyz, temp[1].xyzz, const[8].wwww, const[9].xxxx; 17: DP3 temp[7].x, temp[6].xyzz, temp[6].xyzz; 18: RSQ temp[7].x, temp[7].xxxx; 19: MUL temp[6].xyz, temp[6].xyzz, temp[7].xxxx; 20: MOV temp[3].xyz, -temp[3].xyzx; 21: DP3 temp[7].x, temp[3].xyzz, temp[3].xyzz; 22: RSQ temp[7].x, temp[7].xxxx; 23: MAD temp[3].xyz, temp[3].xyzz, temp[7].xxxx, temp[5].xyzz; 24: MUL temp[12], temp[0].xyyy, const[14]; 25: TEX temp[13], temp[12], 2D[3]; 26: MOV temp[7].xyz, temp[13]; 27: MUL temp[7].xyz, temp[7].xyzz, const[4].xyzz; 28: DP3 temp[5].x, temp[5].xyzz, temp[6].xyzz; 29: MAX temp[5].x, temp[5].xxxx, const[9].yyyy; 30: MUL temp[1].x, const[4].wwww, temp[1].wwww; 31: DP3 temp[8].x, temp[3].xyzz, temp[3].xyzz; 32: RSQ temp[8].x, temp[8].xxxx; 33: MUL temp[3].xyz, temp[3].xyzz, temp[8].xxxx; 34: DP3_SAT temp[3].x, temp[3].xyzz, temp[6].xyzz; 35: MUL temp[2].x, temp[2].wwww, const[9].zzzz; 36: EX2 temp[2].x, temp[2].xxxx; 37: ADD temp[2].x, temp[2].xxxx, const[8].xxxx; 38: POW temp[2].x, temp[3].xxxx, temp[2].xxxx; 39: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 40: MUL temp[1].xyz, temp[1].xxxx, const[4].xyzz; 41: MAD temp[1].xyz, temp[7].xyzz, temp[5].xxxx, temp[1].xyzz; 42: DP3 temp[2].x, temp[4].xyzz, temp[4].xyzz; 43: TEX temp[14], temp[2].xxxx, 1D[0]; 44: MOV temp[2].x, temp[14]; 45: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 46: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: RCP temp[9].w, input[0].wwww; 1: MUL temp[9].xyz, input[0], temp[9].wwww; 2: MAD temp[9].xyz, temp[9].xyz0, const[10].xyz0, const[11].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[7].xxxx, const[7].yyyy; 5: MUL temp[10], temp[0].xyyy, const[12]; 6: TEX temp[1], temp[10], 2D[2]; 7: MUL temp[11], temp[0].xyyy, const[13]; 8: TEX temp[2], temp[11], 2D[1]; 9: DP3 temp[3].x, temp[2].xyzz, const[8].xyzz; 10: MUL temp[3].xyz, input[1].xyzz, temp[3].xxxx; 11: ADD temp[4].xyz, const[6].xyzz, -temp[3].xyzz; 12: MUL temp[4].xyz, temp[4].xyzz, const[5].xxxx; 13: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 14: RSQ temp[5].x, |temp[5].xxxx|; 15: MUL temp[5].xyz, temp[4].xyzz, temp[5].xxxx; 16: MAD temp[6].xyz, temp[1].xyzz, const[8].wwww, const[9].xxxx; 17: DP3 temp[7].x, temp[6].xyzz, temp[6].xyzz; 18: RSQ temp[7].x, |temp[7].xxxx|; 19: MUL temp[6].xyz, temp[6].xyzz, temp[7].xxxx; 20: MOV temp[3].xyz, -temp[3].xyzx; 21: DP3 temp[7].x, temp[3].xyzz, temp[3].xyzz; 22: RSQ temp[7].x, |temp[7].xxxx|; 23: MAD temp[3].xyz, temp[3].xyzz, temp[7].xxxx, temp[5].xyzz; 24: MUL temp[12], temp[0].xyyy, const[14]; 25: TEX temp[13], temp[12], 2D[3]; 26: MOV temp[7].xyz, temp[13]; 27: MUL temp[7].xyz, temp[7].xyzz, const[4].xyzz; 28: DP3 temp[5].x, temp[5].xyzz, temp[6].xyzz; 29: MAX temp[5].x, temp[5].xxxx, const[9].yyyy; 30: MUL temp[1].x, const[4].wwww, temp[1].wwww; 31: DP3 temp[8].x, temp[3].xyzz, temp[3].xyzz; 32: RSQ temp[8].x, |temp[8].xxxx|; 33: MUL temp[3].xyz, temp[3].xyzz, temp[8].xxxx; 34: DP3_SAT temp[3].x, temp[3].xyzz, temp[6].xyzz; 35: MUL temp[2].x, temp[2].wwww, const[9].zzzz; 36: EX2 temp[2].x, temp[2].xxxx; 37: ADD temp[2].x, temp[2].xxxx, const[8].xxxx; 38: LG2 temp[15].w, temp[3].xxxx; 39: MUL temp[15].w, temp[15].wwww, temp[2].xxxx; 40: EX2 temp[2].x, temp[15].wwww; 41: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 42: MUL temp[1].xyz, temp[1].xxxx, const[4].xyzz; 43: MAD temp[1].xyz, temp[7].xyzz, temp[5].xxxx, temp[1].xyzz; 44: DP3 temp[2].x, temp[4].xyzz, temp[4].xyzz; 45: TEX temp[14], temp[2].xxxx, 1D[0]; 46: MOV temp[2].x, temp[14]; 47: MUL temp[1].xyz, temp[1].xyzz, temp[2].xxxx; 48: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: RCP temp[9].w, input[0].___w; 1: MUL temp[9].xy, input[0].xy__, temp[9].ww__; 2: MAD temp[9].xy, temp[9].xy__, const[10].xy__, const[11].xy__; 3: MOV temp[0].x, temp[9].x___; 4: MAD temp[0].y, temp[9]._y__, const[7]._x__, const[7]._y__; 5: MUL temp[10].xy, temp[0].xy__, const[12].xy__; 6: TEX temp[1], temp[10].xy__, 2D[2]; 7: MUL temp[11].xy, temp[0].xy__, const[13].xy__; 8: TEX temp[2], temp[11].xy__, 2D[1]; 9: DP3 temp[3].x, temp[2].xyz_, const[8].xyz_; 10: MUL temp[3].xyz, input[1].xyz_, temp[3].xxx_; 11: ADD temp[4].xyz, const[6].xyz_, -temp[3].xyz_; 12: MUL temp[4].xyz, temp[4].xyz_, const[5].xxx_; 13: DP3 temp[5].x, temp[4].xyz_, temp[4].xyz_; 14: RSQ temp[5].x, |temp[5].x___|; 15: MUL temp[5].xyz, temp[4].xyz_, temp[5].xxx_; 16: MAD temp[6].xyz, temp[1].xyz_, const[8].www_, const[9].xxx_; 17: DP3 temp[7].x, temp[6].xyz_, temp[6].xyz_; 18: RSQ temp[7].x, |temp[7].x___|; 19: MUL temp[6].xyz, temp[6].xyz_, temp[7].xxx_; 20: MOV temp[3].xyz, -temp[3].xyz_; 21: DP3 temp[7].x, temp[3].xyz_, temp[3].xyz_; 22: RSQ temp[7].x, |temp[7].x___|; 23: MAD temp[3].xyz, temp[3].xyz_, temp[7].xxx_, temp[5].xyz_; 24: MUL temp[12].xy, temp[0].xy__, const[14].xy__; 25: TEX temp[13].xyz, temp[12].xy__, 2D[3]; 26: MOV temp[7].xyz, temp[13].xyz_; 27: MUL temp[7].xyz, temp[7].xyz_, const[4].xyz_; 28: DP3 temp[5].x, temp[5].xyz_, temp[6].xyz_; 29: MAX temp[5].x, temp[5].x___, const[9].y___; 30: MUL temp[1].x, const[4].w___, temp[1].w___; 31: DP3 temp[8].x, temp[3].xyz_, temp[3].xyz_; 32: RSQ temp[8].x, |temp[8].x___|; 33: MUL temp[3].xyz, temp[3].xyz_, temp[8].xxx_; 34: DP3_SAT temp[3].x, temp[3].xyz_, temp[6].xyz_; 35: MUL temp[2].x, temp[2].w___, const[9].z___; 36: EX2 temp[2].x, temp[2].x___; 37: ADD temp[2].x, temp[2].x___, const[8].x___; 38: LG2 temp[15].w, temp[3].___x; 39: MUL temp[15].w, temp[15].___w, temp[2].___x; 40: EX2 temp[2].x, temp[15].w___; 41: MUL temp[1].x, temp[1].x___, temp[2].x___; 42: MUL temp[1].xyz, temp[1].xxx_, const[4].xyz_; 43: MAD temp[1].xyz, temp[7].xyz_, temp[5].xxx_, temp[1].xyz_; 44: DP3 temp[2].x, temp[4].xyz_, temp[4].xyz_; 45: TEX temp[14].x, temp[2].x___, 1D[0]; 46: MOV temp[2].x, temp[14].x___; 47: MUL temp[1].xyz, temp[1].xyz_, temp[2].xxx_; 48: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: RCP temp[9].w, input[0].___w; 1: MUL temp[9].xy, input[0].xy__, temp[9].ww__; 2: MAD temp[9].xy, temp[9].xy__, const[10].xy__, const[11].xy__; 3: MOV temp[0].x, temp[9].x___; 4: MAD temp[0].y, temp[9]._y__, const[7]._x__, const[7]._y__; 5: MUL temp[10].xy, temp[0].xy__, const[12].xy__; 6: TEX temp[1], temp[10].xy__, 2D[2]; 7: MUL temp[11].xy, temp[0].xy__, const[13].xy__; 8: TEX temp[2], temp[11].xy__, 2D[1]; 9: DP3 temp[3].x, temp[2].xyz_, const[8].xyz_; 10: MUL temp[3].xyz, input[1].xyz_, temp[3].xxx_; 11: ADD temp[4].xyz, const[6].xyz_, -temp[3].xyz_; 12: MUL temp[4].xyz, temp[4].xyz_, const[5].xxx_; 13: DP3 temp[5].x, temp[4].xyz_, temp[4].xyz_; 14: RSQ temp[5].x, |temp[5].x___|; 15: MUL temp[5].xyz, temp[4].xyz_, temp[5].xxx_; 16: MAD temp[6].xyz, temp[1].xyz_, const[8].www_, const[9].xxx_; 17: DP3 temp[7].x, temp[6].xyz_, temp[6].xyz_; 18: RSQ temp[7].x, |temp[7].x___|; 19: MUL temp[6].xyz, temp[6].xyz_, temp[7].xxx_; 20: MOV temp[3].xyz, -temp[3].xyz_; 21: DP3 temp[7].x, temp[3].xyz_, temp[3].xyz_; 22: RSQ temp[7].x, |temp[7].x___|; 23: MAD temp[3].xyz, temp[3].xyz_, temp[7].xxx_, temp[5].xyz_; 24: MUL temp[12].xy, temp[0].xy__, const[14].xy__; 25: TEX temp[13].xyz, temp[12].xy__, 2D[3]; 26: MOV temp[7].xyz, temp[13].xyz_; 27: MUL temp[7].xyz, temp[7].xyz_, const[4].xyz_; 28: DP3 temp[5].x, temp[5].xyz_, temp[6].xyz_; 29: MAX temp[5].x, temp[5].x___, const[9].y___; 30: MUL temp[1].x, const[4].w___, temp[1].w___; 31: DP3 temp[8].x, temp[3].xyz_, temp[3].xyz_; 32: RSQ temp[8].x, |temp[8].x___|; 33: MUL temp[3].xyz, temp[3].xyz_, temp[8].xxx_; 34: DP3_SAT temp[3].x, temp[3].xyz_, temp[6].xyz_; 35: MUL temp[2].x, temp[2].w___, const[9].z___; 36: EX2 temp[2].x, temp[2].x___; 37: ADD temp[2].x, temp[2].x___, const[8].x___; 38: LG2 temp[15].w, temp[3].___x; 39: MUL temp[15].w, temp[15].___w, temp[2].___x; 40: EX2 temp[2].x, temp[15].w___; 41: MUL temp[1].x, temp[1].x___, temp[2].x___; 42: MUL temp[1].xyz, temp[1].xxx_, const[4].xyz_; 43: MAD temp[1].xyz, temp[7].xyz_, temp[5].xxx_, temp[1].xyz_; 44: DP3 temp[2].x, temp[4].xyz_, temp[4].xyz_; 45: TEX temp[14].x, temp[2].x___, 1D[0]; 46: MOV temp[2].x, temp[14].x___; 47: MUL temp[1].xyz, temp[1].xyz_, temp[2].xxx_; 48: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: RCP temp[16].w, input[0].___w; 1: MUL temp[17].xy, input[0].xy__, temp[16].ww__; 2: MAD temp[18].xy, temp[17].xy__, const[10].xy__, const[11].xy__; 3: MOV temp[19].x, temp[18].x___; 4: MAD temp[19].y, temp[18]._y__, const[7]._x__, const[7]._y__; 5: MUL temp[20].xy, temp[19].xy__, const[12].xy__; 6: TEX temp[21], temp[20].xy__, 2D[2]; 7: MUL temp[22].xy, temp[19].xy__, const[13].xy__; 8: TEX temp[23], temp[22].xy__, 2D[1]; 9: DP3 temp[24].x, temp[23].xyz_, const[8].xyz_; 10: MUL temp[25].xyz, input[1].xyz_, temp[24].xxx_; 11: ADD temp[26].xyz, const[6].xyz_, -temp[25].xyz_; 12: MUL temp[27].xyz, temp[26].xyz_, const[5].xxx_; 13: DP3 temp[28].x, temp[27].xyz_, temp[27].xyz_; 14: RSQ temp[29].x, |temp[28].x___|; 15: MUL temp[30].xyz, temp[27].xyz_, temp[29].xxx_; 16: MAD temp[31].xyz, temp[21].xyz_, const[8].www_, const[9].xxx_; 17: DP3 temp[32].x, temp[31].xyz_, temp[31].xyz_; 18: RSQ temp[33].x, |temp[32].x___|; 19: MUL temp[34].xyz, temp[31].xyz_, temp[33].xxx_; 20: MOV temp[35].xyz, -temp[25].xyz_; 21: DP3 temp[36].x, temp[35].xyz_, temp[35].xyz_; 22: RSQ temp[37].x, |temp[36].x___|; 23: MAD temp[38].xyz, temp[35].xyz_, temp[37].xxx_, temp[30].xyz_; 24: MUL temp[39].xy, temp[19].xy__, const[14].xy__; 25: TEX temp[40].xyz, temp[39].xy__, 2D[3]; 26: MOV temp[41].xyz, temp[40].xyz_; 27: MUL temp[42].xyz, temp[41].xyz_, const[4].xyz_; 28: DP3 temp[43].x, temp[30].xyz_, temp[34].xyz_; 29: MAX temp[44].x, temp[43].x___, const[9].y___; 30: MUL temp[45].x, const[4].w___, temp[21].w___; 31: DP3 temp[46].x, temp[38].xyz_, temp[38].xyz_; 32: RSQ temp[47].x, |temp[46].x___|; 33: MUL temp[48].xyz, temp[38].xyz_, temp[47].xxx_; 34: DP3_SAT temp[49].x, temp[48].xyz_, temp[34].xyz_; 35: MUL temp[50].x, temp[23].w___, const[9].z___; 36: EX2 temp[51].x, temp[50].x___; 37: ADD temp[52].x, temp[51].x___, const[8].x___; 38: LG2 temp[53].w, temp[49].___x; 39: MUL temp[54].w, temp[53].___w, temp[52].___x; 40: EX2 temp[55].x, temp[54].w___; 41: MUL temp[56].x, temp[45].x___, temp[55].x___; 42: MUL temp[57].xyz, temp[56].xxx_, const[4].xyz_; 43: MAD temp[58].xyz, temp[42].xyz_, temp[44].xxx_, temp[57].xyz_; 44: DP3 temp[59].x, temp[27].xyz_, temp[27].xyz_; 45: TEX temp[60].x, temp[59].x___, 1D[0]; 46: MOV temp[61].x, temp[60].x___; 47: MUL temp[21].xyz, temp[58].xyz_, temp[61].xxx_; 48: MOV output[0], temp[21]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: RCP temp[16].w, input[0].___w; 1: MUL temp[17].xy, input[0].xy__, temp[16].ww__; 2: MAD temp[18].xy, temp[17].xy__, const[10].xy__, const[11].xy__; 3: MOV temp[19].x, temp[18].x___; 4: MAD temp[19].y, temp[18]._y__, const[7]._x__, const[7]._y__; 5: MUL temp[20].xy, temp[19].xy__, const[12].xy__; 6: TEX temp[21], temp[20].xy__, 2D[2]; 7: MUL temp[22].xy, temp[19].xy__, const[13].xy__; 8: TEX temp[23], temp[22].xy__, 2D[1]; 9: DP3 temp[24].x, temp[23].xyz_, const[8].xyz_; 10: MUL temp[25].xyz, input[1].xyz_, temp[24].xxx_; 11: MUL temp[27].xyz, (const[6] - temp[25]).xyz_, const[5].xxx_; 12: DP3 temp[28].x, temp[27].xyz_, temp[27].xyz_; 13: RSQ temp[29].x, |temp[28].x___|; 14: MUL temp[30].xyz, temp[27].xyz_, temp[29].xxx_; 15: MAD temp[31].xyz, temp[21].xyz_, const[8].www_, none.-1-1-1_; 16: DP3 temp[32].x, temp[31].xyz_, temp[31].xyz_; 17: RSQ temp[33].x, |temp[32].x___|; 18: MUL temp[34].xyz, temp[31].xyz_, temp[33].xxx_; 19: DP3 temp[36].x, temp[25].-x-y-z_, temp[25].-x-y-z_; 20: RSQ temp[37].x, |temp[36].x___|; 21: MAD temp[38].xyz, temp[25].-x-y-z_, temp[37].xxx_, temp[30].xyz_; 22: MUL temp[39].xy, temp[19].xy__, const[14].xy__; 23: TEX temp[40].xyz, temp[39].xy__, 2D[3]; 24: MUL temp[42].xyz, temp[40].xyz_, const[4].xyz_; 25: DP3 temp[43].x, temp[30].xyz_, temp[34].xyz_; 26: MAX temp[44].x, temp[43].x___, none.0___; 27: MUL temp[45].x, const[4].w___, temp[21].w___; 28: DP3 temp[46].x, temp[38].xyz_, temp[38].xyz_; 29: RSQ temp[47].x, |temp[46].x___|; 30: MUL temp[48].xyz, temp[38].xyz_, temp[47].xxx_; 31: DP3_SAT temp[49].x, temp[48].xyz_, temp[34].xyz_; 32: MUL temp[50].x, temp[23].w___, const[9].z___; 33: EX2 temp[51].x, temp[50].x___; 34: ADD temp[52].x, temp[51].x___, none.1___; 35: LG2 temp[53].w, temp[49].___x; 36: MUL temp[54].w, temp[53].___w, temp[52].___x; 37: EX2 temp[55].x, temp[54].w___; 38: MUL temp[56].x, temp[45].x___, temp[55].x___; 39: MUL temp[57].xyz, temp[56].xxx_, const[4].xyz_; 40: MAD temp[58].xyz, temp[42].xyz_, temp[44].xxx_, temp[57].xyz_; 41: DP3 temp[59].x, temp[27].xyz_, temp[27].xyz_; 42: TEX temp[60].x, temp[59].x___, 1D[0]; 43: MUL temp[21].xyz, temp[58].xyz_, temp[60].xxx_; 44: MOV output[0], temp[21]; CONST[8] = { 1.0000 0.0039 0.0000 2.0000 } CONST[9] = { -1.0000 0.0000 10.0000 0.0000 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: RCP temp[16].w, input[0].___w; 1: MUL temp[17].xy, input[0].xy__, temp[16].ww__; 2: MAD temp[18].xy, temp[17].xy__, const[10].xy__, const[11].xy__; 3: MOV temp[19].x, temp[18].x___; 4: MAD temp[19].y, temp[18]._y__, const[7]._x__, const[7]._y__; 5: MUL temp[20].xy, temp[19].xy__, const[12].xy__; 6: TEX temp[21], temp[20].xy__, 2D[2]; 7: MUL temp[22].xy, temp[19].xy__, const[13].xy__; 8: TEX temp[23], temp[22].xy__, 2D[1]; 9: DP3 temp[24].x, temp[23].xyz_, const[8].xyz_; 10: MUL temp[25].xyz, input[1].xyz_, temp[24].xxx_; 11: MUL temp[27].xyz, (const[6] - temp[25]).xyz_, const[5].xxx_; 12: DP3 temp[28].x, temp[27].xyz_, temp[27].xyz_; 13: RSQ temp[29].x, |temp[28].x___|; 14: MUL temp[30].xyz, temp[27].xyz_, temp[29].xxx_; 15: MAD temp[31].xyz, temp[21].xyz_, const[8].www_, none.-1-1-1_; 16: DP3 temp[32].x, temp[31].xyz_, temp[31].xyz_; 17: RSQ temp[33].x, |temp[32].x___|; 18: MUL temp[34].xyz, temp[31].xyz_, temp[33].xxx_; 19: DP3 temp[36].x, temp[25].-x-y-z_, temp[25].-x-y-z_; 20: RSQ temp[37].x, |temp[36].x___|; 21: MAD temp[38].xyz, temp[25].-x-y-z_, temp[37].xxx_, temp[30].xyz_; 22: MUL temp[39].xy, temp[19].xy__, const[14].xy__; 23: TEX temp[40].xyz, temp[39].xy__, 2D[3]; 24: MUL temp[42].xyz, temp[40].xyz_, const[4].xyz_; 25: DP3 temp[43].x, temp[30].xyz_, temp[34].xyz_; 26: MAX temp[44].x, temp[43].x___, none.0___; 27: MUL temp[45].x, const[4].w___, temp[21].w___; 28: DP3 temp[46].x, temp[38].xyz_, temp[38].xyz_; 29: RSQ temp[47].x, |temp[46].x___|; 30: MUL temp[48].xyz, temp[38].xyz_, temp[47].xxx_; 31: DP3_SAT temp[49].x, temp[48].xyz_, temp[34].xyz_; 32: MUL temp[50].x, temp[23].w___, const[9].z___; 33: EX2 temp[51].x, temp[50].x___; 34: ADD temp[52].x, temp[51].x___, none.1___; 35: LG2 temp[53].w, temp[49].___x; 36: MUL temp[54].w, temp[53].___w, temp[52].___x; 37: EX2 temp[55].x, temp[54].w___; 38: MUL temp[56].x, temp[45].x___, temp[55].x___; 39: MUL temp[57].xyz, temp[56].xxx_, const[4].xyz_; 40: MAD temp[58].xyz, temp[42].xyz_, temp[44].xxx_, temp[57].xyz_; 41: DP3 temp[59].x, temp[27].xyz_, temp[27].xyz_; 42: TEX temp[60].x, temp[59].x___, 1D[0]; 43: MUL temp[21].xyz, temp[58].xyz_, temp[60].xxx_; 44: MOV output[0], temp[21]; CONST[4] = { 1.0000 0.0039 0.0000 2.0000 } CONST[5] = { -1.0000 0.0000 10.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: RCP temp[16].w, input[0].___w; 1: MUL temp[17].xy, input[0].xy__, temp[16].ww__; 2: MAD temp[18].xy, temp[17].xy__, const[6].xy__, const[7].xy__; 3: MOV temp[19].x, temp[18].x___; 4: MAD temp[19].y, temp[18]._y__, const[3]._x__, const[3]._y__; 5: MUL temp[20].xy, temp[19].xy__, const[8].xy__; 6: TEX temp[21], temp[20].xy__, 2D[2]; 7: MUL temp[22].xy, temp[19].xy__, const[9].xy__; 8: TEX temp[23], temp[22].xy__, 2D[1]; 9: DP3 temp[24].x, temp[23].xyz_, const[4].xyz_; 10: MUL temp[25].xyz, input[1].xyz_, temp[24].xxx_; 11: MUL temp[27].xyz, (const[2] - temp[25]).xyz_, const[1].xxx_; 12: DP3 temp[28].x, temp[27].xyz_, temp[27].xyz_; 13: RSQ temp[29].x, |temp[28].x___|; 14: MUL temp[30].xyz, temp[27].xyz_, temp[29].xxx_; 15: MAD temp[31].xyz, temp[21].xyz_, const[4].www_, none.-1-1-1_; 16: DP3 temp[32].x, temp[31].xyz_, temp[31].xyz_; 17: RSQ temp[33].x, |temp[32].x___|; 18: MUL temp[34].xyz, temp[31].xyz_, temp[33].xxx_; 19: DP3 temp[36].x, temp[25].-x-y-z_, temp[25].-x-y-z_; 20: RSQ temp[37].x, |temp[36].x___|; 21: MAD temp[38].xyz, temp[25].-x-y-z_, temp[37].xxx_, temp[30].xyz_; 22: MUL temp[39].xy, temp[19].xy__, const[10].xy__; 23: TEX temp[40].xyz, temp[39].xy__, 2D[3]; 24: MUL temp[42].xyz, temp[40].xyz_, const[0].xyz_; 25: DP3 temp[43].x, temp[30].xyz_, temp[34].xyz_; 26: MAX temp[44].x, temp[43].x___, none.0___; 27: MUL temp[45].x, const[0].w___, temp[21].w___; 28: DP3 temp[46].x, temp[38].xyz_, temp[38].xyz_; 29: RSQ temp[47].x, |temp[46].x___|; 30: MUL temp[48].xyz, temp[38].xyz_, temp[47].xxx_; 31: DP3_SAT temp[49].x, temp[48].xyz_, temp[34].xyz_; 32: MUL temp[50].x, temp[23].w___, const[5].z___; 33: EX2 temp[51].x, temp[50].x___; 34: ADD temp[52].x, temp[51].x___, none.1___; 35: LG2 temp[53].w, temp[49].___x; 36: MUL temp[54].w, temp[53].___w, temp[52].___x; 37: EX2 temp[55].x, temp[54].w___; 38: MUL temp[56].x, temp[45].x___, temp[55].x___; 39: MUL temp[57].xyz, temp[56].xxx_, const[0].xyz_; 40: MAD temp[58].xyz, temp[42].xyz_, temp[44].xxx_, temp[57].xyz_; 41: DP3 temp[59].x, temp[27].xyz_, temp[27].xyz_; 42: TEX temp[60].x, temp[59].x___, 1D[0]; 43: MUL temp[21].xyz, temp[58].xyz_, temp[60].xxx_; 44: MOV output[0], temp[21]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[16].w, src0.w 1: src0.xyz = input[0], src0.w = temp[16] MAD temp[17].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[17], src1.xyz = const[6], src2.xyz = const[7] MAD temp[18].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[18] MAD temp[19].x, src0.x__, src0.111, src0.000 4: src0.xyz = temp[18], src1.xyz = const[3] MAD temp[19].y, src0._y_, src1._x_, src1._y_ 5: src0.xyz = temp[19], src1.xyz = const[8] MAD temp[20].xy, src0.xy_, src1.xy_, src0.000 6: TEX temp[21], temp[20].xy__, 2D[2]; 7: src0.xyz = temp[19], src1.xyz = const[9] MAD temp[22].xy, src0.xy_, src1.xy_, src0.000 8: TEX temp[23], temp[22].xy__, 2D[1]; 9: src0.xyz = temp[23], src1.xyz = const[4] DP3 temp[24].x, src0.xyz, src1.xyz 10: src0.xyz = input[1], src1.xyz = temp[24] MAD temp[25].xyz, src0.xyz, src1.xxx, src0.000 11: src0.xyz = temp[25], src1.xyz = const[2], src2.xyz = const[1], srcp.xyz = (src1 - src0) MAD temp[27].xyz, srcp.xyz, src2.xxx, src0.000 12: src0.xyz = temp[27] DP3 temp[28].x, src0.xyz, src0.xyz 13: src0.xyz = temp[28] REPL_ALPHA temp[29].x RSQ, |src0.x| 14: src0.xyz = temp[27], src1.xyz = temp[29] MAD temp[30].xyz, src0.xyz, src1.xxx, src0.000 15: src0.xyz = temp[21], src0.w = const[4] MAD temp[31].xyz, src0.xyz, src0.www, -src0.111 16: src0.xyz = temp[31] DP3 temp[32].x, src0.xyz, src0.xyz 17: src0.xyz = temp[32] REPL_ALPHA temp[33].x RSQ, |src0.x| 18: src0.xyz = temp[31], src1.xyz = temp[33] MAD temp[34].xyz, src0.xyz, src1.xxx, src0.000 19: src0.xyz = temp[25] DP3 temp[36].x, -src0.xyz, -src0.xyz 20: src0.xyz = temp[36] REPL_ALPHA temp[37].x RSQ, |src0.x| 21: src0.xyz = temp[25], src1.xyz = temp[37], src2.xyz = temp[30] MAD temp[38].xyz, -src0.xyz, src1.xxx, src2.xyz 22: src0.xyz = temp[19], src1.xyz = const[10] MAD temp[39].xy, src0.xy_, src1.xy_, src0.000 23: TEX temp[40].xyz, temp[39].xy__, 2D[3]; 24: src0.xyz = temp[40], src1.xyz = const[0] MAD temp[42].xyz, src0.xyz, src1.xyz, src0.000 25: src0.xyz = temp[30], src1.xyz = temp[34] DP3 temp[43].x, src0.xyz, src1.xyz 26: src0.xyz = temp[43] MAX temp[44].x, src0.x__, src0.0__ 27: src0.w = const[0], src1.w = temp[21] MAD temp[45].x, src0.w__, src1.w__, src0.000 28: src0.xyz = temp[38] DP3 temp[46].x, src0.xyz, src0.xyz 29: src0.xyz = temp[46] REPL_ALPHA temp[47].x RSQ, |src0.x| 30: src0.xyz = temp[38], src1.xyz = temp[47] MAD temp[48].xyz, src0.xyz, src1.xxx, src0.000 31: src0.xyz = temp[48], src1.xyz = temp[34] DP3_SAT temp[49].x, src0.xyz, src1.xyz 32: src0.xyz = const[5], src0.w = temp[23] MAD temp[50].x, src0.w__, src0.z__, src0.000 33: src0.xyz = temp[50] REPL_ALPHA temp[51].x EX2, src0.x 34: src0.xyz = temp[51] MAD temp[52].x, src0.x__, src0.111, src0.1__ 35: src0.xyz = temp[49] LG2 temp[53].w, src0.x 36: src0.xyz = temp[52], src0.w = temp[53] MAD temp[54].w, src0.w, src0.x, src0.0 37: src0.w = temp[54] REPL_ALPHA temp[55].x EX2, src0.w 38: src0.xyz = temp[45], src1.xyz = temp[55] MAD temp[56].x, src0.x__, src1.x__, src0.000 39: src0.xyz = temp[56], src1.xyz = const[0] MAD temp[57].xyz, src0.xxx, src1.xyz, src0.000 40: src0.xyz = temp[42], src1.xyz = temp[44], src2.xyz = temp[57] MAD temp[58].xyz, src0.xyz, src1.xxx, src2.xyz 41: src0.xyz = temp[27] DP3 temp[59].x, src0.xyz, src0.xyz 42: TEX temp[60].x, temp[59].x___, 1D[0]; 43: src0.xyz = temp[58], src1.xyz = temp[60] MAD temp[21].xyz, src0.xyz, src1.xxx, src0.000 44: src0.xyz = temp[21], src0.w = temp[21] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[16].w, src0.w 1: src0.xyz = input[0], src0.w = temp[16] MAD temp[17].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[17], src1.xyz = const[6], src2.xyz = const[7] MAD temp[18].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[18], src1.xyz = const[3] MAD temp[19].y, src0._y_, src1._x_, src1._y_ 4: src0.xyz = temp[18] MAD temp[19].x, src0.x__, src0.111, src0.000 5: src0.xyz = temp[19], src1.xyz = const[10] MAD temp[39].xy, src0.xy_, src1.xy_, src0.000 6: src0.xyz = temp[19], src1.xyz = const[9] MAD temp[22].xy, src0.xy_, src1.xy_, src0.000 7: src0.xyz = temp[19], src1.xyz = const[8] MAD temp[20].xy, src0.xy_, src1.xy_, src0.000 8: BEGIN_TEX; 9: TEX temp[40].xyz, temp[39].xy__, 2D[3]; 10: TEX temp[23], temp[22].xy__, 2D[1]; 11: TEX temp[21], temp[20].xy__, 2D[2] SEM_WAIT SEM_ACQUIRE; 12: src0.xyz = temp[23], src0.w = const[0], src1.xyz = const[4], src1.w = temp[21] SEM_WAIT DP3 temp[24].x, src0.xyz, src1.xyz MAD temp[45].w, src0.w, src1.w, src0.0 13: src0.xyz = temp[40], src0.w = temp[23], src1.xyz = const[0], src2.xyz = const[5] MAD temp[42].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[50].w, src0.w, src2.z, src0.0 14: src0.xyz = temp[21], src0.w = const[4] MAD temp[31].xyz, src0.xyz, src0.www, -src0.111 15: src0.xyz = input[1], src1.xyz = temp[24] MAD temp[25].xyz, src0.xyz, src1.xxx, src0.000 16: src0.xyz = temp[50], src0.w = temp[50] REPL_ALPHA temp[51].x EX2, src0.w 17: src0.xyz = temp[31], src1.xyz = temp[51] DP3 temp[32].x, src0.xyz, src0.xyz MAD temp[52].w, src1.x, src0.1, src0.1 18: src0.xyz = temp[25], src1.xyz = const[2], src2.xyz = const[1], srcp.xyz = (src1 - src0) MAD temp[27].xyz, srcp.xyz, src2.xxx, src0.000 19: src0.xyz = temp[25] DP3 temp[36].x, -src0.xyz, -src0.xyz 20: src0.xyz = temp[27], src1.xyz = temp[36] DP3 temp[28].x, src0.xyz, src0.xyz RSQ temp[37].w, |src1.x| 21: src0.xyz = temp[27], src1.xyz = temp[32] DP3 temp[59].x, src0.xyz, src0.xyz RSQ temp[33].w, |src1.x| 22: src0.xyz = temp[31], src0.w = temp[33], src1.xyz = temp[33], src2.xyz = temp[28] MAD temp[34].xyz, src0.xyz, src0.www, src0.000 RSQ temp[29].w, |src2.x| 23: src0.xyz = temp[27], src0.w = temp[29], src1.xyz = temp[29] MAD temp[30].xyz, src0.xyz, src0.www, src0.000 24: src0.xyz = temp[25], src0.w = temp[37], src1.xyz = temp[37], src2.xyz = temp[30] MAD temp[38].xyz, -src0.xyz, src0.www, src2.xyz 25: src0.xyz = temp[30], src1.xyz = temp[34] DP3 temp[43].x, src0.xyz, src1.xyz 26: src0.xyz = temp[38], src1.xyz = temp[43] DP3 temp[46].x, src0.xyz, src0.xyz MAX temp[44].w, src1.x, src0.0 27: src0.xyz = temp[46] REPL_ALPHA temp[47].x RSQ, |src0.x| 28: src0.xyz = temp[38], src1.xyz = temp[47] MAD temp[48].xyz, src0.xyz, src1.xxx, src0.000 29: src0.xyz = temp[48], src1.xyz = temp[34] DP3_SAT temp[49].x, src0.xyz, src1.xyz 30: src0.xyz = temp[49] LG2 temp[53].w, src0.x 31: src0.xyz = temp[52], src0.w = temp[53], src1.w = temp[52] MAD temp[54].w, src0.w, src1.w, src0.0 32: src0.w = temp[54] REPL_ALPHA temp[55].x EX2, src0.w 33: src0.xyz = temp[45], src0.w = temp[45], src1.xyz = temp[55] MAD temp[56].x, src0.w__, src1.x__, src0.000 34: src0.xyz = temp[56], src1.xyz = const[0] MAD temp[57].xyz, src0.xxx, src1.xyz, src0.000 35: src0.xyz = temp[42], src0.w = temp[44], src1.xyz = temp[44], src2.xyz = temp[57] MAD temp[58].xyz, src0.xyz, src0.www, src2.xyz 36: BEGIN_TEX; 37: TEX temp[60].x, temp[59].x___, 1D[0] SEM_WAIT SEM_ACQUIRE; 38: src0.xyz = temp[58], src1.xyz = temp[60] SEM_WAIT MAD temp[21].xyz, src0.xyz, src1.xxx, src0.000 39: src0.xyz = temp[21], src0.w = temp[21] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[16].w, src0.w 1: src0.xyz = input[0], src0.w = temp[16] MAD temp[17].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[17], src1.xyz = const[6], src2.xyz = const[7] MAD temp[18].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[18], src1.xyz = const[3] MAD temp[19].y, src0._y_, src1._x_, src1._y_ 4: src0.xyz = temp[18] MAD temp[19].x, src0.x__, src0.111, src0.000 5: src0.xyz = temp[19], src1.xyz = const[10] MAD temp[39].xy, src0.xy_, src1.xy_, src0.000 6: src0.xyz = temp[19], src1.xyz = const[9] MAD temp[22].xy, src0.xy_, src1.xy_, src0.000 7: src0.xyz = temp[19], src1.xyz = const[8] MAD temp[20].xy, src0.xy_, src1.xy_, src0.000 8: BEGIN_TEX; 9: TEX temp[40].xyz, temp[39].xy__, 2D[3]; 10: TEX temp[23], temp[22].xy__, 2D[1]; 11: TEX temp[21], temp[20].xy__, 2D[2] SEM_WAIT SEM_ACQUIRE; 12: src0.xyz = temp[23], src0.w = const[0], src1.xyz = const[4], src1.w = temp[21] SEM_WAIT DP3 temp[24].x, src0.xyz, src1.xyz MAD temp[45].w, src0.w, src1.w, src0.0 13: src0.xyz = temp[40], src0.w = temp[23], src1.xyz = const[0], src2.xyz = const[5] MAD temp[42].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[50].w, src0.w, src2.z, src0.0 14: src0.xyz = temp[21], src0.w = const[4] MAD temp[31].xyz, src0.xyz, src0.www, -src0.111 15: src0.xyz = input[1], src1.xyz = temp[24] MAD temp[25].xyz, src0.xyz, src1.xxx, src0.000 16: src0.w = temp[50] REPL_ALPHA temp[51].x EX2, src0.w 17: src0.xyz = temp[31], src1.xyz = temp[51] DP3 temp[32].x, src0.xyz, src0.xyz MAD temp[52].w, src1.x, src0.1, src0.1 18: src0.xyz = temp[25], src1.xyz = const[2], src2.xyz = const[1], srcp.xyz = (src1 - src0) MAD temp[27].xyz, srcp.xyz, src2.xxx, src0.000 19: src0.xyz = temp[25] DP3 temp[36].x, -src0.xyz, -src0.xyz 20: src0.xyz = temp[27], src1.xyz = temp[36] DP3 temp[28].x, src0.xyz, src0.xyz RSQ temp[37].w, |src1.x| 21: src0.xyz = temp[27], src1.xyz = temp[32] DP3 temp[59].x, src0.xyz, src0.xyz RSQ temp[33].w, |src1.x| 22: src0.xyz = temp[31], src0.w = temp[33], src2.xyz = temp[28] MAD temp[34].xyz, src0.xyz, src0.www, src0.000 RSQ temp[29].w, |src2.x| 23: src0.xyz = temp[27], src0.w = temp[29] MAD temp[30].xyz, src0.xyz, src0.www, src0.000 24: src0.xyz = temp[25], src0.w = temp[37], src2.xyz = temp[30] MAD temp[38].xyz, -src0.xyz, src0.www, src2.xyz 25: src0.xyz = temp[30], src1.xyz = temp[34] DP3 temp[43].x, src0.xyz, src1.xyz 26: src0.xyz = temp[38], src1.xyz = temp[43] DP3 temp[46].x, src0.xyz, src0.xyz MAX temp[44].w, src1.x, src0.0 27: src0.xyz = temp[46] REPL_ALPHA temp[47].x RSQ, |src0.x| 28: src0.xyz = temp[38], src1.xyz = temp[47] MAD temp[48].xyz, src0.xyz, src1.xxx, src0.000 29: src0.xyz = temp[48], src1.xyz = temp[34] DP3_SAT temp[49].x, src0.xyz, src1.xyz 30: src0.xyz = temp[49] LG2 temp[53].w, src0.x 31: src0.w = temp[53], src1.w = temp[52] MAD temp[54].w, src0.w, src1.w, src0.0 32: src0.w = temp[54] REPL_ALPHA temp[55].x EX2, src0.w 33: src0.w = temp[45], src1.xyz = temp[55] MAD temp[56].x, src0.w__, src1.x__, src0.000 34: src0.xyz = temp[56], src1.xyz = const[0] MAD temp[57].xyz, src0.xxx, src1.xyz, src0.000 35: src0.xyz = temp[42], src0.w = temp[44], src2.xyz = temp[57] MAD temp[58].xyz, src0.xyz, src0.www, src2.xyz 36: BEGIN_TEX; 37: TEX temp[60].x, temp[59].x___, 1D[0] SEM_WAIT SEM_ACQUIRE; 38: src0.xyz = temp[58], src1.xyz = temp[60] SEM_WAIT MAD temp[21].xyz, src0.xyz, src1.xxx, src0.000 39: src0.xyz = temp[21], src0.w = temp[21] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.w = input[1] RCP temp[0].w, src0.w 1: src0.xyz = input[1], src0.w = temp[0] MAD temp[1].xy, src0.xy_, src0.ww_, src0.00_ 2: src0.xyz = temp[1], src1.xyz = const[6], src2.xyz = const[7] MAD temp[1].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[1], src1.xyz = const[3] MAD temp[2].y, src0._y_, src1._x_, src1._y_ 4: src0.xyz = temp[1] MAD temp[2].x, src0.x__, src0.11_, src0.00_ 5: src0.xyz = temp[2], src1.xyz = const[10] MAD temp[1].xy, src0.xy_, src1.xy_, src0.00_ 6: src0.xyz = temp[2], src1.xyz = const[9] MAD temp[3].xy, src0.xy_, src1.xy_, src0.00_ 7: src0.xyz = temp[2], src1.xyz = const[8] MAD temp[2].xy, src0.xy_, src1.xy_, src0.00_ 8: BEGIN_TEX; 9: TEX temp[1].xyz, temp[1].xy__, 2D[3]; 10: TEX temp[3], temp[3].xy__, 2D[1]; 11: TEX temp[2], temp[2].xy__, 2D[2] SEM_WAIT SEM_ACQUIRE; 12: src0.xyz = temp[3], src0.w = const[0], src1.xyz = const[4], src1.w = temp[2] SEM_WAIT DP3 temp[4].x, src0.xyz, src1.xyz MAD temp[0].w, src0.w, src1.w, src0.0 13: src0.xyz = temp[1], src0.w = temp[3], src1.xyz = const[0], src2.xyz = const[5] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[1].w, src0.w, src2.z, src0.0 14: src0.xyz = temp[2], src0.w = const[4] MAD temp[3].xyz, src0.xyz, src0.www, -src0.111 15: src0.xyz = input[0], src1.xyz = temp[4] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 16: src0.w = temp[1] REPL_ALPHA temp[4].x EX2, src0.w 17: src0.xyz = temp[3], src1.xyz = temp[4] DP3 temp[4].x, src0.xyz, src0.xyz MAD temp[1].w, src1.x, src0.1, src0.1 18: src0.xyz = temp[0], src1.xyz = const[2], src2.xyz = const[1], srcp.xyz = (src1 - src0) MAD temp[5].xyz, srcp.xyz, src2.xxx, src0.000 19: src0.xyz = temp[0] DP3 temp[4].y, -src0.xyz, -src0.xyz 20: src0.xyz = temp[5], src1.xyz = temp[4] DP3 temp[4].y, src0.xyz, src0.xyz RSQ temp[3].w, |src1.y| 21: src0.xyz = temp[5], src1.xyz = temp[4] DP3 temp[4].x, src0.xyz, src0.xyz RSQ temp[4].w, |src1.x| 22: src0.xyz = temp[3], src0.w = temp[4], src2.xyz = temp[4] MAD temp[3].xyz, src0.xyz, src0.www, src0.000 RSQ temp[4].w, |src2.y| 23: src0.xyz = temp[5], src0.w = temp[4] MAD temp[5].xyz, src0.xyz, src0.www, src0.000 24: src0.xyz = temp[0], src0.w = temp[3], src2.xyz = temp[5] MAD temp[0].xyz, -src0.xyz, src0.www, src2.xyz 25: src0.xyz = temp[5], src1.xyz = temp[3] DP3 temp[4].y, src0.xyz, src1.xyz 26: src0.xyz = temp[0], src1.xyz = temp[4] DP3 temp[4].y, src0.xyz, src0.xyz MAX temp[3].w, src1.y, src0.0 27: src0.xyz = temp[4] REPL_ALPHA temp[4].y RSQ, |src0.y| 28: src0.xyz = temp[0], src1.xyz = temp[4] MAD temp[0].xyz, src0.xyz, src1.yyy, src0.000 29: src0.xyz = temp[0], src1.xyz = temp[3] DP3_SAT temp[0].x, src0.xyz, src1.xyz 30: src0.xyz = temp[0] LG2 temp[4].w, src0.x 31: src0.w = temp[4], src1.w = temp[1] MAD temp[1].w, src0.w, src1.w, src0.0 32: src0.w = temp[1] REPL_ALPHA temp[0].x EX2, src0.w 33: src0.w = temp[0], src1.xyz = temp[0] MAD temp[0].x, src0.w__, src1.x__, src0.0__ 34: src0.xyz = temp[0], src1.xyz = const[0] MAD temp[0].xyz, src0.xxx, src1.xyz, src0.000 35: src0.xyz = temp[1], src0.w = temp[3], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.www, src2.xyz 36: BEGIN_TEX; 37: TEX temp[1].x, temp[4].x___, 1D[0] SEM_WAIT SEM_ACQUIRE; 38: src0.xyz = temp[0], src1.xyz = temp[1] SEM_WAIT MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 39: src0.xyz = temp[0], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=33************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 7, tex_end: 0 (code_addr: 000001c0) 0: xyz: t0 t0 t0 bias-> (00000000) w: t1 t0 t0 bias-> t0.w (00800001) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: t1.w t0.x t0.x op: 05000009 1: xyz: t1 t0 t0 bias-> t1.xy (01840001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t0.www 0.0 op: 00050600 w: t1.x t1.x t1.x op: 00000000 2: xyz: t1 c6 c7 bias-> t1.xy (01867981) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c6.xyz c7.xyz op: 00020200 w: t1.x t1.x t1.x op: 00000000 3: xyz: t1 c3 t0 bias-> t2.y (010808c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c3.xxx c3.xyz op: 00010280 w: t1.x t1.x t1.x op: 00000000 4: xyz: t1 t0 t0 bias-> t2.x (00880001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 5: xyz: t2 c10 t0 bias-> t1.xy (01840a82) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c10.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 6: xyz: t2 c9 t0 bias-> t3.xy (018c0a42) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c9.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 7: xyz: t2 c8 t0 bias-> t2.xy (01880a02) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c8.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 NODE 1: alu_offset: 8, tex_offset: 0, alu_end: 23, tex_end: 2 (code_addr: 000405c8) TEX: TEX t1, t1, texture[3] (00009841) TEX t3, t3, texture[1] (000088c3) TEX t2, t2, texture[2] (00009082) 8: xyz: t3 c4 t0 bias-> t4.x (00900903) w: c0 t2 t0 bias-> t0.w (008000a0) xyz: t3.xyz c4.xyz t3.xxx op: 00804200 w: c0.w t2.w 0.0 op: 00040509 9: xyz: t1 c0 c5 bias-> t1.xyz (03865801) w: t3 t0 t0 bias-> t1.w (00840003) xyz: t1.xyz c0.xyz 0.0 op: 00050200 w: t3.w c5.z 0.0 op: 00040409 10: xyz: t2 t0 t0 bias-> t3.xyz (038c0002) w: c4 t0 t0 bias-> (00000024) xyz: t2.xyz c4.www -1.0 op: 000d4600 w: t2.x t2.x t2.x op: 00000000 11: xyz: t0 t4 t0 bias-> t0.xyz (03800100) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t4.xxx 0.0 op: 00050280 w: t0.x t0.x t0.x op: 00000000 12: xyz: t32 t0 t0 bias-> t4.x (00900000) w: t1 t0 t0 bias-> (00000001) xyz: t32.xxx t32.xxx t32.xxx op: 05004081 w: t1.w t32.x t32.x op: 04000009 13: xyz: t3 t4 t0 bias-> t4.x (00900103) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t3.xyz t3.xyz t3.xxx op: 00804000 w: t4.x 1.0 1.0 op: 00044883 14: xyz: t0 c2 c1 sub-> t5.xyz (03961880) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xyz c1.xxx 0.0 op: 0025048f w: t0.x t0.x t0.x op: 00000000 15: xyz: t0 t0 t0 bias-> t4.y (01100000) w: t0 t0 t0 bias-> (00000000) xyz: -t0.xyz -t0.xyz t0.xxx op: 00805020 w: t0.x t0.x t0.x op: 00000000 16: xyz: t5 t4 t0 bias-> t4.y (01100105) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: t5.xyz t5.xyz t5.xxx op: 00804000 w: |t4.y| t5.x t5.x op: 05800044 17: xyz: t5 t4 t0 bias-> t4.x (00900105) w: t0 t0 t0 bias-> t4.w (00900000) xyz: t5.xyz t5.xyz t5.xxx op: 00804000 w: |t4.x| t5.x t5.x op: 05800043 18: xyz: t3 t32 t4 bias-> t3.xyz (038c4003) w: t4 t0 t0 bias-> t4.w (00900004) xyz: t3.xyz t4.www 0.0 op: 00050600 w: |t4.y| t3.x t3.x op: 05800047 19: xyz: t5 t0 t0 bias-> t5.xyz (03940005) w: t4 t0 t0 bias-> (00000004) xyz: t5.xyz t4.www 0.0 op: 00050600 w: t5.x t5.x t5.x op: 00000000 20: xyz: t0 t32 t5 bias-> t0.xyz (03805000) w: t3 t0 t0 bias-> (00000003) xyz: -t0.xyz t3.www t5.xyz op: 00020620 w: t0.x t0.x t0.x op: 00000000 21: xyz: t5 t3 t0 bias-> t4.y (011000c5) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t3.xyz t5.xxx op: 00804200 w: t5.x t5.x t5.x op: 00000000 22: xyz: t0 t4 t0 bias-> t4.y (01100100) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: t0.xyz t0.xyz t0.xxx op: 00804000 w: t4.y 0.0 t0.x op: 01800804 23: xyz: t4 t0 t0 bias-> t4.y (01100004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xxx t4.xxx t4.xxx op: 05004081 w: |t4.y| t4.x t4.x op: 05800041 24: xyz: t0 t4 t0 bias-> t0.xyz (03800100) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t4.yyy 0.0 op: 00050300 w: t0.x t0.x t0.x op: 00000000 25: xyz: t0 t3 t0 bias-> t0.x (008000c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t3.xyz t0.xxx op: 40804200 w: t0.x t0.x t0.x op: 00000000 26: xyz: t0 t0 t0 bias-> (00000000) w: t0 t0 t0 bias-> t4.w (00900000) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: t0.x t0.x t0.x op: 04800000 27: xyz: t32 t0 t0 bias-> (00000000) w: t4 t1 t0 bias-> t1.w (00840044) xyz: t32.xxx t32.xxx t32.xxx op: 00004081 w: t4.w t1.w 0.0 op: 00040509 28: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t1 t0 t0 bias-> (00000001) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: t1.w t0.x t0.x op: 04000009 29: xyz: t32 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.www t0.xyz 0.0 op: 0005020c w: t32.x t32.x t32.x op: 00000000 30: xyz: t0 c0 t0 bias-> t0.xyz (03800800) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx c0.xyz 0.0 op: 00050201 w: t0.x t0.x t0.x op: 00000000 31: xyz: t1 t32 t0 bias-> t0.xyz (03800001) w: t3 t0 t0 bias-> (00000003) xyz: t1.xyz t3.www t0.xyz op: 00020600 w: t1.x t1.x t1.x op: 00000000 NODE 2: alu_offset: 32, tex_offset: 3, alu_end: 1, tex_end: 0 (code_addr: 00403060) TEX: TEX t1, t4, texture[0] (00008044) 32: xyz: t0 t1 t0 bias-> t0.xyz (03800040) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t1.xxx 0.0 op: 00050280 w: t0.x t0.x t0.x op: 00000000 33: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t2 t0 t0 bias-> o0.w (01000002) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t2.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0] DCL TEMP[0], LOCAL 0: TEX TEMP[0], IN[0].xyyy, SAMP[0], 2D 1: MUL TEMP[0], TEMP[0], CONST[0].xxxx 2: MOV OUT[0], TEMP[0] 3: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], const[0].xxxx; 2: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], const[0].xxxx; 2: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], const[0].xxxx; 2: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], const[0].xxxx; 2: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], const[0].xxxx; 2: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], const[0].xxxx; 2: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], const[0].xxxx; 2: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[0], temp[0], const[0].xxxx; 2: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[0], temp[0], const[0].xxxx; 2: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MUL temp[2], temp[1], const[0].xxxx; 2: MOV output[0], temp[2]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MUL temp[2], temp[1], const[0].xxxx; 2: MOV output[0], temp[2]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MUL temp[2], temp[1], const[0].xxxx; 2: MOV output[0], temp[2]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MUL temp[2], temp[1], const[0].xxxx; 2: MOV output[0], temp[2]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = const[0] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[2].w, src0.w, src1.x, src0.0 2: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = const[0] SEM_WAIT MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[2].w, src0.w, src1.x, src0.0 3: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = const[0] SEM_WAIT MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[2].w, src0.w, src1.x, src0.0 3: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0] SEM_WAIT MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[0].w, src0.w, src1.x, src0.0 3: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=34************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 1, tex_end: 0 (code_addr: 00400040) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t0 c0 t0 bias-> t0.xyz (03800800) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xyz c0.xxx 0.0 op: 00050280 w: t0.w c0.x 0.0 op: 00040189 1: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], POSITION, LINEAR DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[5] DCL CONST[0..3] DCL TEMP[0] DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL IMM[0] FLT32 { 1.0000, 0.0039, 0.0000, 0.0000} 0: MOV TEMP[0], IN[0] 1: MAD TEMP[0].y, IN[0], CONST[5].xxxx, CONST[5].yyyy 2: MOV TEMP[1].xyz, CONST[1].xyzx 3: TEX TEMP[2].xyz, TEMP[0].xyyy, SAMP[0], RECT 4: DP3 TEMP[2].x, TEMP[2].xyzz, IMM[0].xyzz 5: MAD TEMP[2].x, -TEMP[2].xxxx, CONST[3].xxxx, -CONST[2].xxxx 6: MIN TEMP[2].x, TEMP[2].xxxx, CONST[2].yyyy 7: RCP TEMP[3].x, CONST[2].yyyy 8: MUL TEMP[2].x, TEMP[2].xxxx, TEMP[3].xxxx 9: MAX TEMP[2].x, TEMP[2].xxxx, IMM[0].wwww 10: POW TEMP[2].x, TEMP[2].xxxx, CONST[0].xxxx 11: MUL TEMP[2].x, TEMP[2].xxxx, CONST[1].wwww 12: MOV TEMP[1].w, TEMP[2].xxxx 13: MOV OUT[0], TEMP[1] 14: END Fragment Program: before compilation # Radeon Compiler Program 0: RCP temp[4].w, input[0].wwww; 1: MUL temp[4].xyz, input[0], temp[4].wwww; 2: MAD temp[4].xyz, temp[4].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[4]; 4: MAD temp[0].y, temp[4], const[5].xxxx, const[5].yyyy; 5: MOV temp[1].xyz, const[1].xyzx; 6: TEX temp[2].xyz, temp[0].xyyy, RECT[0]; 7: DP3 temp[2].x, temp[2].xyzz, const[6].xyzz; 8: MAD temp[2].x, -temp[2].xxxx, const[3].xxxx, -const[2].xxxx; 9: MIN temp[2].x, temp[2].xxxx, const[2].yyyy; 10: RCP temp[3].x, const[2].yyyy; 11: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 12: MAX temp[2].x, temp[2].xxxx, const[6].wwww; 13: POW temp[2].x, temp[2].xxxx, const[0].xxxx; 14: MUL temp[2].x, temp[2].xxxx, const[1].wwww; 15: MOV temp[1].w, temp[2].xxxx; 16: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: RCP temp[4].w, input[0].wwww; 1: MUL temp[4].xyz, input[0], temp[4].wwww; 2: MAD temp[4].xyz, temp[4].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[4]; 4: MAD temp[0].y, temp[4], const[5].xxxx, const[5].yyyy; 5: MOV temp[1].xyz, const[1].xyzx; 6: TEX temp[2].xyz, temp[0].xyyy, RECT[0]; 7: DP3 temp[2].x, temp[2].xyzz, const[6].xyzz; 8: MAD temp[2].x, -temp[2].xxxx, const[3].xxxx, -const[2].xxxx; 9: MIN temp[2].x, temp[2].xxxx, const[2].yyyy; 10: RCP temp[3].x, const[2].yyyy; 11: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 12: MAX temp[2].x, temp[2].xxxx, const[6].wwww; 13: POW temp[2].x, temp[2].xxxx, const[0].xxxx; 14: MUL temp[2].x, temp[2].xxxx, const[1].wwww; 15: MOV temp[1].w, temp[2].xxxx; 16: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: RCP temp[4].w, input[0].wwww; 1: MUL temp[4].xyz, input[0], temp[4].wwww; 2: MAD temp[4].xyz, temp[4].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[4]; 4: MAD temp[0].y, temp[4], const[5].xxxx, const[5].yyyy; 5: MOV temp[1].xyz, const[1].xyzx; 6: TEX temp[2].xyz, temp[0].xyyy, RECT[0]; 7: DP3 temp[2].x, temp[2].xyzz, const[6].xyzz; 8: MAD temp[2].x, -temp[2].xxxx, const[3].xxxx, -const[2].xxxx; 9: MIN temp[2].x, temp[2].xxxx, const[2].yyyy; 10: RCP temp[3].x, const[2].yyyy; 11: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 12: MAX temp[2].x, temp[2].xxxx, const[6].wwww; 13: POW temp[2].x, temp[2].xxxx, const[0].xxxx; 14: MUL temp[2].x, temp[2].xxxx, const[1].wwww; 15: MOV temp[1].w, temp[2].xxxx; 16: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: RCP temp[4].w, input[0].wwww; 1: MUL temp[4].xyz, input[0], temp[4].wwww; 2: MAD temp[4].xyz, temp[4].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[4]; 4: MAD temp[0].y, temp[4], const[5].xxxx, const[5].yyyy; 5: MOV temp[1].xyz, const[1].xyzx; 6: TEX temp[2].xyz, temp[0].xyyy, RECT[0]; 7: DP3 temp[2].x, temp[2].xyzz, const[6].xyzz; 8: MAD temp[2].x, -temp[2].xxxx, const[3].xxxx, -const[2].xxxx; 9: MIN temp[2].x, temp[2].xxxx, const[2].yyyy; 10: RCP temp[3].x, const[2].yyyy; 11: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 12: MAX temp[2].x, temp[2].xxxx, const[6].wwww; 13: POW temp[2].x, temp[2].xxxx, const[0].xxxx; 14: MUL temp[2].x, temp[2].xxxx, const[1].wwww; 15: MOV temp[1].w, temp[2].xxxx; 16: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: RCP temp[4].w, input[0].wwww; 1: MUL temp[4].xyz, input[0], temp[4].wwww; 2: MAD temp[4].xyz, temp[4].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[4]; 4: MAD temp[0].y, temp[4], const[5].xxxx, const[5].yyyy; 5: MOV temp[1].xyz, const[1].xyzx; 6: TEX temp[2].xyz, temp[0].xyyy, RECT[0]; 7: DP3 temp[2].x, temp[2].xyzz, const[6].xyzz; 8: MAD temp[2].x, -temp[2].xxxx, const[3].xxxx, -const[2].xxxx; 9: MIN temp[2].x, temp[2].xxxx, const[2].yyyy; 10: RCP temp[3].x, const[2].yyyy; 11: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 12: MAX temp[2].x, temp[2].xxxx, const[6].wwww; 13: POW temp[2].x, temp[2].xxxx, const[0].xxxx; 14: MUL temp[2].x, temp[2].xxxx, const[1].wwww; 15: MOV temp[1].w, temp[2].xxxx; 16: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: RCP temp[4].w, input[0].wwww; 1: MUL temp[4].xyz, input[0], temp[4].wwww; 2: MAD temp[4].xyz, temp[4].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[4]; 4: MAD temp[0].y, temp[4], const[5].xxxx, const[5].yyyy; 5: MOV temp[1].xyz, const[1].xyzx; 6: MUL temp[5], temp[0].xyyy, const[9]; 7: TEX temp[6], temp[5], 2D[0]; 8: MOV temp[2].xyz, temp[6]; 9: DP3 temp[2].x, temp[2].xyzz, const[6].xyzz; 10: MAD temp[2].x, -temp[2].xxxx, const[3].xxxx, -const[2].xxxx; 11: MIN temp[2].x, temp[2].xxxx, const[2].yyyy; 12: RCP temp[3].x, const[2].yyyy; 13: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 14: MAX temp[2].x, temp[2].xxxx, const[6].wwww; 15: POW temp[2].x, temp[2].xxxx, const[0].xxxx; 16: MUL temp[2].x, temp[2].xxxx, const[1].wwww; 17: MOV temp[1].w, temp[2].xxxx; 18: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: RCP temp[4].w, input[0].wwww; 1: MUL temp[4].xyz, input[0], temp[4].wwww; 2: MAD temp[4].xyz, temp[4].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[4]; 4: MAD temp[0].y, temp[4], const[5].xxxx, const[5].yyyy; 5: MOV temp[1].xyz, const[1].xyzx; 6: MUL temp[5], temp[0].xyyy, const[9]; 7: TEX temp[6], temp[5], 2D[0]; 8: MOV temp[2].xyz, temp[6]; 9: DP3 temp[2].x, temp[2].xyzz, const[6].xyzz; 10: MAD temp[2].x, -temp[2].xxxx, const[3].xxxx, -const[2].xxxx; 11: MIN temp[2].x, temp[2].xxxx, const[2].yyyy; 12: RCP temp[3].x, const[2].yyyy; 13: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 14: MAX temp[2].x, temp[2].xxxx, const[6].wwww; 15: LG2 temp[7].w, temp[2].xxxx; 16: MUL temp[7].w, temp[7].wwww, const[0].xxxx; 17: EX2 temp[2].x, temp[7].wwww; 18: MUL temp[2].x, temp[2].xxxx, const[1].wwww; 19: MOV temp[1].w, temp[2].xxxx; 20: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: RCP temp[4].w, input[0].___w; 1: MUL temp[4].xy, input[0].xy__, temp[4].ww__; 2: MAD temp[4].xy, temp[4].xy__, const[7].xy__, const[8].xy__; 3: MOV temp[0].x, temp[4].x___; 4: MAD temp[0].y, temp[4]._y__, const[5]._x__, const[5]._y__; 5: MOV temp[1].xyz, const[1].xyz_; 6: MUL temp[5].xy, temp[0].xy__, const[9].xy__; 7: TEX temp[6].xyz, temp[5].xy__, 2D[0]; 8: MOV temp[2].xyz, temp[6].xyz_; 9: DP3 temp[2].x, temp[2].xyz_, const[6].xyz_; 10: MAD temp[2].x, -temp[2].x___, const[3].x___, -const[2].x___; 11: MIN temp[2].x, temp[2].x___, const[2].y___; 12: RCP temp[3].x, const[2].y___; 13: MUL temp[2].x, temp[2].x___, temp[3].x___; 14: MAX temp[2].x, temp[2].x___, const[6].w___; 15: LG2 temp[7].w, temp[2].___x; 16: MUL temp[7].w, temp[7].___w, const[0].___x; 17: EX2 temp[2].x, temp[7].w___; 18: MUL temp[2].x, temp[2].x___, const[1].w___; 19: MOV temp[1].w, temp[2].___x; 20: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: RCP temp[4].w, input[0].___w; 1: MUL temp[4].xy, input[0].xy__, temp[4].ww__; 2: MAD temp[4].xy, temp[4].xy__, const[7].xy__, const[8].xy__; 3: MOV temp[0].x, temp[4].x___; 4: MAD temp[0].y, temp[4]._y__, const[5]._x__, const[5]._y__; 5: MOV temp[1].xyz, const[1].xyz_; 6: MUL temp[5].xy, temp[0].xy__, const[9].xy__; 7: TEX temp[6].xyz, temp[5].xy__, 2D[0]; 8: MOV temp[2].xyz, temp[6].xyz_; 9: DP3 temp[2].x, temp[2].xyz_, const[6].xyz_; 10: MAD temp[2].x, -temp[2].x___, const[3].x___, -const[2].x___; 11: MIN temp[2].x, temp[2].x___, const[2].y___; 12: RCP temp[3].x, const[2].y___; 13: MUL temp[2].x, temp[2].x___, temp[3].x___; 14: MAX temp[2].x, temp[2].x___, const[6].w___; 15: LG2 temp[7].w, temp[2].___x; 16: MUL temp[7].w, temp[7].___w, const[0].___x; 17: EX2 temp[2].x, temp[7].w___; 18: MUL temp[2].x, temp[2].x___, const[1].w___; 19: MOV temp[1].w, temp[2].___x; 20: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: RCP temp[8].w, input[0].___w; 1: MUL temp[9].xy, input[0].xy__, temp[8].ww__; 2: MAD temp[10].xy, temp[9].xy__, const[7].xy__, const[8].xy__; 3: MOV temp[11].x, temp[10].x___; 4: MAD temp[11].y, temp[10]._y__, const[5]._x__, const[5]._y__; 5: MOV temp[12].xyz, const[1].xyz_; 6: MUL temp[13].xy, temp[11].xy__, const[9].xy__; 7: TEX temp[14].xyz, temp[13].xy__, 2D[0]; 8: MOV temp[15].xyz, temp[14].xyz_; 9: DP3 temp[16].x, temp[15].xyz_, const[6].xyz_; 10: MAD temp[17].x, -temp[16].x___, const[3].x___, -const[2].x___; 11: MIN temp[18].x, temp[17].x___, const[2].y___; 12: RCP temp[19].x, const[2].y___; 13: MUL temp[20].x, temp[18].x___, temp[19].x___; 14: MAX temp[21].x, temp[20].x___, const[6].w___; 15: LG2 temp[22].w, temp[21].___x; 16: MUL temp[23].w, temp[22].___w, const[0].___x; 17: EX2 temp[24].x, temp[23].w___; 18: MUL temp[25].x, temp[24].x___, const[1].w___; 19: MOV temp[12].w, temp[25].___x; 20: MOV output[0], temp[12]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: RCP temp[8].w, input[0].___w; 1: MUL temp[9].xy, input[0].xy__, temp[8].ww__; 2: MAD temp[10].xy, temp[9].xy__, const[7].xy__, const[8].xy__; 3: MOV temp[11].x, temp[10].x___; 4: MAD temp[11].y, temp[10]._y__, const[5]._x__, const[5]._y__; 5: MOV temp[12].xyz, const[1].xyz_; 6: MUL temp[13].xy, temp[11].xy__, const[9].xy__; 7: TEX temp[14].xyz, temp[13].xy__, 2D[0]; 8: DP3 temp[16].x, temp[14].xyz_, const[6].xyz_; 9: MAD temp[17].x, -temp[16].x___, const[3].x___, -const[2].x___; 10: MIN temp[18].x, temp[17].x___, const[2].y___; 11: RCP temp[19].x, const[2].y___; 12: MUL temp[20].x, temp[18].x___, temp[19].x___; 13: MAX temp[21].x, temp[20].x___, none.0___; 14: LG2 temp[22].w, temp[21].___x; 15: MUL temp[23].w, temp[22].___w, const[0].___x; 16: EX2 temp[24].x, temp[23].w___; 17: MUL temp[25].x, temp[24].x___, const[1].w___; 18: MOV temp[12].w, temp[25].___x; 19: MOV output[0], temp[12]; CONST[6] = { 1.0000 0.0039 0.0000 0.0000 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: RCP temp[8].w, input[0].___w; 1: MUL temp[9].xy, input[0].xy__, temp[8].ww__; 2: MAD temp[10].xy, temp[9].xy__, const[7].xy__, const[8].xy__; 3: MOV temp[11].x, temp[10].x___; 4: MAD temp[11].y, temp[10]._y__, const[5]._x__, const[5]._y__; 5: MOV temp[12].xyz, const[1].xyz_; 6: MUL temp[13].xy, temp[11].xy__, const[9].xy__; 7: TEX temp[14].xyz, temp[13].xy__, 2D[0]; 8: DP3 temp[16].x, temp[14].xyz_, const[6].xyz_; 9: MAD temp[17].x, -temp[16].x___, const[3].x___, -const[2].x___; 10: MIN temp[18].x, temp[17].x___, const[2].y___; 11: RCP temp[19].x, const[2].y___; 12: MUL temp[20].x, temp[18].x___, temp[19].x___; 13: MAX temp[21].x, temp[20].x___, none.0___; 14: LG2 temp[22].w, temp[21].___x; 15: MUL temp[23].w, temp[22].___w, const[0].___x; 16: EX2 temp[24].x, temp[23].w___; 17: MUL temp[25].x, temp[24].x___, const[1].w___; 18: MOV temp[12].w, temp[25].___x; 19: MOV output[0], temp[12]; CONST[5] = { 1.0000 0.0039 0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: RCP temp[8].w, input[0].___w; 1: MUL temp[9].xy, input[0].xy__, temp[8].ww__; 2: MAD temp[10].xy, temp[9].xy__, const[6].xy__, const[7].xy__; 3: MOV temp[11].x, temp[10].x___; 4: MAD temp[11].y, temp[10]._y__, const[4]._x__, const[4]._y__; 5: MOV temp[12].xyz, const[1].xyz_; 6: MUL temp[13].xy, temp[11].xy__, const[8].xy__; 7: TEX temp[14].xyz, temp[13].xy__, 2D[0]; 8: DP3 temp[16].x, temp[14].xyz_, const[5].xyz_; 9: MAD temp[17].x, -temp[16].x___, const[3].x___, -const[2].x___; 10: MIN temp[18].x, temp[17].x___, const[2].y___; 11: RCP temp[19].x, const[2].y___; 12: MUL temp[20].x, temp[18].x___, temp[19].x___; 13: MAX temp[21].x, temp[20].x___, none.0___; 14: LG2 temp[22].w, temp[21].___x; 15: MUL temp[23].w, temp[22].___w, const[0].___x; 16: EX2 temp[24].x, temp[23].w___; 17: MUL temp[25].x, temp[24].x___, const[1].w___; 18: MOV temp[12].w, temp[25].___x; 19: MOV output[0], temp[12]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[8].w, src0.w 1: src0.xyz = input[0], src0.w = temp[8] MAD temp[9].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[9], src1.xyz = const[6], src2.xyz = const[7] MAD temp[10].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[10] MAD temp[11].x, src0.x__, src0.111, src0.000 4: src0.xyz = temp[10], src1.xyz = const[4] MAD temp[11].y, src0._y_, src1._x_, src1._y_ 5: src0.xyz = const[1] MAD temp[12].xyz, src0.xyz, src0.111, src0.000 6: src0.xyz = temp[11], src1.xyz = const[8] MAD temp[13].xy, src0.xy_, src1.xy_, src0.000 7: TEX temp[14].xyz, temp[13].xy__, 2D[0]; 8: src0.xyz = temp[14], src1.xyz = const[5] DP3 temp[16].x, src0.xyz, src1.xyz 9: src0.xyz = temp[16], src1.xyz = const[3], src2.xyz = const[2] MAD temp[17].x, -src0.x__, src1.x__, -src2.x__ 10: src0.xyz = temp[17], src1.xyz = const[2] MIN temp[18].x, src0.x__, src1.y__ 11: src0.xyz = const[2] REPL_ALPHA temp[19].x RCP, src0.y 12: src0.xyz = temp[18], src1.xyz = temp[19] MAD temp[20].x, src0.x__, src1.x__, src0.000 13: src0.xyz = temp[20] MAX temp[21].x, src0.x__, src0.0__ 14: src0.xyz = temp[21] LG2 temp[22].w, src0.x 15: src0.xyz = const[0], src0.w = temp[22] MAD temp[23].w, src0.w, src0.x, src0.0 16: src0.w = temp[23] REPL_ALPHA temp[24].x EX2, src0.w 17: src0.xyz = temp[24], src0.w = const[1] MAD temp[25].x, src0.x__, src0.w__, src0.000 18: src0.xyz = temp[25] MAD temp[12].w, src0.x, src0.1, src0.0 19: src0.xyz = temp[12], src0.w = temp[12] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = const[1], src0.w = input[0] MAD temp[12].xyz, src0.xyz, src0.111, src0.000 RCP temp[8].w, src0.w 1: src0.xyz = input[0], src0.w = temp[8], src1.xyz = const[2] MAD temp[9].xy, src0.xy_, src0.ww_, src0.000 RCP temp[19].w, src1.y 2: src0.xyz = temp[9], src1.xyz = const[6], src2.xyz = const[7] MAD temp[10].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[10], src1.xyz = const[4] MAD temp[11].y, src0._y_, src1._x_, src1._y_ 4: src0.xyz = temp[10] MAD temp[11].x, src0.x__, src0.111, src0.000 5: src0.xyz = temp[11], src1.xyz = const[8] MAD temp[13].xy, src0.xy_, src1.xy_, src0.000 6: BEGIN_TEX; 7: TEX temp[14].xyz, temp[13].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 8: src0.xyz = temp[14], src1.xyz = const[5] SEM_WAIT DP3 temp[16].x, src0.xyz, src1.xyz 9: src0.xyz = temp[16], src1.xyz = const[3], src2.xyz = const[2] MAD temp[17].x, -src0.x__, src1.x__, -src2.x__ 10: src0.xyz = temp[17], src1.xyz = const[2] MIN temp[18].x, src0.x__, src1.y__ 11: src0.xyz = temp[18], src0.w = temp[19], src1.xyz = temp[19] MAD temp[20].x, src0.x__, src0.w__, src0.000 12: src0.xyz = temp[20] MAX temp[21].x, src0.x__, src0.0__ 13: src0.xyz = temp[21] LG2 temp[22].w, src0.x 14: src0.xyz = const[0], src0.w = temp[22] MAD temp[23].w, src0.w, src0.x, src0.0 15: src0.w = temp[23] REPL_ALPHA temp[24].x EX2, src0.w 16: src0.xyz = temp[24], src0.w = const[1] MAD temp[25].x, src0.x__, src0.w__, src0.000 17: src0.xyz = temp[25] MAD temp[12].w, src0.x, src0.1, src0.0 18: src0.xyz = temp[12], src0.w = temp[12] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = const[1], src0.w = input[0] MAD temp[12].xyz, src0.xyz, src0.111, src0.000 RCP temp[8].w, src0.w 1: src0.xyz = input[0], src0.w = temp[8], src1.xyz = const[2] MAD temp[9].xy, src0.xy_, src0.ww_, src0.000 RCP temp[19].w, src1.y 2: src0.xyz = temp[9], src1.xyz = const[6], src2.xyz = const[7] MAD temp[10].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[10], src1.xyz = const[4] MAD temp[11].y, src0._y_, src1._x_, src1._y_ 4: src0.xyz = temp[10] MAD temp[11].x, src0.x__, src0.111, src0.000 5: src0.xyz = temp[11], src1.xyz = const[8] MAD temp[13].xy, src0.xy_, src1.xy_, src0.000 6: BEGIN_TEX; 7: TEX temp[14].xyz, temp[13].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 8: src0.xyz = temp[14], src1.xyz = const[5] SEM_WAIT DP3 temp[16].x, src0.xyz, src1.xyz 9: src0.xyz = temp[16], src1.xyz = const[3], src2.xyz = const[2] MAD temp[17].x, -src0.x__, src1.x__, -src2.x__ 10: src0.xyz = temp[17], src1.xyz = const[2] MIN temp[18].x, src0.x__, src1.y__ 11: src0.xyz = temp[18], src0.w = temp[19] MAD temp[20].x, src0.x__, src0.w__, src0.000 12: src0.xyz = temp[20] MAX temp[21].x, src0.x__, src0.0__ 13: src0.xyz = temp[21] LG2 temp[22].w, src0.x 14: src0.xyz = const[0], src0.w = temp[22] MAD temp[23].w, src0.w, src0.x, src0.0 15: src0.w = temp[23] REPL_ALPHA temp[24].x EX2, src0.w 16: src0.xyz = temp[24], src0.w = const[1] MAD temp[25].x, src0.x__, src0.w__, src0.000 17: src0.xyz = temp[25] MAD temp[12].w, src0.x, src0.1, src0.0 18: src0.xyz = temp[12], src0.w = temp[12] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = const[1], src0.w = input[0] MAD temp[1].xyz, src0.xyz, src0.111, src0.000 RCP temp[1].w, src0.w 1: src0.xyz = input[0], src0.w = temp[1], src1.xyz = const[2] MAD temp[0].xy, src0.xy_, src0.ww_, src0.00_ RCP temp[0].w, src1.y 2: src0.xyz = temp[0], src1.xyz = const[6], src2.xyz = const[7] MAD temp[0].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[0], src1.xyz = const[4] MAD temp[2].y, src0._y_, src1._x_, src1._y_ 4: src0.xyz = temp[0] MAD temp[2].x, src0.x__, src0.11_, src0.00_ 5: src0.xyz = temp[2], src1.xyz = const[8] MAD temp[0].xy, src0.xy_, src1.xy_, src0.00_ 6: BEGIN_TEX; 7: TEX temp[2].xyz, temp[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 8: src0.xyz = temp[2], src1.xyz = const[5] SEM_WAIT DP3 temp[0].x, src0.xyz, src1.xyz 9: src0.xyz = temp[0], src1.xyz = const[3], src2.xyz = const[2] MAD temp[0].x, -src0.x__, src1.x__, -src2.x__ 10: src0.xyz = temp[0], src1.xyz = const[2] MIN temp[0].x, src0.x__, src1.y__ 11: src0.xyz = temp[0], src0.w = temp[0] MAD temp[0].x, src0.x__, src0.w__, src0.0__ 12: src0.xyz = temp[0] MAX temp[0].x, src0.x__, src0.0__ 13: src0.xyz = temp[0] LG2 temp[0].w, src0.x 14: src0.xyz = const[0], src0.w = temp[0] MAD temp[0].w, src0.w, src0.x, src0.0 15: src0.w = temp[0] REPL_ALPHA temp[0].x EX2, src0.w 16: src0.xyz = temp[0], src0.w = const[1] MAD temp[0].x, src0.x__, src0.w__, src0.0__ 17: src0.xyz = temp[0] MAD temp[0].w, src0.x, src0.1, src0.0 18: src0.xyz = temp[1], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=35************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 5, tex_end: 0 (code_addr: 00000140) 0: xyz: c1 t0 t0 bias-> t1.xyz (03840021) w: t0 t0 t0 bias-> t1.w (00840000) xyz: c1.xyz 1.0 0.0 op: 00050a80 w: t0.w c1.x c1.x op: 05000009 1: xyz: t0 c2 t0 bias-> t0.xy (01800880) w: t1 t0 t0 bias-> t0.w (00800001) xyz: t0.xyz t1.www 0.0 op: 00050600 w: c2.y t0.x t0.x op: 05000004 2: xyz: t0 c6 c7 bias-> t0.xy (01827980) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c6.xyz c7.xyz op: 00020200 w: t0.x t0.x t0.x op: 00000000 3: xyz: t0 c4 t0 bias-> t2.y (01080900) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c4.xxx c4.xyz op: 00010280 w: t0.x t0.x t0.x op: 00000000 4: xyz: t0 t0 t0 bias-> t2.x (00880000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 5: xyz: t2 c8 t0 bias-> t0.xy (01800a02) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c8.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 NODE 1: alu_offset: 6, tex_offset: 0, alu_end: 10, tex_end: 0 (code_addr: 00400286) TEX: TEX t2, t0, texture[0] (00008080) 6: xyz: t2 c5 t0 bias-> t0.x (00800942) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c5.xyz t2.xxx op: 00804200 w: t2.x t2.x t2.x op: 00000000 7: xyz: t0 c3 c2 bias-> t0.x (008228c0) w: t0 t0 t0 bias-> (00000000) xyz: -t0.xyz c3.xyz -c2.xyz op: 000a0220 w: t0.x t0.x t0.x op: 00000000 8: xyz: t0 c2 t0 bias-> t0.x (00800880) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c2.yyy t0.xxx op: 02004300 w: t0.x t0.x t0.x op: 00000000 9: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.www 0.0 op: 00050600 w: t0.x t0.x t0.x op: 00000000 10: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 0.0 t0.xxx op: 02804a00 w: t0.x t0.x t0.x op: 00000000 11: xyz: t0 t0 t0 bias-> (00000000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: t0.x t0.x t0.x op: 04800000 12: xyz: c0 t0 t0 bias-> (00000020) w: t0 t0 t0 bias-> t0.w (00800000) xyz: c0.xxx c0.xxx c0.xxx op: 00004081 w: t0.w c0.x 0.0 op: 00040009 13: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: t0.w t0.x t0.x op: 04000009 14: xyz: t0 t0 t0 bias-> t0.x (00800000) w: c1 t0 t0 bias-> (00000021) xyz: t0.xyz c1.www 0.0 op: 00050600 w: t0.x t0.x t0.x op: 00000000 15: xyz: t0 t0 t0 bias-> (00000000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: t0.x 1.0 0.0 op: 00040880 16: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL IN[1], GENERIC[12], PERSPECTIVE DCL IN[2], GENERIC[13], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0..4] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL IMM[0] FLT32 { 1.0000, 0.0000, 0.0000, 0.0000} 0: TEX TEMP[0], IN[0].xyyy, SAMP[0], 2D 1: MUL TEMP[0], TEMP[0], IN[2] 2: ADD TEMP[1].x, -IN[1].zzzz, -CONST[2].xxxx 3: RCP TEMP[2].x, CONST[2].yyyy 4: MUL_SAT TEMP[1].x, TEMP[1].xxxx, TEMP[2].xxxx 5: POW TEMP[1].x, TEMP[1].xxxx, CONST[0].xxxx 6: ADD TEMP[2].x, IMM[0].xxxx, -TEMP[1].xxxx 7: MAD TEMP[1].x, CONST[1].xxxx, TEMP[1].xxxx, TEMP[2].xxxx 8: MUL TEMP[1].x, TEMP[1].xxxx, CONST[4].xxxx 9: MUL TEMP[1].x, TEMP[1].xxxx, CONST[3].xxxx 10: MUL TEMP[0].xyz, TEMP[0].xyzz, TEMP[1].xxxx 11: MOV OUT[0], TEMP[0] 12: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[2]; 2: ADD temp[1].x, -input[1].zzzz, -const[2].xxxx; 3: RCP temp[2].x, const[2].yyyy; 4: MUL_SAT temp[1].x, temp[1].xxxx, temp[2].xxxx; 5: POW temp[1].x, temp[1].xxxx, const[0].xxxx; 6: ADD temp[2].x, temp[0].1111, -temp[1].xxxx; 7: MAD temp[1].x, const[1].xxxx, temp[1].xxxx, temp[2].xxxx; 8: MUL temp[1].x, temp[1].xxxx, const[4].xxxx; 9: MUL temp[1].x, temp[1].xxxx, const[3].xxxx; 10: MUL temp[0].xyz, temp[0].xyzz, temp[1].xxxx; 11: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[2]; 2: ADD temp[1].x, -input[1].zzzz, -const[2].xxxx; 3: RCP temp[2].x, const[2].yyyy; 4: MUL_SAT temp[1].x, temp[1].xxxx, temp[2].xxxx; 5: POW temp[1].x, temp[1].xxxx, const[0].xxxx; 6: ADD temp[2].x, temp[0].1111, -temp[1].xxxx; 7: MAD temp[1].x, const[1].xxxx, temp[1].xxxx, temp[2].xxxx; 8: MUL temp[1].x, temp[1].xxxx, const[4].xxxx; 9: MUL temp[1].x, temp[1].xxxx, const[3].xxxx; 10: MUL temp[0].xyz, temp[0].xyzz, temp[1].xxxx; 11: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[2]; 2: ADD temp[1].x, -input[1].zzzz, -const[2].xxxx; 3: RCP temp[2].x, const[2].yyyy; 4: MUL_SAT temp[1].x, temp[1].xxxx, temp[2].xxxx; 5: POW temp[1].x, temp[1].xxxx, const[0].xxxx; 6: ADD temp[2].x, temp[0].1111, -temp[1].xxxx; 7: MAD temp[1].x, const[1].xxxx, temp[1].xxxx, temp[2].xxxx; 8: MUL temp[1].x, temp[1].xxxx, const[4].xxxx; 9: MUL temp[1].x, temp[1].xxxx, const[3].xxxx; 10: MUL temp[0].xyz, temp[0].xyzz, temp[1].xxxx; 11: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[2]; 2: ADD temp[1].x, -input[1].zzzz, -const[2].xxxx; 3: RCP temp[2].x, const[2].yyyy; 4: MUL_SAT temp[1].x, temp[1].xxxx, temp[2].xxxx; 5: POW temp[1].x, temp[1].xxxx, const[0].xxxx; 6: ADD temp[2].x, temp[0].1111, -temp[1].xxxx; 7: MAD temp[1].x, const[1].xxxx, temp[1].xxxx, temp[2].xxxx; 8: MUL temp[1].x, temp[1].xxxx, const[4].xxxx; 9: MUL temp[1].x, temp[1].xxxx, const[3].xxxx; 10: MUL temp[0].xyz, temp[0].xyzz, temp[1].xxxx; 11: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[2]; 2: ADD temp[1].x, -input[1].zzzz, -const[2].xxxx; 3: RCP temp[2].x, const[2].yyyy; 4: MUL_SAT temp[1].x, temp[1].xxxx, temp[2].xxxx; 5: POW temp[1].x, temp[1].xxxx, const[0].xxxx; 6: ADD temp[2].x, temp[0].1111, -temp[1].xxxx; 7: MAD temp[1].x, const[1].xxxx, temp[1].xxxx, temp[2].xxxx; 8: MUL temp[1].x, temp[1].xxxx, const[4].xxxx; 9: MUL temp[1].x, temp[1].xxxx, const[3].xxxx; 10: MUL temp[0].xyz, temp[0].xyzz, temp[1].xxxx; 11: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[2]; 2: ADD temp[1].x, -input[1].zzzz, -const[2].xxxx; 3: RCP temp[2].x, const[2].yyyy; 4: MUL_SAT temp[1].x, temp[1].xxxx, temp[2].xxxx; 5: POW temp[1].x, temp[1].xxxx, const[0].xxxx; 6: ADD temp[2].x, temp[0].1111, -temp[1].xxxx; 7: MAD temp[1].x, const[1].xxxx, temp[1].xxxx, temp[2].xxxx; 8: MUL temp[1].x, temp[1].xxxx, const[4].xxxx; 9: MUL temp[1].x, temp[1].xxxx, const[3].xxxx; 10: MUL temp[0].xyz, temp[0].xyzz, temp[1].xxxx; 11: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[2]; 2: ADD temp[1].x, -input[1].zzzz, -const[2].xxxx; 3: RCP temp[2].x, const[2].yyyy; 4: MUL_SAT temp[1].x, temp[1].xxxx, temp[2].xxxx; 5: LG2 temp[3].w, temp[1].xxxx; 6: MUL temp[3].w, temp[3].wwww, const[0].xxxx; 7: EX2 temp[1].x, temp[3].wwww; 8: ADD temp[2].x, temp[0].1111, -temp[1].xxxx; 9: MAD temp[1].x, const[1].xxxx, temp[1].xxxx, temp[2].xxxx; 10: MUL temp[1].x, temp[1].xxxx, const[4].xxxx; 11: MUL temp[1].x, temp[1].xxxx, const[3].xxxx; 12: MUL temp[0].xyz, temp[0].xyzz, temp[1].xxxx; 13: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[0], temp[0], input[2]; 2: ADD temp[1].x, -input[1].z___, -const[2].x___; 3: RCP temp[2].x, const[2].y___; 4: MUL_SAT temp[1].x, temp[1].x___, temp[2].x___; 5: LG2 temp[3].w, temp[1].___x; 6: MUL temp[3].w, temp[3].___w, const[0].___x; 7: EX2 temp[1].x, temp[3].w___; 8: ADD temp[2].x, temp[0].1___, -temp[1].x___; 9: MAD temp[1].x, const[1].x___, temp[1].x___, temp[2].x___; 10: MUL temp[1].x, temp[1].x___, const[4].x___; 11: MUL temp[1].x, temp[1].x___, const[3].x___; 12: MUL temp[0].xyz, temp[0].xyz_, temp[1].xxx_; 13: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[0], temp[0], input[2]; 2: ADD temp[1].x, -input[1].z___, -const[2].x___; 3: RCP temp[2].x, const[2].y___; 4: MUL_SAT temp[1].x, temp[1].x___, temp[2].x___; 5: LG2 temp[3].w, temp[1].___x; 6: MUL temp[3].w, temp[3].___w, const[0].___x; 7: EX2 temp[1].x, temp[3].w___; 8: ADD temp[2].x, temp[0].1___, -temp[1].x___; 9: MAD temp[1].x, const[1].x___, temp[1].x___, temp[2].x___; 10: MUL temp[1].x, temp[1].x___, const[4].x___; 11: MUL temp[1].x, temp[1].x___, const[3].x___; 12: MUL temp[0].xyz, temp[0].xyz_, temp[1].xxx_; 13: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[4], input[0].xy__, 2D[0]; 1: MUL temp[5], temp[4], input[2]; 2: ADD temp[6].x, -input[1].z___, -const[2].x___; 3: RCP temp[7].x, const[2].y___; 4: MUL_SAT temp[8].x, temp[6].x___, temp[7].x___; 5: LG2 temp[9].w, temp[8].___x; 6: MUL temp[10].w, temp[9].___w, const[0].___x; 7: EX2 temp[11].x, temp[10].w___; 8: ADD temp[12].x, temp[0].1___, -temp[11].x___; 9: MAD temp[13].x, const[1].x___, temp[11].x___, temp[12].x___; 10: MUL temp[14].x, temp[13].x___, const[4].x___; 11: MUL temp[15].x, temp[14].x___, const[3].x___; 12: MUL temp[5].xyz, temp[5].xyz_, temp[15].xxx_; 13: MOV output[0], temp[5]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[4], input[0].xy__, 2D[0]; 1: MUL temp[5], temp[4], input[2]; 2: ADD temp[6].x, -input[1].z___, -const[2].x___; 3: RCP temp[7].x, const[2].y___; 4: MUL_SAT temp[8].x, temp[6].x___, temp[7].x___; 5: LG2 temp[9].w, temp[8].___x; 6: MUL temp[10].w, temp[9].___w, const[0].___x; 7: EX2 temp[11].x, temp[10].w___; 8: ADD temp[12].x, none.1___, -temp[11].x___; 9: MAD temp[13].x, const[1].x___, temp[11].x___, temp[12].x___; 10: MUL temp[14].x, temp[13].x___, const[4].x___; 11: MUL temp[15].x, temp[14].x___, const[3].x___; 12: MUL temp[5].xyz, temp[5].xyz_, temp[15].xxx_; 13: MOV output[0], temp[5]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[4], input[0].xy__, 2D[0]; 1: MUL temp[5], temp[4], input[2]; 2: ADD temp[6].x, -input[1].z___, -const[2].x___; 3: RCP temp[7].x, const[2].y___; 4: MUL_SAT temp[8].x, temp[6].x___, temp[7].x___; 5: LG2 temp[9].w, temp[8].___x; 6: MUL temp[10].w, temp[9].___w, const[0].___x; 7: EX2 temp[11].x, temp[10].w___; 8: ADD temp[12].x, none.1___, -temp[11].x___; 9: MAD temp[13].x, const[1].x___, temp[11].x___, temp[12].x___; 10: MUL temp[14].x, temp[13].x___, const[4].x___; 11: MUL temp[15].x, temp[14].x___, const[3].x___; 12: MUL temp[5].xyz, temp[5].xyz_, temp[15].xxx_; 13: MOV output[0], temp[5]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[4], input[0].xy__, 2D[0]; 1: MUL temp[5], temp[4], input[2]; 2: ADD temp[6].x, -input[1].z___, -const[2].x___; 3: RCP temp[7].x, const[2].y___; 4: MUL_SAT temp[8].x, temp[6].x___, temp[7].x___; 5: LG2 temp[9].w, temp[8].___x; 6: MUL temp[10].w, temp[9].___w, const[0].___x; 7: EX2 temp[11].x, temp[10].w___; 8: ADD temp[12].x, none.1___, -temp[11].x___; 9: MAD temp[13].x, const[1].x___, temp[11].x___, temp[12].x___; 10: MUL temp[14].x, temp[13].x___, const[4].x___; 11: MUL temp[15].x, temp[14].x___, const[3].x___; 12: MUL temp[5].xyz, temp[5].xyz_, temp[15].xxx_; 13: MOV output[0], temp[5]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[4], input[0].xy__, 2D[0]; 1: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = input[2], src1.w = input[2] MAD temp[5].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[5].w, src0.w, src1.w, src0.0 2: src0.xyz = input[1], src1.xyz = const[2] MAD temp[6].x, -src0.z__, src0.111, -src1.x__ 3: src0.xyz = const[2] REPL_ALPHA temp[7].x RCP, src0.y 4: src0.xyz = temp[6], src1.xyz = temp[7] MAD_SAT temp[8].x, src0.x__, src1.x__, src0.000 5: src0.xyz = temp[8] LG2 temp[9].w, src0.x 6: src0.xyz = const[0], src0.w = temp[9] MAD temp[10].w, src0.w, src0.x, src0.0 7: src0.w = temp[10] REPL_ALPHA temp[11].x EX2, src0.w 8: src0.xyz = temp[11] MAD temp[12].x, src0.1__, src0.111, -src0.x__ 9: src0.xyz = const[1], src1.xyz = temp[11], src2.xyz = temp[12] MAD temp[13].x, src0.x__, src1.x__, src2.x__ 10: src0.xyz = temp[13], src1.xyz = const[4] MAD temp[14].x, src0.x__, src1.x__, src0.000 11: src0.xyz = temp[14], src1.xyz = const[3] MAD temp[15].x, src0.x__, src1.x__, src0.000 12: src0.xyz = temp[5], src1.xyz = temp[15] MAD temp[5].xyz, src0.xyz, src1.xxx, src0.000 13: src0.xyz = temp[5], src0.w = temp[5] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[4], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = input[1], src1.xyz = const[2] MAD temp[6].x, -src0.z__, src0.111, -src1.x__ RCP temp[7].w, src1.y 3: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = input[2], src1.w = input[2] SEM_WAIT MAD temp[5].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[5].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[6], src0.w = temp[7], src1.xyz = temp[7] MAD_SAT temp[8].x, src0.x__, src0.w__, src0.000 5: src0.xyz = temp[8] LG2 temp[9].w, src0.x 6: src0.xyz = const[0], src0.w = temp[9] MAD temp[10].w, src0.w, src0.x, src0.0 7: src0.w = temp[10] REPL_ALPHA temp[11].x EX2, src0.w 8: src0.xyz = temp[11] MAD temp[12].x, src0.1__, src0.111, -src0.x__ 9: src0.xyz = const[1], src1.xyz = temp[11], src2.xyz = temp[12] MAD temp[13].x, src0.x__, src1.x__, src2.x__ 10: src0.xyz = temp[13], src1.xyz = const[4] MAD temp[14].x, src0.x__, src1.x__, src0.000 11: src0.xyz = temp[14], src1.xyz = const[3] MAD temp[15].x, src0.x__, src1.x__, src0.000 12: src0.xyz = temp[5], src1.xyz = temp[15] MAD temp[5].xyz, src0.xyz, src1.xxx, src0.000 13: src0.xyz = temp[5], src0.w = temp[5] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[4], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = input[1], src1.xyz = const[2] MAD temp[6].x, -src0.z__, src0.111, -src1.x__ RCP temp[7].w, src1.y 3: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = input[2], src1.w = input[2] SEM_WAIT MAD temp[5].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[5].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[6], src0.w = temp[7] MAD_SAT temp[8].x, src0.x__, src0.w__, src0.000 5: src0.xyz = temp[8] LG2 temp[9].w, src0.x 6: src0.xyz = const[0], src0.w = temp[9] MAD temp[10].w, src0.w, src0.x, src0.0 7: src0.w = temp[10] REPL_ALPHA temp[11].x EX2, src0.w 8: src0.xyz = temp[11] MAD temp[12].x, src0.1__, src0.111, -src0.x__ 9: src0.xyz = const[1], src1.xyz = temp[11], src2.xyz = temp[12] MAD temp[13].x, src0.x__, src1.x__, src2.x__ 10: src0.xyz = temp[13], src1.xyz = const[4] MAD temp[14].x, src0.x__, src1.x__, src0.000 11: src0.xyz = temp[14], src1.xyz = const[3] MAD temp[15].x, src0.x__, src1.x__, src0.000 12: src0.xyz = temp[5], src1.xyz = temp[15] MAD temp[5].xyz, src0.xyz, src1.xxx, src0.000 13: src0.xyz = temp[5], src0.w = temp[5] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = input[1], src1.xyz = const[2] MAD temp[1].x, -src0.z__, src0.1__, -src1.x__ RCP temp[1].w, src1.y 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[2], src1.w = input[2] SEM_WAIT MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[1], src0.w = temp[1] MAD_SAT temp[1].x, src0.x__, src0.w__, src0.0__ 5: src0.xyz = temp[1] LG2 temp[1].w, src0.x 6: src0.xyz = const[0], src0.w = temp[1] MAD temp[1].w, src0.w, src0.x, src0.0 7: src0.w = temp[1] REPL_ALPHA temp[1].x EX2, src0.w 8: src0.xyz = temp[1] MAD temp[1].y, src0._1_, src0._1_, -src0._x_ 9: src0.xyz = const[1], src1.xyz = temp[1], src2.xyz = temp[1] MAD temp[1].x, src0.x__, src1.x__, src2.y__ 10: src0.xyz = temp[1], src1.xyz = const[4] MAD temp[1].x, src0.x__, src1.x__, src0.0__ 11: src0.xyz = temp[1], src1.xyz = const[3] MAD temp[1].x, src0.x__, src1.x__, src0.0__ 12: src0.xyz = temp[0], src1.xyz = temp[1] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 13: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=36************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 11, tex_end: 0 (code_addr: 004002c0) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t1 c2 t0 bias-> t1.x (00840881) w: t0 t0 t0 bias-> t1.w (00840000) xyz: -t1.zzz 1.0 -c2.xyz op: 00090aa3 w: c2.y t1.x t1.x op: 05000004 1: xyz: t0 t2 t0 bias-> t0.xyz (03800080) w: t0 t2 t0 bias-> t0.w (00800080) xyz: t0.xyz t2.xyz 0.0 op: 00050200 w: t0.w t2.w 0.0 op: 00040509 2: xyz: t1 t0 t0 bias-> t1.x (00840001) w: t1 t0 t0 bias-> (00000001) xyz: t1.xyz t1.www 0.0 op: 40050600 w: t1.x t1.x t1.x op: 00000000 3: xyz: t1 t0 t0 bias-> (00000001) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t1.xxx t1.xxx t1.xxx op: 00004081 w: t1.x t1.x t1.x op: 04800000 4: xyz: c0 t0 t0 bias-> (00000020) w: t1 t0 t0 bias-> t1.w (00840001) xyz: c0.xxx c0.xxx c0.xxx op: 00004081 w: t1.w c0.x 0.0 op: 00040009 5: xyz: t0 t0 t0 bias-> t1.x (00840000) w: t1 t0 t0 bias-> (00000001) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: t1.w t0.x t0.x op: 04000009 6: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t1.xxx op: 00084a95 w: t1.x t1.x t1.x op: 00000000 7: xyz: c1 t1 t1 bias-> t1.x (00841061) w: t0 t0 t0 bias-> (00000000) xyz: c1.xyz t1.xyz t1.yyy op: 00028200 w: c1.x c1.x c1.x op: 00000000 8: xyz: t1 c4 t0 bias-> t1.x (00840901) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c4.xyz 0.0 op: 00050200 w: t1.x t1.x t1.x op: 00000000 9: xyz: t1 c3 t0 bias-> t1.x (008408c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c3.xyz 0.0 op: 00050200 w: t1.x t1.x t1.x op: 00000000 10: xyz: t0 t1 t0 bias-> t0.xyz (03800040) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t1.xxx 0.0 op: 00050280 w: t0.x t0.x t0.x op: 00000000 11: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], POSITION, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL IN[2], GENERIC[12], PERSPECTIVE DCL IN[3], GENERIC[13], PERSPECTIVE DCL IN[4], GENERIC[14], PERSPECTIVE DCL IN[5], GENERIC[15], PERSPECTIVE DCL IN[6], GENERIC[16], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL CONST[16] DCL CONST[0..11] DCL TEMP[0] DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL DCL TEMP[6], LOCAL IMM[0] FLT32 { 1.0000, 2.0000, -1.0000, 10.0000} IMM[1] FLT32 { 0.0000, -1.0000, 0.0000, 0.0000} 0: MOV TEMP[0], IN[0] 1: MAD TEMP[0].y, IN[0], CONST[16].xxxx, CONST[16].yyyy 2: TEX TEMP[1], IN[1].xyyy, SAMP[3], 2D 3: MUL TEMP[1], TEMP[1], IN[3] 4: ADD TEMP[2].x, -IN[2].zzzz, -CONST[8].xxxx 5: RCP TEMP[3].x, CONST[8].yyyy 6: MUL_SAT TEMP[2].x, TEMP[2].xxxx, TEMP[3].xxxx 7: POW TEMP[2].x, TEMP[2].xxxx, CONST[6].xxxx 8: ADD TEMP[3].x, IMM[0].xxxx, -TEMP[2].xxxx 9: MAD TEMP[2].x, CONST[7].xxxx, TEMP[2].xxxx, TEMP[3].xxxx 10: MUL TEMP[2].x, TEMP[2].xxxx, CONST[11].xxxx 11: ADD TEMP[3].xyz, IMM[0].xxxx, -TEMP[1].xyzz 12: ADD TEMP[4].x, IMM[0].xxxx, -TEMP[2].xxxx 13: MAD TEMP[1].xyz, TEMP[3].xyzz, TEMP[4].xxxx, TEMP[1].xyzz 14: TEX TEMP[3].xyz, IN[1].xyyy, SAMP[2], 2D 15: MAD TEMP[3].xyz, TEMP[3].xyzz, IMM[0].yyyy, IMM[0].zzzz 16: MUL TEMP[4].xyz, TEMP[3].xxxx, IN[5].xyzz 17: MAD TEMP[4].xyz, TEMP[3].yyyy, IN[4].xyzz, TEMP[4].xyzz 18: MAD TEMP[4].xyz, TEMP[3].zzzz, IN[6].xyzz, TEMP[4].xyzz 19: DP3 TEMP[5].x, TEMP[4].xyzz, TEMP[4].xyzz 20: RSQ TEMP[5].x, TEMP[5].xxxx 21: MUL TEMP[4].xyz, TEMP[4].xyzz, TEMP[5].xxxx 22: RCP TEMP[5].x, IN[2].zzzz 23: MIN TEMP[5].x, TEMP[5].xxxx, IMM[0].wwww 24: MUL TEMP[5].x, CONST[9].xxxx, TEMP[5].xxxx 25: MAD TEMP[3].xy, TEMP[3].xyyy, TEMP[5].xxxx, TEMP[0].xyyy 26: TEX TEMP[3].xyz, TEMP[3].xyyy, SAMP[1], RECT 27: MUL TEMP[1].xyz, TEMP[1].xyzz, TEMP[3].xyzz 28: DP3 TEMP[3].x, IN[2].xyzz, IN[2].xyzz 29: RSQ TEMP[3].x, TEMP[3].xxxx 30: MUL TEMP[3].xyz, IN[2].xyzz, TEMP[3].xxxx 31: DP3 TEMP[6].x, TEMP[4].xyzz, TEMP[3].xyzz 32: MUL TEMP[6].xyz, TEMP[6].xxxx, TEMP[4].xyzz 33: MUL TEMP[6].xyz, IMM[0].yyyy, TEMP[6].xyzz 34: ADD TEMP[5].xyz, TEMP[3].xyzz, -TEMP[6].xyzz 35: MUL TEMP[6], CONST[2], TEMP[5].xxxx 36: MAD TEMP[6], CONST[3], TEMP[5].yyyy, TEMP[6] 37: MAD TEMP[5], CONST[4], TEMP[5].zzzz, TEMP[6] 38: ADD TEMP[5].xyz, TEMP[5], CONST[5] 39: TEX TEMP[5].xyz, TEMP[5].xyzz, SAMP[0], CUBE 40: ADD TEMP[6].x, IMM[0].xxxx, -CONST[1].xxxx 41: DP3 TEMP[3].x, -TEMP[3].xyzz, TEMP[4].xyzz 42: MAX TEMP[3].x, TEMP[3].xxxx, IMM[1].xxxx 43: ADD TEMP[3].x, IMM[0].xxxx, -TEMP[3].xxxx 44: POW TEMP[3].x, TEMP[3].xxxx, CONST[1].yyyy 45: MAD TEMP[3].x, TEMP[6].xxxx, TEMP[3].xxxx, CONST[1].xxxx 46: MAX TEMP[3].x, TEMP[3].xxxx, IMM[1].xxxx 47: MUL TEMP[3].xyz, TEMP[5].xyzz, TEMP[3].xxxx 48: MUL TEMP[3].xyz, TEMP[3].xyzz, TEMP[2].xxxx 49: MAD TEMP[1].xyz, TEMP[3].xyzz, CONST[10].xxxx, TEMP[1].xyzz 50: DP3 TEMP[3].x, TEMP[4].xyzz, IMM[1].xxyy 51: ABS TEMP[3].x, TEMP[3].xxxx 52: ADD TEMP[3].x, IMM[0].xxxx, -TEMP[3].xxxx 53: POW TEMP[3].x, TEMP[3].xxxx, CONST[0].yyyy 54: MUL TEMP[3].x, TEMP[3].xxxx, CONST[0].xxxx 55: MUL TEMP[3].xyz, TEMP[5].xyzz, TEMP[3].xxxx 56: MUL TEMP[2].xyz, TEMP[3].xyzz, TEMP[2].xxxx 57: MAD TEMP[1].xyz, TEMP[2].xyzz, CONST[10].xxxx, TEMP[1].xyzz 58: MOV OUT[0], TEMP[1] 59: END Fragment Program: before compilation # Radeon Compiler Program 0: RCP temp[7].w, input[0].wwww; 1: MUL temp[7].xyz, input[0], temp[7].wwww; 2: MAD temp[7].xyz, temp[7].xyz0, const[19].xyz0, const[20].xyz0; 3: MOV temp[0], temp[7]; 4: MAD temp[0].y, temp[7], const[16].xxxx, const[16].yyyy; 5: TEX temp[1], input[1].xyyy, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: ADD temp[2].x, -input[2].zzzz, -const[8].xxxx; 8: RCP temp[3].x, const[8].yyyy; 9: MUL_SAT temp[2].x, temp[2].xxxx, temp[3].xxxx; 10: POW temp[2].x, temp[2].xxxx, const[6].xxxx; 11: ADD temp[3].x, const[17].xxxx, -temp[2].xxxx; 12: MAD temp[2].x, const[7].xxxx, temp[2].xxxx, temp[3].xxxx; 13: MUL temp[2].x, temp[2].xxxx, const[11].xxxx; 14: ADD temp[3].xyz, const[17].xxxx, -temp[1].xyzz; 15: ADD temp[4].x, const[17].xxxx, -temp[2].xxxx; 16: MAD temp[1].xyz, temp[3].xyzz, temp[4].xxxx, temp[1].xyzz; 17: TEX temp[3].xyz, input[1].xyyy, 2D[2]; 18: MAD temp[3].xyz, temp[3].xyzz, const[17].yyyy, const[17].zzzz; 19: MUL temp[4].xyz, temp[3].xxxx, input[5].xyzz; 20: MAD temp[4].xyz, temp[3].yyyy, input[4].xyzz, temp[4].xyzz; 21: MAD temp[4].xyz, temp[3].zzzz, input[6].xyzz, temp[4].xyzz; 22: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 23: RSQ temp[5].x, temp[5].xxxx; 24: MUL temp[4].xyz, temp[4].xyzz, temp[5].xxxx; 25: RCP temp[5].x, input[2].zzzz; 26: MIN temp[5].x, temp[5].xxxx, const[17].wwww; 27: MUL temp[5].x, const[9].xxxx, temp[5].xxxx; 28: MAD temp[3].xy, temp[3].xyyy, temp[5].xxxx, temp[0].xyyy; 29: TEX temp[3].xyz, temp[3].xyyy, RECT[1]; 30: MUL temp[1].xyz, temp[1].xyzz, temp[3].xyzz; 31: DP3 temp[3].x, input[2].xyzz, input[2].xyzz; 32: RSQ temp[3].x, temp[3].xxxx; 33: MUL temp[3].xyz, input[2].xyzz, temp[3].xxxx; 34: DP3 temp[6].x, temp[4].xyzz, temp[3].xyzz; 35: MUL temp[6].xyz, temp[6].xxxx, temp[4].xyzz; 36: MUL temp[6].xyz, const[17].yyyy, temp[6].xyzz; 37: ADD temp[5].xyz, temp[3].xyzz, -temp[6].xyzz; 38: MUL temp[6], const[2], temp[5].xxxx; 39: MAD temp[6], const[3], temp[5].yyyy, temp[6]; 40: MAD temp[5], const[4], temp[5].zzzz, temp[6]; 41: ADD temp[5].xyz, temp[5], const[5]; 42: TEX temp[5].xyz, temp[5].xyzz, CUBE[0]; 43: ADD temp[6].x, const[17].xxxx, -const[1].xxxx; 44: DP3 temp[3].x, -temp[3].xyzz, temp[4].xyzz; 45: MAX temp[3].x, temp[3].xxxx, const[18].xxxx; 46: ADD temp[3].x, const[17].xxxx, -temp[3].xxxx; 47: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 48: MAD temp[3].x, temp[6].xxxx, temp[3].xxxx, const[1].xxxx; 49: MAX temp[3].x, temp[3].xxxx, const[18].xxxx; 50: MUL temp[3].xyz, temp[5].xyzz, temp[3].xxxx; 51: MUL temp[3].xyz, temp[3].xyzz, temp[2].xxxx; 52: MAD temp[1].xyz, temp[3].xyzz, const[10].xxxx, temp[1].xyzz; 53: DP3 temp[3].x, temp[4].xyzz, const[18].xxyy; 54: ABS temp[3].x, temp[3].xxxx; 55: ADD temp[3].x, const[17].xxxx, -temp[3].xxxx; 56: POW temp[3].x, temp[3].xxxx, const[0].yyyy; 57: MUL temp[3].x, temp[3].xxxx, const[0].xxxx; 58: MUL temp[3].xyz, temp[5].xyzz, temp[3].xxxx; 59: MUL temp[2].xyz, temp[3].xyzz, temp[2].xxxx; 60: MAD temp[1].xyz, temp[2].xyzz, const[10].xxxx, temp[1].xyzz; 61: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: RCP temp[7].w, input[0].wwww; 1: MUL temp[7].xyz, input[0], temp[7].wwww; 2: MAD temp[7].xyz, temp[7].xyz0, const[19].xyz0, const[20].xyz0; 3: MOV temp[0], temp[7]; 4: MAD temp[0].y, temp[7], const[16].xxxx, const[16].yyyy; 5: TEX temp[1], input[1].xyyy, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: ADD temp[2].x, -input[2].zzzz, -const[8].xxxx; 8: RCP temp[3].x, const[8].yyyy; 9: MUL_SAT temp[2].x, temp[2].xxxx, temp[3].xxxx; 10: POW temp[2].x, temp[2].xxxx, const[6].xxxx; 11: ADD temp[3].x, const[17].xxxx, -temp[2].xxxx; 12: MAD temp[2].x, const[7].xxxx, temp[2].xxxx, temp[3].xxxx; 13: MUL temp[2].x, temp[2].xxxx, const[11].xxxx; 14: ADD temp[3].xyz, const[17].xxxx, -temp[1].xyzz; 15: ADD temp[4].x, const[17].xxxx, -temp[2].xxxx; 16: MAD temp[1].xyz, temp[3].xyzz, temp[4].xxxx, temp[1].xyzz; 17: TEX temp[3].xyz, input[1].xyyy, 2D[2]; 18: MAD temp[3].xyz, temp[3].xyzz, const[17].yyyy, const[17].zzzz; 19: MUL temp[4].xyz, temp[3].xxxx, input[5].xyzz; 20: MAD temp[4].xyz, temp[3].yyyy, input[4].xyzz, temp[4].xyzz; 21: MAD temp[4].xyz, temp[3].zzzz, input[6].xyzz, temp[4].xyzz; 22: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 23: RSQ temp[5].x, temp[5].xxxx; 24: MUL temp[4].xyz, temp[4].xyzz, temp[5].xxxx; 25: RCP temp[5].x, input[2].zzzz; 26: MIN temp[5].x, temp[5].xxxx, const[17].wwww; 27: MUL temp[5].x, const[9].xxxx, temp[5].xxxx; 28: MAD temp[3].xy, temp[3].xyyy, temp[5].xxxx, temp[0].xyyy; 29: TEX temp[3].xyz, temp[3].xyyy, RECT[1]; 30: MUL temp[1].xyz, temp[1].xyzz, temp[3].xyzz; 31: DP3 temp[3].x, input[2].xyzz, input[2].xyzz; 32: RSQ temp[3].x, temp[3].xxxx; 33: MUL temp[3].xyz, input[2].xyzz, temp[3].xxxx; 34: DP3 temp[6].x, temp[4].xyzz, temp[3].xyzz; 35: MUL temp[6].xyz, temp[6].xxxx, temp[4].xyzz; 36: MUL temp[6].xyz, const[17].yyyy, temp[6].xyzz; 37: ADD temp[5].xyz, temp[3].xyzz, -temp[6].xyzz; 38: MUL temp[6], const[2], temp[5].xxxx; 39: MAD temp[6], const[3], temp[5].yyyy, temp[6]; 40: MAD temp[5], const[4], temp[5].zzzz, temp[6]; 41: ADD temp[5].xyz, temp[5], const[5]; 42: TEX temp[5].xyz, temp[5].xyzz, CUBE[0]; 43: ADD temp[6].x, const[17].xxxx, -const[1].xxxx; 44: DP3 temp[3].x, -temp[3].xyzz, temp[4].xyzz; 45: MAX temp[3].x, temp[3].xxxx, const[18].xxxx; 46: ADD temp[3].x, const[17].xxxx, -temp[3].xxxx; 47: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 48: MAD temp[3].x, temp[6].xxxx, temp[3].xxxx, const[1].xxxx; 49: MAX temp[3].x, temp[3].xxxx, const[18].xxxx; 50: MUL temp[3].xyz, temp[5].xyzz, temp[3].xxxx; 51: MUL temp[3].xyz, temp[3].xyzz, temp[2].xxxx; 52: MAD temp[1].xyz, temp[3].xyzz, const[10].xxxx, temp[1].xyzz; 53: DP3 temp[3].x, temp[4].xyzz, const[18].xxyy; 54: ABS temp[3].x, temp[3].xxxx; 55: ADD temp[3].x, const[17].xxxx, -temp[3].xxxx; 56: POW temp[3].x, temp[3].xxxx, const[0].yyyy; 57: MUL temp[3].x, temp[3].xxxx, const[0].xxxx; 58: MUL temp[3].xyz, temp[5].xyzz, temp[3].xxxx; 59: MUL temp[2].xyz, temp[3].xyzz, temp[2].xxxx; 60: MAD temp[1].xyz, temp[2].xyzz, const[10].xxxx, temp[1].xyzz; 61: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: RCP temp[7].w, input[0].wwww; 1: MUL temp[7].xyz, input[0], temp[7].wwww; 2: MAD temp[7].xyz, temp[7].xyz0, const[19].xyz0, const[20].xyz0; 3: MOV temp[0], temp[7]; 4: MAD temp[0].y, temp[7], const[16].xxxx, const[16].yyyy; 5: TEX temp[1], input[1].xyyy, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: ADD temp[2].x, -input[2].zzzz, -const[8].xxxx; 8: RCP temp[3].x, const[8].yyyy; 9: MUL_SAT temp[2].x, temp[2].xxxx, temp[3].xxxx; 10: POW temp[2].x, temp[2].xxxx, const[6].xxxx; 11: ADD temp[3].x, const[17].xxxx, -temp[2].xxxx; 12: MAD temp[2].x, const[7].xxxx, temp[2].xxxx, temp[3].xxxx; 13: MUL temp[2].x, temp[2].xxxx, const[11].xxxx; 14: ADD temp[3].xyz, const[17].xxxx, -temp[1].xyzz; 15: ADD temp[4].x, const[17].xxxx, -temp[2].xxxx; 16: MAD temp[1].xyz, temp[3].xyzz, temp[4].xxxx, temp[1].xyzz; 17: TEX temp[3].xyz, input[1].xyyy, 2D[2]; 18: MAD temp[3].xyz, temp[3].xyzz, const[17].yyyy, const[17].zzzz; 19: MUL temp[4].xyz, temp[3].xxxx, input[5].xyzz; 20: MAD temp[4].xyz, temp[3].yyyy, input[4].xyzz, temp[4].xyzz; 21: MAD temp[4].xyz, temp[3].zzzz, input[6].xyzz, temp[4].xyzz; 22: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 23: RSQ temp[5].x, temp[5].xxxx; 24: MUL temp[4].xyz, temp[4].xyzz, temp[5].xxxx; 25: RCP temp[5].x, input[2].zzzz; 26: MIN temp[5].x, temp[5].xxxx, const[17].wwww; 27: MUL temp[5].x, const[9].xxxx, temp[5].xxxx; 28: MAD temp[3].xy, temp[3].xyyy, temp[5].xxxx, temp[0].xyyy; 29: TEX temp[3].xyz, temp[3].xyyy, RECT[1]; 30: MUL temp[1].xyz, temp[1].xyzz, temp[3].xyzz; 31: DP3 temp[3].x, input[2].xyzz, input[2].xyzz; 32: RSQ temp[3].x, temp[3].xxxx; 33: MUL temp[3].xyz, input[2].xyzz, temp[3].xxxx; 34: DP3 temp[6].x, temp[4].xyzz, temp[3].xyzz; 35: MUL temp[6].xyz, temp[6].xxxx, temp[4].xyzz; 36: MUL temp[6].xyz, const[17].yyyy, temp[6].xyzz; 37: ADD temp[5].xyz, temp[3].xyzz, -temp[6].xyzz; 38: MUL temp[6], const[2], temp[5].xxxx; 39: MAD temp[6], const[3], temp[5].yyyy, temp[6]; 40: MAD temp[5], const[4], temp[5].zzzz, temp[6]; 41: ADD temp[5].xyz, temp[5], const[5]; 42: TEX temp[5].xyz, temp[5].xyzz, CUBE[0]; 43: ADD temp[6].x, const[17].xxxx, -const[1].xxxx; 44: DP3 temp[3].x, -temp[3].xyzz, temp[4].xyzz; 45: MAX temp[3].x, temp[3].xxxx, const[18].xxxx; 46: ADD temp[3].x, const[17].xxxx, -temp[3].xxxx; 47: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 48: MAD temp[3].x, temp[6].xxxx, temp[3].xxxx, const[1].xxxx; 49: MAX temp[3].x, temp[3].xxxx, const[18].xxxx; 50: MUL temp[3].xyz, temp[5].xyzz, temp[3].xxxx; 51: MUL temp[3].xyz, temp[3].xyzz, temp[2].xxxx; 52: MAD temp[1].xyz, temp[3].xyzz, const[10].xxxx, temp[1].xyzz; 53: DP3 temp[3].x, temp[4].xyzz, const[18].xxyy; 54: ABS temp[3].x, temp[3].xxxx; 55: ADD temp[3].x, const[17].xxxx, -temp[3].xxxx; 56: POW temp[3].x, temp[3].xxxx, const[0].yyyy; 57: MUL temp[3].x, temp[3].xxxx, const[0].xxxx; 58: MUL temp[3].xyz, temp[5].xyzz, temp[3].xxxx; 59: MUL temp[2].xyz, temp[3].xyzz, temp[2].xxxx; 60: MAD temp[1].xyz, temp[2].xyzz, const[10].xxxx, temp[1].xyzz; 61: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: RCP temp[7].w, input[0].wwww; 1: MUL temp[7].xyz, input[0], temp[7].wwww; 2: MAD temp[7].xyz, temp[7].xyz0, const[19].xyz0, const[20].xyz0; 3: MOV temp[0], temp[7]; 4: MAD temp[0].y, temp[7], const[16].xxxx, const[16].yyyy; 5: TEX temp[1], input[1].xyyy, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: ADD temp[2].x, -input[2].zzzz, -const[8].xxxx; 8: RCP temp[3].x, const[8].yyyy; 9: MUL_SAT temp[2].x, temp[2].xxxx, temp[3].xxxx; 10: POW temp[2].x, temp[2].xxxx, const[6].xxxx; 11: ADD temp[3].x, const[17].xxxx, -temp[2].xxxx; 12: MAD temp[2].x, const[7].xxxx, temp[2].xxxx, temp[3].xxxx; 13: MUL temp[2].x, temp[2].xxxx, const[11].xxxx; 14: ADD temp[3].xyz, const[17].xxxx, -temp[1].xyzz; 15: ADD temp[4].x, const[17].xxxx, -temp[2].xxxx; 16: MAD temp[1].xyz, temp[3].xyzz, temp[4].xxxx, temp[1].xyzz; 17: TEX temp[3].xyz, input[1].xyyy, 2D[2]; 18: MAD temp[3].xyz, temp[3].xyzz, const[17].yyyy, const[17].zzzz; 19: MUL temp[4].xyz, temp[3].xxxx, input[5].xyzz; 20: MAD temp[4].xyz, temp[3].yyyy, input[4].xyzz, temp[4].xyzz; 21: MAD temp[4].xyz, temp[3].zzzz, input[6].xyzz, temp[4].xyzz; 22: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 23: RSQ temp[5].x, temp[5].xxxx; 24: MUL temp[4].xyz, temp[4].xyzz, temp[5].xxxx; 25: RCP temp[5].x, input[2].zzzz; 26: MIN temp[5].x, temp[5].xxxx, const[17].wwww; 27: MUL temp[5].x, const[9].xxxx, temp[5].xxxx; 28: MAD temp[3].xy, temp[3].xyyy, temp[5].xxxx, temp[0].xyyy; 29: TEX temp[3].xyz, temp[3].xyyy, RECT[1]; 30: MUL temp[1].xyz, temp[1].xyzz, temp[3].xyzz; 31: DP3 temp[3].x, input[2].xyzz, input[2].xyzz; 32: RSQ temp[3].x, temp[3].xxxx; 33: MUL temp[3].xyz, input[2].xyzz, temp[3].xxxx; 34: DP3 temp[6].x, temp[4].xyzz, temp[3].xyzz; 35: MUL temp[6].xyz, temp[6].xxxx, temp[4].xyzz; 36: MUL temp[6].xyz, const[17].yyyy, temp[6].xyzz; 37: ADD temp[5].xyz, temp[3].xyzz, -temp[6].xyzz; 38: MUL temp[6], const[2], temp[5].xxxx; 39: MAD temp[6], const[3], temp[5].yyyy, temp[6]; 40: MAD temp[5], const[4], temp[5].zzzz, temp[6]; 41: ADD temp[5].xyz, temp[5], const[5]; 42: TEX temp[5].xyz, temp[5].xyzz, CUBE[0]; 43: ADD temp[6].x, const[17].xxxx, -const[1].xxxx; 44: DP3 temp[3].x, -temp[3].xyzz, temp[4].xyzz; 45: MAX temp[3].x, temp[3].xxxx, const[18].xxxx; 46: ADD temp[3].x, const[17].xxxx, -temp[3].xxxx; 47: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 48: MAD temp[3].x, temp[6].xxxx, temp[3].xxxx, const[1].xxxx; 49: MAX temp[3].x, temp[3].xxxx, const[18].xxxx; 50: MUL temp[3].xyz, temp[5].xyzz, temp[3].xxxx; 51: MUL temp[3].xyz, temp[3].xyzz, temp[2].xxxx; 52: MAD temp[1].xyz, temp[3].xyzz, const[10].xxxx, temp[1].xyzz; 53: DP3 temp[3].x, temp[4].xyzz, const[18].xxyy; 54: ABS temp[3].x, temp[3].xxxx; 55: ADD temp[3].x, const[17].xxxx, -temp[3].xxxx; 56: POW temp[3].x, temp[3].xxxx, const[0].yyyy; 57: MUL temp[3].x, temp[3].xxxx, const[0].xxxx; 58: MUL temp[3].xyz, temp[5].xyzz, temp[3].xxxx; 59: MUL temp[2].xyz, temp[3].xyzz, temp[2].xxxx; 60: MAD temp[1].xyz, temp[2].xyzz, const[10].xxxx, temp[1].xyzz; 61: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: RCP temp[7].w, input[0].wwww; 1: MUL temp[7].xyz, input[0], temp[7].wwww; 2: MAD temp[7].xyz, temp[7].xyz0, const[19].xyz0, const[20].xyz0; 3: MOV temp[0], temp[7]; 4: MAD temp[0].y, temp[7], const[16].xxxx, const[16].yyyy; 5: TEX temp[1], input[1].xyyy, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: ADD temp[2].x, -input[2].zzzz, -const[8].xxxx; 8: RCP temp[3].x, const[8].yyyy; 9: MUL_SAT temp[2].x, temp[2].xxxx, temp[3].xxxx; 10: POW temp[2].x, temp[2].xxxx, const[6].xxxx; 11: ADD temp[3].x, const[17].xxxx, -temp[2].xxxx; 12: MAD temp[2].x, const[7].xxxx, temp[2].xxxx, temp[3].xxxx; 13: MUL temp[2].x, temp[2].xxxx, const[11].xxxx; 14: ADD temp[3].xyz, const[17].xxxx, -temp[1].xyzz; 15: ADD temp[4].x, const[17].xxxx, -temp[2].xxxx; 16: MAD temp[1].xyz, temp[3].xyzz, temp[4].xxxx, temp[1].xyzz; 17: TEX temp[3].xyz, input[1].xyyy, 2D[2]; 18: MAD temp[3].xyz, temp[3].xyzz, const[17].yyyy, const[17].zzzz; 19: MUL temp[4].xyz, temp[3].xxxx, input[5].xyzz; 20: MAD temp[4].xyz, temp[3].yyyy, input[4].xyzz, temp[4].xyzz; 21: MAD temp[4].xyz, temp[3].zzzz, input[6].xyzz, temp[4].xyzz; 22: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 23: RSQ temp[5].x, temp[5].xxxx; 24: MUL temp[4].xyz, temp[4].xyzz, temp[5].xxxx; 25: RCP temp[5].x, input[2].zzzz; 26: MIN temp[5].x, temp[5].xxxx, const[17].wwww; 27: MUL temp[5].x, const[9].xxxx, temp[5].xxxx; 28: MAD temp[3].xy, temp[3].xyyy, temp[5].xxxx, temp[0].xyyy; 29: TEX temp[3].xyz, temp[3].xyyy, RECT[1]; 30: MUL temp[1].xyz, temp[1].xyzz, temp[3].xyzz; 31: DP3 temp[3].x, input[2].xyzz, input[2].xyzz; 32: RSQ temp[3].x, temp[3].xxxx; 33: MUL temp[3].xyz, input[2].xyzz, temp[3].xxxx; 34: DP3 temp[6].x, temp[4].xyzz, temp[3].xyzz; 35: MUL temp[6].xyz, temp[6].xxxx, temp[4].xyzz; 36: MUL temp[6].xyz, const[17].yyyy, temp[6].xyzz; 37: ADD temp[5].xyz, temp[3].xyzz, -temp[6].xyzz; 38: MUL temp[6], const[2], temp[5].xxxx; 39: MAD temp[6], const[3], temp[5].yyyy, temp[6]; 40: MAD temp[5], const[4], temp[5].zzzz, temp[6]; 41: ADD temp[5].xyz, temp[5], const[5]; 42: TEX temp[5].xyz, temp[5].xyzz, CUBE[0]; 43: ADD temp[6].x, const[17].xxxx, -const[1].xxxx; 44: DP3 temp[3].x, -temp[3].xyzz, temp[4].xyzz; 45: MAX temp[3].x, temp[3].xxxx, const[18].xxxx; 46: ADD temp[3].x, const[17].xxxx, -temp[3].xxxx; 47: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 48: MAD temp[3].x, temp[6].xxxx, temp[3].xxxx, const[1].xxxx; 49: MAX temp[3].x, temp[3].xxxx, const[18].xxxx; 50: MUL temp[3].xyz, temp[5].xyzz, temp[3].xxxx; 51: MUL temp[3].xyz, temp[3].xyzz, temp[2].xxxx; 52: MAD temp[1].xyz, temp[3].xyzz, const[10].xxxx, temp[1].xyzz; 53: DP3 temp[3].x, temp[4].xyzz, const[18].xxyy; 54: ABS temp[3].x, temp[3].xxxx; 55: ADD temp[3].x, const[17].xxxx, -temp[3].xxxx; 56: POW temp[3].x, temp[3].xxxx, const[0].yyyy; 57: MUL temp[3].x, temp[3].xxxx, const[0].xxxx; 58: MUL temp[3].xyz, temp[5].xyzz, temp[3].xxxx; 59: MUL temp[2].xyz, temp[3].xyzz, temp[2].xxxx; 60: MAD temp[1].xyz, temp[2].xyzz, const[10].xxxx, temp[1].xyzz; 61: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: RCP temp[7].w, input[0].wwww; 1: MUL temp[7].xyz, input[0], temp[7].wwww; 2: MAD temp[7].xyz, temp[7].xyz0, const[19].xyz0, const[20].xyz0; 3: MOV temp[0], temp[7]; 4: MAD temp[0].y, temp[7], const[16].xxxx, const[16].yyyy; 5: TEX temp[1], input[1].xyyy, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: ADD temp[2].x, -input[2].zzzz, -const[8].xxxx; 8: RCP temp[3].x, const[8].yyyy; 9: MUL_SAT temp[2].x, temp[2].xxxx, temp[3].xxxx; 10: POW temp[2].x, temp[2].xxxx, const[6].xxxx; 11: ADD temp[3].x, const[17].xxxx, -temp[2].xxxx; 12: MAD temp[2].x, const[7].xxxx, temp[2].xxxx, temp[3].xxxx; 13: MUL temp[2].x, temp[2].xxxx, const[11].xxxx; 14: ADD temp[3].xyz, const[17].xxxx, -temp[1].xyzz; 15: ADD temp[4].x, const[17].xxxx, -temp[2].xxxx; 16: MAD temp[1].xyz, temp[3].xyzz, temp[4].xxxx, temp[1].xyzz; 17: TEX temp[8], input[1].xyyy, 2D[2]; 18: MOV temp[3].xyz, temp[8]; 19: MAD temp[3].xyz, temp[3].xyzz, const[17].yyyy, const[17].zzzz; 20: MUL temp[4].xyz, temp[3].xxxx, input[5].xyzz; 21: MAD temp[4].xyz, temp[3].yyyy, input[4].xyzz, temp[4].xyzz; 22: MAD temp[4].xyz, temp[3].zzzz, input[6].xyzz, temp[4].xyzz; 23: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 24: RSQ temp[5].x, temp[5].xxxx; 25: MUL temp[4].xyz, temp[4].xyzz, temp[5].xxxx; 26: RCP temp[5].x, input[2].zzzz; 27: MIN temp[5].x, temp[5].xxxx, const[17].wwww; 28: MUL temp[5].x, const[9].xxxx, temp[5].xxxx; 29: MAD temp[3].xy, temp[3].xyyy, temp[5].xxxx, temp[0].xyyy; 30: MUL temp[9], temp[3].xyyy, const[21]; 31: TEX temp[10], temp[9], 2D[1]; 32: MOV temp[3].xyz, temp[10]; 33: MUL temp[1].xyz, temp[1].xyzz, temp[3].xyzz; 34: DP3 temp[3].x, input[2].xyzz, input[2].xyzz; 35: RSQ temp[3].x, temp[3].xxxx; 36: MUL temp[3].xyz, input[2].xyzz, temp[3].xxxx; 37: DP3 temp[6].x, temp[4].xyzz, temp[3].xyzz; 38: MUL temp[6].xyz, temp[6].xxxx, temp[4].xyzz; 39: MUL temp[6].xyz, const[17].yyyy, temp[6].xyzz; 40: ADD temp[5].xyz, temp[3].xyzz, -temp[6].xyzz; 41: MUL temp[6], const[2], temp[5].xxxx; 42: MAD temp[6], const[3], temp[5].yyyy, temp[6]; 43: MAD temp[5], const[4], temp[5].zzzz, temp[6]; 44: ADD temp[5].xyz, temp[5], const[5]; 45: TEX temp[11], temp[5].xyzz, CUBE[0]; 46: MOV temp[5].xyz, temp[11]; 47: ADD temp[6].x, const[17].xxxx, -const[1].xxxx; 48: DP3 temp[3].x, -temp[3].xyzz, temp[4].xyzz; 49: MAX temp[3].x, temp[3].xxxx, const[18].xxxx; 50: ADD temp[3].x, const[17].xxxx, -temp[3].xxxx; 51: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 52: MAD temp[3].x, temp[6].xxxx, temp[3].xxxx, const[1].xxxx; 53: MAX temp[3].x, temp[3].xxxx, const[18].xxxx; 54: MUL temp[3].xyz, temp[5].xyzz, temp[3].xxxx; 55: MUL temp[3].xyz, temp[3].xyzz, temp[2].xxxx; 56: MAD temp[1].xyz, temp[3].xyzz, const[10].xxxx, temp[1].xyzz; 57: DP3 temp[3].x, temp[4].xyzz, const[18].xxyy; 58: ABS temp[3].x, temp[3].xxxx; 59: ADD temp[3].x, const[17].xxxx, -temp[3].xxxx; 60: POW temp[3].x, temp[3].xxxx, const[0].yyyy; 61: MUL temp[3].x, temp[3].xxxx, const[0].xxxx; 62: MUL temp[3].xyz, temp[5].xyzz, temp[3].xxxx; 63: MUL temp[2].xyz, temp[3].xyzz, temp[2].xxxx; 64: MAD temp[1].xyz, temp[2].xyzz, const[10].xxxx, temp[1].xyzz; 65: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: RCP temp[7].w, input[0].wwww; 1: MUL temp[7].xyz, input[0], temp[7].wwww; 2: MAD temp[7].xyz, temp[7].xyz0, const[19].xyz0, const[20].xyz0; 3: MOV temp[0], temp[7]; 4: MAD temp[0].y, temp[7], const[16].xxxx, const[16].yyyy; 5: TEX temp[1], input[1].xyyy, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: ADD temp[2].x, -input[2].zzzz, -const[8].xxxx; 8: RCP temp[3].x, const[8].yyyy; 9: MUL_SAT temp[2].x, temp[2].xxxx, temp[3].xxxx; 10: LG2 temp[12].w, temp[2].xxxx; 11: MUL temp[12].w, temp[12].wwww, const[6].xxxx; 12: EX2 temp[2].x, temp[12].wwww; 13: ADD temp[3].x, const[17].xxxx, -temp[2].xxxx; 14: MAD temp[2].x, const[7].xxxx, temp[2].xxxx, temp[3].xxxx; 15: MUL temp[2].x, temp[2].xxxx, const[11].xxxx; 16: ADD temp[3].xyz, const[17].xxxx, -temp[1].xyzz; 17: ADD temp[4].x, const[17].xxxx, -temp[2].xxxx; 18: MAD temp[1].xyz, temp[3].xyzz, temp[4].xxxx, temp[1].xyzz; 19: TEX temp[8], input[1].xyyy, 2D[2]; 20: MOV temp[3].xyz, temp[8]; 21: MAD temp[3].xyz, temp[3].xyzz, const[17].yyyy, const[17].zzzz; 22: MUL temp[4].xyz, temp[3].xxxx, input[5].xyzz; 23: MAD temp[4].xyz, temp[3].yyyy, input[4].xyzz, temp[4].xyzz; 24: MAD temp[4].xyz, temp[3].zzzz, input[6].xyzz, temp[4].xyzz; 25: DP3 temp[5].x, temp[4].xyzz, temp[4].xyzz; 26: RSQ temp[5].x, |temp[5].xxxx|; 27: MUL temp[4].xyz, temp[4].xyzz, temp[5].xxxx; 28: RCP temp[5].x, input[2].zzzz; 29: MIN temp[5].x, temp[5].xxxx, const[17].wwww; 30: MUL temp[5].x, const[9].xxxx, temp[5].xxxx; 31: MAD temp[3].xy, temp[3].xyyy, temp[5].xxxx, temp[0].xyyy; 32: MUL temp[9], temp[3].xyyy, const[21]; 33: TEX temp[10], temp[9], 2D[1]; 34: MOV temp[3].xyz, temp[10]; 35: MUL temp[1].xyz, temp[1].xyzz, temp[3].xyzz; 36: DP3 temp[3].x, input[2].xyzz, input[2].xyzz; 37: RSQ temp[3].x, |temp[3].xxxx|; 38: MUL temp[3].xyz, input[2].xyzz, temp[3].xxxx; 39: DP3 temp[6].x, temp[4].xyzz, temp[3].xyzz; 40: MUL temp[6].xyz, temp[6].xxxx, temp[4].xyzz; 41: MUL temp[6].xyz, const[17].yyyy, temp[6].xyzz; 42: ADD temp[5].xyz, temp[3].xyzz, -temp[6].xyzz; 43: MUL temp[6], const[2], temp[5].xxxx; 44: MAD temp[6], const[3], temp[5].yyyy, temp[6]; 45: MAD temp[5], const[4], temp[5].zzzz, temp[6]; 46: ADD temp[5].xyz, temp[5], const[5]; 47: TEX temp[11], temp[5].xyzz, CUBE[0]; 48: MOV temp[5].xyz, temp[11]; 49: ADD temp[6].x, const[17].xxxx, -const[1].xxxx; 50: DP3 temp[3].x, -temp[3].xyzz, temp[4].xyzz; 51: MAX temp[3].x, temp[3].xxxx, const[18].xxxx; 52: ADD temp[3].x, const[17].xxxx, -temp[3].xxxx; 53: LG2 temp[13].w, temp[3].xxxx; 54: MUL temp[13].w, temp[13].wwww, const[1].yyyy; 55: EX2 temp[3].x, temp[13].wwww; 56: MAD temp[3].x, temp[6].xxxx, temp[3].xxxx, const[1].xxxx; 57: MAX temp[3].x, temp[3].xxxx, const[18].xxxx; 58: MUL temp[3].xyz, temp[5].xyzz, temp[3].xxxx; 59: MUL temp[3].xyz, temp[3].xyzz, temp[2].xxxx; 60: MAD temp[1].xyz, temp[3].xyzz, const[10].xxxx, temp[1].xyzz; 61: DP3 temp[3].x, temp[4].xyzz, const[18].xxyy; 62: MOV temp[3].x, |temp[3].xxxx|; 63: ADD temp[3].x, const[17].xxxx, -temp[3].xxxx; 64: LG2 temp[14].w, temp[3].xxxx; 65: MUL temp[14].w, temp[14].wwww, const[0].yyyy; 66: EX2 temp[3].x, temp[14].wwww; 67: MUL temp[3].x, temp[3].xxxx, const[0].xxxx; 68: MUL temp[3].xyz, temp[5].xyzz, temp[3].xxxx; 69: MUL temp[2].xyz, temp[3].xyzz, temp[2].xxxx; 70: MAD temp[1].xyz, temp[2].xyzz, const[10].xxxx, temp[1].xyzz; 71: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: RCP temp[7].w, input[0].___w; 1: MUL temp[7].xy, input[0].xy__, temp[7].ww__; 2: MAD temp[7].xy, temp[7].xy__, const[19].xy__, const[20].xy__; 3: MOV temp[0].x, temp[7].x___; 4: MAD temp[0].y, temp[7]._y__, const[16]._x__, const[16]._y__; 5: TEX temp[1], input[1].xy__, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: ADD temp[2].x, -input[2].z___, -const[8].x___; 8: RCP temp[3].x, const[8].y___; 9: MUL_SAT temp[2].x, temp[2].x___, temp[3].x___; 10: LG2 temp[12].w, temp[2].___x; 11: MUL temp[12].w, temp[12].___w, const[6].___x; 12: EX2 temp[2].x, temp[12].w___; 13: ADD temp[3].x, const[17].x___, -temp[2].x___; 14: MAD temp[2].x, const[7].x___, temp[2].x___, temp[3].x___; 15: MUL temp[2].x, temp[2].x___, const[11].x___; 16: ADD temp[3].xyz, const[17].xxx_, -temp[1].xyz_; 17: ADD temp[4].x, const[17].x___, -temp[2].x___; 18: MAD temp[1].xyz, temp[3].xyz_, temp[4].xxx_, temp[1].xyz_; 19: TEX temp[8].xyz, input[1].xy__, 2D[2]; 20: MOV temp[3].xyz, temp[8].xyz_; 21: MAD temp[3].xyz, temp[3].xyz_, const[17].yyy_, const[17].zzz_; 22: MUL temp[4].xyz, temp[3].xxx_, input[5].xyz_; 23: MAD temp[4].xyz, temp[3].yyy_, input[4].xyz_, temp[4].xyz_; 24: MAD temp[4].xyz, temp[3].zzz_, input[6].xyz_, temp[4].xyz_; 25: DP3 temp[5].x, temp[4].xyz_, temp[4].xyz_; 26: RSQ temp[5].x, |temp[5].x___|; 27: MUL temp[4].xyz, temp[4].xyz_, temp[5].xxx_; 28: RCP temp[5].x, input[2].z___; 29: MIN temp[5].x, temp[5].x___, const[17].w___; 30: MUL temp[5].x, const[9].x___, temp[5].x___; 31: MAD temp[3].xy, temp[3].xy__, temp[5].xx__, temp[0].xy__; 32: MUL temp[9].xy, temp[3].xy__, const[21].xy__; 33: TEX temp[10].xyz, temp[9].xy__, 2D[1]; 34: MOV temp[3].xyz, temp[10].xyz_; 35: MUL temp[1].xyz, temp[1].xyz_, temp[3].xyz_; 36: DP3 temp[3].x, input[2].xyz_, input[2].xyz_; 37: RSQ temp[3].x, |temp[3].x___|; 38: MUL temp[3].xyz, input[2].xyz_, temp[3].xxx_; 39: DP3 temp[6].x, temp[4].xyz_, temp[3].xyz_; 40: MUL temp[6].xyz, temp[6].xxx_, temp[4].xyz_; 41: MUL temp[6].xyz, const[17].yyy_, temp[6].xyz_; 42: ADD temp[5].xyz, temp[3].xyz_, -temp[6].xyz_; 43: MUL temp[6].xyz, const[2].xyz_, temp[5].xxx_; 44: MAD temp[6].xyz, const[3].xyz_, temp[5].yyy_, temp[6].xyz_; 45: MAD temp[5].xyz, const[4].xyz_, temp[5].zzz_, temp[6].xyz_; 46: ADD temp[5].xyz, temp[5].xyz_, const[5].xyz_; 47: TEX temp[11].xyz, temp[5].xyz_, CUBE[0]; 48: MOV temp[5].xyz, temp[11].xyz_; 49: ADD temp[6].x, const[17].x___, -const[1].x___; 50: DP3 temp[3].x, -temp[3].xyz_, temp[4].xyz_; 51: MAX temp[3].x, temp[3].x___, const[18].x___; 52: ADD temp[3].x, const[17].x___, -temp[3].x___; 53: LG2 temp[13].w, temp[3].___x; 54: MUL temp[13].w, temp[13].___w, const[1].___y; 55: EX2 temp[3].x, temp[13].w___; 56: MAD temp[3].x, temp[6].x___, temp[3].x___, const[1].x___; 57: MAX temp[3].x, temp[3].x___, const[18].x___; 58: MUL temp[3].xyz, temp[5].xyz_, temp[3].xxx_; 59: MUL temp[3].xyz, temp[3].xyz_, temp[2].xxx_; 60: MAD temp[1].xyz, temp[3].xyz_, const[10].xxx_, temp[1].xyz_; 61: DP3 temp[3].x, temp[4].xyz_, const[18].xxy_; 62: MOV temp[3].x, |temp[3].x___|; 63: ADD temp[3].x, const[17].x___, -temp[3].x___; 64: LG2 temp[14].w, temp[3].___x; 65: MUL temp[14].w, temp[14].___w, const[0].___y; 66: EX2 temp[3].x, temp[14].w___; 67: MUL temp[3].x, temp[3].x___, const[0].x___; 68: MUL temp[3].xyz, temp[5].xyz_, temp[3].xxx_; 69: MUL temp[2].xyz, temp[3].xyz_, temp[2].xxx_; 70: MAD temp[1].xyz, temp[2].xyz_, const[10].xxx_, temp[1].xyz_; 71: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: RCP temp[7].w, input[0].___w; 1: MUL temp[7].xy, input[0].xy__, temp[7].ww__; 2: MAD temp[7].xy, temp[7].xy__, const[19].xy__, const[20].xy__; 3: MOV temp[0].x, temp[7].x___; 4: MAD temp[0].y, temp[7]._y__, const[16]._x__, const[16]._y__; 5: TEX temp[1], input[1].xy__, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: ADD temp[2].x, -input[2].z___, -const[8].x___; 8: RCP temp[3].x, const[8].y___; 9: MUL_SAT temp[2].x, temp[2].x___, temp[3].x___; 10: LG2 temp[12].w, temp[2].___x; 11: MUL temp[12].w, temp[12].___w, const[6].___x; 12: EX2 temp[2].x, temp[12].w___; 13: ADD temp[3].x, const[17].x___, -temp[2].x___; 14: MAD temp[2].x, const[7].x___, temp[2].x___, temp[3].x___; 15: MUL temp[2].x, temp[2].x___, const[11].x___; 16: ADD temp[3].xyz, const[17].xxx_, -temp[1].xyz_; 17: ADD temp[4].x, const[17].x___, -temp[2].x___; 18: MAD temp[1].xyz, temp[3].xyz_, temp[4].xxx_, temp[1].xyz_; 19: TEX temp[8].xyz, input[1].xy__, 2D[2]; 20: MOV temp[3].xyz, temp[8].xyz_; 21: MAD temp[3].xyz, temp[3].xyz_, const[17].yyy_, const[17].zzz_; 22: MUL temp[4].xyz, temp[3].xxx_, input[5].xyz_; 23: MAD temp[4].xyz, temp[3].yyy_, input[4].xyz_, temp[4].xyz_; 24: MAD temp[4].xyz, temp[3].zzz_, input[6].xyz_, temp[4].xyz_; 25: DP3 temp[5].x, temp[4].xyz_, temp[4].xyz_; 26: RSQ temp[5].x, |temp[5].x___|; 27: MUL temp[4].xyz, temp[4].xyz_, temp[5].xxx_; 28: RCP temp[5].x, input[2].z___; 29: MIN temp[5].x, temp[5].x___, const[17].w___; 30: MUL temp[5].x, const[9].x___, temp[5].x___; 31: MAD temp[3].xy, temp[3].xy__, temp[5].xx__, temp[0].xy__; 32: MUL temp[9].xy, temp[3].xy__, const[21].xy__; 33: TEX temp[10].xyz, temp[9].xy__, 2D[1]; 34: MOV temp[3].xyz, temp[10].xyz_; 35: MUL temp[1].xyz, temp[1].xyz_, temp[3].xyz_; 36: DP3 temp[3].x, input[2].xyz_, input[2].xyz_; 37: RSQ temp[3].x, |temp[3].x___|; 38: MUL temp[3].xyz, input[2].xyz_, temp[3].xxx_; 39: DP3 temp[6].x, temp[4].xyz_, temp[3].xyz_; 40: MUL temp[6].xyz, temp[6].xxx_, temp[4].xyz_; 41: MUL temp[6].xyz, const[17].yyy_, temp[6].xyz_; 42: ADD temp[5].xyz, temp[3].xyz_, -temp[6].xyz_; 43: MUL temp[6].xyz, const[2].xyz_, temp[5].xxx_; 44: MAD temp[6].xyz, const[3].xyz_, temp[5].yyy_, temp[6].xyz_; 45: MAD temp[5].xyz, const[4].xyz_, temp[5].zzz_, temp[6].xyz_; 46: ADD temp[5].xyz, temp[5].xyz_, const[5].xyz_; 47: TEX temp[11].xyz, temp[5].xyz_, CUBE[0]; 48: MOV temp[5].xyz, temp[11].xyz_; 49: ADD temp[6].x, const[17].x___, -const[1].x___; 50: DP3 temp[3].x, -temp[3].xyz_, temp[4].xyz_; 51: MAX temp[3].x, temp[3].x___, const[18].x___; 52: ADD temp[3].x, const[17].x___, -temp[3].x___; 53: LG2 temp[13].w, temp[3].___x; 54: MUL temp[13].w, temp[13].___w, const[1].___y; 55: EX2 temp[3].x, temp[13].w___; 56: MAD temp[3].x, temp[6].x___, temp[3].x___, const[1].x___; 57: MAX temp[3].x, temp[3].x___, const[18].x___; 58: MUL temp[3].xyz, temp[5].xyz_, temp[3].xxx_; 59: MUL temp[3].xyz, temp[3].xyz_, temp[2].xxx_; 60: MAD temp[1].xyz, temp[3].xyz_, const[10].xxx_, temp[1].xyz_; 61: DP3 temp[3].x, temp[4].xyz_, const[18].xxy_; 62: MOV temp[3].x, |temp[3].x___|; 63: ADD temp[3].x, const[17].x___, -temp[3].x___; 64: LG2 temp[14].w, temp[3].___x; 65: MUL temp[14].w, temp[14].___w, const[0].___y; 66: EX2 temp[3].x, temp[14].w___; 67: MUL temp[3].x, temp[3].x___, const[0].x___; 68: MUL temp[3].xyz, temp[5].xyz_, temp[3].xxx_; 69: MUL temp[2].xyz, temp[3].xyz_, temp[2].xxx_; 70: MAD temp[1].xyz, temp[2].xyz_, const[10].xxx_, temp[1].xyz_; 71: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: RCP temp[15].w, input[0].___w; 1: MUL temp[16].xy, input[0].xy__, temp[15].ww__; 2: MAD temp[17].xy, temp[16].xy__, const[19].xy__, const[20].xy__; 3: MOV temp[18].x, temp[17].x___; 4: MAD temp[18].y, temp[17]._y__, const[16]._x__, const[16]._y__; 5: TEX temp[19], input[1].xy__, 2D[3]; 6: MUL temp[20], temp[19], input[3]; 7: ADD temp[21].x, -input[2].z___, -const[8].x___; 8: RCP temp[22].x, const[8].y___; 9: MUL_SAT temp[23].x, temp[21].x___, temp[22].x___; 10: LG2 temp[24].w, temp[23].___x; 11: MUL temp[25].w, temp[24].___w, const[6].___x; 12: EX2 temp[26].x, temp[25].w___; 13: ADD temp[27].x, const[17].x___, -temp[26].x___; 14: MAD temp[28].x, const[7].x___, temp[26].x___, temp[27].x___; 15: MUL temp[29].x, temp[28].x___, const[11].x___; 16: ADD temp[30].xyz, const[17].xxx_, -temp[20].xyz_; 17: ADD temp[31].x, const[17].x___, -temp[29].x___; 18: MAD temp[32].xyz, temp[30].xyz_, temp[31].xxx_, temp[20].xyz_; 19: TEX temp[33].xyz, input[1].xy__, 2D[2]; 20: MOV temp[34].xyz, temp[33].xyz_; 21: MAD temp[35].xyz, temp[34].xyz_, const[17].yyy_, const[17].zzz_; 22: MUL temp[36].xyz, temp[35].xxx_, input[5].xyz_; 23: MAD temp[37].xyz, temp[35].yyy_, input[4].xyz_, temp[36].xyz_; 24: MAD temp[38].xyz, temp[35].zzz_, input[6].xyz_, temp[37].xyz_; 25: DP3 temp[39].x, temp[38].xyz_, temp[38].xyz_; 26: RSQ temp[40].x, |temp[39].x___|; 27: MUL temp[41].xyz, temp[38].xyz_, temp[40].xxx_; 28: RCP temp[42].x, input[2].z___; 29: MIN temp[43].x, temp[42].x___, const[17].w___; 30: MUL temp[44].x, const[9].x___, temp[43].x___; 31: MAD temp[45].xy, temp[35].xy__, temp[44].xx__, temp[18].xy__; 32: MUL temp[46].xy, temp[45].xy__, const[21].xy__; 33: TEX temp[47].xyz, temp[46].xy__, 2D[1]; 34: MOV temp[48].xyz, temp[47].xyz_; 35: MUL temp[49].xyz, temp[32].xyz_, temp[48].xyz_; 36: DP3 temp[50].x, input[2].xyz_, input[2].xyz_; 37: RSQ temp[51].x, |temp[50].x___|; 38: MUL temp[52].xyz, input[2].xyz_, temp[51].xxx_; 39: DP3 temp[53].x, temp[41].xyz_, temp[52].xyz_; 40: MUL temp[54].xyz, temp[53].xxx_, temp[41].xyz_; 41: MUL temp[55].xyz, const[17].yyy_, temp[54].xyz_; 42: ADD temp[56].xyz, temp[52].xyz_, -temp[55].xyz_; 43: MUL temp[57].xyz, const[2].xyz_, temp[56].xxx_; 44: MAD temp[58].xyz, const[3].xyz_, temp[56].yyy_, temp[57].xyz_; 45: MAD temp[59].xyz, const[4].xyz_, temp[56].zzz_, temp[58].xyz_; 46: ADD temp[60].xyz, temp[59].xyz_, const[5].xyz_; 47: TEX temp[61].xyz, temp[60].xyz_, CUBE[0]; 48: MOV temp[62].xyz, temp[61].xyz_; 49: ADD temp[63].x, const[17].x___, -const[1].x___; 50: DP3 temp[64].x, -temp[52].xyz_, temp[41].xyz_; 51: MAX temp[65].x, temp[64].x___, const[18].x___; 52: ADD temp[66].x, const[17].x___, -temp[65].x___; 53: LG2 temp[67].w, temp[66].___x; 54: MUL temp[68].w, temp[67].___w, const[1].___y; 55: EX2 temp[69].x, temp[68].w___; 56: MAD temp[70].x, temp[63].x___, temp[69].x___, const[1].x___; 57: MAX temp[71].x, temp[70].x___, const[18].x___; 58: MUL temp[72].xyz, temp[62].xyz_, temp[71].xxx_; 59: MUL temp[73].xyz, temp[72].xyz_, temp[29].xxx_; 60: MAD temp[74].xyz, temp[73].xyz_, const[10].xxx_, temp[49].xyz_; 61: DP3 temp[75].x, temp[41].xyz_, const[18].xxy_; 62: MOV temp[76].x, |temp[75].x___|; 63: ADD temp[77].x, const[17].x___, -temp[76].x___; 64: LG2 temp[78].w, temp[77].___x; 65: MUL temp[79].w, temp[78].___w, const[0].___y; 66: EX2 temp[80].x, temp[79].w___; 67: MUL temp[81].x, temp[80].x___, const[0].x___; 68: MUL temp[82].xyz, temp[62].xyz_, temp[81].xxx_; 69: MUL temp[83].xyz, temp[82].xyz_, temp[29].xxx_; 70: MAD temp[20].xyz, temp[83].xyz_, const[10].xxx_, temp[74].xyz_; 71: MOV output[0], temp[20]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: RCP temp[15].w, input[0].___w; 1: MUL temp[16].xy, input[0].xy__, temp[15].ww__; 2: MAD temp[17].xy, temp[16].xy__, const[19].xy__, const[20].xy__; 3: MOV temp[18].x, temp[17].x___; 4: MAD temp[18].y, temp[17]._y__, const[16]._x__, const[16]._y__; 5: TEX temp[19], input[1].xy__, 2D[3]; 6: MUL temp[20], temp[19], input[3]; 7: ADD temp[21].x, -input[2].z___, -const[8].x___; 8: RCP temp[22].x, const[8].y___; 9: MUL_SAT temp[23].x, temp[21].x___, temp[22].x___; 10: LG2 temp[24].w, temp[23].___x; 11: MUL temp[25].w, temp[24].___w, const[6].___x; 12: EX2 temp[26].x, temp[25].w___; 13: ADD temp[27].x, none.1___, -temp[26].x___; 14: MAD temp[28].x, const[7].x___, temp[26].x___, temp[27].x___; 15: MUL temp[29].x, temp[28].x___, const[11].x___; 16: ADD temp[30].xyz, none.111_, -temp[20].xyz_; 17: ADD temp[31].x, none.1___, -temp[29].x___; 18: MAD temp[32].xyz, temp[30].xyz_, temp[31].xxx_, temp[20].xyz_; 19: TEX temp[33].xyz, input[1].xy__, 2D[2]; 20: MAD temp[35].xyz, temp[33].xyz_, const[17].yyy_, none.-1-1-1_; 21: MUL temp[36].xyz, temp[35].xxx_, input[5].xyz_; 22: MAD temp[37].xyz, temp[35].yyy_, input[4].xyz_, temp[36].xyz_; 23: MAD temp[38].xyz, temp[35].zzz_, input[6].xyz_, temp[37].xyz_; 24: DP3 temp[39].x, temp[38].xyz_, temp[38].xyz_; 25: RSQ temp[40].x, |temp[39].x___|; 26: MUL temp[41].xyz, temp[38].xyz_, temp[40].xxx_; 27: RCP temp[42].x, input[2].z___; 28: MIN temp[43].x, temp[42].x___, const[17].w___; 29: MUL temp[44].x, const[9].x___, temp[43].x___; 30: MAD temp[45].xy, temp[35].xy__, temp[44].xx__, temp[18].xy__; 31: MUL temp[46].xy, temp[45].xy__, const[21].xy__; 32: TEX temp[47].xyz, temp[46].xy__, 2D[1]; 33: MUL temp[49].xyz, temp[32].xyz_, temp[47].xyz_; 34: DP3 temp[50].x, input[2].xyz_, input[2].xyz_; 35: RSQ temp[51].x, |temp[50].x___|; 36: MUL temp[52].xyz, input[2].xyz_, temp[51].xxx_; 37: DP3 temp[53].x, temp[41].xyz_, temp[52].xyz_; 38: MUL temp[55].xyz * 2, temp[53].xxx_, temp[41].xyz_; 39: ADD temp[56].xyz, temp[52].xyz_, -temp[55].xyz_; 40: MUL temp[57].xyz, const[2].xyz_, temp[56].xxx_; 41: MAD temp[58].xyz, const[3].xyz_, temp[56].yyy_, temp[57].xyz_; 42: MAD temp[59].xyz, const[4].xyz_, temp[56].zzz_, temp[58].xyz_; 43: ADD temp[60].xyz, temp[59].xyz_, const[5].xyz_; 44: TEX temp[61].xyz, temp[60].xyz_, CUBE[0]; 45: ADD temp[63].x, none.1___, -const[1].x___; 46: DP3 temp[64].x, -temp[52].xyz_, temp[41].xyz_; 47: MAX temp[65].x, temp[64].x___, none.0___; 48: ADD temp[66].x, none.1___, -temp[65].x___; 49: LG2 temp[67].w, temp[66].___x; 50: MUL temp[68].w, temp[67].___w, const[1].___y; 51: EX2 temp[69].x, temp[68].w___; 52: MAD temp[70].x, temp[63].x___, temp[69].x___, const[1].x___; 53: MAX temp[71].x, temp[70].x___, none.0___; 54: MUL temp[72].xyz, temp[61].xyz_, temp[71].xxx_; 55: MUL temp[73].xyz, temp[72].xyz_, temp[29].xxx_; 56: MAD temp[74].xyz, temp[73].xyz_, const[10].xxx_, temp[49].xyz_; 57: DP3 temp[75].x, temp[41].xyz_, none.00-1_; 58: ADD temp[77].x, none.1___, -|temp[75].x___|; 59: LG2 temp[78].w, temp[77].___x; 60: MUL temp[79].w, temp[78].___w, const[0].___y; 61: EX2 temp[80].x, temp[79].w___; 62: MUL temp[81].x, temp[80].x___, const[0].x___; 63: MUL temp[82].xyz, temp[61].xyz_, temp[81].xxx_; 64: MUL temp[83].xyz, temp[82].xyz_, temp[29].xxx_; 65: MAD temp[20].xyz, temp[83].xyz_, const[10].xxx_, temp[74].xyz_; 66: MOV output[0], temp[20]; CONST[17] = { 1.0000 2.0000 -1.0000 10.0000 } CONST[18] = { 0.0000 -1.0000 0.0000 0.0000 } CONST[22] = { 0.0000 0.0000 -1.0000 0.0000 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: RCP temp[15].w, input[0].___w; 1: MUL temp[16].xy, input[0].xy__, temp[15].ww__; 2: MAD temp[17].xy, temp[16].xy__, const[19].xy__, const[20].xy__; 3: MOV temp[18].x, temp[17].x___; 4: MAD temp[18].y, temp[17]._y__, const[16]._x__, const[16]._y__; 5: TEX temp[19], input[1].xy__, 2D[3]; 6: MUL temp[20], temp[19], input[3]; 7: ADD temp[21].x, -input[2].z___, -const[8].x___; 8: RCP temp[22].x, const[8].y___; 9: MUL_SAT temp[23].x, temp[21].x___, temp[22].x___; 10: LG2 temp[24].w, temp[23].___x; 11: MUL temp[25].w, temp[24].___w, const[6].___x; 12: EX2 temp[26].x, temp[25].w___; 13: ADD temp[27].x, none.1___, -temp[26].x___; 14: MAD temp[28].x, const[7].x___, temp[26].x___, temp[27].x___; 15: MUL temp[29].x, temp[28].x___, const[11].x___; 16: ADD temp[30].xyz, none.111_, -temp[20].xyz_; 17: ADD temp[31].x, none.1___, -temp[29].x___; 18: MAD temp[32].xyz, temp[30].xyz_, temp[31].xxx_, temp[20].xyz_; 19: TEX temp[33].xyz, input[1].xy__, 2D[2]; 20: MAD temp[35].xyz, temp[33].xyz_, const[17].yyy_, none.-1-1-1_; 21: MUL temp[36].xyz, temp[35].xxx_, input[5].xyz_; 22: MAD temp[37].xyz, temp[35].yyy_, input[4].xyz_, temp[36].xyz_; 23: MAD temp[38].xyz, temp[35].zzz_, input[6].xyz_, temp[37].xyz_; 24: DP3 temp[39].x, temp[38].xyz_, temp[38].xyz_; 25: RSQ temp[40].x, |temp[39].x___|; 26: MUL temp[41].xyz, temp[38].xyz_, temp[40].xxx_; 27: RCP temp[42].x, input[2].z___; 28: MIN temp[43].x, temp[42].x___, const[17].w___; 29: MUL temp[44].x, const[9].x___, temp[43].x___; 30: MAD temp[45].xy, temp[35].xy__, temp[44].xx__, temp[18].xy__; 31: MUL temp[46].xy, temp[45].xy__, const[21].xy__; 32: TEX temp[47].xyz, temp[46].xy__, 2D[1]; 33: MUL temp[49].xyz, temp[32].xyz_, temp[47].xyz_; 34: DP3 temp[50].x, input[2].xyz_, input[2].xyz_; 35: RSQ temp[51].x, |temp[50].x___|; 36: MUL temp[52].xyz, input[2].xyz_, temp[51].xxx_; 37: DP3 temp[53].x, temp[41].xyz_, temp[52].xyz_; 38: MUL temp[55].xyz * 2, temp[53].xxx_, temp[41].xyz_; 39: ADD temp[56].xyz, temp[52].xyz_, -temp[55].xyz_; 40: MUL temp[57].xyz, const[2].xyz_, temp[56].xxx_; 41: MAD temp[58].xyz, const[3].xyz_, temp[56].yyy_, temp[57].xyz_; 42: MAD temp[59].xyz, const[4].xyz_, temp[56].zzz_, temp[58].xyz_; 43: ADD temp[60].xyz, temp[59].xyz_, const[5].xyz_; 44: TEX temp[61].xyz, temp[60].xyz_, CUBE[0]; 45: ADD temp[63].x, none.1___, -const[1].x___; 46: DP3 temp[64].x, -temp[52].xyz_, temp[41].xyz_; 47: MAX temp[65].x, temp[64].x___, none.0___; 48: ADD temp[66].x, none.1___, -temp[65].x___; 49: LG2 temp[67].w, temp[66].___x; 50: MUL temp[68].w, temp[67].___w, const[1].___y; 51: EX2 temp[69].x, temp[68].w___; 52: MAD temp[70].x, temp[63].x___, temp[69].x___, const[1].x___; 53: MAX temp[71].x, temp[70].x___, none.0___; 54: MUL temp[72].xyz, temp[61].xyz_, temp[71].xxx_; 55: MUL temp[73].xyz, temp[72].xyz_, temp[29].xxx_; 56: MAD temp[74].xyz, temp[73].xyz_, const[10].xxx_, temp[49].xyz_; 57: DP3 temp[75].x, temp[41].xyz_, const[22].xyz_; 58: ADD temp[77].x, none.1___, -|temp[75].x___|; 59: LG2 temp[78].w, temp[77].___x; 60: MUL temp[79].w, temp[78].___w, const[0].___y; 61: EX2 temp[80].x, temp[79].w___; 62: MUL temp[81].x, temp[80].x___, const[0].x___; 63: MUL temp[82].xyz, temp[61].xyz_, temp[81].xxx_; 64: MUL temp[83].xyz, temp[82].xyz_, temp[29].xxx_; 65: MAD temp[20].xyz, temp[83].xyz_, const[10].xxx_, temp[74].xyz_; 66: MOV output[0], temp[20]; CONST[13] = { 1.0000 2.0000 -1.0000 10.0000 } CONST[17] = { 0.0000 0.0000 -1.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: RCP temp[15].w, input[0].___w; 1: MUL temp[16].xy, input[0].xy__, temp[15].ww__; 2: MAD temp[17].xy, temp[16].xy__, const[14].xy__, const[15].xy__; 3: MOV temp[18].x, temp[17].x___; 4: MAD temp[18].y, temp[17]._y__, const[12]._x__, const[12]._y__; 5: TEX temp[19], input[1].xy__, 2D[3]; 6: MUL temp[20], temp[19], input[3]; 7: ADD temp[21].x, -input[2].z___, -const[8].x___; 8: RCP temp[22].x, const[8].y___; 9: MUL_SAT temp[23].x, temp[21].x___, temp[22].x___; 10: LG2 temp[24].w, temp[23].___x; 11: MUL temp[25].w, temp[24].___w, const[6].___x; 12: EX2 temp[26].x, temp[25].w___; 13: ADD temp[27].x, none.1___, -temp[26].x___; 14: MAD temp[28].x, const[7].x___, temp[26].x___, temp[27].x___; 15: MUL temp[29].x, temp[28].x___, const[11].x___; 16: ADD temp[30].xyz, none.111_, -temp[20].xyz_; 17: ADD temp[31].x, none.1___, -temp[29].x___; 18: MAD temp[32].xyz, temp[30].xyz_, temp[31].xxx_, temp[20].xyz_; 19: TEX temp[33].xyz, input[1].xy__, 2D[2]; 20: MAD temp[35].xyz, temp[33].xyz_, const[13].yyy_, none.-1-1-1_; 21: MUL temp[36].xyz, temp[35].xxx_, input[5].xyz_; 22: MAD temp[37].xyz, temp[35].yyy_, input[4].xyz_, temp[36].xyz_; 23: MAD temp[38].xyz, temp[35].zzz_, input[6].xyz_, temp[37].xyz_; 24: DP3 temp[39].x, temp[38].xyz_, temp[38].xyz_; 25: RSQ temp[40].x, |temp[39].x___|; 26: MUL temp[41].xyz, temp[38].xyz_, temp[40].xxx_; 27: RCP temp[42].x, input[2].z___; 28: MIN temp[43].x, temp[42].x___, const[13].w___; 29: MUL temp[44].x, const[9].x___, temp[43].x___; 30: MAD temp[45].xy, temp[35].xy__, temp[44].xx__, temp[18].xy__; 31: MUL temp[46].xy, temp[45].xy__, const[16].xy__; 32: TEX temp[47].xyz, temp[46].xy__, 2D[1]; 33: MUL temp[49].xyz, temp[32].xyz_, temp[47].xyz_; 34: DP3 temp[50].x, input[2].xyz_, input[2].xyz_; 35: RSQ temp[51].x, |temp[50].x___|; 36: MUL temp[52].xyz, input[2].xyz_, temp[51].xxx_; 37: DP3 temp[53].x, temp[41].xyz_, temp[52].xyz_; 38: MUL temp[55].xyz * 2, temp[53].xxx_, temp[41].xyz_; 39: ADD temp[56].xyz, temp[52].xyz_, -temp[55].xyz_; 40: MUL temp[57].xyz, const[2].xyz_, temp[56].xxx_; 41: MAD temp[58].xyz, const[3].xyz_, temp[56].yyy_, temp[57].xyz_; 42: MAD temp[59].xyz, const[4].xyz_, temp[56].zzz_, temp[58].xyz_; 43: ADD temp[60].xyz, temp[59].xyz_, const[5].xyz_; 44: TEX temp[61].xyz, temp[60].xyz_, CUBE[0]; 45: ADD temp[63].x, none.1___, -const[1].x___; 46: DP3 temp[64].x, -temp[52].xyz_, temp[41].xyz_; 47: MAX temp[65].x, temp[64].x___, none.0___; 48: ADD temp[66].x, none.1___, -temp[65].x___; 49: LG2 temp[67].w, temp[66].___x; 50: MUL temp[68].w, temp[67].___w, const[1].___y; 51: EX2 temp[69].x, temp[68].w___; 52: MAD temp[70].x, temp[63].x___, temp[69].x___, const[1].x___; 53: MAX temp[71].x, temp[70].x___, none.0___; 54: MUL temp[72].xyz, temp[61].xyz_, temp[71].xxx_; 55: MUL temp[73].xyz, temp[72].xyz_, temp[29].xxx_; 56: MAD temp[74].xyz, temp[73].xyz_, const[10].xxx_, temp[49].xyz_; 57: DP3 temp[75].x, temp[41].xyz_, const[17].xyz_; 58: ADD temp[77].x, none.1___, -|temp[75].x___|; 59: LG2 temp[78].w, temp[77].___x; 60: MUL temp[79].w, temp[78].___w, const[0].___y; 61: EX2 temp[80].x, temp[79].w___; 62: MUL temp[81].x, temp[80].x___, const[0].x___; 63: MUL temp[82].xyz, temp[61].xyz_, temp[81].xxx_; 64: MUL temp[83].xyz, temp[82].xyz_, temp[29].xxx_; 65: MAD temp[20].xyz, temp[83].xyz_, const[10].xxx_, temp[74].xyz_; 66: MOV output[0], temp[20]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[15].w, src0.w 1: src0.xyz = input[0], src0.w = temp[15] MAD temp[16].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[16], src1.xyz = const[14], src2.xyz = const[15] MAD temp[17].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[17] MAD temp[18].x, src0.x__, src0.111, src0.000 4: src0.xyz = temp[17], src1.xyz = const[12] MAD temp[18].y, src0._y_, src1._x_, src1._y_ 5: TEX temp[19], input[1].xy__, 2D[3]; 6: src0.xyz = temp[19], src0.w = temp[19], src1.xyz = input[3], src1.w = input[3] MAD temp[20].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[20].w, src0.w, src1.w, src0.0 7: src0.xyz = input[2], src1.xyz = const[8] MAD temp[21].x, -src0.z__, src0.111, -src1.x__ 8: src0.xyz = const[8] REPL_ALPHA temp[22].x RCP, src0.y 9: src0.xyz = temp[21], src1.xyz = temp[22] MAD_SAT temp[23].x, src0.x__, src1.x__, src0.000 10: src0.xyz = temp[23] LG2 temp[24].w, src0.x 11: src0.xyz = const[6], src0.w = temp[24] MAD temp[25].w, src0.w, src0.x, src0.0 12: src0.w = temp[25] REPL_ALPHA temp[26].x EX2, src0.w 13: src0.xyz = temp[26] MAD temp[27].x, src0.1__, src0.111, -src0.x__ 14: src0.xyz = const[7], src1.xyz = temp[26], src2.xyz = temp[27] MAD temp[28].x, src0.x__, src1.x__, src2.x__ 15: src0.xyz = temp[28], src1.xyz = const[11] MAD temp[29].x, src0.x__, src1.x__, src0.000 16: src0.xyz = temp[20] MAD temp[30].xyz, src0.111, src0.111, -src0.xyz 17: src0.xyz = temp[29] MAD temp[31].x, src0.1__, src0.111, -src0.x__ 18: src0.xyz = temp[30], src1.xyz = temp[31], src2.xyz = temp[20] MAD temp[32].xyz, src0.xyz, src1.xxx, src2.xyz 19: TEX temp[33].xyz, input[1].xy__, 2D[2]; 20: src0.xyz = temp[33], src1.xyz = const[13] MAD temp[35].xyz, src0.xyz, src1.yyy, -src0.111 21: src0.xyz = temp[35], src1.xyz = input[5] MAD temp[36].xyz, src0.xxx, src1.xyz, src0.000 22: src0.xyz = temp[35], src1.xyz = input[4], src2.xyz = temp[36] MAD temp[37].xyz, src0.yyy, src1.xyz, src2.xyz 23: src0.xyz = temp[35], src1.xyz = input[6], src2.xyz = temp[37] MAD temp[38].xyz, src0.zzz, src1.xyz, src2.xyz 24: src0.xyz = temp[38] DP3 temp[39].x, src0.xyz, src0.xyz 25: src0.xyz = temp[39] REPL_ALPHA temp[40].x RSQ, |src0.x| 26: src0.xyz = temp[38], src1.xyz = temp[40] MAD temp[41].xyz, src0.xyz, src1.xxx, src0.000 27: src0.xyz = input[2] REPL_ALPHA temp[42].x RCP, src0.z 28: src0.xyz = temp[42], src0.w = const[13] MIN temp[43].x, src0.x__, src0.w__ 29: src0.xyz = const[9], src1.xyz = temp[43] MAD temp[44].x, src0.x__, src1.x__, src0.000 30: src0.xyz = temp[35], src1.xyz = temp[44], src2.xyz = temp[18] MAD temp[45].xy, src0.xy_, src1.xx_, src2.xy_ 31: src0.xyz = temp[45], src1.xyz = const[16] MAD temp[46].xy, src0.xy_, src1.xy_, src0.000 32: TEX temp[47].xyz, temp[46].xy__, 2D[1]; 33: src0.xyz = temp[32], src1.xyz = temp[47] MAD temp[49].xyz, src0.xyz, src1.xyz, src0.000 34: src0.xyz = input[2] DP3 temp[50].x, src0.xyz, src0.xyz 35: src0.xyz = temp[50] REPL_ALPHA temp[51].x RSQ, |src0.x| 36: src0.xyz = input[2], src1.xyz = temp[51] MAD temp[52].xyz, src0.xyz, src1.xxx, src0.000 37: src0.xyz = temp[41], src1.xyz = temp[52] DP3 temp[53].x, src0.xyz, src1.xyz 38: src0.xyz = temp[53], src1.xyz = temp[41] MAD temp[55].xyz * 2, src0.xxx, src1.xyz, src0.000 39: src0.xyz = temp[52], src1.xyz = temp[55] MAD temp[56].xyz, src0.xyz, src0.111, -src1.xyz 40: src0.xyz = const[2], src1.xyz = temp[56] MAD temp[57].xyz, src0.xyz, src1.xxx, src0.000 41: src0.xyz = const[3], src1.xyz = temp[56], src2.xyz = temp[57] MAD temp[58].xyz, src0.xyz, src1.yyy, src2.xyz 42: src0.xyz = const[4], src1.xyz = temp[56], src2.xyz = temp[58] MAD temp[59].xyz, src0.xyz, src1.zzz, src2.xyz 43: src0.xyz = temp[59], src1.xyz = const[5] MAD temp[60].xyz, src0.xyz, src0.111, src1.xyz 44: TEX temp[61].xyz, temp[60].xyz_, CUBE[0]; 45: src0.xyz = const[1] MAD temp[63].x, src0.1__, src0.111, -src0.x__ 46: src0.xyz = temp[52], src1.xyz = temp[41] DP3 temp[64].x, -src0.xyz, src1.xyz 47: src0.xyz = temp[64] MAX temp[65].x, src0.x__, src0.0__ 48: src0.xyz = temp[65] MAD temp[66].x, src0.1__, src0.111, -src0.x__ 49: src0.xyz = temp[66] LG2 temp[67].w, src0.x 50: src0.xyz = const[1], src0.w = temp[67] MAD temp[68].w, src0.w, src0.y, src0.0 51: src0.w = temp[68] REPL_ALPHA temp[69].x EX2, src0.w 52: src0.xyz = temp[63], src1.xyz = temp[69], src2.xyz = const[1] MAD temp[70].x, src0.x__, src1.x__, src2.x__ 53: src0.xyz = temp[70] MAX temp[71].x, src0.x__, src0.0__ 54: src0.xyz = temp[61], src1.xyz = temp[71] MAD temp[72].xyz, src0.xyz, src1.xxx, src0.000 55: src0.xyz = temp[72], src1.xyz = temp[29] MAD temp[73].xyz, src0.xyz, src1.xxx, src0.000 56: src0.xyz = temp[73], src1.xyz = const[10], src2.xyz = temp[49] MAD temp[74].xyz, src0.xyz, src1.xxx, src2.xyz 57: src0.xyz = temp[41], src1.xyz = const[17] DP3 temp[75].x, src0.xyz, src1.xyz 58: src0.xyz = temp[75] MAD temp[77].x, src0.1__, |src0.111|, -|src0.x__| 59: src0.xyz = temp[77] LG2 temp[78].w, src0.x 60: src0.xyz = const[0], src0.w = temp[78] MAD temp[79].w, src0.w, src0.y, src0.0 61: src0.w = temp[79] REPL_ALPHA temp[80].x EX2, src0.w 62: src0.xyz = temp[80], src1.xyz = const[0] MAD temp[81].x, src0.x__, src1.x__, src0.000 63: src0.xyz = temp[61], src1.xyz = temp[81] MAD temp[82].xyz, src0.xyz, src1.xxx, src0.000 64: src0.xyz = temp[82], src1.xyz = temp[29] MAD temp[83].xyz, src0.xyz, src1.xxx, src0.000 65: src0.xyz = temp[83], src1.xyz = const[10], src2.xyz = temp[74] MAD temp[20].xyz, src0.xyz, src1.xxx, src2.xyz 66: src0.xyz = temp[20], src0.w = temp[20] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = const[1], src1.xyz = input[2] MAD temp[63].x, src0.1__, src0.111, -src0.x__ RCP temp[42].w, src1.z 1: src0.xyz = input[2], src1.xyz = const[8] DP3 temp[50].x, src0.xyz, src0.xyz RCP temp[22].w, src1.y 2: src0.xyz = temp[42], src0.w = const[13], src1.xyz = temp[50], src1.w = temp[42] MIN temp[43].x, src1.w__, src0.w__ RSQ temp[51].w, |src1.x| 3: src0.xyz = input[2], src0.w = input[0], src1.xyz = const[8] MAD temp[21].x, -src0.z__, src0.111, -src1.x__ RCP temp[15].w, src0.w 4: src0.xyz = input[2], src0.w = temp[51], src1.xyz = temp[51], src1.w = temp[22], src2.xyz = temp[21] MAD temp[52].xyz, src0.xyz, src0.www, src0.000 MAD_SAT temp[23].w, src2.x, src1.w, src0.0 5: src0.xyz = input[0], src0.w = temp[15], src1.xyz = const[9], src2.xyz = temp[43] MAD temp[16].xy, src0.xy_, src0.ww_, src0.000 MAD temp[44].w, src1.x, src2.x, src0.0 6: src0.xyz = temp[16], src0.w = temp[23], src1.xyz = const[14], src2.xyz = const[15] MAD temp[17].xy, src0.xy_, src1.xy_, src2.xy_ LG2 temp[24].w, src0.w 7: src0.xyz = temp[17], src0.w = temp[24], src1.xyz = const[6] MAD temp[18].x, src0.x__, src0.111, src0.000 MAD temp[25].w, src0.w, src1.x, src0.0 8: src0.xyz = temp[17], src1.xyz = const[12] MAD temp[18].y, src0._y_, src1._x_, src1._y_ 9: src0.w = temp[25] REPL_ALPHA temp[26].x EX2, src0.w 10: src0.xyz = temp[26] MAD temp[27].x, src0.1__, src0.111, -src0.x__ 11: src0.xyz = const[7], src1.xyz = temp[26], src2.xyz = temp[27] MAD temp[28].x, src0.x__, src1.x__, src2.x__ 12: src0.xyz = temp[28], src1.xyz = const[11] MAD temp[29].x, src0.x__, src1.x__, src0.000 13: src0.xyz = temp[29] MAD temp[31].x, src0.1__, src0.111, -src0.x__ 14: BEGIN_TEX; 15: TEX temp[19], input[1].xy__, 2D[3]; 16: TEX temp[33].xyz, input[1].xy__, 2D[2] SEM_WAIT SEM_ACQUIRE; 17: src0.xyz = temp[19], src0.w = temp[19], src1.xyz = input[3], src1.w = input[3] SEM_WAIT MAD temp[20].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[20].w, src0.w, src1.w, src0.0 18: src0.xyz = temp[33], src1.xyz = const[13] MAD temp[35].xyz, src0.xyz, src1.yyy, -src0.111 19: src0.xyz = temp[35], src0.w = temp[44], src1.xyz = temp[44], src2.xyz = temp[18] MAD temp[45].xy, src0.xy_, src0.ww_, src2.xy_ 20: src0.xyz = temp[35], src1.xyz = input[5] MAD temp[36].xyz, src0.xxx, src1.xyz, src0.000 21: src0.xyz = temp[20] MAD temp[30].xyz, src0.111, src0.111, -src0.xyz 22: src0.xyz = temp[45], src1.xyz = const[16] MAD temp[46].xy, src0.xy_, src1.xy_, src0.000 23: src0.xyz = temp[35], src1.xyz = input[4], src2.xyz = temp[36] MAD temp[37].xyz, src0.yyy, src1.xyz, src2.xyz 24: src0.xyz = temp[30], src1.xyz = temp[31], src2.xyz = temp[20] MAD temp[32].xyz, src0.xyz, src1.xxx, src2.xyz 25: src0.xyz = temp[35], src1.xyz = input[6], src2.xyz = temp[37] MAD temp[38].xyz, src0.zzz, src1.xyz, src2.xyz 26: src0.xyz = temp[38] DP3 temp[39].x, src0.xyz, src0.xyz 27: src0.xyz = temp[39] REPL_ALPHA temp[40].x RSQ, |src0.x| 28: src0.xyz = temp[38], src1.xyz = temp[40] MAD temp[41].xyz, src0.xyz, src1.xxx, src0.000 29: src0.xyz = temp[41], src1.xyz = const[17] DP3 temp[75].x, src0.xyz, src1.xyz 30: src0.xyz = temp[52], src1.xyz = temp[41], src2.xyz = temp[75] DP3 temp[64].x, -src0.xyz, src1.xyz MAD temp[77].w, src0.1, |src0.1|, -|src2.x| 31: src0.xyz = temp[41], src0.w = temp[77], src1.xyz = temp[52] DP3 temp[53].x, src0.xyz, src1.xyz LG2 temp[78].w, src0.w 32: src0.xyz = temp[64], src0.w = temp[78], src1.xyz = const[0] MAX temp[65].x, src0.x__, src0.0__ MAD temp[79].w, src0.w, src1.y, src0.0 33: src0.xyz = temp[53], src1.xyz = temp[41], src2.xyz = temp[65] MAD temp[55].xyz * 2, src0.xxx, src1.xyz, src0.000 MAD temp[66].w, src0.1, src0.1, -src2.x 34: src0.xyz = temp[52], src0.w = temp[66], src1.xyz = temp[55] MAD temp[56].xyz, src0.xyz, src0.111, -src1.xyz LG2 temp[67].w, src0.w 35: src0.xyz = const[2], src0.w = temp[79], src1.xyz = temp[56] MAD temp[57].xyz, src0.xyz, src1.xxx, src0.000 EX2 temp[80].w, src0.w 36: src0.xyz = temp[80], src0.w = temp[80], src1.xyz = const[0], src1.w = temp[67], src2.xyz = const[1] MAD temp[81].x, src0.w__, src1.x__, src0.000 MAD temp[68].w, src1.w, src2.y, src0.0 37: src0.xyz = const[3], src1.xyz = temp[56], src2.xyz = temp[57] MAD temp[58].xyz, src0.xyz, src1.yyy, src2.xyz 38: src0.xyz = const[4], src1.xyz = temp[56], src2.xyz = temp[58] MAD temp[59].xyz, src0.xyz, src1.zzz, src2.xyz 39: src0.w = temp[68] REPL_ALPHA temp[69].x EX2, src0.w 40: src0.xyz = temp[59], src1.xyz = const[5] MAD temp[60].xyz, src0.xyz, src0.111, src1.xyz 41: src0.xyz = temp[63], src1.xyz = temp[69], src2.xyz = const[1] MAD temp[70].w, src0.x, src1.x, src2.x 42: src0.xyz = temp[70], src0.w = temp[70] MAX temp[71].x, src0.w__, src0.0__ 43: BEGIN_TEX; 44: TEX temp[47].xyz, temp[46].xy__, 2D[1]; 45: TEX temp[61].xyz, temp[60].xyz_, CUBE[0] SEM_WAIT SEM_ACQUIRE; 46: src0.xyz = temp[32], src1.xyz = temp[47] SEM_WAIT MAD temp[49].xyz, src0.xyz, src1.xyz, src0.000 47: src0.xyz = temp[61], src1.xyz = temp[81] MAD temp[82].xyz, src0.xyz, src1.xxx, src0.000 48: src0.xyz = temp[61], src1.xyz = temp[71] MAD temp[72].xyz, src0.xyz, src1.xxx, src0.000 49: src0.xyz = temp[82], src1.xyz = temp[29] MAD temp[83].xyz, src0.xyz, src1.xxx, src0.000 50: src0.xyz = temp[72], src1.xyz = temp[29] MAD temp[73].xyz, src0.xyz, src1.xxx, src0.000 51: src0.xyz = temp[73], src1.xyz = const[10], src2.xyz = temp[49] MAD temp[74].xyz, src0.xyz, src1.xxx, src2.xyz 52: src0.xyz = temp[83], src1.xyz = const[10], src2.xyz = temp[74] MAD temp[20].xyz, src0.xyz, src1.xxx, src2.xyz 53: src0.xyz = temp[20], src0.w = temp[20] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = const[1], src1.xyz = input[2] MAD temp[63].x, src0.1__, src0.111, -src0.x__ RCP temp[42].w, src1.z 1: src0.xyz = input[2], src1.xyz = const[8] DP3 temp[50].x, src0.xyz, src0.xyz RCP temp[22].w, src1.y 2: src0.w = const[13], src1.xyz = temp[50], src1.w = temp[42] MIN temp[43].x, src1.w__, src0.w__ RSQ temp[51].w, |src1.x| 3: src0.xyz = input[2], src0.w = input[0], src1.xyz = const[8] MAD temp[21].x, -src0.z__, src0.111, -src1.x__ RCP temp[15].w, src0.w 4: src0.xyz = input[2], src0.w = temp[51], src1.w = temp[22], src2.xyz = temp[21] MAD temp[52].xyz, src0.xyz, src0.www, src0.000 MAD_SAT temp[23].w, src2.x, src1.w, src0.0 5: src0.xyz = input[0], src0.w = temp[15], src1.xyz = const[9], src2.xyz = temp[43] MAD temp[16].xy, src0.xy_, src0.ww_, src0.000 MAD temp[44].w, src1.x, src2.x, src0.0 6: src0.xyz = temp[16], src0.w = temp[23], src1.xyz = const[14], src2.xyz = const[15] MAD temp[17].xy, src0.xy_, src1.xy_, src2.xy_ LG2 temp[24].w, src0.w 7: src0.xyz = temp[17], src0.w = temp[24], src1.xyz = const[6] MAD temp[18].x, src0.x__, src0.111, src0.000 MAD temp[25].w, src0.w, src1.x, src0.0 8: src0.xyz = temp[17], src1.xyz = const[12] MAD temp[18].y, src0._y_, src1._x_, src1._y_ 9: src0.w = temp[25] REPL_ALPHA temp[26].x EX2, src0.w 10: src0.xyz = temp[26] MAD temp[27].x, src0.1__, src0.111, -src0.x__ 11: src0.xyz = const[7], src1.xyz = temp[26], src2.xyz = temp[27] MAD temp[28].x, src0.x__, src1.x__, src2.x__ 12: src0.xyz = temp[28], src1.xyz = const[11] MAD temp[29].x, src0.x__, src1.x__, src0.000 13: src0.xyz = temp[29] MAD temp[31].x, src0.1__, src0.111, -src0.x__ 14: BEGIN_TEX; 15: TEX temp[19], input[1].xy__, 2D[3]; 16: TEX temp[33].xyz, input[1].xy__, 2D[2] SEM_WAIT SEM_ACQUIRE; 17: src0.xyz = temp[19], src0.w = temp[19], src1.xyz = input[3], src1.w = input[3] SEM_WAIT MAD temp[20].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[20].w, src0.w, src1.w, src0.0 18: src0.xyz = temp[33], src1.xyz = const[13] MAD temp[35].xyz, src0.xyz, src1.yyy, -src0.111 19: src0.xyz = temp[35], src0.w = temp[44], src2.xyz = temp[18] MAD temp[45].xy, src0.xy_, src0.ww_, src2.xy_ 20: src0.xyz = temp[35], src1.xyz = input[5] MAD temp[36].xyz, src0.xxx, src1.xyz, src0.000 21: src0.xyz = temp[20] MAD temp[30].xyz, src0.111, src0.111, -src0.xyz 22: src0.xyz = temp[45], src1.xyz = const[16] MAD temp[46].xy, src0.xy_, src1.xy_, src0.000 23: src0.xyz = temp[35], src1.xyz = input[4], src2.xyz = temp[36] MAD temp[37].xyz, src0.yyy, src1.xyz, src2.xyz 24: src0.xyz = temp[30], src1.xyz = temp[31], src2.xyz = temp[20] MAD temp[32].xyz, src0.xyz, src1.xxx, src2.xyz 25: src0.xyz = temp[35], src1.xyz = input[6], src2.xyz = temp[37] MAD temp[38].xyz, src0.zzz, src1.xyz, src2.xyz 26: src0.xyz = temp[38] DP3 temp[39].x, src0.xyz, src0.xyz 27: src0.xyz = temp[39] REPL_ALPHA temp[40].x RSQ, |src0.x| 28: src0.xyz = temp[38], src1.xyz = temp[40] MAD temp[41].xyz, src0.xyz, src1.xxx, src0.000 29: src0.xyz = temp[41], src1.xyz = const[17] DP3 temp[75].x, src0.xyz, src1.xyz 30: src0.xyz = temp[52], src1.xyz = temp[41], src2.xyz = temp[75] DP3 temp[64].x, -src0.xyz, src1.xyz MAD temp[77].w, src0.1, |src0.1|, -|src2.x| 31: src0.xyz = temp[41], src0.w = temp[77], src1.xyz = temp[52] DP3 temp[53].x, src0.xyz, src1.xyz LG2 temp[78].w, src0.w 32: src0.xyz = temp[64], src0.w = temp[78], src1.xyz = const[0] MAX temp[65].x, src0.x__, src0.0__ MAD temp[79].w, src0.w, src1.y, src0.0 33: src0.xyz = temp[53], src1.xyz = temp[41], src2.xyz = temp[65] MAD temp[55].xyz * 2, src0.xxx, src1.xyz, src0.000 MAD temp[66].w, src0.1, src0.1, -src2.x 34: src0.xyz = temp[52], src0.w = temp[66], src1.xyz = temp[55] MAD temp[56].xyz, src0.xyz, src0.111, -src1.xyz LG2 temp[67].w, src0.w 35: src0.xyz = const[2], src0.w = temp[79], src1.xyz = temp[56] MAD temp[57].xyz, src0.xyz, src1.xxx, src0.000 EX2 temp[80].w, src0.w 36: src0.w = temp[80], src1.xyz = const[0], src1.w = temp[67], src2.xyz = const[1] MAD temp[81].x, src0.w__, src1.x__, src0.000 MAD temp[68].w, src1.w, src2.y, src0.0 37: src0.xyz = const[3], src1.xyz = temp[56], src2.xyz = temp[57] MAD temp[58].xyz, src0.xyz, src1.yyy, src2.xyz 38: src0.xyz = const[4], src1.xyz = temp[56], src2.xyz = temp[58] MAD temp[59].xyz, src0.xyz, src1.zzz, src2.xyz 39: src0.w = temp[68] REPL_ALPHA temp[69].x EX2, src0.w 40: src0.xyz = temp[59], src1.xyz = const[5] MAD temp[60].xyz, src0.xyz, src0.111, src1.xyz 41: src0.xyz = temp[63], src1.xyz = temp[69], src2.xyz = const[1] MAD temp[70].w, src0.x, src1.x, src2.x 42: src0.w = temp[70] MAX temp[71].x, src0.w__, src0.0__ 43: BEGIN_TEX; 44: TEX temp[47].xyz, temp[46].xy__, 2D[1]; 45: TEX temp[61].xyz, temp[60].xyz_, CUBE[0] SEM_WAIT SEM_ACQUIRE; 46: src0.xyz = temp[32], src1.xyz = temp[47] SEM_WAIT MAD temp[49].xyz, src0.xyz, src1.xyz, src0.000 47: src0.xyz = temp[61], src1.xyz = temp[81] MAD temp[82].xyz, src0.xyz, src1.xxx, src0.000 48: src0.xyz = temp[61], src1.xyz = temp[71] MAD temp[72].xyz, src0.xyz, src1.xxx, src0.000 49: src0.xyz = temp[82], src1.xyz = temp[29] MAD temp[83].xyz, src0.xyz, src1.xxx, src0.000 50: src0.xyz = temp[72], src1.xyz = temp[29] MAD temp[73].xyz, src0.xyz, src1.xxx, src0.000 51: src0.xyz = temp[73], src1.xyz = const[10], src2.xyz = temp[49] MAD temp[74].xyz, src0.xyz, src1.xxx, src2.xyz 52: src0.xyz = temp[83], src1.xyz = const[10], src2.xyz = temp[74] MAD temp[20].xyz, src0.xyz, src1.xxx, src2.xyz 53: src0.xyz = temp[20], src0.w = temp[20] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = const[1], src1.xyz = input[1] MAD temp[0].z, src0.__1, src0.__1, -src0.__x RCP temp[0].w, src1.z 1: src0.xyz = input[1], src1.xyz = const[8] DP3 temp[6].z, src0.xyz, src0.xyz RCP temp[1].w, src1.y 2: src0.w = const[13], src1.xyz = temp[6], src1.w = temp[0] MIN temp[6].z, src1.__w, src0.__w RSQ temp[0].w, |src1.z| 3: src0.xyz = input[1], src0.w = input[6], src1.xyz = const[8] MAD temp[7].x, -src0.z__, src0.1__, -src1.x__ RCP temp[3].w, src0.w 4: src0.xyz = input[1], src0.w = temp[0], src1.w = temp[1], src2.xyz = temp[7] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 MAD_SAT temp[0].w, src2.x, src1.w, src0.0 5: src0.xyz = input[6], src0.w = temp[3], src1.xyz = const[9], src2.xyz = temp[6] MAD temp[6].xy, src0.xy_, src0.ww_, src0.00_ MAD temp[1].w, src1.x, src2.z, src0.0 6: src0.xyz = temp[6], src0.w = temp[0], src1.xyz = const[14], src2.xyz = const[15] MAD temp[6].xy, src0.xy_, src1.xy_, src2.xy_ LG2 temp[0].w, src0.w 7: src0.xyz = temp[6], src0.w = temp[0], src1.xyz = const[6] MAD temp[7].x, src0.x__, src0.11_, src0.00_ MAD temp[0].w, src0.w, src1.x, src0.0 8: src0.xyz = temp[6], src1.xyz = const[12] MAD temp[7].y, src0._y_, src1._x_, src1._y_ 9: src0.w = temp[0] REPL_ALPHA temp[6].x EX2, src0.w 10: src0.xyz = temp[6] MAD temp[6].y, src0._1_, src0._1_, -src0._x_ 11: src0.xyz = const[7], src1.xyz = temp[6], src2.xyz = temp[6] MAD temp[6].x, src0.x__, src1.x__, src2.y__ 12: src0.xyz = temp[6], src1.xyz = const[11] MAD temp[6].x, src0.x__, src1.x__, src0.0__ 13: src0.xyz = temp[6] MAD temp[6].y, src0._1_, src0._1_, -src0._x_ 14: BEGIN_TEX; 15: TEX temp[8], input[0].xy__, 2D[3]; 16: TEX temp[9].xyz, input[0].xy__, 2D[2] SEM_WAIT SEM_ACQUIRE; 17: src0.xyz = temp[8], src0.w = temp[8], src1.xyz = input[2], src1.w = input[2] SEM_WAIT MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 18: src0.xyz = temp[9], src1.xyz = const[13] MAD temp[8].xyz, src0.xyz, src1.yyy, -src0.111 19: src0.xyz = temp[8], src0.w = temp[1], src2.xyz = temp[7] MAD temp[0].xy, src0.xy_, src0.ww_, src2.xy_ 20: src0.xyz = temp[8], src1.xyz = input[4] MAD temp[4].xyz, src0.xxx, src1.xyz, src0.000 21: src0.xyz = temp[2] MAD temp[7].xyz, src0.111, src0.111, -src0.xyz 22: src0.xyz = temp[0], src1.xyz = const[16] MAD temp[0].xy, src0.xy_, src1.xy_, src0.00_ 23: src0.xyz = temp[8], src1.xyz = input[3], src2.xyz = temp[4] MAD temp[3].xyz, src0.yyy, src1.xyz, src2.xyz 24: src0.xyz = temp[7], src1.xyz = temp[6], src2.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.yyy, src2.xyz 25: src0.xyz = temp[8], src1.xyz = input[5], src2.xyz = temp[3] MAD temp[3].xyz, src0.zzz, src1.xyz, src2.xyz 26: src0.xyz = temp[3] DP3 temp[4].x, src0.xyz, src0.xyz 27: src0.xyz = temp[4] REPL_ALPHA temp[4].x RSQ, |src0.x| 28: src0.xyz = temp[3], src1.xyz = temp[4] MAD temp[3].xyz, src0.xyz, src1.xxx, src0.000 29: src0.xyz = temp[3], src1.xyz = const[17] DP3 temp[4].x, src0.xyz, src1.xyz 30: src0.xyz = temp[1], src1.xyz = temp[3], src2.xyz = temp[4] DP3 temp[4].x, -src0.xyz, src1.xyz MAD temp[1].w, src0.1, |src0.1|, -|src2.x| 31: src0.xyz = temp[3], src0.w = temp[1], src1.xyz = temp[1] DP3 temp[4].y, src0.xyz, src1.xyz LG2 temp[1].w, src0.w 32: src0.xyz = temp[4], src0.w = temp[1], src1.xyz = const[0] MAX temp[4].x, src0.x__, src0.0__ MAD temp[1].w, src0.w, src1.y, src0.0 33: src0.xyz = temp[4], src1.xyz = temp[3], src2.xyz = temp[4] MAD temp[3].xyz * 2, src0.yyy, src1.xyz, src0.000 MAD temp[2].w, src0.1, src0.1, -src2.x 34: src0.xyz = temp[1], src0.w = temp[2], src1.xyz = temp[3] MAD temp[1].xyz, src0.xyz, src0.111, -src1.xyz LG2 temp[2].w, src0.w 35: src0.xyz = const[2], src0.w = temp[1], src1.xyz = temp[1] MAD temp[3].xyz, src0.xyz, src1.xxx, src0.000 EX2 temp[1].w, src0.w 36: src0.w = temp[1], src1.xyz = const[0], src1.w = temp[2], src2.xyz = const[1] MAD temp[4].x, src0.w__, src1.x__, src0.0__ MAD temp[1].w, src1.w, src2.y, src0.0 37: src0.xyz = const[3], src1.xyz = temp[1], src2.xyz = temp[3] MAD temp[3].xyz, src0.xyz, src1.yyy, src2.xyz 38: src0.xyz = const[4], src1.xyz = temp[1], src2.xyz = temp[3] MAD temp[1].xyz, src0.xyz, src1.zzz, src2.xyz 39: src0.w = temp[1] REPL_ALPHA temp[3].x EX2, src0.w 40: src0.xyz = temp[1], src1.xyz = const[5] MAD temp[1].xyz, src0.xyz, src0.111, src1.xyz 41: src0.xyz = temp[0], src1.xyz = temp[3], src2.xyz = const[1] MAD temp[1].w, src0.z, src1.x, src2.x 42: src0.w = temp[1] MAX temp[0].z, src0.__w, src0.__0 43: BEGIN_TEX; 44: TEX temp[3].xyz, temp[0].xy__, 2D[1]; 45: TEX temp[1].xyz, temp[1].xyz_, CUBE[0] SEM_WAIT SEM_ACQUIRE; 46: src0.xyz = temp[2], src1.xyz = temp[3] SEM_WAIT MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 47: src0.xyz = temp[1], src1.xyz = temp[4] MAD temp[3].xyz, src0.xyz, src1.xxx, src0.000 48: src0.xyz = temp[1], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.zzz, src0.000 49: src0.xyz = temp[3], src1.xyz = temp[6] MAD temp[1].xyz, src0.xyz, src1.xxx, src0.000 50: src0.xyz = temp[0], src1.xyz = temp[6] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 51: src0.xyz = temp[0], src1.xyz = const[10], src2.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src1.xxx, src2.xyz 52: src0.xyz = temp[1], src1.xyz = const[10], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xxx, src2.xyz 53: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=37************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 13, tex_end: 0 (code_addr: 00000340) 0: xyz: c1 t1 t0 bias-> t0.z (02000061) w: t0 t0 t0 bias-> t0.w (00800000) xyz: 1.0 1.0 -c1.xxx op: 00084a95 w: t1.z c1.x c1.x op: 05000005 1: xyz: t1 c8 t0 bias-> t6.z (02180a01) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t1.xyz t1.xyz t1.xxx op: 00804000 w: c8.y t1.x t1.x op: 05000004 2: xyz: t32 t6 t0 bias-> t6.z (02180180) w: c13 t0 t0 bias-> t0.w (0080002d) xyz: t0.www c13.www t32.xxx op: 0200460d w: |t6.z| t32.x t32.x op: 05800045 3: xyz: t1 c8 t0 bias-> t7.x (009c0a01) w: t6 t0 t0 bias-> t3.w (008c0006) xyz: -t1.zzz 1.0 -c8.xyz op: 00090aa3 w: t6.w t1.x t1.x op: 05000009 4: xyz: t1 t32 t7 bias-> t1.xyz (03847001) w: t0 t1 t0 bias-> t0.w (00800040) xyz: t1.xyz t0.www 0.0 op: 00050600 w: t7.x t1.w 0.0 op: 40040506 5: xyz: t6 c9 t6 bias-> t6.xy (01986a46) w: t3 t0 t0 bias-> t1.w (00840003) xyz: t6.xyz t3.www 0.0 op: 00050600 w: c9.x t6.z 0.0 op: 00040403 6: xyz: t6 c14 c15 bias-> t6.xy (019afb86) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t6.xyz c14.xyz c15.xyz op: 00020200 w: t0.w t6.x t6.x op: 04800009 7: xyz: t6 c6 t0 bias-> t7.x (009c0986) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t6.xyz 1.0 0.0 op: 00050a80 w: t0.w c6.x 0.0 op: 00040189 8: xyz: t6 c12 t0 bias-> t7.y (011c0b06) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz c12.xxx c12.xyz op: 00010280 w: t6.x t6.x t6.x op: 00000000 9: xyz: t0 t0 t0 bias-> t6.x (00980000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: t0.w t0.x t0.x op: 04000009 10: xyz: t6 t0 t0 bias-> t6.y (01180006) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t6.xxx op: 00084a95 w: t6.x t6.x t6.x op: 00000000 11: xyz: c7 t6 t6 bias-> t6.x (009861a7) w: t0 t0 t0 bias-> (00000000) xyz: c7.xyz t6.xyz t6.yyy op: 00028200 w: c7.x c7.x c7.x op: 00000000 12: xyz: t6 c11 t0 bias-> t6.x (00980ac6) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz c11.xyz 0.0 op: 00050200 w: t6.x t6.x t6.x op: 00000000 13: xyz: t6 t0 t0 bias-> t6.y (01180006) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t6.xxx op: 00084a95 w: t6.x t6.x t6.x op: 00000000 NODE 1: alu_offset: 14, tex_offset: 0, alu_end: 25, tex_end: 1 (code_addr: 0002064e) TEX: TEX t8, t0, texture[3] (00009a00) TEX t9, t0, texture[2] (00009240) 14: xyz: t8 t2 t0 bias-> t2.xyz (03880088) w: t8 t2 t0 bias-> t0.w (00800088) xyz: t8.xyz t2.xyz 0.0 op: 00050200 w: t8.w t2.w 0.0 op: 00040509 15: xyz: t9 c13 t0 bias-> t8.xyz (03a00b49) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz c13.yyy -1.0 op: 000d4300 w: t9.x t9.x t9.x op: 00000000 16: xyz: t8 t32 t7 bias-> t0.xy (01807008) w: t1 t0 t0 bias-> (00000001) xyz: t8.xyz t1.www t7.xyz op: 00020600 w: t8.x t8.x t8.x op: 00000000 17: xyz: t8 t4 t0 bias-> t4.xyz (03900108) w: t0 t0 t0 bias-> (00000000) xyz: t8.xxx t4.xyz 0.0 op: 00050201 w: t8.x t8.x t8.x op: 00000000 18: xyz: t2 t0 t0 bias-> t7.xyz (039c0002) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t2.xyz op: 00080a95 w: t2.x t2.x t2.x op: 00000000 19: xyz: t0 c16 t0 bias-> t0.xy (01800c00) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c16.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 20: xyz: t8 t3 t4 bias-> t3.xyz (038c40c8) w: t0 t0 t0 bias-> (00000000) xyz: t8.yyy t3.xyz t4.xyz op: 00020202 w: t8.x t8.x t8.x op: 00000000 21: xyz: t7 t6 t2 bias-> t2.xyz (03882187) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz t6.yyy t2.xyz op: 00020300 w: t7.x t7.x t7.x op: 00000000 22: xyz: t8 t5 t3 bias-> t3.xyz (038c3148) w: t0 t0 t0 bias-> (00000000) xyz: t8.zzz t5.xyz t3.xyz op: 00020203 w: t8.x t8.x t8.x op: 00000000 23: xyz: t3 t0 t0 bias-> t4.x (00900003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t3.xyz t3.xxx op: 00804000 w: t3.x t3.x t3.x op: 00000000 24: xyz: t4 t0 t0 bias-> t4.x (00900004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xxx t4.xxx t4.xxx op: 05004081 w: |t4.x| t4.x t4.x op: 05800040 25: xyz: t3 t4 t0 bias-> t3.xyz (038c0103) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t4.xxx 0.0 op: 00050280 w: t3.x t3.x t3.x op: 00000000 26: xyz: t3 c17 t0 bias-> t4.x (00900c43) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c17.xyz t3.xxx op: 00804200 w: t3.x t3.x t3.x op: 00000000 27: xyz: t1 t3 t4 bias-> t4.x (009040c1) w: t0 t0 t0 bias-> t1.w (00840000) xyz: -t1.xyz t3.xyz t1.xxx op: 00804220 w: 1.0 |1.0| -|t4.x| op: 0019a891 28: xyz: t3 t1 t0 bias-> t4.y (01100043) w: t1 t0 t0 bias-> t1.w (00840001) xyz: t3.xyz t1.xyz t3.xxx op: 00804200 w: t1.w t3.x t3.x op: 04800009 29: xyz: t4 c0 t0 bias-> t4.x (00900804) w: t1 t0 t0 bias-> t1.w (00840001) xyz: t4.xyz 0.0 t4.xxx op: 02804a00 w: t1.w c0.y 0.0 op: 00040209 30: xyz: t4 t3 t4 bias-> t3.xyz (038c40c4) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t4.yyy t3.xyz 0.0 op: 08050202 w: 1.0 1.0 -t4.x op: 00098891 31: xyz: t1 t3 t0 bias-> t1.xyz (038400c1) w: t2 t0 t0 bias-> t2.w (00880002) xyz: t1.xyz 1.0 -t3.xyz op: 00090a80 w: t2.w t1.x t1.x op: 04800009 32: xyz: c2 t1 t0 bias-> t3.xyz (038c0062) w: t1 t0 t0 bias-> t1.w (00840001) xyz: c2.xyz t1.xxx 0.0 op: 00050280 w: t1.w c2.x c2.x op: 04000009 33: xyz: t32 c0 c1 bias-> t4.x (00921800) w: t1 t2 t0 bias-> t1.w (00840081) xyz: t1.www c0.xyz 0.0 op: 0005020c w: t2.w c1.y 0.0 op: 0004038a 34: xyz: c3 t1 t3 bias-> t3.xyz (038c3063) w: t0 t0 t0 bias-> (00000000) xyz: c3.xyz t1.yyy t3.xyz op: 00020300 w: c3.x c3.x c3.x op: 00000000 35: xyz: c4 t1 t3 bias-> t1.xyz (03843064) w: t0 t0 t0 bias-> (00000000) xyz: c4.xyz t1.zzz t3.xyz op: 00020380 w: c4.x c4.x c4.x op: 00000000 36: xyz: t0 t0 t0 bias-> t3.x (008c0000) w: t1 t0 t0 bias-> (00000001) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: t1.w t0.x t0.x op: 04000009 37: xyz: t1 c5 t0 bias-> t1.xyz (03840941) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 c5.xyz op: 00010a80 w: t1.x t1.x t1.x op: 00000000 38: xyz: t0 t3 c1 bias-> (000210c0) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: t0.z t3.x c1.x op: 00018182 39: xyz: t32 t0 t0 bias-> t0.z (02000000) w: t1 t0 t0 bias-> (00000001) xyz: t1.www 0.0 t32.xxx op: 02804a0c w: t32.x t32.x t32.x op: 00000000 NODE 2: alu_offset: 40, tex_offset: 2, alu_end: 7, tex_end: 1 (code_addr: 004221e8) TEX: TEX t3, t0, texture[1] (000088c0) TEX t1, t1, texture[0] (00008041) 40: xyz: t2 t3 t0 bias-> t2.xyz (038800c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t3.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 41: xyz: t1 t4 t0 bias-> t3.xyz (038c0101) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t4.xxx 0.0 op: 00050280 w: t1.x t1.x t1.x op: 00000000 42: xyz: t1 t0 t0 bias-> t0.xyz (03800001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t0.zzz 0.0 op: 00050380 w: t1.x t1.x t1.x op: 00000000 43: xyz: t3 t6 t0 bias-> t1.xyz (03840183) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t6.xxx 0.0 op: 00050280 w: t3.x t3.x t3.x op: 00000000 44: xyz: t0 t6 t0 bias-> t0.xyz (03800180) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t6.xxx 0.0 op: 00050280 w: t0.x t0.x t0.x op: 00000000 45: xyz: t0 c10 t2 bias-> t0.xyz (03802a80) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c10.xxx t2.xyz op: 00020280 w: t0.x t0.x t0.x op: 00000000 46: xyz: t1 c10 t0 bias-> t0.xyz (03800a81) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c10.xxx t0.xyz op: 00020280 w: t1.x t1.x t1.x op: 00000000 47: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL IN[1], GENERIC[12], PERSPECTIVE DCL IN[2], GENERIC[13], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0..4] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL IMM[0] FLT32 { 1.0000, 0.0000, 0.0000, 0.0000} 0: TEX TEMP[0], IN[0].xyyy, SAMP[0], 2D 1: MUL TEMP[0], TEMP[0], IN[2] 2: ADD TEMP[1].x, -IN[1].zzzz, -CONST[2].xxxx 3: RCP TEMP[2].x, CONST[2].yyyy 4: MUL_SAT TEMP[1].x, TEMP[1].xxxx, TEMP[2].xxxx 5: POW TEMP[1].x, TEMP[1].xxxx, CONST[0].xxxx 6: ADD TEMP[2].x, IMM[0].xxxx, -TEMP[1].xxxx 7: MAD TEMP[1].x, CONST[1].xxxx, TEMP[1].xxxx, TEMP[2].xxxx 8: MUL TEMP[1].x, TEMP[1].xxxx, CONST[4].xxxx 9: MUL TEMP[1].x, TEMP[0].wwww, TEMP[1].xxxx 10: MOV TEMP[0].w, TEMP[1].xxxx 11: MUL TEMP[0].xyz, TEMP[0].xyzz, CONST[3].xxxx 12: MOV OUT[0], TEMP[0] 13: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[2]; 2: ADD temp[1].x, -input[1].zzzz, -const[2].xxxx; 3: RCP temp[2].x, const[2].yyyy; 4: MUL_SAT temp[1].x, temp[1].xxxx, temp[2].xxxx; 5: POW temp[1].x, temp[1].xxxx, const[0].xxxx; 6: ADD temp[2].x, temp[0].1111, -temp[1].xxxx; 7: MAD temp[1].x, const[1].xxxx, temp[1].xxxx, temp[2].xxxx; 8: MUL temp[1].x, temp[1].xxxx, const[4].xxxx; 9: MUL temp[1].x, temp[0].wwww, temp[1].xxxx; 10: MOV temp[0].w, temp[1].xxxx; 11: MUL temp[0].xyz, temp[0].xyzz, const[3].xxxx; 12: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[2]; 2: ADD temp[1].x, -input[1].zzzz, -const[2].xxxx; 3: RCP temp[2].x, const[2].yyyy; 4: MUL_SAT temp[1].x, temp[1].xxxx, temp[2].xxxx; 5: POW temp[1].x, temp[1].xxxx, const[0].xxxx; 6: ADD temp[2].x, temp[0].1111, -temp[1].xxxx; 7: MAD temp[1].x, const[1].xxxx, temp[1].xxxx, temp[2].xxxx; 8: MUL temp[1].x, temp[1].xxxx, const[4].xxxx; 9: MUL temp[1].x, temp[0].wwww, temp[1].xxxx; 10: MOV temp[0].w, temp[1].xxxx; 11: MUL temp[0].xyz, temp[0].xyzz, const[3].xxxx; 12: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[2]; 2: ADD temp[1].x, -input[1].zzzz, -const[2].xxxx; 3: RCP temp[2].x, const[2].yyyy; 4: MUL_SAT temp[1].x, temp[1].xxxx, temp[2].xxxx; 5: POW temp[1].x, temp[1].xxxx, const[0].xxxx; 6: ADD temp[2].x, temp[0].1111, -temp[1].xxxx; 7: MAD temp[1].x, const[1].xxxx, temp[1].xxxx, temp[2].xxxx; 8: MUL temp[1].x, temp[1].xxxx, const[4].xxxx; 9: MUL temp[1].x, temp[0].wwww, temp[1].xxxx; 10: MOV temp[0].w, temp[1].xxxx; 11: MUL temp[0].xyz, temp[0].xyzz, const[3].xxxx; 12: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[2]; 2: ADD temp[1].x, -input[1].zzzz, -const[2].xxxx; 3: RCP temp[2].x, const[2].yyyy; 4: MUL_SAT temp[1].x, temp[1].xxxx, temp[2].xxxx; 5: POW temp[1].x, temp[1].xxxx, const[0].xxxx; 6: ADD temp[2].x, temp[0].1111, -temp[1].xxxx; 7: MAD temp[1].x, const[1].xxxx, temp[1].xxxx, temp[2].xxxx; 8: MUL temp[1].x, temp[1].xxxx, const[4].xxxx; 9: MUL temp[1].x, temp[0].wwww, temp[1].xxxx; 10: MOV temp[0].w, temp[1].xxxx; 11: MUL temp[0].xyz, temp[0].xyzz, const[3].xxxx; 12: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[2]; 2: ADD temp[1].x, -input[1].zzzz, -const[2].xxxx; 3: RCP temp[2].x, const[2].yyyy; 4: MUL_SAT temp[1].x, temp[1].xxxx, temp[2].xxxx; 5: POW temp[1].x, temp[1].xxxx, const[0].xxxx; 6: ADD temp[2].x, temp[0].1111, -temp[1].xxxx; 7: MAD temp[1].x, const[1].xxxx, temp[1].xxxx, temp[2].xxxx; 8: MUL temp[1].x, temp[1].xxxx, const[4].xxxx; 9: MUL temp[1].x, temp[0].wwww, temp[1].xxxx; 10: MOV temp[0].w, temp[1].xxxx; 11: MUL temp[0].xyz, temp[0].xyzz, const[3].xxxx; 12: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[2]; 2: ADD temp[1].x, -input[1].zzzz, -const[2].xxxx; 3: RCP temp[2].x, const[2].yyyy; 4: MUL_SAT temp[1].x, temp[1].xxxx, temp[2].xxxx; 5: POW temp[1].x, temp[1].xxxx, const[0].xxxx; 6: ADD temp[2].x, temp[0].1111, -temp[1].xxxx; 7: MAD temp[1].x, const[1].xxxx, temp[1].xxxx, temp[2].xxxx; 8: MUL temp[1].x, temp[1].xxxx, const[4].xxxx; 9: MUL temp[1].x, temp[0].wwww, temp[1].xxxx; 10: MOV temp[0].w, temp[1].xxxx; 11: MUL temp[0].xyz, temp[0].xyzz, const[3].xxxx; 12: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[2]; 2: ADD temp[1].x, -input[1].zzzz, -const[2].xxxx; 3: RCP temp[2].x, const[2].yyyy; 4: MUL_SAT temp[1].x, temp[1].xxxx, temp[2].xxxx; 5: LG2 temp[3].w, temp[1].xxxx; 6: MUL temp[3].w, temp[3].wwww, const[0].xxxx; 7: EX2 temp[1].x, temp[3].wwww; 8: ADD temp[2].x, temp[0].1111, -temp[1].xxxx; 9: MAD temp[1].x, const[1].xxxx, temp[1].xxxx, temp[2].xxxx; 10: MUL temp[1].x, temp[1].xxxx, const[4].xxxx; 11: MUL temp[1].x, temp[0].wwww, temp[1].xxxx; 12: MOV temp[0].w, temp[1].xxxx; 13: MUL temp[0].xyz, temp[0].xyzz, const[3].xxxx; 14: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[0], temp[0], input[2]; 2: ADD temp[1].x, -input[1].z___, -const[2].x___; 3: RCP temp[2].x, const[2].y___; 4: MUL_SAT temp[1].x, temp[1].x___, temp[2].x___; 5: LG2 temp[3].w, temp[1].___x; 6: MUL temp[3].w, temp[3].___w, const[0].___x; 7: EX2 temp[1].x, temp[3].w___; 8: ADD temp[2].x, temp[0].1___, -temp[1].x___; 9: MAD temp[1].x, const[1].x___, temp[1].x___, temp[2].x___; 10: MUL temp[1].x, temp[1].x___, const[4].x___; 11: MUL temp[1].x, temp[0].w___, temp[1].x___; 12: MOV temp[0].w, temp[1].___x; 13: MUL temp[0].xyz, temp[0].xyz_, const[3].xxx_; 14: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[0], temp[0], input[2]; 2: ADD temp[1].x, -input[1].z___, -const[2].x___; 3: RCP temp[2].x, const[2].y___; 4: MUL_SAT temp[1].x, temp[1].x___, temp[2].x___; 5: LG2 temp[3].w, temp[1].___x; 6: MUL temp[3].w, temp[3].___w, const[0].___x; 7: EX2 temp[1].x, temp[3].w___; 8: ADD temp[2].x, temp[0].1___, -temp[1].x___; 9: MAD temp[1].x, const[1].x___, temp[1].x___, temp[2].x___; 10: MUL temp[1].x, temp[1].x___, const[4].x___; 11: MUL temp[1].x, temp[0].w___, temp[1].x___; 12: MOV temp[0].w, temp[1].___x; 13: MUL temp[0].xyz, temp[0].xyz_, const[3].xxx_; 14: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[4], input[0].xy__, 2D[0]; 1: MUL temp[5], temp[4], input[2]; 2: ADD temp[6].x, -input[1].z___, -const[2].x___; 3: RCP temp[7].x, const[2].y___; 4: MUL_SAT temp[8].x, temp[6].x___, temp[7].x___; 5: LG2 temp[9].w, temp[8].___x; 6: MUL temp[10].w, temp[9].___w, const[0].___x; 7: EX2 temp[11].x, temp[10].w___; 8: ADD temp[12].x, temp[0].1___, -temp[11].x___; 9: MAD temp[13].x, const[1].x___, temp[11].x___, temp[12].x___; 10: MUL temp[14].x, temp[13].x___, const[4].x___; 11: MUL temp[15].x, temp[5].w___, temp[14].x___; 12: MOV temp[16].w, temp[15].___x; 13: MUL temp[16].xyz, temp[5].xyz_, const[3].xxx_; 14: MOV output[0], temp[16]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[4], input[0].xy__, 2D[0]; 1: MUL temp[5], temp[4], input[2]; 2: ADD temp[6].x, -input[1].z___, -const[2].x___; 3: RCP temp[7].x, const[2].y___; 4: MUL_SAT temp[8].x, temp[6].x___, temp[7].x___; 5: LG2 temp[9].w, temp[8].___x; 6: MUL temp[10].w, temp[9].___w, const[0].___x; 7: EX2 temp[11].x, temp[10].w___; 8: ADD temp[12].x, none.1___, -temp[11].x___; 9: MAD temp[13].x, const[1].x___, temp[11].x___, temp[12].x___; 10: MUL temp[14].x, temp[13].x___, const[4].x___; 11: MUL temp[15].x, temp[5].w___, temp[14].x___; 12: MOV temp[16].w, temp[15].___x; 13: MUL temp[16].xyz, temp[5].xyz_, const[3].xxx_; 14: MOV output[0], temp[16]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[4], input[0].xy__, 2D[0]; 1: MUL temp[5], temp[4], input[2]; 2: ADD temp[6].x, -input[1].z___, -const[2].x___; 3: RCP temp[7].x, const[2].y___; 4: MUL_SAT temp[8].x, temp[6].x___, temp[7].x___; 5: LG2 temp[9].w, temp[8].___x; 6: MUL temp[10].w, temp[9].___w, const[0].___x; 7: EX2 temp[11].x, temp[10].w___; 8: ADD temp[12].x, none.1___, -temp[11].x___; 9: MAD temp[13].x, const[1].x___, temp[11].x___, temp[12].x___; 10: MUL temp[14].x, temp[13].x___, const[4].x___; 11: MUL temp[15].x, temp[5].w___, temp[14].x___; 12: MOV temp[16].w, temp[15].___x; 13: MUL temp[16].xyz, temp[5].xyz_, const[3].xxx_; 14: MOV output[0], temp[16]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[4], input[0].xy__, 2D[0]; 1: MUL temp[5], temp[4], input[2]; 2: ADD temp[6].x, -input[1].z___, -const[2].x___; 3: RCP temp[7].x, const[2].y___; 4: MUL_SAT temp[8].x, temp[6].x___, temp[7].x___; 5: LG2 temp[9].w, temp[8].___x; 6: MUL temp[10].w, temp[9].___w, const[0].___x; 7: EX2 temp[11].x, temp[10].w___; 8: ADD temp[12].x, none.1___, -temp[11].x___; 9: MAD temp[13].x, const[1].x___, temp[11].x___, temp[12].x___; 10: MUL temp[14].x, temp[13].x___, const[4].x___; 11: MUL temp[15].x, temp[5].w___, temp[14].x___; 12: MOV temp[16].w, temp[15].___x; 13: MUL temp[16].xyz, temp[5].xyz_, const[3].xxx_; 14: MOV output[0], temp[16]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[4], input[0].xy__, 2D[0]; 1: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = input[2], src1.w = input[2] MAD temp[5].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[5].w, src0.w, src1.w, src0.0 2: src0.xyz = input[1], src1.xyz = const[2] MAD temp[6].x, -src0.z__, src0.111, -src1.x__ 3: src0.xyz = const[2] REPL_ALPHA temp[7].x RCP, src0.y 4: src0.xyz = temp[6], src1.xyz = temp[7] MAD_SAT temp[8].x, src0.x__, src1.x__, src0.000 5: src0.xyz = temp[8] LG2 temp[9].w, src0.x 6: src0.xyz = const[0], src0.w = temp[9] MAD temp[10].w, src0.w, src0.x, src0.0 7: src0.w = temp[10] REPL_ALPHA temp[11].x EX2, src0.w 8: src0.xyz = temp[11] MAD temp[12].x, src0.1__, src0.111, -src0.x__ 9: src0.xyz = const[1], src1.xyz = temp[11], src2.xyz = temp[12] MAD temp[13].x, src0.x__, src1.x__, src2.x__ 10: src0.xyz = temp[13], src1.xyz = const[4] MAD temp[14].x, src0.x__, src1.x__, src0.000 11: src0.xyz = temp[14], src0.w = temp[5] MAD temp[15].x, src0.w__, src0.x__, src0.000 12: src0.xyz = temp[15] MAD temp[16].w, src0.x, src0.1, src0.0 13: src0.xyz = temp[5], src1.xyz = const[3] MAD temp[16].xyz, src0.xyz, src1.xxx, src0.000 14: src0.xyz = temp[16], src0.w = temp[16] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[4], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = input[1], src1.xyz = const[2] MAD temp[6].x, -src0.z__, src0.111, -src1.x__ RCP temp[7].w, src1.y 3: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = input[2], src1.w = input[2] SEM_WAIT MAD temp[5].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[5].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[5], src0.w = temp[7], src1.xyz = const[3], src2.xyz = temp[6] MAD temp[16].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT temp[8].w, src2.x, src0.w, src0.0 5: src0.xyz = temp[8], src0.w = temp[8] LG2 temp[9].w, src0.w 6: src0.xyz = const[0], src0.w = temp[9] MAD temp[10].w, src0.w, src0.x, src0.0 7: src0.w = temp[10] REPL_ALPHA temp[11].x EX2, src0.w 8: src0.xyz = temp[11] MAD temp[12].x, src0.1__, src0.111, -src0.x__ 9: src0.xyz = const[1], src1.xyz = temp[11], src2.xyz = temp[12] MAD temp[13].x, src0.x__, src1.x__, src2.x__ 10: src0.xyz = temp[13], src1.xyz = const[4] MAD temp[14].x, src0.x__, src1.x__, src0.000 11: src0.xyz = temp[14], src0.w = temp[5] MAD temp[15].x, src0.w__, src0.x__, src0.000 12: src0.xyz = temp[15] MAD temp[16].w, src0.x, src0.1, src0.0 13: src0.xyz = temp[16], src0.w = temp[16] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[4], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = input[1], src1.xyz = const[2] MAD temp[6].x, -src0.z__, src0.111, -src1.x__ RCP temp[7].w, src1.y 3: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = input[2], src1.w = input[2] SEM_WAIT MAD temp[5].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[5].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[5], src0.w = temp[7], src1.xyz = const[3], src2.xyz = temp[6] MAD temp[16].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT temp[8].w, src2.x, src0.w, src0.0 5: src0.w = temp[8] LG2 temp[9].w, src0.w 6: src0.xyz = const[0], src0.w = temp[9] MAD temp[10].w, src0.w, src0.x, src0.0 7: src0.w = temp[10] REPL_ALPHA temp[11].x EX2, src0.w 8: src0.xyz = temp[11] MAD temp[12].x, src0.1__, src0.111, -src0.x__ 9: src0.xyz = const[1], src1.xyz = temp[11], src2.xyz = temp[12] MAD temp[13].x, src0.x__, src1.x__, src2.x__ 10: src0.xyz = temp[13], src1.xyz = const[4] MAD temp[14].x, src0.x__, src1.x__, src0.000 11: src0.xyz = temp[14], src0.w = temp[5] MAD temp[15].x, src0.w__, src0.x__, src0.000 12: src0.xyz = temp[15] MAD temp[16].w, src0.x, src0.1, src0.0 13: src0.xyz = temp[16], src0.w = temp[16] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = input[1], src1.xyz = const[2] MAD temp[1].x, -src0.z__, src0.1__, -src1.x__ RCP temp[1].w, src1.y 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[2], src1.w = input[2] SEM_WAIT MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[0], src0.w = temp[1], src1.xyz = const[3], src2.xyz = temp[1] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT temp[1].w, src2.x, src0.w, src0.0 5: src0.w = temp[1] LG2 temp[1].w, src0.w 6: src0.xyz = const[0], src0.w = temp[1] MAD temp[1].w, src0.w, src0.x, src0.0 7: src0.w = temp[1] REPL_ALPHA temp[1].x EX2, src0.w 8: src0.xyz = temp[1] MAD temp[1].y, src0._1_, src0._1_, -src0._x_ 9: src0.xyz = const[1], src1.xyz = temp[1], src2.xyz = temp[1] MAD temp[1].x, src0.x__, src1.x__, src2.y__ 10: src0.xyz = temp[1], src1.xyz = const[4] MAD temp[1].x, src0.x__, src1.x__, src0.0__ 11: src0.xyz = temp[1], src0.w = temp[0] MAD temp[1].x, src0.w__, src0.x__, src0.0__ 12: src0.xyz = temp[1] MAD temp[0].w, src0.x, src0.1, src0.0 13: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=38************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 11, tex_end: 0 (code_addr: 004002c0) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t1 c2 t0 bias-> t1.x (00840881) w: t0 t0 t0 bias-> t1.w (00840000) xyz: -t1.zzz 1.0 -c2.xyz op: 00090aa3 w: c2.y t1.x t1.x op: 05000004 1: xyz: t0 t2 t0 bias-> t0.xyz (03800080) w: t0 t2 t0 bias-> t0.w (00800080) xyz: t0.xyz t2.xyz 0.0 op: 00050200 w: t0.w t2.w 0.0 op: 00040509 2: xyz: t0 c3 t1 bias-> t0.xyz (038018c0) w: t1 t0 t0 bias-> t1.w (00840001) xyz: t0.xyz c3.xxx 0.0 op: 00050280 w: t1.x t1.w 0.0 op: 40040486 3: xyz: t0 t0 t0 bias-> (00000000) w: t1 t0 t0 bias-> t1.w (00840001) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: t1.w t0.x t0.x op: 04800009 4: xyz: c0 t0 t0 bias-> (00000020) w: t1 t0 t0 bias-> t1.w (00840001) xyz: c0.xxx c0.xxx c0.xxx op: 00004081 w: t1.w c0.x 0.0 op: 00040009 5: xyz: t0 t0 t0 bias-> t1.x (00840000) w: t1 t0 t0 bias-> (00000001) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: t1.w t0.x t0.x op: 04000009 6: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t1.xxx op: 00084a95 w: t1.x t1.x t1.x op: 00000000 7: xyz: c1 t1 t1 bias-> t1.x (00841061) w: t0 t0 t0 bias-> (00000000) xyz: c1.xyz t1.xyz t1.yyy op: 00028200 w: c1.x c1.x c1.x op: 00000000 8: xyz: t1 c4 t0 bias-> t1.x (00840901) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c4.xyz 0.0 op: 00050200 w: t1.x t1.x t1.x op: 00000000 9: xyz: t1 t0 t0 bias-> t1.x (00840001) w: t0 t0 t0 bias-> (00000000) xyz: t0.www t1.xyz 0.0 op: 0005000c w: t1.x t1.x t1.x op: 00000000 10: xyz: t1 t0 t0 bias-> (00000001) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t1.xxx t1.xxx t1.xxx op: 00004081 w: t1.x 1.0 0.0 op: 00040880 11: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL IN[1], GENERIC[12], PERSPECTIVE DCL IN[2], GENERIC[14], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL CONST[0..10] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL IMM[0] FLT32 { 1.0000, 2.0000, 0.0000, -1.0000} 0: MOV TEMP[0].w, IMM[0].xxxx 1: ADD TEMP[1].x, -IN[1].zzzz, -CONST[8].xxxx 2: RCP TEMP[2].x, CONST[8].yyyy 3: MUL_SAT TEMP[1].x, TEMP[1].xxxx, TEMP[2].xxxx 4: POW TEMP[1].x, TEMP[1].xxxx, CONST[6].xxxx 5: ADD TEMP[2].x, IMM[0].xxxx, -TEMP[1].xxxx 6: MAD TEMP[1].x, CONST[7].xxxx, TEMP[1].xxxx, TEMP[2].xxxx 7: MUL TEMP[1].x, TEMP[1].xxxx, CONST[10].xxxx 8: DP3 TEMP[2].x, IN[2].xyzz, IN[2].xyzz 9: RSQ TEMP[2].x, TEMP[2].xxxx 10: MUL TEMP[2].xyz, IN[2].xyzz, TEMP[2].xxxx 11: DP3 TEMP[3].x, IN[1].xyzz, IN[1].xyzz 12: RSQ TEMP[3].x, TEMP[3].xxxx 13: MUL TEMP[3].xyz, IN[1].xyzz, TEMP[3].xxxx 14: DP3 TEMP[4].x, TEMP[2].xyzz, TEMP[3].xyzz 15: MUL TEMP[5].xyz, TEMP[4].xxxx, TEMP[2].xyzz 16: MUL TEMP[5].xyz, IMM[0].yyyy, TEMP[5].xyzz 17: ADD TEMP[4].xyz, TEMP[3].xyzz, -TEMP[5].xyzz 18: MUL TEMP[5], CONST[2], TEMP[4].xxxx 19: MAD TEMP[5], CONST[3], TEMP[4].yyyy, TEMP[5] 20: MAD TEMP[4], CONST[4], TEMP[4].zzzz, TEMP[5] 21: ADD TEMP[4].xyz, TEMP[4], CONST[5] 22: TEX TEMP[4], TEMP[4].xyzz, SAMP[1], CUBE 23: TEX TEMP[5].w, IN[0].xyyy, SAMP[0], 2D 24: MUL TEMP[4].xyz, TEMP[4], TEMP[5].wwww 25: ADD TEMP[5].x, IMM[0].xxxx, -CONST[1].xxxx 26: DP3 TEMP[3].x, -TEMP[3].xyzz, TEMP[2].xyzz 27: MAX TEMP[3].x, TEMP[3].xxxx, IMM[0].zzzz 28: ADD TEMP[3].x, IMM[0].xxxx, -TEMP[3].xxxx 29: POW TEMP[3].x, TEMP[3].xxxx, CONST[1].yyyy 30: MAD TEMP[3].x, TEMP[5].xxxx, TEMP[3].xxxx, CONST[1].xxxx 31: MAX TEMP[3].x, TEMP[3].xxxx, IMM[0].zzzz 32: MUL TEMP[3].xyz, TEMP[4].xyzz, TEMP[3].xxxx 33: MUL TEMP[3].xyz, TEMP[3].xyzz, TEMP[1].xxxx 34: MUL TEMP[0].xyz, TEMP[3].xyzz, CONST[9].xxxx 35: DP3 TEMP[2].x, TEMP[2].xyzz, IMM[0].zzww 36: ABS TEMP[2].x, TEMP[2].xxxx 37: ADD TEMP[2].x, IMM[0].xxxx, -TEMP[2].xxxx 38: POW TEMP[2].x, TEMP[2].xxxx, CONST[0].yyyy 39: MUL TEMP[2].x, TEMP[2].xxxx, CONST[0].xxxx 40: MUL TEMP[2].xyz, TEMP[4].xyzz, TEMP[2].xxxx 41: MUL TEMP[1].xyz, TEMP[2].xyzz, TEMP[1].xxxx 42: MAD TEMP[0].xyz, TEMP[1].xyzz, CONST[9].xxxx, TEMP[0].xyzz 43: MOV OUT[0], TEMP[0] 44: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV temp[0].w, const[11].xxxx; 1: ADD temp[1].x, -input[1].zzzz, -const[8].xxxx; 2: RCP temp[2].x, const[8].yyyy; 3: MUL_SAT temp[1].x, temp[1].xxxx, temp[2].xxxx; 4: POW temp[1].x, temp[1].xxxx, const[6].xxxx; 5: ADD temp[2].x, const[11].xxxx, -temp[1].xxxx; 6: MAD temp[1].x, const[7].xxxx, temp[1].xxxx, temp[2].xxxx; 7: MUL temp[1].x, temp[1].xxxx, const[10].xxxx; 8: DP3 temp[2].x, input[2].xyzz, input[2].xyzz; 9: RSQ temp[2].x, temp[2].xxxx; 10: MUL temp[2].xyz, input[2].xyzz, temp[2].xxxx; 11: DP3 temp[3].x, input[1].xyzz, input[1].xyzz; 12: RSQ temp[3].x, temp[3].xxxx; 13: MUL temp[3].xyz, input[1].xyzz, temp[3].xxxx; 14: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 15: MUL temp[5].xyz, temp[4].xxxx, temp[2].xyzz; 16: MUL temp[5].xyz, const[11].yyyy, temp[5].xyzz; 17: ADD temp[4].xyz, temp[3].xyzz, -temp[5].xyzz; 18: MUL temp[5], const[2], temp[4].xxxx; 19: MAD temp[5], const[3], temp[4].yyyy, temp[5]; 20: MAD temp[4], const[4], temp[4].zzzz, temp[5]; 21: ADD temp[4].xyz, temp[4], const[5]; 22: TEX temp[4], temp[4].xyzz, CUBE[1]; 23: TEX temp[5].w, input[0].xyyy, 2D[0]; 24: MUL temp[4].xyz, temp[4], temp[5].wwww; 25: ADD temp[5].x, const[11].xxxx, -const[1].xxxx; 26: DP3 temp[3].x, -temp[3].xyzz, temp[2].xyzz; 27: MAX temp[3].x, temp[3].xxxx, const[11].zzzz; 28: ADD temp[3].x, const[11].xxxx, -temp[3].xxxx; 29: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 30: MAD temp[3].x, temp[5].xxxx, temp[3].xxxx, const[1].xxxx; 31: MAX temp[3].x, temp[3].xxxx, const[11].zzzz; 32: MUL temp[3].xyz, temp[4].xyzz, temp[3].xxxx; 33: MUL temp[3].xyz, temp[3].xyzz, temp[1].xxxx; 34: MUL temp[0].xyz, temp[3].xyzz, const[9].xxxx; 35: DP3 temp[2].x, temp[2].xyzz, const[11].zzww; 36: ABS temp[2].x, temp[2].xxxx; 37: ADD temp[2].x, const[11].xxxx, -temp[2].xxxx; 38: POW temp[2].x, temp[2].xxxx, const[0].yyyy; 39: MUL temp[2].x, temp[2].xxxx, const[0].xxxx; 40: MUL temp[2].xyz, temp[4].xyzz, temp[2].xxxx; 41: MUL temp[1].xyz, temp[2].xyzz, temp[1].xxxx; 42: MAD temp[0].xyz, temp[1].xyzz, const[9].xxxx, temp[0].xyzz; 43: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV temp[0].w, const[11].xxxx; 1: ADD temp[1].x, -input[1].zzzz, -const[8].xxxx; 2: RCP temp[2].x, const[8].yyyy; 3: MUL_SAT temp[1].x, temp[1].xxxx, temp[2].xxxx; 4: POW temp[1].x, temp[1].xxxx, const[6].xxxx; 5: ADD temp[2].x, const[11].xxxx, -temp[1].xxxx; 6: MAD temp[1].x, const[7].xxxx, temp[1].xxxx, temp[2].xxxx; 7: MUL temp[1].x, temp[1].xxxx, const[10].xxxx; 8: DP3 temp[2].x, input[2].xyzz, input[2].xyzz; 9: RSQ temp[2].x, temp[2].xxxx; 10: MUL temp[2].xyz, input[2].xyzz, temp[2].xxxx; 11: DP3 temp[3].x, input[1].xyzz, input[1].xyzz; 12: RSQ temp[3].x, temp[3].xxxx; 13: MUL temp[3].xyz, input[1].xyzz, temp[3].xxxx; 14: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 15: MUL temp[5].xyz, temp[4].xxxx, temp[2].xyzz; 16: MUL temp[5].xyz, const[11].yyyy, temp[5].xyzz; 17: ADD temp[4].xyz, temp[3].xyzz, -temp[5].xyzz; 18: MUL temp[5], const[2], temp[4].xxxx; 19: MAD temp[5], const[3], temp[4].yyyy, temp[5]; 20: MAD temp[4], const[4], temp[4].zzzz, temp[5]; 21: ADD temp[4].xyz, temp[4], const[5]; 22: TEX temp[4], temp[4].xyzz, CUBE[1]; 23: TEX temp[5].w, input[0].xyyy, 2D[0]; 24: MUL temp[4].xyz, temp[4], temp[5].wwww; 25: ADD temp[5].x, const[11].xxxx, -const[1].xxxx; 26: DP3 temp[3].x, -temp[3].xyzz, temp[2].xyzz; 27: MAX temp[3].x, temp[3].xxxx, const[11].zzzz; 28: ADD temp[3].x, const[11].xxxx, -temp[3].xxxx; 29: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 30: MAD temp[3].x, temp[5].xxxx, temp[3].xxxx, const[1].xxxx; 31: MAX temp[3].x, temp[3].xxxx, const[11].zzzz; 32: MUL temp[3].xyz, temp[4].xyzz, temp[3].xxxx; 33: MUL temp[3].xyz, temp[3].xyzz, temp[1].xxxx; 34: MUL temp[0].xyz, temp[3].xyzz, const[9].xxxx; 35: DP3 temp[2].x, temp[2].xyzz, const[11].zzww; 36: ABS temp[2].x, temp[2].xxxx; 37: ADD temp[2].x, const[11].xxxx, -temp[2].xxxx; 38: POW temp[2].x, temp[2].xxxx, const[0].yyyy; 39: MUL temp[2].x, temp[2].xxxx, const[0].xxxx; 40: MUL temp[2].xyz, temp[4].xyzz, temp[2].xxxx; 41: MUL temp[1].xyz, temp[2].xyzz, temp[1].xxxx; 42: MAD temp[0].xyz, temp[1].xyzz, const[9].xxxx, temp[0].xyzz; 43: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV temp[0].w, const[11].xxxx; 1: ADD temp[1].x, -input[1].zzzz, -const[8].xxxx; 2: RCP temp[2].x, const[8].yyyy; 3: MUL_SAT temp[1].x, temp[1].xxxx, temp[2].xxxx; 4: POW temp[1].x, temp[1].xxxx, const[6].xxxx; 5: ADD temp[2].x, const[11].xxxx, -temp[1].xxxx; 6: MAD temp[1].x, const[7].xxxx, temp[1].xxxx, temp[2].xxxx; 7: MUL temp[1].x, temp[1].xxxx, const[10].xxxx; 8: DP3 temp[2].x, input[2].xyzz, input[2].xyzz; 9: RSQ temp[2].x, temp[2].xxxx; 10: MUL temp[2].xyz, input[2].xyzz, temp[2].xxxx; 11: DP3 temp[3].x, input[1].xyzz, input[1].xyzz; 12: RSQ temp[3].x, temp[3].xxxx; 13: MUL temp[3].xyz, input[1].xyzz, temp[3].xxxx; 14: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 15: MUL temp[5].xyz, temp[4].xxxx, temp[2].xyzz; 16: MUL temp[5].xyz, const[11].yyyy, temp[5].xyzz; 17: ADD temp[4].xyz, temp[3].xyzz, -temp[5].xyzz; 18: MUL temp[5], const[2], temp[4].xxxx; 19: MAD temp[5], const[3], temp[4].yyyy, temp[5]; 20: MAD temp[4], const[4], temp[4].zzzz, temp[5]; 21: ADD temp[4].xyz, temp[4], const[5]; 22: TEX temp[4], temp[4].xyzz, CUBE[1]; 23: TEX temp[5].w, input[0].xyyy, 2D[0]; 24: MUL temp[4].xyz, temp[4], temp[5].wwww; 25: ADD temp[5].x, const[11].xxxx, -const[1].xxxx; 26: DP3 temp[3].x, -temp[3].xyzz, temp[2].xyzz; 27: MAX temp[3].x, temp[3].xxxx, const[11].zzzz; 28: ADD temp[3].x, const[11].xxxx, -temp[3].xxxx; 29: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 30: MAD temp[3].x, temp[5].xxxx, temp[3].xxxx, const[1].xxxx; 31: MAX temp[3].x, temp[3].xxxx, const[11].zzzz; 32: MUL temp[3].xyz, temp[4].xyzz, temp[3].xxxx; 33: MUL temp[3].xyz, temp[3].xyzz, temp[1].xxxx; 34: MUL temp[0].xyz, temp[3].xyzz, const[9].xxxx; 35: DP3 temp[2].x, temp[2].xyzz, const[11].zzww; 36: ABS temp[2].x, temp[2].xxxx; 37: ADD temp[2].x, const[11].xxxx, -temp[2].xxxx; 38: POW temp[2].x, temp[2].xxxx, const[0].yyyy; 39: MUL temp[2].x, temp[2].xxxx, const[0].xxxx; 40: MUL temp[2].xyz, temp[4].xyzz, temp[2].xxxx; 41: MUL temp[1].xyz, temp[2].xyzz, temp[1].xxxx; 42: MAD temp[0].xyz, temp[1].xyzz, const[9].xxxx, temp[0].xyzz; 43: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV temp[0].w, const[11].xxxx; 1: ADD temp[1].x, -input[1].zzzz, -const[8].xxxx; 2: RCP temp[2].x, const[8].yyyy; 3: MUL_SAT temp[1].x, temp[1].xxxx, temp[2].xxxx; 4: POW temp[1].x, temp[1].xxxx, const[6].xxxx; 5: ADD temp[2].x, const[11].xxxx, -temp[1].xxxx; 6: MAD temp[1].x, const[7].xxxx, temp[1].xxxx, temp[2].xxxx; 7: MUL temp[1].x, temp[1].xxxx, const[10].xxxx; 8: DP3 temp[2].x, input[2].xyzz, input[2].xyzz; 9: RSQ temp[2].x, temp[2].xxxx; 10: MUL temp[2].xyz, input[2].xyzz, temp[2].xxxx; 11: DP3 temp[3].x, input[1].xyzz, input[1].xyzz; 12: RSQ temp[3].x, temp[3].xxxx; 13: MUL temp[3].xyz, input[1].xyzz, temp[3].xxxx; 14: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 15: MUL temp[5].xyz, temp[4].xxxx, temp[2].xyzz; 16: MUL temp[5].xyz, const[11].yyyy, temp[5].xyzz; 17: ADD temp[4].xyz, temp[3].xyzz, -temp[5].xyzz; 18: MUL temp[5], const[2], temp[4].xxxx; 19: MAD temp[5], const[3], temp[4].yyyy, temp[5]; 20: MAD temp[4], const[4], temp[4].zzzz, temp[5]; 21: ADD temp[4].xyz, temp[4], const[5]; 22: TEX temp[4], temp[4].xyzz, CUBE[1]; 23: TEX temp[5].w, input[0].xyyy, 2D[0]; 24: MUL temp[4].xyz, temp[4], temp[5].wwww; 25: ADD temp[5].x, const[11].xxxx, -const[1].xxxx; 26: DP3 temp[3].x, -temp[3].xyzz, temp[2].xyzz; 27: MAX temp[3].x, temp[3].xxxx, const[11].zzzz; 28: ADD temp[3].x, const[11].xxxx, -temp[3].xxxx; 29: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 30: MAD temp[3].x, temp[5].xxxx, temp[3].xxxx, const[1].xxxx; 31: MAX temp[3].x, temp[3].xxxx, const[11].zzzz; 32: MUL temp[3].xyz, temp[4].xyzz, temp[3].xxxx; 33: MUL temp[3].xyz, temp[3].xyzz, temp[1].xxxx; 34: MUL temp[0].xyz, temp[3].xyzz, const[9].xxxx; 35: DP3 temp[2].x, temp[2].xyzz, const[11].zzww; 36: ABS temp[2].x, temp[2].xxxx; 37: ADD temp[2].x, const[11].xxxx, -temp[2].xxxx; 38: POW temp[2].x, temp[2].xxxx, const[0].yyyy; 39: MUL temp[2].x, temp[2].xxxx, const[0].xxxx; 40: MUL temp[2].xyz, temp[4].xyzz, temp[2].xxxx; 41: MUL temp[1].xyz, temp[2].xyzz, temp[1].xxxx; 42: MAD temp[0].xyz, temp[1].xyzz, const[9].xxxx, temp[0].xyzz; 43: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV temp[0].w, const[11].xxxx; 1: ADD temp[1].x, -input[1].zzzz, -const[8].xxxx; 2: RCP temp[2].x, const[8].yyyy; 3: MUL_SAT temp[1].x, temp[1].xxxx, temp[2].xxxx; 4: POW temp[1].x, temp[1].xxxx, const[6].xxxx; 5: ADD temp[2].x, const[11].xxxx, -temp[1].xxxx; 6: MAD temp[1].x, const[7].xxxx, temp[1].xxxx, temp[2].xxxx; 7: MUL temp[1].x, temp[1].xxxx, const[10].xxxx; 8: DP3 temp[2].x, input[2].xyzz, input[2].xyzz; 9: RSQ temp[2].x, temp[2].xxxx; 10: MUL temp[2].xyz, input[2].xyzz, temp[2].xxxx; 11: DP3 temp[3].x, input[1].xyzz, input[1].xyzz; 12: RSQ temp[3].x, temp[3].xxxx; 13: MUL temp[3].xyz, input[1].xyzz, temp[3].xxxx; 14: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 15: MUL temp[5].xyz, temp[4].xxxx, temp[2].xyzz; 16: MUL temp[5].xyz, const[11].yyyy, temp[5].xyzz; 17: ADD temp[4].xyz, temp[3].xyzz, -temp[5].xyzz; 18: MUL temp[5], const[2], temp[4].xxxx; 19: MAD temp[5], const[3], temp[4].yyyy, temp[5]; 20: MAD temp[4], const[4], temp[4].zzzz, temp[5]; 21: ADD temp[4].xyz, temp[4], const[5]; 22: TEX temp[4], temp[4].xyzz, CUBE[1]; 23: TEX temp[5].w, input[0].xyyy, 2D[0]; 24: MUL temp[4].xyz, temp[4], temp[5].wwww; 25: ADD temp[5].x, const[11].xxxx, -const[1].xxxx; 26: DP3 temp[3].x, -temp[3].xyzz, temp[2].xyzz; 27: MAX temp[3].x, temp[3].xxxx, const[11].zzzz; 28: ADD temp[3].x, const[11].xxxx, -temp[3].xxxx; 29: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 30: MAD temp[3].x, temp[5].xxxx, temp[3].xxxx, const[1].xxxx; 31: MAX temp[3].x, temp[3].xxxx, const[11].zzzz; 32: MUL temp[3].xyz, temp[4].xyzz, temp[3].xxxx; 33: MUL temp[3].xyz, temp[3].xyzz, temp[1].xxxx; 34: MUL temp[0].xyz, temp[3].xyzz, const[9].xxxx; 35: DP3 temp[2].x, temp[2].xyzz, const[11].zzww; 36: ABS temp[2].x, temp[2].xxxx; 37: ADD temp[2].x, const[11].xxxx, -temp[2].xxxx; 38: POW temp[2].x, temp[2].xxxx, const[0].yyyy; 39: MUL temp[2].x, temp[2].xxxx, const[0].xxxx; 40: MUL temp[2].xyz, temp[4].xyzz, temp[2].xxxx; 41: MUL temp[1].xyz, temp[2].xyzz, temp[1].xxxx; 42: MAD temp[0].xyz, temp[1].xyzz, const[9].xxxx, temp[0].xyzz; 43: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV temp[0].w, const[11].xxxx; 1: ADD temp[1].x, -input[1].zzzz, -const[8].xxxx; 2: RCP temp[2].x, const[8].yyyy; 3: MUL_SAT temp[1].x, temp[1].xxxx, temp[2].xxxx; 4: POW temp[1].x, temp[1].xxxx, const[6].xxxx; 5: ADD temp[2].x, const[11].xxxx, -temp[1].xxxx; 6: MAD temp[1].x, const[7].xxxx, temp[1].xxxx, temp[2].xxxx; 7: MUL temp[1].x, temp[1].xxxx, const[10].xxxx; 8: DP3 temp[2].x, input[2].xyzz, input[2].xyzz; 9: RSQ temp[2].x, temp[2].xxxx; 10: MUL temp[2].xyz, input[2].xyzz, temp[2].xxxx; 11: DP3 temp[3].x, input[1].xyzz, input[1].xyzz; 12: RSQ temp[3].x, temp[3].xxxx; 13: MUL temp[3].xyz, input[1].xyzz, temp[3].xxxx; 14: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 15: MUL temp[5].xyz, temp[4].xxxx, temp[2].xyzz; 16: MUL temp[5].xyz, const[11].yyyy, temp[5].xyzz; 17: ADD temp[4].xyz, temp[3].xyzz, -temp[5].xyzz; 18: MUL temp[5], const[2], temp[4].xxxx; 19: MAD temp[5], const[3], temp[4].yyyy, temp[5]; 20: MAD temp[4], const[4], temp[4].zzzz, temp[5]; 21: ADD temp[4].xyz, temp[4], const[5]; 22: TEX temp[4], temp[4].xyzz, CUBE[1]; 23: TEX temp[6], input[0].xyyy, 2D[0]; 24: MOV temp[5].w, temp[6]; 25: MUL temp[4].xyz, temp[4], temp[5].wwww; 26: ADD temp[5].x, const[11].xxxx, -const[1].xxxx; 27: DP3 temp[3].x, -temp[3].xyzz, temp[2].xyzz; 28: MAX temp[3].x, temp[3].xxxx, const[11].zzzz; 29: ADD temp[3].x, const[11].xxxx, -temp[3].xxxx; 30: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 31: MAD temp[3].x, temp[5].xxxx, temp[3].xxxx, const[1].xxxx; 32: MAX temp[3].x, temp[3].xxxx, const[11].zzzz; 33: MUL temp[3].xyz, temp[4].xyzz, temp[3].xxxx; 34: MUL temp[3].xyz, temp[3].xyzz, temp[1].xxxx; 35: MUL temp[0].xyz, temp[3].xyzz, const[9].xxxx; 36: DP3 temp[2].x, temp[2].xyzz, const[11].zzww; 37: ABS temp[2].x, temp[2].xxxx; 38: ADD temp[2].x, const[11].xxxx, -temp[2].xxxx; 39: POW temp[2].x, temp[2].xxxx, const[0].yyyy; 40: MUL temp[2].x, temp[2].xxxx, const[0].xxxx; 41: MUL temp[2].xyz, temp[4].xyzz, temp[2].xxxx; 42: MUL temp[1].xyz, temp[2].xyzz, temp[1].xxxx; 43: MAD temp[0].xyz, temp[1].xyzz, const[9].xxxx, temp[0].xyzz; 44: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV temp[0].w, const[11].xxxx; 1: ADD temp[1].x, -input[1].zzzz, -const[8].xxxx; 2: RCP temp[2].x, const[8].yyyy; 3: MUL_SAT temp[1].x, temp[1].xxxx, temp[2].xxxx; 4: LG2 temp[7].w, temp[1].xxxx; 5: MUL temp[7].w, temp[7].wwww, const[6].xxxx; 6: EX2 temp[1].x, temp[7].wwww; 7: ADD temp[2].x, const[11].xxxx, -temp[1].xxxx; 8: MAD temp[1].x, const[7].xxxx, temp[1].xxxx, temp[2].xxxx; 9: MUL temp[1].x, temp[1].xxxx, const[10].xxxx; 10: DP3 temp[2].x, input[2].xyzz, input[2].xyzz; 11: RSQ temp[2].x, |temp[2].xxxx|; 12: MUL temp[2].xyz, input[2].xyzz, temp[2].xxxx; 13: DP3 temp[3].x, input[1].xyzz, input[1].xyzz; 14: RSQ temp[3].x, |temp[3].xxxx|; 15: MUL temp[3].xyz, input[1].xyzz, temp[3].xxxx; 16: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 17: MUL temp[5].xyz, temp[4].xxxx, temp[2].xyzz; 18: MUL temp[5].xyz, const[11].yyyy, temp[5].xyzz; 19: ADD temp[4].xyz, temp[3].xyzz, -temp[5].xyzz; 20: MUL temp[5], const[2], temp[4].xxxx; 21: MAD temp[5], const[3], temp[4].yyyy, temp[5]; 22: MAD temp[4], const[4], temp[4].zzzz, temp[5]; 23: ADD temp[4].xyz, temp[4], const[5]; 24: TEX temp[4], temp[4].xyzz, CUBE[1]; 25: TEX temp[6], input[0].xyyy, 2D[0]; 26: MOV temp[5].w, temp[6]; 27: MUL temp[4].xyz, temp[4], temp[5].wwww; 28: ADD temp[5].x, const[11].xxxx, -const[1].xxxx; 29: DP3 temp[3].x, -temp[3].xyzz, temp[2].xyzz; 30: MAX temp[3].x, temp[3].xxxx, const[11].zzzz; 31: ADD temp[3].x, const[11].xxxx, -temp[3].xxxx; 32: LG2 temp[8].w, temp[3].xxxx; 33: MUL temp[8].w, temp[8].wwww, const[1].yyyy; 34: EX2 temp[3].x, temp[8].wwww; 35: MAD temp[3].x, temp[5].xxxx, temp[3].xxxx, const[1].xxxx; 36: MAX temp[3].x, temp[3].xxxx, const[11].zzzz; 37: MUL temp[3].xyz, temp[4].xyzz, temp[3].xxxx; 38: MUL temp[3].xyz, temp[3].xyzz, temp[1].xxxx; 39: MUL temp[0].xyz, temp[3].xyzz, const[9].xxxx; 40: DP3 temp[2].x, temp[2].xyzz, const[11].zzww; 41: MOV temp[2].x, |temp[2].xxxx|; 42: ADD temp[2].x, const[11].xxxx, -temp[2].xxxx; 43: LG2 temp[9].w, temp[2].xxxx; 44: MUL temp[9].w, temp[9].wwww, const[0].yyyy; 45: EX2 temp[2].x, temp[9].wwww; 46: MUL temp[2].x, temp[2].xxxx, const[0].xxxx; 47: MUL temp[2].xyz, temp[4].xyzz, temp[2].xxxx; 48: MUL temp[1].xyz, temp[2].xyzz, temp[1].xxxx; 49: MAD temp[0].xyz, temp[1].xyzz, const[9].xxxx, temp[0].xyzz; 50: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV temp[0].w, const[11].___x; 1: ADD temp[1].x, -input[1].z___, -const[8].x___; 2: RCP temp[2].x, const[8].y___; 3: MUL_SAT temp[1].x, temp[1].x___, temp[2].x___; 4: LG2 temp[7].w, temp[1].___x; 5: MUL temp[7].w, temp[7].___w, const[6].___x; 6: EX2 temp[1].x, temp[7].w___; 7: ADD temp[2].x, const[11].x___, -temp[1].x___; 8: MAD temp[1].x, const[7].x___, temp[1].x___, temp[2].x___; 9: MUL temp[1].x, temp[1].x___, const[10].x___; 10: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 11: RSQ temp[2].x, |temp[2].x___|; 12: MUL temp[2].xyz, input[2].xyz_, temp[2].xxx_; 13: DP3 temp[3].x, input[1].xyz_, input[1].xyz_; 14: RSQ temp[3].x, |temp[3].x___|; 15: MUL temp[3].xyz, input[1].xyz_, temp[3].xxx_; 16: DP3 temp[4].x, temp[2].xyz_, temp[3].xyz_; 17: MUL temp[5].xyz, temp[4].xxx_, temp[2].xyz_; 18: MUL temp[5].xyz, const[11].yyy_, temp[5].xyz_; 19: ADD temp[4].xyz, temp[3].xyz_, -temp[5].xyz_; 20: MUL temp[5].xyz, const[2].xyz_, temp[4].xxx_; 21: MAD temp[5].xyz, const[3].xyz_, temp[4].yyy_, temp[5].xyz_; 22: MAD temp[4].xyz, const[4].xyz_, temp[4].zzz_, temp[5].xyz_; 23: ADD temp[4].xyz, temp[4].xyz_, const[5].xyz_; 24: TEX temp[4].xyz, temp[4].xyz_, CUBE[1]; 25: TEX temp[6].w, input[0].xy__, 2D[0]; 26: MOV temp[5].w, temp[6].___w; 27: MUL temp[4].xyz, temp[4].xyz_, temp[5].www_; 28: ADD temp[5].x, const[11].x___, -const[1].x___; 29: DP3 temp[3].x, -temp[3].xyz_, temp[2].xyz_; 30: MAX temp[3].x, temp[3].x___, const[11].z___; 31: ADD temp[3].x, const[11].x___, -temp[3].x___; 32: LG2 temp[8].w, temp[3].___x; 33: MUL temp[8].w, temp[8].___w, const[1].___y; 34: EX2 temp[3].x, temp[8].w___; 35: MAD temp[3].x, temp[5].x___, temp[3].x___, const[1].x___; 36: MAX temp[3].x, temp[3].x___, const[11].z___; 37: MUL temp[3].xyz, temp[4].xyz_, temp[3].xxx_; 38: MUL temp[3].xyz, temp[3].xyz_, temp[1].xxx_; 39: MUL temp[0].xyz, temp[3].xyz_, const[9].xxx_; 40: DP3 temp[2].x, temp[2].xyz_, const[11].zzw_; 41: MOV temp[2].x, |temp[2].x___|; 42: ADD temp[2].x, const[11].x___, -temp[2].x___; 43: LG2 temp[9].w, temp[2].___x; 44: MUL temp[9].w, temp[9].___w, const[0].___y; 45: EX2 temp[2].x, temp[9].w___; 46: MUL temp[2].x, temp[2].x___, const[0].x___; 47: MUL temp[2].xyz, temp[4].xyz_, temp[2].xxx_; 48: MUL temp[1].xyz, temp[2].xyz_, temp[1].xxx_; 49: MAD temp[0].xyz, temp[1].xyz_, const[9].xxx_, temp[0].xyz_; 50: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV temp[0].w, const[11].___x; 1: ADD temp[1].x, -input[1].z___, -const[8].x___; 2: RCP temp[2].x, const[8].y___; 3: MUL_SAT temp[1].x, temp[1].x___, temp[2].x___; 4: LG2 temp[7].w, temp[1].___x; 5: MUL temp[7].w, temp[7].___w, const[6].___x; 6: EX2 temp[1].x, temp[7].w___; 7: ADD temp[2].x, const[11].x___, -temp[1].x___; 8: MAD temp[1].x, const[7].x___, temp[1].x___, temp[2].x___; 9: MUL temp[1].x, temp[1].x___, const[10].x___; 10: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 11: RSQ temp[2].x, |temp[2].x___|; 12: MUL temp[2].xyz, input[2].xyz_, temp[2].xxx_; 13: DP3 temp[3].x, input[1].xyz_, input[1].xyz_; 14: RSQ temp[3].x, |temp[3].x___|; 15: MUL temp[3].xyz, input[1].xyz_, temp[3].xxx_; 16: DP3 temp[4].x, temp[2].xyz_, temp[3].xyz_; 17: MUL temp[5].xyz, temp[4].xxx_, temp[2].xyz_; 18: MUL temp[5].xyz, const[11].yyy_, temp[5].xyz_; 19: ADD temp[4].xyz, temp[3].xyz_, -temp[5].xyz_; 20: MUL temp[5].xyz, const[2].xyz_, temp[4].xxx_; 21: MAD temp[5].xyz, const[3].xyz_, temp[4].yyy_, temp[5].xyz_; 22: MAD temp[4].xyz, const[4].xyz_, temp[4].zzz_, temp[5].xyz_; 23: ADD temp[4].xyz, temp[4].xyz_, const[5].xyz_; 24: TEX temp[4].xyz, temp[4].xyz_, CUBE[1]; 25: TEX temp[6].w, input[0].xy__, 2D[0]; 26: MOV temp[5].w, temp[6].___w; 27: MUL temp[4].xyz, temp[4].xyz_, temp[5].www_; 28: ADD temp[5].x, const[11].x___, -const[1].x___; 29: DP3 temp[3].x, -temp[3].xyz_, temp[2].xyz_; 30: MAX temp[3].x, temp[3].x___, const[11].z___; 31: ADD temp[3].x, const[11].x___, -temp[3].x___; 32: LG2 temp[8].w, temp[3].___x; 33: MUL temp[8].w, temp[8].___w, const[1].___y; 34: EX2 temp[3].x, temp[8].w___; 35: MAD temp[3].x, temp[5].x___, temp[3].x___, const[1].x___; 36: MAX temp[3].x, temp[3].x___, const[11].z___; 37: MUL temp[3].xyz, temp[4].xyz_, temp[3].xxx_; 38: MUL temp[3].xyz, temp[3].xyz_, temp[1].xxx_; 39: MUL temp[0].xyz, temp[3].xyz_, const[9].xxx_; 40: DP3 temp[2].x, temp[2].xyz_, const[11].zzw_; 41: MOV temp[2].x, |temp[2].x___|; 42: ADD temp[2].x, const[11].x___, -temp[2].x___; 43: LG2 temp[9].w, temp[2].___x; 44: MUL temp[9].w, temp[9].___w, const[0].___y; 45: EX2 temp[2].x, temp[9].w___; 46: MUL temp[2].x, temp[2].x___, const[0].x___; 47: MUL temp[2].xyz, temp[4].xyz_, temp[2].xxx_; 48: MUL temp[1].xyz, temp[2].xyz_, temp[1].xxx_; 49: MAD temp[0].xyz, temp[1].xyz_, const[9].xxx_, temp[0].xyz_; 50: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV temp[10].w, const[11].___x; 1: ADD temp[11].x, -input[1].z___, -const[8].x___; 2: RCP temp[12].x, const[8].y___; 3: MUL_SAT temp[13].x, temp[11].x___, temp[12].x___; 4: LG2 temp[14].w, temp[13].___x; 5: MUL temp[15].w, temp[14].___w, const[6].___x; 6: EX2 temp[16].x, temp[15].w___; 7: ADD temp[17].x, const[11].x___, -temp[16].x___; 8: MAD temp[18].x, const[7].x___, temp[16].x___, temp[17].x___; 9: MUL temp[19].x, temp[18].x___, const[10].x___; 10: DP3 temp[20].x, input[2].xyz_, input[2].xyz_; 11: RSQ temp[21].x, |temp[20].x___|; 12: MUL temp[22].xyz, input[2].xyz_, temp[21].xxx_; 13: DP3 temp[23].x, input[1].xyz_, input[1].xyz_; 14: RSQ temp[24].x, |temp[23].x___|; 15: MUL temp[25].xyz, input[1].xyz_, temp[24].xxx_; 16: DP3 temp[26].x, temp[22].xyz_, temp[25].xyz_; 17: MUL temp[27].xyz, temp[26].xxx_, temp[22].xyz_; 18: MUL temp[28].xyz, const[11].yyy_, temp[27].xyz_; 19: ADD temp[29].xyz, temp[25].xyz_, -temp[28].xyz_; 20: MUL temp[30].xyz, const[2].xyz_, temp[29].xxx_; 21: MAD temp[31].xyz, const[3].xyz_, temp[29].yyy_, temp[30].xyz_; 22: MAD temp[32].xyz, const[4].xyz_, temp[29].zzz_, temp[31].xyz_; 23: ADD temp[33].xyz, temp[32].xyz_, const[5].xyz_; 24: TEX temp[34].xyz, temp[33].xyz_, CUBE[1]; 25: TEX temp[35].w, input[0].xy__, 2D[0]; 26: MOV temp[36].w, temp[35].___w; 27: MUL temp[37].xyz, temp[34].xyz_, temp[36].www_; 28: ADD temp[38].x, const[11].x___, -const[1].x___; 29: DP3 temp[39].x, -temp[25].xyz_, temp[22].xyz_; 30: MAX temp[40].x, temp[39].x___, const[11].z___; 31: ADD temp[41].x, const[11].x___, -temp[40].x___; 32: LG2 temp[42].w, temp[41].___x; 33: MUL temp[43].w, temp[42].___w, const[1].___y; 34: EX2 temp[44].x, temp[43].w___; 35: MAD temp[45].x, temp[38].x___, temp[44].x___, const[1].x___; 36: MAX temp[46].x, temp[45].x___, const[11].z___; 37: MUL temp[47].xyz, temp[37].xyz_, temp[46].xxx_; 38: MUL temp[48].xyz, temp[47].xyz_, temp[19].xxx_; 39: MUL temp[49].xyz, temp[48].xyz_, const[9].xxx_; 40: DP3 temp[50].x, temp[22].xyz_, const[11].zzw_; 41: MOV temp[51].x, |temp[50].x___|; 42: ADD temp[52].x, const[11].x___, -temp[51].x___; 43: LG2 temp[53].w, temp[52].___x; 44: MUL temp[54].w, temp[53].___w, const[0].___y; 45: EX2 temp[55].x, temp[54].w___; 46: MUL temp[56].x, temp[55].x___, const[0].x___; 47: MUL temp[57].xyz, temp[37].xyz_, temp[56].xxx_; 48: MUL temp[58].xyz, temp[57].xyz_, temp[19].xxx_; 49: MAD temp[10].xyz, temp[58].xyz_, const[9].xxx_, temp[49].xyz_; 50: MOV output[0], temp[10]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV temp[10].w, none.___1; 1: ADD temp[11].x, -input[1].z___, -const[8].x___; 2: RCP temp[12].x, const[8].y___; 3: MUL_SAT temp[13].x, temp[11].x___, temp[12].x___; 4: LG2 temp[14].w, temp[13].___x; 5: MUL temp[15].w, temp[14].___w, const[6].___x; 6: EX2 temp[16].x, temp[15].w___; 7: ADD temp[17].x, none.1___, -temp[16].x___; 8: MAD temp[18].x, const[7].x___, temp[16].x___, temp[17].x___; 9: MUL temp[19].x, temp[18].x___, const[10].x___; 10: DP3 temp[20].x, input[2].xyz_, input[2].xyz_; 11: RSQ temp[21].x, |temp[20].x___|; 12: MUL temp[22].xyz, input[2].xyz_, temp[21].xxx_; 13: DP3 temp[23].x, input[1].xyz_, input[1].xyz_; 14: RSQ temp[24].x, |temp[23].x___|; 15: MUL temp[25].xyz, input[1].xyz_, temp[24].xxx_; 16: DP3 temp[26].x, temp[22].xyz_, temp[25].xyz_; 17: MUL temp[28].xyz * 2, temp[26].xxx_, temp[22].xyz_; 18: ADD temp[29].xyz, temp[25].xyz_, -temp[28].xyz_; 19: MUL temp[30].xyz, const[2].xyz_, temp[29].xxx_; 20: MAD temp[31].xyz, const[3].xyz_, temp[29].yyy_, temp[30].xyz_; 21: MAD temp[32].xyz, const[4].xyz_, temp[29].zzz_, temp[31].xyz_; 22: ADD temp[33].xyz, temp[32].xyz_, const[5].xyz_; 23: TEX temp[34].xyz, temp[33].xyz_, CUBE[1]; 24: TEX temp[35].w, input[0].xy__, 2D[0]; 25: MUL temp[37].xyz, temp[34].xyz_, temp[35].www_; 26: ADD temp[38].x, none.1___, -const[1].x___; 27: DP3 temp[39].x, -temp[25].xyz_, temp[22].xyz_; 28: MAX temp[40].x, temp[39].x___, none.0___; 29: ADD temp[41].x, none.1___, -temp[40].x___; 30: LG2 temp[42].w, temp[41].___x; 31: MUL temp[43].w, temp[42].___w, const[1].___y; 32: EX2 temp[44].x, temp[43].w___; 33: MAD temp[45].x, temp[38].x___, temp[44].x___, const[1].x___; 34: MAX temp[46].x, temp[45].x___, none.0___; 35: MUL temp[47].xyz, temp[37].xyz_, temp[46].xxx_; 36: MUL temp[48].xyz, temp[47].xyz_, temp[19].xxx_; 37: MUL temp[49].xyz, temp[48].xyz_, const[9].xxx_; 38: DP3 temp[50].x, temp[22].xyz_, none.00-1_; 39: ADD temp[52].x, none.1___, -|temp[50].x___|; 40: LG2 temp[53].w, temp[52].___x; 41: MUL temp[54].w, temp[53].___w, const[0].___y; 42: EX2 temp[55].x, temp[54].w___; 43: MUL temp[56].x, temp[55].x___, const[0].x___; 44: MUL temp[57].xyz, temp[37].xyz_, temp[56].xxx_; 45: MUL temp[58].xyz, temp[57].xyz_, temp[19].xxx_; 46: MAD temp[10].xyz, temp[58].xyz_, const[9].xxx_, temp[49].xyz_; 47: MOV output[0], temp[10]; CONST[11] = { 1.0000 2.0000 0.0000 -1.0000 } CONST[12] = { 0.0000 0.0000 -1.0000 0.0000 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV temp[10].w, none.___1; 1: ADD temp[11].x, -input[1].z___, -const[8].x___; 2: RCP temp[12].x, const[8].y___; 3: MUL_SAT temp[13].x, temp[11].x___, temp[12].x___; 4: LG2 temp[14].w, temp[13].___x; 5: MUL temp[15].w, temp[14].___w, const[6].___x; 6: EX2 temp[16].x, temp[15].w___; 7: ADD temp[17].x, none.1___, -temp[16].x___; 8: MAD temp[18].x, const[7].x___, temp[16].x___, temp[17].x___; 9: MUL temp[19].x, temp[18].x___, const[10].x___; 10: DP3 temp[20].x, input[2].xyz_, input[2].xyz_; 11: RSQ temp[21].x, |temp[20].x___|; 12: MUL temp[22].xyz, input[2].xyz_, temp[21].xxx_; 13: DP3 temp[23].x, input[1].xyz_, input[1].xyz_; 14: RSQ temp[24].x, |temp[23].x___|; 15: MUL temp[25].xyz, input[1].xyz_, temp[24].xxx_; 16: DP3 temp[26].x, temp[22].xyz_, temp[25].xyz_; 17: MUL temp[28].xyz * 2, temp[26].xxx_, temp[22].xyz_; 18: ADD temp[29].xyz, temp[25].xyz_, -temp[28].xyz_; 19: MUL temp[30].xyz, const[2].xyz_, temp[29].xxx_; 20: MAD temp[31].xyz, const[3].xyz_, temp[29].yyy_, temp[30].xyz_; 21: MAD temp[32].xyz, const[4].xyz_, temp[29].zzz_, temp[31].xyz_; 22: ADD temp[33].xyz, temp[32].xyz_, const[5].xyz_; 23: TEX temp[34].xyz, temp[33].xyz_, CUBE[1]; 24: TEX temp[35].w, input[0].xy__, 2D[0]; 25: MUL temp[37].xyz, temp[34].xyz_, temp[35].www_; 26: ADD temp[38].x, none.1___, -const[1].x___; 27: DP3 temp[39].x, -temp[25].xyz_, temp[22].xyz_; 28: MAX temp[40].x, temp[39].x___, none.0___; 29: ADD temp[41].x, none.1___, -temp[40].x___; 30: LG2 temp[42].w, temp[41].___x; 31: MUL temp[43].w, temp[42].___w, const[1].___y; 32: EX2 temp[44].x, temp[43].w___; 33: MAD temp[45].x, temp[38].x___, temp[44].x___, const[1].x___; 34: MAX temp[46].x, temp[45].x___, none.0___; 35: MUL temp[47].xyz, temp[37].xyz_, temp[46].xxx_; 36: MUL temp[48].xyz, temp[47].xyz_, temp[19].xxx_; 37: MUL temp[49].xyz, temp[48].xyz_, const[9].xxx_; 38: DP3 temp[50].x, temp[22].xyz_, const[12].xyz_; 39: ADD temp[52].x, none.1___, -|temp[50].x___|; 40: LG2 temp[53].w, temp[52].___x; 41: MUL temp[54].w, temp[53].___w, const[0].___y; 42: EX2 temp[55].x, temp[54].w___; 43: MUL temp[56].x, temp[55].x___, const[0].x___; 44: MUL temp[57].xyz, temp[37].xyz_, temp[56].xxx_; 45: MUL temp[58].xyz, temp[57].xyz_, temp[19].xxx_; 46: MAD temp[10].xyz, temp[58].xyz_, const[9].xxx_, temp[49].xyz_; 47: MOV output[0], temp[10]; CONST[11] = { 0.0000 0.0000 -1.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[10].w, none.___1; 1: ADD temp[11].x, -input[1].z___, -const[8].x___; 2: RCP temp[12].x, const[8].y___; 3: MUL_SAT temp[13].x, temp[11].x___, temp[12].x___; 4: LG2 temp[14].w, temp[13].___x; 5: MUL temp[15].w, temp[14].___w, const[6].___x; 6: EX2 temp[16].x, temp[15].w___; 7: ADD temp[17].x, none.1___, -temp[16].x___; 8: MAD temp[18].x, const[7].x___, temp[16].x___, temp[17].x___; 9: MUL temp[19].x, temp[18].x___, const[10].x___; 10: DP3 temp[20].x, input[2].xyz_, input[2].xyz_; 11: RSQ temp[21].x, |temp[20].x___|; 12: MUL temp[22].xyz, input[2].xyz_, temp[21].xxx_; 13: DP3 temp[23].x, input[1].xyz_, input[1].xyz_; 14: RSQ temp[24].x, |temp[23].x___|; 15: MUL temp[25].xyz, input[1].xyz_, temp[24].xxx_; 16: DP3 temp[26].x, temp[22].xyz_, temp[25].xyz_; 17: MUL temp[28].xyz * 2, temp[26].xxx_, temp[22].xyz_; 18: ADD temp[29].xyz, temp[25].xyz_, -temp[28].xyz_; 19: MUL temp[30].xyz, const[2].xyz_, temp[29].xxx_; 20: MAD temp[31].xyz, const[3].xyz_, temp[29].yyy_, temp[30].xyz_; 21: MAD temp[32].xyz, const[4].xyz_, temp[29].zzz_, temp[31].xyz_; 22: ADD temp[33].xyz, temp[32].xyz_, const[5].xyz_; 23: TEX temp[34].xyz, temp[33].xyz_, CUBE[1]; 24: TEX temp[35].w, input[0].xy__, 2D[0]; 25: MUL temp[37].xyz, temp[34].xyz_, temp[35].www_; 26: ADD temp[38].x, none.1___, -const[1].x___; 27: DP3 temp[39].x, -temp[25].xyz_, temp[22].xyz_; 28: MAX temp[40].x, temp[39].x___, none.0___; 29: ADD temp[41].x, none.1___, -temp[40].x___; 30: LG2 temp[42].w, temp[41].___x; 31: MUL temp[43].w, temp[42].___w, const[1].___y; 32: EX2 temp[44].x, temp[43].w___; 33: MAD temp[45].x, temp[38].x___, temp[44].x___, const[1].x___; 34: MAX temp[46].x, temp[45].x___, none.0___; 35: MUL temp[47].xyz, temp[37].xyz_, temp[46].xxx_; 36: MUL temp[48].xyz, temp[47].xyz_, temp[19].xxx_; 37: MUL temp[49].xyz, temp[48].xyz_, const[9].xxx_; 38: DP3 temp[50].x, temp[22].xyz_, const[11].xyz_; 39: ADD temp[52].x, none.1___, -|temp[50].x___|; 40: LG2 temp[53].w, temp[52].___x; 41: MUL temp[54].w, temp[53].___w, const[0].___y; 42: EX2 temp[55].x, temp[54].w___; 43: MUL temp[56].x, temp[55].x___, const[0].x___; 44: MUL temp[57].xyz, temp[37].xyz_, temp[56].xxx_; 45: MUL temp[58].xyz, temp[57].xyz_, temp[19].xxx_; 46: MAD temp[10].xyz, temp[58].xyz_, const[9].xxx_, temp[49].xyz_; 47: MOV output[0], temp[10]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: MAD temp[10].w, src0.1, src0.1, src0.0 1: src0.xyz = input[1], src1.xyz = const[8] MAD temp[11].x, -src0.z__, src0.111, -src1.x__ 2: src0.xyz = const[8] REPL_ALPHA temp[12].x RCP, src0.y 3: src0.xyz = temp[11], src1.xyz = temp[12] MAD_SAT temp[13].x, src0.x__, src1.x__, src0.000 4: src0.xyz = temp[13] LG2 temp[14].w, src0.x 5: src0.xyz = const[6], src0.w = temp[14] MAD temp[15].w, src0.w, src0.x, src0.0 6: src0.w = temp[15] REPL_ALPHA temp[16].x EX2, src0.w 7: src0.xyz = temp[16] MAD temp[17].x, src0.1__, src0.111, -src0.x__ 8: src0.xyz = const[7], src1.xyz = temp[16], src2.xyz = temp[17] MAD temp[18].x, src0.x__, src1.x__, src2.x__ 9: src0.xyz = temp[18], src1.xyz = const[10] MAD temp[19].x, src0.x__, src1.x__, src0.000 10: src0.xyz = input[2] DP3 temp[20].x, src0.xyz, src0.xyz 11: src0.xyz = temp[20] REPL_ALPHA temp[21].x RSQ, |src0.x| 12: src0.xyz = input[2], src1.xyz = temp[21] MAD temp[22].xyz, src0.xyz, src1.xxx, src0.000 13: src0.xyz = input[1] DP3 temp[23].x, src0.xyz, src0.xyz 14: src0.xyz = temp[23] REPL_ALPHA temp[24].x RSQ, |src0.x| 15: src0.xyz = input[1], src1.xyz = temp[24] MAD temp[25].xyz, src0.xyz, src1.xxx, src0.000 16: src0.xyz = temp[22], src1.xyz = temp[25] DP3 temp[26].x, src0.xyz, src1.xyz 17: src0.xyz = temp[26], src1.xyz = temp[22] MAD temp[28].xyz * 2, src0.xxx, src1.xyz, src0.000 18: src0.xyz = temp[25], src1.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src0.111, -src1.xyz 19: src0.xyz = const[2], src1.xyz = temp[29] MAD temp[30].xyz, src0.xyz, src1.xxx, src0.000 20: src0.xyz = const[3], src1.xyz = temp[29], src2.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.yyy, src2.xyz 21: src0.xyz = const[4], src1.xyz = temp[29], src2.xyz = temp[31] MAD temp[32].xyz, src0.xyz, src1.zzz, src2.xyz 22: src0.xyz = temp[32], src1.xyz = const[5] MAD temp[33].xyz, src0.xyz, src0.111, src1.xyz 23: TEX temp[34].xyz, temp[33].xyz_, CUBE[1]; 24: TEX temp[35].w, input[0].xy__, 2D[0]; 25: src0.xyz = temp[34], src0.w = temp[35] MAD temp[37].xyz, src0.xyz, src0.www, src0.000 26: src0.xyz = const[1] MAD temp[38].x, src0.1__, src0.111, -src0.x__ 27: src0.xyz = temp[25], src1.xyz = temp[22] DP3 temp[39].x, -src0.xyz, src1.xyz 28: src0.xyz = temp[39] MAX temp[40].x, src0.x__, src0.0__ 29: src0.xyz = temp[40] MAD temp[41].x, src0.1__, src0.111, -src0.x__ 30: src0.xyz = temp[41] LG2 temp[42].w, src0.x 31: src0.xyz = const[1], src0.w = temp[42] MAD temp[43].w, src0.w, src0.y, src0.0 32: src0.w = temp[43] REPL_ALPHA temp[44].x EX2, src0.w 33: src0.xyz = temp[38], src1.xyz = temp[44], src2.xyz = const[1] MAD temp[45].x, src0.x__, src1.x__, src2.x__ 34: src0.xyz = temp[45] MAX temp[46].x, src0.x__, src0.0__ 35: src0.xyz = temp[37], src1.xyz = temp[46] MAD temp[47].xyz, src0.xyz, src1.xxx, src0.000 36: src0.xyz = temp[47], src1.xyz = temp[19] MAD temp[48].xyz, src0.xyz, src1.xxx, src0.000 37: src0.xyz = temp[48], src1.xyz = const[9] MAD temp[49].xyz, src0.xyz, src1.xxx, src0.000 38: src0.xyz = temp[22], src1.xyz = const[11] DP3 temp[50].x, src0.xyz, src1.xyz 39: src0.xyz = temp[50] MAD temp[52].x, src0.1__, |src0.111|, -|src0.x__| 40: src0.xyz = temp[52] LG2 temp[53].w, src0.x 41: src0.xyz = const[0], src0.w = temp[53] MAD temp[54].w, src0.w, src0.y, src0.0 42: src0.w = temp[54] REPL_ALPHA temp[55].x EX2, src0.w 43: src0.xyz = temp[55], src1.xyz = const[0] MAD temp[56].x, src0.x__, src1.x__, src0.000 44: src0.xyz = temp[37], src1.xyz = temp[56] MAD temp[57].xyz, src0.xyz, src1.xxx, src0.000 45: src0.xyz = temp[57], src1.xyz = temp[19] MAD temp[58].xyz, src0.xyz, src1.xxx, src0.000 46: src0.xyz = temp[58], src1.xyz = const[9], src2.xyz = temp[49] MAD temp[10].xyz, src0.xyz, src1.xxx, src2.xyz 47: src0.xyz = temp[10], src0.w = temp[10] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[1], src1.xyz = const[1] DP3 temp[23].x, src0.xyz, src0.xyz MAD temp[38].w, src0.1, src0.1, -src1.x 1: src0.xyz = input[2], src1.xyz = const[8] DP3 temp[20].x, src0.xyz, src0.xyz RCP temp[12].w, src1.y 2: src0.xyz = input[1], src1.xyz = const[8] MAD temp[11].x, -src0.z__, src0.111, -src1.x__ MAD temp[10].w, src0.1, src0.1, src0.0 3: src0.xyz = temp[11], src0.w = temp[12], src1.xyz = temp[12], src2.xyz = temp[23] MAD_SAT temp[13].x, src0.x__, src0.w__, src0.000 RSQ temp[24].w, |src2.x| 4: src0.xyz = input[1], src0.w = temp[24], src1.xyz = temp[24], src2.xyz = temp[20] MAD temp[25].xyz, src0.xyz, src0.www, src0.000 RSQ temp[21].w, |src2.x| 5: src0.xyz = input[2], src0.w = temp[21], src1.xyz = temp[21], src2.xyz = temp[13] MAD temp[22].xyz, src0.xyz, src0.www, src0.000 LG2 temp[14].w, src2.x 6: src0.xyz = temp[22], src0.w = temp[14], src1.xyz = const[11], src2.xyz = const[6] DP3 temp[50].x, src0.xyz, src1.xyz MAD temp[15].w, src0.w, src2.x, src0.0 7: src0.xyz = temp[25], src1.xyz = temp[22], src2.xyz = temp[50] DP3 temp[39].x, -src0.xyz, src1.xyz MAD temp[52].w, src0.1, |src0.1|, -|src2.x| 8: src0.xyz = temp[22], src0.w = temp[52], src1.xyz = temp[25] DP3 temp[26].x, src0.xyz, src1.xyz LG2 temp[53].w, src0.w 9: src0.xyz = temp[26], src0.w = temp[53], src1.xyz = temp[22], src2.xyz = const[0] MAD temp[28].xyz * 2, src0.xxx, src1.xyz, src0.000 MAD temp[54].w, src0.w, src2.y, src0.0 10: src0.xyz = temp[25], src0.w = temp[54], src1.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src0.111, -src1.xyz EX2 temp[55].w, src0.w 11: src0.xyz = const[2], src0.w = temp[55], src1.xyz = temp[29], src2.xyz = const[0] MAD temp[30].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[56].w, src0.w, src2.x, src0.0 12: src0.xyz = temp[39], src0.w = temp[15] MAX temp[40].x, src0.x__, src0.0__ EX2 temp[16].w, src0.w 13: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[40] MAD temp[17].x, src0.1__, src0.111, -src0.w__ MAD temp[41].w, src0.1, src0.1, -src1.x 14: src0.xyz = const[3], src0.w = temp[41], src1.xyz = temp[29], src2.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.yyy, src2.xyz LG2 temp[42].w, src0.w 15: src0.xyz = const[7], src0.w = temp[16], src1.xyz = temp[16], src2.xyz = temp[17] MAD temp[18].w, src0.x, src0.w, src2.x 16: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = const[10], src1.w = temp[42], src2.xyz = const[1] MAD temp[19].x, src0.w__, src1.x__, src0.000 MAD temp[43].w, src1.w, src2.y, src0.0 17: src0.xyz = const[4], src1.xyz = temp[29], src2.xyz = temp[31] MAD temp[32].xyz, src0.xyz, src1.zzz, src2.xyz 18: src0.w = temp[43] REPL_ALPHA temp[44].x EX2, src0.w 19: src0.xyz = temp[32], src1.xyz = const[5] MAD temp[33].xyz, src0.xyz, src0.111, src1.xyz 20: BEGIN_TEX; 21: TEX temp[35].w, input[0].xy__, 2D[0]; 22: TEX temp[34].xyz, temp[33].xyz_, CUBE[1] SEM_WAIT SEM_ACQUIRE; 23: src0.xyz = temp[34], src0.w = temp[35], src1.xyz = temp[44], src1.w = temp[38], src2.xyz = const[1] SEM_WAIT MAD temp[37].xyz, src0.xyz, src0.www, src0.000 MAD temp[45].w, src1.w, src1.x, src2.x 24: src0.xyz = temp[37], src0.w = temp[56], src1.xyz = temp[56], src1.w = temp[45] MAD temp[57].xyz, src0.xyz, src0.www, src0.000 MAX temp[46].w, src1.w, src0.0 25: src0.xyz = temp[37], src0.w = temp[46], src1.xyz = temp[46] MAD temp[47].xyz, src0.xyz, src0.www, src0.000 26: src0.xyz = temp[57], src1.xyz = temp[19] MAD temp[58].xyz, src0.xyz, src1.xxx, src0.000 27: src0.xyz = temp[47], src1.xyz = temp[19] MAD temp[48].xyz, src0.xyz, src1.xxx, src0.000 28: src0.xyz = temp[48], src1.xyz = const[9] MAD temp[49].xyz, src0.xyz, src1.xxx, src0.000 29: src0.xyz = temp[58], src1.xyz = const[9], src2.xyz = temp[49] MAD temp[10].xyz, src0.xyz, src1.xxx, src2.xyz 30: src0.xyz = temp[10], src0.w = temp[10] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[1], src1.xyz = const[1] DP3 temp[23].x, src0.xyz, src0.xyz MAD temp[38].w, src0.1, src0.1, -src1.x 1: src0.xyz = input[2], src1.xyz = const[8] DP3 temp[20].x, src0.xyz, src0.xyz RCP temp[12].w, src1.y 2: src0.xyz = input[1], src1.xyz = const[8] MAD temp[11].x, -src0.z__, src0.111, -src1.x__ MAD temp[10].w, src0.1, src0.1, src0.0 3: src0.xyz = temp[11], src0.w = temp[12], src2.xyz = temp[23] MAD_SAT temp[13].x, src0.x__, src0.w__, src0.000 RSQ temp[24].w, |src2.x| 4: src0.xyz = input[1], src0.w = temp[24], src2.xyz = temp[20] MAD temp[25].xyz, src0.xyz, src0.www, src0.000 RSQ temp[21].w, |src2.x| 5: src0.xyz = input[2], src0.w = temp[21], src2.xyz = temp[13] MAD temp[22].xyz, src0.xyz, src0.www, src0.000 LG2 temp[14].w, src2.x 6: src0.xyz = temp[22], src0.w = temp[14], src1.xyz = const[11], src2.xyz = const[6] DP3 temp[50].x, src0.xyz, src1.xyz MAD temp[15].w, src0.w, src2.x, src0.0 7: src0.xyz = temp[25], src1.xyz = temp[22], src2.xyz = temp[50] DP3 temp[39].x, -src0.xyz, src1.xyz MAD temp[52].w, src0.1, |src0.1|, -|src2.x| 8: src0.xyz = temp[22], src0.w = temp[52], src1.xyz = temp[25] DP3 temp[26].x, src0.xyz, src1.xyz LG2 temp[53].w, src0.w 9: src0.xyz = temp[26], src0.w = temp[53], src1.xyz = temp[22], src2.xyz = const[0] MAD temp[28].xyz * 2, src0.xxx, src1.xyz, src0.000 MAD temp[54].w, src0.w, src2.y, src0.0 10: src0.xyz = temp[25], src0.w = temp[54], src1.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src0.111, -src1.xyz EX2 temp[55].w, src0.w 11: src0.xyz = const[2], src0.w = temp[55], src1.xyz = temp[29], src2.xyz = const[0] MAD temp[30].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[56].w, src0.w, src2.x, src0.0 12: src0.xyz = temp[39], src0.w = temp[15] MAX temp[40].x, src0.x__, src0.0__ EX2 temp[16].w, src0.w 13: src0.w = temp[16], src1.xyz = temp[40] MAD temp[17].x, src0.1__, src0.111, -src0.w__ MAD temp[41].w, src0.1, src0.1, -src1.x 14: src0.xyz = const[3], src0.w = temp[41], src1.xyz = temp[29], src2.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.yyy, src2.xyz LG2 temp[42].w, src0.w 15: src0.xyz = const[7], src0.w = temp[16], src2.xyz = temp[17] MAD temp[18].w, src0.x, src0.w, src2.x 16: src0.w = temp[18], src1.xyz = const[10], src1.w = temp[42], src2.xyz = const[1] MAD temp[19].x, src0.w__, src1.x__, src0.000 MAD temp[43].w, src1.w, src2.y, src0.0 17: src0.xyz = const[4], src1.xyz = temp[29], src2.xyz = temp[31] MAD temp[32].xyz, src0.xyz, src1.zzz, src2.xyz 18: src0.w = temp[43] REPL_ALPHA temp[44].x EX2, src0.w 19: src0.xyz = temp[32], src1.xyz = const[5] MAD temp[33].xyz, src0.xyz, src0.111, src1.xyz 20: BEGIN_TEX; 21: TEX temp[35].w, input[0].xy__, 2D[0]; 22: TEX temp[34].xyz, temp[33].xyz_, CUBE[1] SEM_WAIT SEM_ACQUIRE; 23: src0.xyz = temp[34], src0.w = temp[35], src1.xyz = temp[44], src1.w = temp[38], src2.xyz = const[1] SEM_WAIT MAD temp[37].xyz, src0.xyz, src0.www, src0.000 MAD temp[45].w, src1.w, src1.x, src2.x 24: src0.xyz = temp[37], src0.w = temp[56], src1.w = temp[45] MAD temp[57].xyz, src0.xyz, src0.www, src0.000 MAX temp[46].w, src1.w, src0.0 25: src0.xyz = temp[37], src0.w = temp[46] MAD temp[47].xyz, src0.xyz, src0.www, src0.000 26: src0.xyz = temp[57], src1.xyz = temp[19] MAD temp[58].xyz, src0.xyz, src1.xxx, src0.000 27: src0.xyz = temp[47], src1.xyz = temp[19] MAD temp[48].xyz, src0.xyz, src1.xxx, src0.000 28: src0.xyz = temp[48], src1.xyz = const[9] MAD temp[49].xyz, src0.xyz, src1.xxx, src0.000 29: src0.xyz = temp[58], src1.xyz = const[9], src2.xyz = temp[49] MAD temp[10].xyz, src0.xyz, src1.xxx, src2.xyz 30: src0.xyz = temp[10], src0.w = temp[10] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[1], src1.xyz = const[1] DP3 temp[0].z, src0.xyz, src0.xyz MAD temp[0].w, src0.1, src0.1, -src1.x 1: src0.xyz = input[2], src1.xyz = const[8] DP3 temp[3].x, src0.xyz, src0.xyz RCP temp[1].w, src1.y 2: src0.xyz = input[1], src1.xyz = const[8] MAD temp[3].y, -src0._z_, src0._1_, -src1._x_ MAD temp[2].w, src0.1, src0.1, src0.0 3: src0.xyz = temp[3], src0.w = temp[1], src2.xyz = temp[0] MAD_SAT temp[0].z, src0.__y, src0.__w, src0.__0 RSQ temp[1].w, |src2.z| 4: src0.xyz = input[1], src0.w = temp[1], src2.xyz = temp[3] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 RSQ temp[1].w, |src2.x| 5: src0.xyz = input[2], src0.w = temp[1], src2.xyz = temp[0] MAD temp[2].xyz, src0.xyz, src0.www, src0.000 LG2 temp[1].w, src2.z 6: src0.xyz = temp[2], src0.w = temp[1], src1.xyz = const[11], src2.xyz = const[6] DP3 temp[0].z, src0.xyz, src1.xyz MAD temp[1].w, src0.w, src2.x, src0.0 7: src0.xyz = temp[1], src1.xyz = temp[2], src2.xyz = temp[0] DP3 temp[0].z, -src0.xyz, src1.xyz MAD temp[3].w, src0.1, |src0.1|, -|src2.z| 8: src0.xyz = temp[2], src0.w = temp[3], src1.xyz = temp[1] DP3 temp[3].x, src0.xyz, src1.xyz LG2 temp[3].w, src0.w 9: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = temp[2], src2.xyz = const[0] MAD temp[2].xyz * 2, src0.xxx, src1.xyz, src0.000 MAD temp[3].w, src0.w, src2.y, src0.0 10: src0.xyz = temp[1], src0.w = temp[3], src1.xyz = temp[2] MAD temp[1].xyz, src0.xyz, src0.111, -src1.xyz EX2 temp[3].w, src0.w 11: src0.xyz = const[2], src0.w = temp[3], src1.xyz = temp[1], src2.xyz = const[0] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[3].w, src0.w, src2.x, src0.0 12: src0.xyz = temp[0], src0.w = temp[1] MAX temp[0].z, src0.__z, src0.__0 EX2 temp[1].w, src0.w 13: src0.w = temp[1], src1.xyz = temp[0] MAD temp[0].z, src0.__1, src0.__1, -src0.__w MAD temp[4].w, src0.1, src0.1, -src1.z 14: src0.xyz = const[3], src0.w = temp[4], src1.xyz = temp[1], src2.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.yyy, src2.xyz LG2 temp[4].w, src0.w 15: src0.xyz = const[7], src0.w = temp[1], src2.xyz = temp[0] MAD temp[1].w, src0.x, src0.w, src2.z 16: src0.w = temp[1], src1.xyz = const[10], src1.w = temp[4], src2.xyz = const[1] MAD temp[0].z, src0.__w, src1.__x, src0.__0 MAD temp[1].w, src1.w, src2.y, src0.0 17: src0.xyz = const[4], src1.xyz = temp[1], src2.xyz = temp[2] MAD temp[1].xyz, src0.xyz, src1.zzz, src2.xyz 18: src0.w = temp[1] REPL_ALPHA temp[2].x EX2, src0.w 19: src0.xyz = temp[1], src1.xyz = const[5] MAD temp[1].xyz, src0.xyz, src0.111, src1.xyz 20: BEGIN_TEX; 21: TEX temp[4].w, input[0].xy__, 2D[0]; 22: TEX temp[1].xyz, temp[1].xyz_, CUBE[1] SEM_WAIT SEM_ACQUIRE; 23: src0.xyz = temp[1], src0.w = temp[4], src1.xyz = temp[2], src1.w = temp[0], src2.xyz = const[1] SEM_WAIT MAD temp[1].xyz, src0.xyz, src0.www, src0.000 MAD temp[0].w, src1.w, src1.x, src2.x 24: src0.xyz = temp[1], src0.w = temp[3], src1.w = temp[0] MAD temp[2].xyz, src0.xyz, src0.www, src0.000 MAX temp[0].w, src1.w, src0.0 25: src0.xyz = temp[1], src0.w = temp[0] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 26: src0.xyz = temp[2], src1.xyz = temp[0] MAD temp[2].xyz, src0.xyz, src1.zzz, src0.000 27: src0.xyz = temp[1], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.zzz, src0.000 28: src0.xyz = temp[0], src1.xyz = const[9] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 29: src0.xyz = temp[2], src1.xyz = const[9], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xxx, src2.xyz 30: src0.xyz = temp[0], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=39************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 19, tex_end: 0 (code_addr: 000004c0) 0: xyz: t1 c1 t0 bias-> t0.z (02000841) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t1.xyz t1.xyz t1.xxx op: 00804000 w: 1.0 1.0 -c1.x op: 0008c891 1: xyz: t2 c8 t0 bias-> t3.x (008c0a02) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: c8.y t2.x t2.x op: 05000004 2: xyz: t1 c8 t0 bias-> t3.y (010c0a01) w: t0 t0 t0 bias-> t2.w (00880000) xyz: -t1.zzz 1.0 -c8.xxx op: 00094aa3 w: 1.0 1.0 0.0 op: 00040891 3: xyz: t3 t0 t0 bias-> t0.z (02000003) w: t1 t0 t0 bias-> t1.w (00840001) xyz: t3.yyy t1.www 0.0 op: 40050602 w: |t0.z| t3.x t3.x op: 05800048 4: xyz: t1 t0 t3 bias-> t1.xyz (03843001) w: t1 t0 t0 bias-> t1.w (00840001) xyz: t1.xyz t1.www 0.0 op: 00050600 w: |t3.x| t1.x t1.x op: 05800046 5: xyz: t2 t0 t0 bias-> t2.xyz (03880002) w: t1 t0 t0 bias-> t1.w (00840001) xyz: t2.xyz t1.www 0.0 op: 00050600 w: t0.z t2.x t2.x op: 04800008 6: xyz: t2 c11 c6 bias-> t0.z (02026ac2) w: t1 t0 t0 bias-> t1.w (00840001) xyz: t2.xyz c11.xyz t2.xxx op: 00804200 w: t1.w c6.x 0.0 op: 00040309 7: xyz: t1 t2 t0 bias-> t0.z (02000081) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: -t1.xyz t2.xyz t1.xxx op: 00804220 w: 1.0 |1.0| -|t0.z| op: 001a2891 8: xyz: t2 t1 t0 bias-> t3.x (008c0042) w: t3 t0 t0 bias-> t3.w (008c0003) xyz: t2.xyz t1.xyz t2.xxx op: 00804200 w: t3.w t2.x t2.x op: 04800009 9: xyz: t3 t2 c0 bias-> t2.xyz (038a0083) w: t3 t0 t0 bias-> t3.w (008c0003) xyz: t3.xxx t2.xyz 0.0 op: 08050201 w: t3.w c0.y 0.0 op: 00040389 10: xyz: t1 t2 t0 bias-> t1.xyz (03840081) w: t3 t0 t0 bias-> t3.w (008c0003) xyz: t1.xyz 1.0 -t2.xyz op: 00090a80 w: t3.w t1.x t1.x op: 04000009 11: xyz: c2 t1 c0 bias-> t2.xyz (038a0062) w: t3 t0 t0 bias-> t3.w (008c0003) xyz: c2.xyz t1.xxx 0.0 op: 00050280 w: t3.w c0.x 0.0 op: 00040309 12: xyz: t0 t0 t0 bias-> t0.z (02000000) w: t1 t0 t0 bias-> t1.w (00840001) xyz: t0.xyz 0.0 t0.xxx op: 02804a00 w: t1.w t0.x t0.x op: 04000009 13: xyz: t0 t0 t0 bias-> t0.z (02000000) w: t1 t0 t0 bias-> t4.w (00900001) xyz: 1.0 1.0 -t1.www op: 000b0a95 w: 1.0 1.0 -t0.z op: 00094891 14: xyz: c3 t1 t2 bias-> t2.xyz (03882063) w: t4 t0 t0 bias-> t4.w (00900004) xyz: c3.xyz t1.yyy t2.xyz op: 00020300 w: t4.w c3.x c3.x op: 04800009 15: xyz: c7 t0 t0 bias-> (00000027) w: t1 t0 t0 bias-> t1.w (00840001) xyz: c7.xxx c7.xxx c7.xxx op: 00004081 w: c7.x t1.w t0.z op: 00020480 16: xyz: t0 c10 c1 bias-> t0.z (02021a80) w: t1 t4 t0 bias-> t1.w (00840101) xyz: t1.www c10.xxx 0.0 op: 0005028c w: t4.w c1.y 0.0 op: 0004038a 17: xyz: c4 t1 t2 bias-> t1.xyz (03842064) w: t0 t0 t0 bias-> (00000000) xyz: c4.xyz t1.zzz t2.xyz op: 00020380 w: c4.x c4.x c4.x op: 00000000 18: xyz: t0 t0 t0 bias-> t2.x (00880000) w: t1 t0 t0 bias-> (00000001) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: t1.w t0.x t0.x op: 04000009 19: xyz: t1 c5 t0 bias-> t1.xyz (03840941) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 c5.xyz op: 00010a80 w: t1.x t1.x t1.x op: 00000000 NODE 1: alu_offset: 20, tex_offset: 0, alu_end: 7, tex_end: 1 (code_addr: 004201d4) TEX: TEX t4, t0, texture[0] (00008100) TEX t1, t1, texture[1] (00008841) 20: xyz: t1 t2 c1 bias-> t1.xyz (03861081) w: t4 t0 t0 bias-> t0.w (00800004) xyz: t1.xyz t4.www 0.0 op: 00050600 w: t0.w t2.x c1.x op: 0001818a 21: xyz: t1 t32 t0 bias-> t2.xyz (03880001) w: t3 t0 t0 bias-> t0.w (00800003) xyz: t1.xyz t3.www 0.0 op: 00050600 w: t0.w 0.0 t1.x op: 0180080a 22: xyz: t1 t32 t0 bias-> t1.xyz (03840001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t0.www 0.0 op: 00050600 w: t1.x t1.x t1.x op: 00000000 23: xyz: t2 t0 t0 bias-> t2.xyz (03880002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t0.zzz 0.0 op: 00050380 w: t2.x t2.x t2.x op: 00000000 24: xyz: t1 t0 t0 bias-> t0.xyz (03800001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t0.zzz 0.0 op: 00050380 w: t1.x t1.x t1.x op: 00000000 25: xyz: t0 c9 t0 bias-> t0.xyz (03800a40) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c9.xxx 0.0 op: 00050280 w: t0.x t0.x t0.x op: 00000000 26: xyz: t2 c9 t0 bias-> t0.xyz (03800a42) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c9.xxx t0.xyz op: 00020280 w: t2.x t2.x t2.x op: 00000000 27: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t2 t0 t0 bias-> o0.w (01000002) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t2.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL IMM[0] FLT32 { 0.0000, 1.0000, -2.5000, 0.2500} IMM[1] FLT32 { -0.7500, 0.3000, 0.5000, 0.7500} IMM[2] FLT32 { 2.5000, 0.6250, 0.0000, 0.0000} 0: MUL TEMP[0].xy, IMM[0].xyyy, CONST[0].xxxx 1: MAD TEMP[1].xy, IMM[0].zzzz, TEMP[0].xyyy, IN[0].xyyy 2: TEX TEMP[1].xyz, TEMP[1].xyyy, SAMP[0], RECT 3: MUL TEMP[1].xyz, TEMP[1].xyzz, IMM[0].wwww 4: MAD TEMP[2].xy, IMM[1].xxxx, TEMP[0].xyyy, IN[0].xyyy 5: TEX TEMP[2].xyz, TEMP[2].xyyy, SAMP[0], RECT 6: MAD TEMP[1].xyz, TEMP[2].xyzz, IMM[1].yyyy, TEMP[1].xyzz 7: TEX TEMP[2].xyz, IN[0].xyyy, SAMP[0], RECT 8: MAD TEMP[1].xyz, TEMP[2].xyzz, IMM[1].zzzz, TEMP[1].xyzz 9: MAD TEMP[2].xy, IMM[1].wwww, TEMP[0].xyyy, IN[0].xyyy 10: TEX TEMP[2].xyz, TEMP[2].xyyy, SAMP[0], RECT 11: MAD TEMP[1].xyz, TEMP[2].xyzz, IMM[1].yyyy, TEMP[1].xyzz 12: MAD TEMP[0].xy, IMM[2].xxxx, TEMP[0].xyyy, IN[0].xyyy 13: TEX TEMP[0].xyz, TEMP[0].xyyy, SAMP[0], RECT 14: MAD TEMP[1].xyz, TEMP[0].xyzz, IMM[0].wwww, TEMP[1].xyzz 15: MUL TEMP[0].xyz, TEMP[1].xyzz, IMM[2].yyyy 16: MOV TEMP[0].xyz, TEMP[0].xyzx 17: MOV TEMP[0].w, IMM[0].yyyy 18: MOV OUT[0], TEMP[0] 19: END Fragment Program: before compilation # Radeon Compiler Program 0: MUL temp[0].xy, const[1].xyyy, const[0].xxxx; 1: MAD temp[1].xy, const[1].zzzz, temp[0].xyyy, input[0].xyyy; 2: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 3: MUL temp[1].xyz, temp[1].xyzz, const[1].wwww; 4: MAD temp[2].xy, const[2].xxxx, temp[0].xyyy, input[0].xyyy; 5: TEX temp[2].xyz, temp[2].xyyy, RECT[0]; 6: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 7: TEX temp[2].xyz, input[0].xyyy, RECT[0]; 8: MAD temp[1].xyz, temp[2].xyzz, const[2].zzzz, temp[1].xyzz; 9: MAD temp[2].xy, const[2].wwww, temp[0].xyyy, input[0].xyyy; 10: TEX temp[2].xyz, temp[2].xyyy, RECT[0]; 11: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 12: MAD temp[0].xy, const[3].xxxx, temp[0].xyyy, input[0].xyyy; 13: TEX temp[0].xyz, temp[0].xyyy, RECT[0]; 14: MAD temp[1].xyz, temp[0].xyzz, const[1].wwww, temp[1].xyzz; 15: MUL temp[0].xyz, temp[1].xyzz, const[3].yyyy; 16: MOV temp[0].xyz, temp[0].xyzx; 17: MOV temp[0].w, const[1].yyyy; 18: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MUL temp[0].xy, const[1].xyyy, const[0].xxxx; 1: MAD temp[1].xy, const[1].zzzz, temp[0].xyyy, input[0].xyyy; 2: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 3: MUL temp[1].xyz, temp[1].xyzz, const[1].wwww; 4: MAD temp[2].xy, const[2].xxxx, temp[0].xyyy, input[0].xyyy; 5: TEX temp[2].xyz, temp[2].xyyy, RECT[0]; 6: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 7: TEX temp[2].xyz, input[0].xyyy, RECT[0]; 8: MAD temp[1].xyz, temp[2].xyzz, const[2].zzzz, temp[1].xyzz; 9: MAD temp[2].xy, const[2].wwww, temp[0].xyyy, input[0].xyyy; 10: TEX temp[2].xyz, temp[2].xyyy, RECT[0]; 11: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 12: MAD temp[0].xy, const[3].xxxx, temp[0].xyyy, input[0].xyyy; 13: TEX temp[0].xyz, temp[0].xyyy, RECT[0]; 14: MAD temp[1].xyz, temp[0].xyzz, const[1].wwww, temp[1].xyzz; 15: MUL temp[0].xyz, temp[1].xyzz, const[3].yyyy; 16: MOV temp[0].xyz, temp[0].xyzx; 17: MOV temp[0].w, const[1].yyyy; 18: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MUL temp[0].xy, const[1].xyyy, const[0].xxxx; 1: MAD temp[1].xy, const[1].zzzz, temp[0].xyyy, input[0].xyyy; 2: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 3: MUL temp[1].xyz, temp[1].xyzz, const[1].wwww; 4: MAD temp[2].xy, const[2].xxxx, temp[0].xyyy, input[0].xyyy; 5: TEX temp[2].xyz, temp[2].xyyy, RECT[0]; 6: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 7: TEX temp[2].xyz, input[0].xyyy, RECT[0]; 8: MAD temp[1].xyz, temp[2].xyzz, const[2].zzzz, temp[1].xyzz; 9: MAD temp[2].xy, const[2].wwww, temp[0].xyyy, input[0].xyyy; 10: TEX temp[2].xyz, temp[2].xyyy, RECT[0]; 11: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 12: MAD temp[0].xy, const[3].xxxx, temp[0].xyyy, input[0].xyyy; 13: TEX temp[0].xyz, temp[0].xyyy, RECT[0]; 14: MAD temp[1].xyz, temp[0].xyzz, const[1].wwww, temp[1].xyzz; 15: MUL temp[0].xyz, temp[1].xyzz, const[3].yyyy; 16: MOV temp[0].xyz, temp[0].xyzx; 17: MOV temp[0].w, const[1].yyyy; 18: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MUL temp[0].xy, const[1].xyyy, const[0].xxxx; 1: MAD temp[1].xy, const[1].zzzz, temp[0].xyyy, input[0].xyyy; 2: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 3: MUL temp[1].xyz, temp[1].xyzz, const[1].wwww; 4: MAD temp[2].xy, const[2].xxxx, temp[0].xyyy, input[0].xyyy; 5: TEX temp[2].xyz, temp[2].xyyy, RECT[0]; 6: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 7: TEX temp[2].xyz, input[0].xyyy, RECT[0]; 8: MAD temp[1].xyz, temp[2].xyzz, const[2].zzzz, temp[1].xyzz; 9: MAD temp[2].xy, const[2].wwww, temp[0].xyyy, input[0].xyyy; 10: TEX temp[2].xyz, temp[2].xyyy, RECT[0]; 11: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 12: MAD temp[0].xy, const[3].xxxx, temp[0].xyyy, input[0].xyyy; 13: TEX temp[0].xyz, temp[0].xyyy, RECT[0]; 14: MAD temp[1].xyz, temp[0].xyzz, const[1].wwww, temp[1].xyzz; 15: MUL temp[0].xyz, temp[1].xyzz, const[3].yyyy; 16: MOV temp[0].xyz, temp[0].xyzx; 17: MOV temp[0].w, const[1].yyyy; 18: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0].xy, const[1].xyyy, const[0].xxxx; 1: MAD temp[1].xy, const[1].zzzz, temp[0].xyyy, input[0].xyyy; 2: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 3: MUL temp[1].xyz, temp[1].xyzz, const[1].wwww; 4: MAD temp[2].xy, const[2].xxxx, temp[0].xyyy, input[0].xyyy; 5: TEX temp[2].xyz, temp[2].xyyy, RECT[0]; 6: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 7: TEX temp[2].xyz, input[0].xyyy, RECT[0]; 8: MAD temp[1].xyz, temp[2].xyzz, const[2].zzzz, temp[1].xyzz; 9: MAD temp[2].xy, const[2].wwww, temp[0].xyyy, input[0].xyyy; 10: TEX temp[2].xyz, temp[2].xyyy, RECT[0]; 11: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 12: MAD temp[0].xy, const[3].xxxx, temp[0].xyyy, input[0].xyyy; 13: TEX temp[0].xyz, temp[0].xyyy, RECT[0]; 14: MAD temp[1].xyz, temp[0].xyzz, const[1].wwww, temp[1].xyzz; 15: MUL temp[0].xyz, temp[1].xyzz, const[3].yyyy; 16: MOV temp[0].xyz, temp[0].xyzx; 17: MOV temp[0].w, const[1].yyyy; 18: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MUL temp[0].xy, const[1].xyyy, const[0].xxxx; 1: MAD temp[1].xy, const[1].zzzz, temp[0].xyyy, input[0].xyyy; 2: MUL temp[3], temp[1].xyyy, const[4]; 3: TEX temp[4], temp[3], 2D[0]; 4: MOV temp[1].xyz, temp[4]; 5: MUL temp[1].xyz, temp[1].xyzz, const[1].wwww; 6: MAD temp[2].xy, const[2].xxxx, temp[0].xyyy, input[0].xyyy; 7: MUL temp[5], temp[2].xyyy, const[4]; 8: TEX temp[6], temp[5], 2D[0]; 9: MOV temp[2].xyz, temp[6]; 10: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 11: MUL temp[7], input[0].xyyy, const[4]; 12: TEX temp[8], temp[7], 2D[0]; 13: MOV temp[2].xyz, temp[8]; 14: MAD temp[1].xyz, temp[2].xyzz, const[2].zzzz, temp[1].xyzz; 15: MAD temp[2].xy, const[2].wwww, temp[0].xyyy, input[0].xyyy; 16: MUL temp[9], temp[2].xyyy, const[4]; 17: TEX temp[10], temp[9], 2D[0]; 18: MOV temp[2].xyz, temp[10]; 19: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 20: MAD temp[0].xy, const[3].xxxx, temp[0].xyyy, input[0].xyyy; 21: MUL temp[11], temp[0].xyyy, const[4]; 22: TEX temp[12], temp[11], 2D[0]; 23: MOV temp[0].xyz, temp[12]; 24: MAD temp[1].xyz, temp[0].xyzz, const[1].wwww, temp[1].xyzz; 25: MUL temp[0].xyz, temp[1].xyzz, const[3].yyyy; 26: MOV temp[0].xyz, temp[0].xyzx; 27: MOV temp[0].w, const[1].yyyy; 28: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0].xy, const[1].xyyy, const[0].xxxx; 1: MAD temp[1].xy, const[1].zzzz, temp[0].xyyy, input[0].xyyy; 2: MUL temp[3], temp[1].xyyy, const[4]; 3: TEX temp[4], temp[3], 2D[0]; 4: MOV temp[1].xyz, temp[4]; 5: MUL temp[1].xyz, temp[1].xyzz, const[1].wwww; 6: MAD temp[2].xy, const[2].xxxx, temp[0].xyyy, input[0].xyyy; 7: MUL temp[5], temp[2].xyyy, const[4]; 8: TEX temp[6], temp[5], 2D[0]; 9: MOV temp[2].xyz, temp[6]; 10: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 11: MUL temp[7], input[0].xyyy, const[4]; 12: TEX temp[8], temp[7], 2D[0]; 13: MOV temp[2].xyz, temp[8]; 14: MAD temp[1].xyz, temp[2].xyzz, const[2].zzzz, temp[1].xyzz; 15: MAD temp[2].xy, const[2].wwww, temp[0].xyyy, input[0].xyyy; 16: MUL temp[9], temp[2].xyyy, const[4]; 17: TEX temp[10], temp[9], 2D[0]; 18: MOV temp[2].xyz, temp[10]; 19: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 20: MAD temp[0].xy, const[3].xxxx, temp[0].xyyy, input[0].xyyy; 21: MUL temp[11], temp[0].xyyy, const[4]; 22: TEX temp[12], temp[11], 2D[0]; 23: MOV temp[0].xyz, temp[12]; 24: MAD temp[1].xyz, temp[0].xyzz, const[1].wwww, temp[1].xyzz; 25: MUL temp[0].xyz, temp[1].xyzz, const[3].yyyy; 26: MOV temp[0].xyz, temp[0].xyzx; 27: MOV temp[0].w, const[1].yyyy; 28: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0].xy, const[1].xy__, const[0].xx__; 1: MAD temp[1].xy, const[1].zz__, temp[0].xy__, input[0].xy__; 2: MUL temp[3].xy, temp[1].xy__, const[4].xy__; 3: TEX temp[4].xyz, temp[3].xy__, 2D[0]; 4: MOV temp[1].xyz, temp[4].xyz_; 5: MUL temp[1].xyz, temp[1].xyz_, const[1].www_; 6: MAD temp[2].xy, const[2].xx__, temp[0].xy__, input[0].xy__; 7: MUL temp[5].xy, temp[2].xy__, const[4].xy__; 8: TEX temp[6].xyz, temp[5].xy__, 2D[0]; 9: MOV temp[2].xyz, temp[6].xyz_; 10: MAD temp[1].xyz, temp[2].xyz_, const[2].yyy_, temp[1].xyz_; 11: MUL temp[7].xy, input[0].xy__, const[4].xy__; 12: TEX temp[8].xyz, temp[7].xy__, 2D[0]; 13: MOV temp[2].xyz, temp[8].xyz_; 14: MAD temp[1].xyz, temp[2].xyz_, const[2].zzz_, temp[1].xyz_; 15: MAD temp[2].xy, const[2].ww__, temp[0].xy__, input[0].xy__; 16: MUL temp[9].xy, temp[2].xy__, const[4].xy__; 17: TEX temp[10].xyz, temp[9].xy__, 2D[0]; 18: MOV temp[2].xyz, temp[10].xyz_; 19: MAD temp[1].xyz, temp[2].xyz_, const[2].yyy_, temp[1].xyz_; 20: MAD temp[0].xy, const[3].xx__, temp[0].xy__, input[0].xy__; 21: MUL temp[11].xy, temp[0].xy__, const[4].xy__; 22: TEX temp[12].xyz, temp[11].xy__, 2D[0]; 23: MOV temp[0].xyz, temp[12].xyz_; 24: MAD temp[1].xyz, temp[0].xyz_, const[1].www_, temp[1].xyz_; 25: MUL temp[0].xyz, temp[1].xyz_, const[3].yyy_; 26: MOV temp[0].xyz, temp[0].xyz_; 27: MOV temp[0].w, const[1].___y; 28: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MUL temp[0].xy, const[1].xy__, const[0].xx__; 1: MAD temp[1].xy, const[1].zz__, temp[0].xy__, input[0].xy__; 2: MUL temp[3].xy, temp[1].xy__, const[4].xy__; 3: TEX temp[4].xyz, temp[3].xy__, 2D[0]; 4: MOV temp[1].xyz, temp[4].xyz_; 5: MUL temp[1].xyz, temp[1].xyz_, const[1].www_; 6: MAD temp[2].xy, const[2].xx__, temp[0].xy__, input[0].xy__; 7: MUL temp[5].xy, temp[2].xy__, const[4].xy__; 8: TEX temp[6].xyz, temp[5].xy__, 2D[0]; 9: MOV temp[2].xyz, temp[6].xyz_; 10: MAD temp[1].xyz, temp[2].xyz_, const[2].yyy_, temp[1].xyz_; 11: MUL temp[7].xy, input[0].xy__, const[4].xy__; 12: TEX temp[8].xyz, temp[7].xy__, 2D[0]; 13: MOV temp[2].xyz, temp[8].xyz_; 14: MAD temp[1].xyz, temp[2].xyz_, const[2].zzz_, temp[1].xyz_; 15: MAD temp[2].xy, const[2].ww__, temp[0].xy__, input[0].xy__; 16: MUL temp[9].xy, temp[2].xy__, const[4].xy__; 17: TEX temp[10].xyz, temp[9].xy__, 2D[0]; 18: MOV temp[2].xyz, temp[10].xyz_; 19: MAD temp[1].xyz, temp[2].xyz_, const[2].yyy_, temp[1].xyz_; 20: MAD temp[0].xy, const[3].xx__, temp[0].xy__, input[0].xy__; 21: MUL temp[11].xy, temp[0].xy__, const[4].xy__; 22: TEX temp[12].xyz, temp[11].xy__, 2D[0]; 23: MOV temp[0].xyz, temp[12].xyz_; 24: MAD temp[1].xyz, temp[0].xyz_, const[1].www_, temp[1].xyz_; 25: MUL temp[0].xyz, temp[1].xyz_, const[3].yyy_; 26: MOV temp[0].xyz, temp[0].xyz_; 27: MOV temp[0].w, const[1].___y; 28: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MUL temp[13].xy, const[1].xy__, const[0].xx__; 1: MAD temp[14].xy, const[1].zz__, temp[13].xy__, input[0].xy__; 2: MUL temp[15].xy, temp[14].xy__, const[4].xy__; 3: TEX temp[16].xyz, temp[15].xy__, 2D[0]; 4: MOV temp[17].xyz, temp[16].xyz_; 5: MUL temp[18].xyz, temp[17].xyz_, const[1].www_; 6: MAD temp[19].xy, const[2].xx__, temp[13].xy__, input[0].xy__; 7: MUL temp[20].xy, temp[19].xy__, const[4].xy__; 8: TEX temp[21].xyz, temp[20].xy__, 2D[0]; 9: MOV temp[22].xyz, temp[21].xyz_; 10: MAD temp[23].xyz, temp[22].xyz_, const[2].yyy_, temp[18].xyz_; 11: MUL temp[24].xy, input[0].xy__, const[4].xy__; 12: TEX temp[25].xyz, temp[24].xy__, 2D[0]; 13: MOV temp[26].xyz, temp[25].xyz_; 14: MAD temp[27].xyz, temp[26].xyz_, const[2].zzz_, temp[23].xyz_; 15: MAD temp[28].xy, const[2].ww__, temp[13].xy__, input[0].xy__; 16: MUL temp[29].xy, temp[28].xy__, const[4].xy__; 17: TEX temp[30].xyz, temp[29].xy__, 2D[0]; 18: MOV temp[31].xyz, temp[30].xyz_; 19: MAD temp[32].xyz, temp[31].xyz_, const[2].yyy_, temp[27].xyz_; 20: MAD temp[33].xy, const[3].xx__, temp[13].xy__, input[0].xy__; 21: MUL temp[34].xy, temp[33].xy__, const[4].xy__; 22: TEX temp[35].xyz, temp[34].xy__, 2D[0]; 23: MOV temp[36].xyz, temp[35].xyz_; 24: MAD temp[37].xyz, temp[36].xyz_, const[1].www_, temp[32].xyz_; 25: MUL temp[38].xyz, temp[37].xyz_, const[3].yyy_; 26: MOV temp[39].xyz, temp[38].xyz_; 27: MOV temp[39].w, const[1].___y; 28: MOV output[0], temp[39]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[13].xy, const[1].xy__, const[0].xx__; 1: MAD temp[14].xy, const[1].zz__, temp[13].xy__, input[0].xy__; 2: MUL temp[15].xy, temp[14].xy__, const[4].xy__; 3: TEX temp[16].xyz, temp[15].xy__, 2D[0]; 4: MUL temp[18].xyz, temp[16].xyz_, const[1].www_; 5: MAD temp[19].xy, const[2].xx__, temp[13].xy__, input[0].xy__; 6: MUL temp[20].xy, temp[19].xy__, const[4].xy__; 7: TEX temp[21].xyz, temp[20].xy__, 2D[0]; 8: MAD temp[23].xyz, temp[21].xyz_, const[2].yyy_, temp[18].xyz_; 9: MUL temp[24].xy, input[0].xy__, const[4].xy__; 10: TEX temp[25].xyz, temp[24].xy__, 2D[0]; 11: MAD temp[27].xyz, temp[25].xyz_, none.HHH_, temp[23].xyz_; 12: MAD temp[28].xy, const[2].ww__, temp[13].xy__, input[0].xy__; 13: MUL temp[29].xy, temp[28].xy__, const[4].xy__; 14: TEX temp[30].xyz, temp[29].xy__, 2D[0]; 15: MAD temp[32].xyz, temp[30].xyz_, const[2].yyy_, temp[27].xyz_; 16: MAD temp[33].xy, const[3].xx__, temp[13].xy__, input[0].xy__; 17: MUL temp[34].xy, temp[33].xy__, const[4].xy__; 18: TEX temp[35].xyz, temp[34].xy__, 2D[0]; 19: MAD temp[37].xyz, temp[35].xyz_, const[1].www_, temp[32].xyz_; 20: MUL temp[38].xyz, temp[37].xyz_, const[3].yyy_; 21: MOV temp[39].xyz, temp[38].xyz_; 22: MOV temp[39].w, none.___1; 23: MOV output[0], temp[39]; CONST[1] = { 0.0000 1.0000 -2.5000 0.2500 } CONST[2] = { -0.7500 0.3000 0.5000 0.7500 } CONST[3] = { 2.5000 0.6250 0.0000 0.0000 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[13].xy, const[1].xy__, const[0].xx__; 1: MAD temp[14].xy, const[1].zz__, temp[13].xy__, input[0].xy__; 2: MUL temp[15].xy, temp[14].xy__, const[4].xy__; 3: TEX temp[16].xyz, temp[15].xy__, 2D[0]; 4: MUL temp[18].xyz, temp[16].xyz_, const[1].www_; 5: MAD temp[19].xy, const[2].xx__, temp[13].xy__, input[0].xy__; 6: MUL temp[20].xy, temp[19].xy__, const[4].xy__; 7: TEX temp[21].xyz, temp[20].xy__, 2D[0]; 8: MAD temp[23].xyz, temp[21].xyz_, const[2].yyy_, temp[18].xyz_; 9: MUL temp[24].xy, input[0].xy__, const[4].xy__; 10: TEX temp[25].xyz, temp[24].xy__, 2D[0]; 11: MAD temp[27].xyz, temp[25].xyz_, none.HHH_, temp[23].xyz_; 12: MAD temp[28].xy, const[2].ww__, temp[13].xy__, input[0].xy__; 13: MUL temp[29].xy, temp[28].xy__, const[4].xy__; 14: TEX temp[30].xyz, temp[29].xy__, 2D[0]; 15: MAD temp[32].xyz, temp[30].xyz_, const[2].yyy_, temp[27].xyz_; 16: MAD temp[33].xy, const[3].xx__, temp[13].xy__, input[0].xy__; 17: MUL temp[34].xy, temp[33].xy__, const[4].xy__; 18: TEX temp[35].xyz, temp[34].xy__, 2D[0]; 19: MAD temp[37].xyz, temp[35].xyz_, const[1].www_, temp[32].xyz_; 20: MUL temp[38].xyz, temp[37].xyz_, const[3].yyy_; 21: MOV temp[39].xyz, temp[38].xyz_; 22: MOV temp[39].w, none.___1; 23: MOV output[0], temp[39]; CONST[1] = { 0.0000 1.0000 -2.5000 0.2500 } CONST[2] = { -0.7500 0.3000 0.5000 0.7500 } CONST[3] = { 2.5000 0.6250 0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[13].xy, const[1].xy__, const[0].xx__; 1: MAD temp[14].xy, const[1].zz__, temp[13].xy__, input[0].xy__; 2: MUL temp[15].xy, temp[14].xy__, const[4].xy__; 3: TEX temp[16].xyz, temp[15].xy__, 2D[0]; 4: MUL temp[18].xyz, temp[16].xyz_, const[1].www_; 5: MAD temp[19].xy, const[2].xx__, temp[13].xy__, input[0].xy__; 6: MUL temp[20].xy, temp[19].xy__, const[4].xy__; 7: TEX temp[21].xyz, temp[20].xy__, 2D[0]; 8: MAD temp[23].xyz, temp[21].xyz_, const[2].yyy_, temp[18].xyz_; 9: MUL temp[24].xy, input[0].xy__, const[4].xy__; 10: TEX temp[25].xyz, temp[24].xy__, 2D[0]; 11: MAD temp[27].xyz, temp[25].xyz_, none.HHH_, temp[23].xyz_; 12: MAD temp[28].xy, const[2].ww__, temp[13].xy__, input[0].xy__; 13: MUL temp[29].xy, temp[28].xy__, const[4].xy__; 14: TEX temp[30].xyz, temp[29].xy__, 2D[0]; 15: MAD temp[32].xyz, temp[30].xyz_, const[2].yyy_, temp[27].xyz_; 16: MAD temp[33].xy, const[3].xx__, temp[13].xy__, input[0].xy__; 17: MUL temp[34].xy, temp[33].xy__, const[4].xy__; 18: TEX temp[35].xyz, temp[34].xy__, 2D[0]; 19: MAD temp[37].xyz, temp[35].xyz_, const[1].www_, temp[32].xyz_; 20: MUL temp[38].xyz, temp[37].xyz_, const[3].yyy_; 21: MOV temp[39].xyz, temp[38].xyz_; 22: MOV temp[39].w, none.___1; 23: MOV output[0], temp[39]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = const[1], src1.xyz = const[0] MAD temp[13].xy, src0.xy_, src1.xx_, src0.000 1: src0.xyz = const[1], src1.xyz = temp[13], src2.xyz = input[0] MAD temp[14].xy, src0.zz_, src1.xy_, src2.xy_ 2: src0.xyz = temp[14], src1.xyz = const[4] MAD temp[15].xy, src0.xy_, src1.xy_, src0.000 3: TEX temp[16].xyz, temp[15].xy__, 2D[0]; 4: src0.xyz = temp[16], src0.w = const[1] MAD temp[18].xyz, src0.xyz, src0.www, src0.000 5: src0.xyz = const[2], src1.xyz = temp[13], src2.xyz = input[0] MAD temp[19].xy, src0.xx_, src1.xy_, src2.xy_ 6: src0.xyz = temp[19], src1.xyz = const[4] MAD temp[20].xy, src0.xy_, src1.xy_, src0.000 7: TEX temp[21].xyz, temp[20].xy__, 2D[0]; 8: src0.xyz = temp[21], src1.xyz = const[2], src2.xyz = temp[18] MAD temp[23].xyz, src0.xyz, src1.yyy, src2.xyz 9: src0.xyz = input[0], src1.xyz = const[4] MAD temp[24].xy, src0.xy_, src1.xy_, src0.000 10: TEX temp[25].xyz, temp[24].xy__, 2D[0]; 11: src0.xyz = temp[25], src1.xyz = temp[23] MAD temp[27].xyz, src0.xyz, src0.HHH, src1.xyz 12: src0.xyz = temp[13], src0.w = const[2], src1.xyz = input[0] MAD temp[28].xy, src0.ww_, src0.xy_, src1.xy_ 13: src0.xyz = temp[28], src1.xyz = const[4] MAD temp[29].xy, src0.xy_, src1.xy_, src0.000 14: TEX temp[30].xyz, temp[29].xy__, 2D[0]; 15: src0.xyz = temp[30], src1.xyz = const[2], src2.xyz = temp[27] MAD temp[32].xyz, src0.xyz, src1.yyy, src2.xyz 16: src0.xyz = const[3], src1.xyz = temp[13], src2.xyz = input[0] MAD temp[33].xy, src0.xx_, src1.xy_, src2.xy_ 17: src0.xyz = temp[33], src1.xyz = const[4] MAD temp[34].xy, src0.xy_, src1.xy_, src0.000 18: TEX temp[35].xyz, temp[34].xy__, 2D[0]; 19: src0.xyz = temp[35], src0.w = const[1], src1.xyz = temp[32] MAD temp[37].xyz, src0.xyz, src0.www, src1.xyz 20: src0.xyz = temp[37], src1.xyz = const[3] MAD temp[38].xyz, src0.xyz, src1.yyy, src0.000 21: src0.xyz = temp[38] MAD temp[39].xyz, src0.xyz, src0.111, src0.000 22: MAD temp[39].w, src0.1, src0.1, src0.0 23: src0.xyz = temp[39], src0.w = temp[39] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = const[1], src1.xyz = const[0] MAD temp[13].xy, src0.xy_, src1.xx_, src0.000 MAD temp[39].w, src0.1, src0.1, src0.0 1: src0.xyz = input[0], src1.xyz = const[4] MAD temp[24].xy, src0.xy_, src1.xy_, src0.000 2: src0.xyz = const[3], src1.xyz = temp[13], src2.xyz = input[0] MAD temp[33].xy, src0.xx_, src1.xy_, src2.xy_ 3: src0.xyz = temp[13], src0.w = const[2], src1.xyz = input[0] MAD temp[28].xy, src0.ww_, src0.xy_, src1.xy_ 4: src0.xyz = const[2], src1.xyz = temp[13], src2.xyz = input[0] MAD temp[19].xy, src0.xx_, src1.xy_, src2.xy_ 5: src0.xyz = const[1], src1.xyz = temp[13], src2.xyz = input[0] MAD temp[14].xy, src0.zz_, src1.xy_, src2.xy_ 6: src0.xyz = temp[33], src1.xyz = const[4] MAD temp[34].xy, src0.xy_, src1.xy_, src0.000 7: src0.xyz = temp[28], src1.xyz = const[4] MAD temp[29].xy, src0.xy_, src1.xy_, src0.000 8: src0.xyz = temp[19], src1.xyz = const[4] MAD temp[20].xy, src0.xy_, src1.xy_, src0.000 9: src0.xyz = temp[14], src1.xyz = const[4] MAD temp[15].xy, src0.xy_, src1.xy_, src0.000 10: BEGIN_TEX; 11: TEX temp[25].xyz, temp[24].xy__, 2D[0]; 12: TEX temp[35].xyz, temp[34].xy__, 2D[0]; 13: TEX temp[30].xyz, temp[29].xy__, 2D[0]; 14: TEX temp[21].xyz, temp[20].xy__, 2D[0]; 15: TEX temp[16].xyz, temp[15].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 16: src0.xyz = temp[16], src0.w = const[1] SEM_WAIT MAD temp[18].xyz, src0.xyz, src0.www, src0.000 17: src0.xyz = temp[21], src1.xyz = const[2], src2.xyz = temp[18] MAD temp[23].xyz, src0.xyz, src1.yyy, src2.xyz 18: src0.xyz = temp[25], src1.xyz = temp[23] MAD temp[27].xyz, src0.xyz, src0.HHH, src1.xyz 19: src0.xyz = temp[30], src1.xyz = const[2], src2.xyz = temp[27] MAD temp[32].xyz, src0.xyz, src1.yyy, src2.xyz 20: src0.xyz = temp[35], src0.w = const[1], src1.xyz = temp[32] MAD temp[37].xyz, src0.xyz, src0.www, src1.xyz 21: src0.xyz = temp[37], src1.xyz = const[3] MAD temp[38].xyz, src0.xyz, src1.yyy, src0.000 22: src0.xyz = temp[38] MAD temp[39].xyz, src0.xyz, src0.111, src0.000 23: src0.xyz = temp[39], src0.w = temp[39] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = const[1], src1.xyz = const[0] MAD temp[13].xy, src0.xy_, src1.xx_, src0.000 MAD temp[39].w, src0.1, src0.1, src0.0 1: src0.xyz = input[0], src1.xyz = const[4] MAD temp[24].xy, src0.xy_, src1.xy_, src0.000 2: src0.xyz = const[3], src1.xyz = temp[13], src2.xyz = input[0] MAD temp[33].xy, src0.xx_, src1.xy_, src2.xy_ 3: src0.xyz = temp[13], src0.w = const[2], src1.xyz = input[0] MAD temp[28].xy, src0.ww_, src0.xy_, src1.xy_ 4: src0.xyz = const[2], src1.xyz = temp[13], src2.xyz = input[0] MAD temp[19].xy, src0.xx_, src1.xy_, src2.xy_ 5: src0.xyz = const[1], src1.xyz = temp[13], src2.xyz = input[0] MAD temp[14].xy, src0.zz_, src1.xy_, src2.xy_ 6: src0.xyz = temp[33], src1.xyz = const[4] MAD temp[34].xy, src0.xy_, src1.xy_, src0.000 7: src0.xyz = temp[28], src1.xyz = const[4] MAD temp[29].xy, src0.xy_, src1.xy_, src0.000 8: src0.xyz = temp[19], src1.xyz = const[4] MAD temp[20].xy, src0.xy_, src1.xy_, src0.000 9: src0.xyz = temp[14], src1.xyz = const[4] MAD temp[15].xy, src0.xy_, src1.xy_, src0.000 10: BEGIN_TEX; 11: TEX temp[25].xyz, temp[24].xy__, 2D[0]; 12: TEX temp[35].xyz, temp[34].xy__, 2D[0]; 13: TEX temp[30].xyz, temp[29].xy__, 2D[0]; 14: TEX temp[21].xyz, temp[20].xy__, 2D[0]; 15: TEX temp[16].xyz, temp[15].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 16: src0.xyz = temp[16], src0.w = const[1] SEM_WAIT MAD temp[18].xyz, src0.xyz, src0.www, src0.000 17: src0.xyz = temp[21], src1.xyz = const[2], src2.xyz = temp[18] MAD temp[23].xyz, src0.xyz, src1.yyy, src2.xyz 18: src0.xyz = temp[25], src1.xyz = temp[23] MAD temp[27].xyz, src0.xyz, src0.HHH, src1.xyz 19: src0.xyz = temp[30], src1.xyz = const[2], src2.xyz = temp[27] MAD temp[32].xyz, src0.xyz, src1.yyy, src2.xyz 20: src0.xyz = temp[35], src0.w = const[1], src1.xyz = temp[32] MAD temp[37].xyz, src0.xyz, src0.www, src1.xyz 21: src0.xyz = temp[37], src1.xyz = const[3] MAD temp[38].xyz, src0.xyz, src1.yyy, src0.000 22: src0.xyz = temp[38] MAD temp[39].xyz, src0.xyz, src0.111, src0.000 23: src0.xyz = temp[39], src0.w = temp[39] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = const[1], src1.xyz = const[0] MAD temp[1].xy, src0.xy_, src1.xx_, src0.00_ MAD temp[0].w, src0.1, src0.1, src0.0 1: src0.xyz = input[0], src1.xyz = const[4] MAD temp[2].xy, src0.xy_, src1.xy_, src0.00_ 2: src0.xyz = const[3], src1.xyz = temp[1], src2.xyz = input[0] MAD temp[3].xy, src0.xx_, src1.xy_, src2.xy_ 3: src0.xyz = temp[1], src0.w = const[2], src1.xyz = input[0] MAD temp[4].xy, src0.ww_, src0.xy_, src1.xy_ 4: src0.xyz = const[2], src1.xyz = temp[1], src2.xyz = input[0] MAD temp[5].xy, src0.xx_, src1.xy_, src2.xy_ 5: src0.xyz = const[1], src1.xyz = temp[1], src2.xyz = input[0] MAD temp[0].xy, src0.zz_, src1.xy_, src2.xy_ 6: src0.xyz = temp[3], src1.xyz = const[4] MAD temp[1].xy, src0.xy_, src1.xy_, src0.00_ 7: src0.xyz = temp[4], src1.xyz = const[4] MAD temp[3].xy, src0.xy_, src1.xy_, src0.00_ 8: src0.xyz = temp[5], src1.xyz = const[4] MAD temp[4].xy, src0.xy_, src1.xy_, src0.00_ 9: src0.xyz = temp[0], src1.xyz = const[4] MAD temp[0].xy, src0.xy_, src1.xy_, src0.00_ 10: BEGIN_TEX; 11: TEX temp[2].xyz, temp[2].xy__, 2D[0]; 12: TEX temp[1].xyz, temp[1].xy__, 2D[0]; 13: TEX temp[3].xyz, temp[3].xy__, 2D[0]; 14: TEX temp[4].xyz, temp[4].xy__, 2D[0]; 15: TEX temp[5].xyz, temp[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 16: src0.xyz = temp[5], src0.w = const[1] SEM_WAIT MAD temp[0].xyz, src0.xyz, src0.www, src0.000 17: src0.xyz = temp[4], src1.xyz = const[2], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.yyy, src2.xyz 18: src0.xyz = temp[2], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.HHH, src1.xyz 19: src0.xyz = temp[3], src1.xyz = const[2], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.yyy, src2.xyz 20: src0.xyz = temp[1], src0.w = const[1], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.www, src1.xyz 21: src0.xyz = temp[0], src1.xyz = const[3] MAD temp[0].xyz, src0.xyz, src1.yyy, src0.000 22: src0.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.111, src0.000 23: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=40************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 9, tex_end: 0 (code_addr: 00000240) 0: xyz: c1 c0 t0 bias-> t1.xy (01840821) w: t0 t0 t0 bias-> t0.w (00800000) xyz: c1.xyz c0.xxx 0.0 op: 00050280 w: 1.0 1.0 0.0 op: 00040891 1: xyz: t0 c4 t0 bias-> t2.xy (01880900) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c4.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 2: xyz: c3 t1 t0 bias-> t3.xy (018c0063) w: t0 t0 t0 bias-> (00000000) xyz: c3.xxx t1.xyz t0.xyz op: 00020201 w: c3.x c3.x c3.x op: 00000000 3: xyz: t1 t0 t0 bias-> t4.xy (01900001) w: c2 t0 t0 bias-> (00000022) xyz: c2.www t1.xyz t0.xyz op: 0001000c w: t1.x t1.x t1.x op: 00000000 4: xyz: c2 t1 t0 bias-> t5.xy (01940062) w: t0 t0 t0 bias-> (00000000) xyz: c2.xxx t1.xyz t0.xyz op: 00020201 w: c2.x c2.x c2.x op: 00000000 5: xyz: c1 t1 t0 bias-> t0.xy (01800061) w: t0 t0 t0 bias-> (00000000) xyz: c1.zzz t1.xyz t0.xyz op: 00020203 w: c1.x c1.x c1.x op: 00000000 6: xyz: t3 c4 t0 bias-> t1.xy (01840903) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c4.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 7: xyz: t4 c4 t0 bias-> t3.xy (018c0904) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz c4.xyz 0.0 op: 00050200 w: t4.x t4.x t4.x op: 00000000 8: xyz: t5 c4 t0 bias-> t4.xy (01900905) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz c4.xyz 0.0 op: 00050200 w: t5.x t5.x t5.x op: 00000000 9: xyz: t0 c4 t0 bias-> t0.xy (01800900) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c4.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 NODE 1: alu_offset: 10, tex_offset: 0, alu_end: 7, tex_end: 4 (code_addr: 004801ca) TEX: TEX t2, t2, texture[0] (00008082) TEX t1, t1, texture[0] (00008041) TEX t3, t3, texture[0] (000080c3) TEX t4, t4, texture[0] (00008104) TEX t5, t0, texture[0] (00008140) 10: xyz: t5 t0 t0 bias-> t0.xyz (03800005) w: c1 t0 t0 bias-> (00000021) xyz: t5.xyz c1.www 0.0 op: 00050600 w: t5.x t5.x t5.x op: 00000000 11: xyz: t4 c2 t0 bias-> t0.xyz (03800884) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz c2.yyy t0.xyz op: 00020300 w: t4.x t4.x t4.x op: 00000000 12: xyz: t2 t0 t0 bias-> t0.xyz (03800002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz 0.5 t0.xyz op: 00010b00 w: t2.x t2.x t2.x op: 00000000 13: xyz: t3 c2 t0 bias-> t0.xyz (03800883) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c2.yyy t0.xyz op: 00020300 w: t3.x t3.x t3.x op: 00000000 14: xyz: t1 t0 t0 bias-> t0.xyz (03800001) w: c1 t0 t0 bias-> (00000021) xyz: t1.xyz c1.www t0.xyz op: 00010600 w: t1.x t1.x t1.x op: 00000000 15: xyz: t0 c3 t0 bias-> t0.xyz (038008c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c3.yyy 0.0 op: 00050300 w: t0.x t0.x t0.x op: 00000000 16: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 17: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL IMM[0] FLT32 { 1.0000, 0.0000, -2.5000, 0.2500} IMM[1] FLT32 { -0.7500, 0.3000, 0.5000, 0.7500} IMM[2] FLT32 { 2.5000, 0.6250, 0.0000, 0.0000} 0: MUL TEMP[0].xy, IMM[0].xyyy, CONST[0].xxxx 1: MAD TEMP[1].xy, IMM[0].zzzz, TEMP[0].xyyy, IN[0].xyyy 2: TEX TEMP[1].xyz, TEMP[1].xyyy, SAMP[0], RECT 3: MUL TEMP[1].xyz, TEMP[1].xyzz, IMM[0].wwww 4: MAD TEMP[2].xy, IMM[1].xxxx, TEMP[0].xyyy, IN[0].xyyy 5: TEX TEMP[2].xyz, TEMP[2].xyyy, SAMP[0], RECT 6: MAD TEMP[1].xyz, TEMP[2].xyzz, IMM[1].yyyy, TEMP[1].xyzz 7: TEX TEMP[2].xyz, IN[0].xyyy, SAMP[0], RECT 8: MAD TEMP[1].xyz, TEMP[2].xyzz, IMM[1].zzzz, TEMP[1].xyzz 9: MAD TEMP[2].xy, IMM[1].wwww, TEMP[0].xyyy, IN[0].xyyy 10: TEX TEMP[2].xyz, TEMP[2].xyyy, SAMP[0], RECT 11: MAD TEMP[1].xyz, TEMP[2].xyzz, IMM[1].yyyy, TEMP[1].xyzz 12: MAD TEMP[0].xy, IMM[2].xxxx, TEMP[0].xyyy, IN[0].xyyy 13: TEX TEMP[0].xyz, TEMP[0].xyyy, SAMP[0], RECT 14: MAD TEMP[1].xyz, TEMP[0].xyzz, IMM[0].wwww, TEMP[1].xyzz 15: MUL TEMP[0].xyz, TEMP[1].xyzz, IMM[2].yyyy 16: MOV TEMP[0].xyz, TEMP[0].xyzx 17: MOV TEMP[0].w, IMM[0].xxxx 18: MOV OUT[0], TEMP[0] 19: END Fragment Program: before compilation # Radeon Compiler Program 0: MUL temp[0].xy, const[1].xyyy, const[0].xxxx; 1: MAD temp[1].xy, const[1].zzzz, temp[0].xyyy, input[0].xyyy; 2: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 3: MUL temp[1].xyz, temp[1].xyzz, const[1].wwww; 4: MAD temp[2].xy, const[2].xxxx, temp[0].xyyy, input[0].xyyy; 5: TEX temp[2].xyz, temp[2].xyyy, RECT[0]; 6: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 7: TEX temp[2].xyz, input[0].xyyy, RECT[0]; 8: MAD temp[1].xyz, temp[2].xyzz, const[2].zzzz, temp[1].xyzz; 9: MAD temp[2].xy, const[2].wwww, temp[0].xyyy, input[0].xyyy; 10: TEX temp[2].xyz, temp[2].xyyy, RECT[0]; 11: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 12: MAD temp[0].xy, const[3].xxxx, temp[0].xyyy, input[0].xyyy; 13: TEX temp[0].xyz, temp[0].xyyy, RECT[0]; 14: MAD temp[1].xyz, temp[0].xyzz, const[1].wwww, temp[1].xyzz; 15: MUL temp[0].xyz, temp[1].xyzz, const[3].yyyy; 16: MOV temp[0].xyz, temp[0].xyzx; 17: MOV temp[0].w, const[1].xxxx; 18: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MUL temp[0].xy, const[1].xyyy, const[0].xxxx; 1: MAD temp[1].xy, const[1].zzzz, temp[0].xyyy, input[0].xyyy; 2: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 3: MUL temp[1].xyz, temp[1].xyzz, const[1].wwww; 4: MAD temp[2].xy, const[2].xxxx, temp[0].xyyy, input[0].xyyy; 5: TEX temp[2].xyz, temp[2].xyyy, RECT[0]; 6: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 7: TEX temp[2].xyz, input[0].xyyy, RECT[0]; 8: MAD temp[1].xyz, temp[2].xyzz, const[2].zzzz, temp[1].xyzz; 9: MAD temp[2].xy, const[2].wwww, temp[0].xyyy, input[0].xyyy; 10: TEX temp[2].xyz, temp[2].xyyy, RECT[0]; 11: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 12: MAD temp[0].xy, const[3].xxxx, temp[0].xyyy, input[0].xyyy; 13: TEX temp[0].xyz, temp[0].xyyy, RECT[0]; 14: MAD temp[1].xyz, temp[0].xyzz, const[1].wwww, temp[1].xyzz; 15: MUL temp[0].xyz, temp[1].xyzz, const[3].yyyy; 16: MOV temp[0].xyz, temp[0].xyzx; 17: MOV temp[0].w, const[1].xxxx; 18: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MUL temp[0].xy, const[1].xyyy, const[0].xxxx; 1: MAD temp[1].xy, const[1].zzzz, temp[0].xyyy, input[0].xyyy; 2: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 3: MUL temp[1].xyz, temp[1].xyzz, const[1].wwww; 4: MAD temp[2].xy, const[2].xxxx, temp[0].xyyy, input[0].xyyy; 5: TEX temp[2].xyz, temp[2].xyyy, RECT[0]; 6: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 7: TEX temp[2].xyz, input[0].xyyy, RECT[0]; 8: MAD temp[1].xyz, temp[2].xyzz, const[2].zzzz, temp[1].xyzz; 9: MAD temp[2].xy, const[2].wwww, temp[0].xyyy, input[0].xyyy; 10: TEX temp[2].xyz, temp[2].xyyy, RECT[0]; 11: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 12: MAD temp[0].xy, const[3].xxxx, temp[0].xyyy, input[0].xyyy; 13: TEX temp[0].xyz, temp[0].xyyy, RECT[0]; 14: MAD temp[1].xyz, temp[0].xyzz, const[1].wwww, temp[1].xyzz; 15: MUL temp[0].xyz, temp[1].xyzz, const[3].yyyy; 16: MOV temp[0].xyz, temp[0].xyzx; 17: MOV temp[0].w, const[1].xxxx; 18: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MUL temp[0].xy, const[1].xyyy, const[0].xxxx; 1: MAD temp[1].xy, const[1].zzzz, temp[0].xyyy, input[0].xyyy; 2: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 3: MUL temp[1].xyz, temp[1].xyzz, const[1].wwww; 4: MAD temp[2].xy, const[2].xxxx, temp[0].xyyy, input[0].xyyy; 5: TEX temp[2].xyz, temp[2].xyyy, RECT[0]; 6: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 7: TEX temp[2].xyz, input[0].xyyy, RECT[0]; 8: MAD temp[1].xyz, temp[2].xyzz, const[2].zzzz, temp[1].xyzz; 9: MAD temp[2].xy, const[2].wwww, temp[0].xyyy, input[0].xyyy; 10: TEX temp[2].xyz, temp[2].xyyy, RECT[0]; 11: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 12: MAD temp[0].xy, const[3].xxxx, temp[0].xyyy, input[0].xyyy; 13: TEX temp[0].xyz, temp[0].xyyy, RECT[0]; 14: MAD temp[1].xyz, temp[0].xyzz, const[1].wwww, temp[1].xyzz; 15: MUL temp[0].xyz, temp[1].xyzz, const[3].yyyy; 16: MOV temp[0].xyz, temp[0].xyzx; 17: MOV temp[0].w, const[1].xxxx; 18: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0].xy, const[1].xyyy, const[0].xxxx; 1: MAD temp[1].xy, const[1].zzzz, temp[0].xyyy, input[0].xyyy; 2: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 3: MUL temp[1].xyz, temp[1].xyzz, const[1].wwww; 4: MAD temp[2].xy, const[2].xxxx, temp[0].xyyy, input[0].xyyy; 5: TEX temp[2].xyz, temp[2].xyyy, RECT[0]; 6: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 7: TEX temp[2].xyz, input[0].xyyy, RECT[0]; 8: MAD temp[1].xyz, temp[2].xyzz, const[2].zzzz, temp[1].xyzz; 9: MAD temp[2].xy, const[2].wwww, temp[0].xyyy, input[0].xyyy; 10: TEX temp[2].xyz, temp[2].xyyy, RECT[0]; 11: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 12: MAD temp[0].xy, const[3].xxxx, temp[0].xyyy, input[0].xyyy; 13: TEX temp[0].xyz, temp[0].xyyy, RECT[0]; 14: MAD temp[1].xyz, temp[0].xyzz, const[1].wwww, temp[1].xyzz; 15: MUL temp[0].xyz, temp[1].xyzz, const[3].yyyy; 16: MOV temp[0].xyz, temp[0].xyzx; 17: MOV temp[0].w, const[1].xxxx; 18: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MUL temp[0].xy, const[1].xyyy, const[0].xxxx; 1: MAD temp[1].xy, const[1].zzzz, temp[0].xyyy, input[0].xyyy; 2: MUL temp[3], temp[1].xyyy, const[4]; 3: TEX temp[4], temp[3], 2D[0]; 4: MOV temp[1].xyz, temp[4]; 5: MUL temp[1].xyz, temp[1].xyzz, const[1].wwww; 6: MAD temp[2].xy, const[2].xxxx, temp[0].xyyy, input[0].xyyy; 7: MUL temp[5], temp[2].xyyy, const[4]; 8: TEX temp[6], temp[5], 2D[0]; 9: MOV temp[2].xyz, temp[6]; 10: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 11: MUL temp[7], input[0].xyyy, const[4]; 12: TEX temp[8], temp[7], 2D[0]; 13: MOV temp[2].xyz, temp[8]; 14: MAD temp[1].xyz, temp[2].xyzz, const[2].zzzz, temp[1].xyzz; 15: MAD temp[2].xy, const[2].wwww, temp[0].xyyy, input[0].xyyy; 16: MUL temp[9], temp[2].xyyy, const[4]; 17: TEX temp[10], temp[9], 2D[0]; 18: MOV temp[2].xyz, temp[10]; 19: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 20: MAD temp[0].xy, const[3].xxxx, temp[0].xyyy, input[0].xyyy; 21: MUL temp[11], temp[0].xyyy, const[4]; 22: TEX temp[12], temp[11], 2D[0]; 23: MOV temp[0].xyz, temp[12]; 24: MAD temp[1].xyz, temp[0].xyzz, const[1].wwww, temp[1].xyzz; 25: MUL temp[0].xyz, temp[1].xyzz, const[3].yyyy; 26: MOV temp[0].xyz, temp[0].xyzx; 27: MOV temp[0].w, const[1].xxxx; 28: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0].xy, const[1].xyyy, const[0].xxxx; 1: MAD temp[1].xy, const[1].zzzz, temp[0].xyyy, input[0].xyyy; 2: MUL temp[3], temp[1].xyyy, const[4]; 3: TEX temp[4], temp[3], 2D[0]; 4: MOV temp[1].xyz, temp[4]; 5: MUL temp[1].xyz, temp[1].xyzz, const[1].wwww; 6: MAD temp[2].xy, const[2].xxxx, temp[0].xyyy, input[0].xyyy; 7: MUL temp[5], temp[2].xyyy, const[4]; 8: TEX temp[6], temp[5], 2D[0]; 9: MOV temp[2].xyz, temp[6]; 10: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 11: MUL temp[7], input[0].xyyy, const[4]; 12: TEX temp[8], temp[7], 2D[0]; 13: MOV temp[2].xyz, temp[8]; 14: MAD temp[1].xyz, temp[2].xyzz, const[2].zzzz, temp[1].xyzz; 15: MAD temp[2].xy, const[2].wwww, temp[0].xyyy, input[0].xyyy; 16: MUL temp[9], temp[2].xyyy, const[4]; 17: TEX temp[10], temp[9], 2D[0]; 18: MOV temp[2].xyz, temp[10]; 19: MAD temp[1].xyz, temp[2].xyzz, const[2].yyyy, temp[1].xyzz; 20: MAD temp[0].xy, const[3].xxxx, temp[0].xyyy, input[0].xyyy; 21: MUL temp[11], temp[0].xyyy, const[4]; 22: TEX temp[12], temp[11], 2D[0]; 23: MOV temp[0].xyz, temp[12]; 24: MAD temp[1].xyz, temp[0].xyzz, const[1].wwww, temp[1].xyzz; 25: MUL temp[0].xyz, temp[1].xyzz, const[3].yyyy; 26: MOV temp[0].xyz, temp[0].xyzx; 27: MOV temp[0].w, const[1].xxxx; 28: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0].xy, const[1].xy__, const[0].xx__; 1: MAD temp[1].xy, const[1].zz__, temp[0].xy__, input[0].xy__; 2: MUL temp[3].xy, temp[1].xy__, const[4].xy__; 3: TEX temp[4].xyz, temp[3].xy__, 2D[0]; 4: MOV temp[1].xyz, temp[4].xyz_; 5: MUL temp[1].xyz, temp[1].xyz_, const[1].www_; 6: MAD temp[2].xy, const[2].xx__, temp[0].xy__, input[0].xy__; 7: MUL temp[5].xy, temp[2].xy__, const[4].xy__; 8: TEX temp[6].xyz, temp[5].xy__, 2D[0]; 9: MOV temp[2].xyz, temp[6].xyz_; 10: MAD temp[1].xyz, temp[2].xyz_, const[2].yyy_, temp[1].xyz_; 11: MUL temp[7].xy, input[0].xy__, const[4].xy__; 12: TEX temp[8].xyz, temp[7].xy__, 2D[0]; 13: MOV temp[2].xyz, temp[8].xyz_; 14: MAD temp[1].xyz, temp[2].xyz_, const[2].zzz_, temp[1].xyz_; 15: MAD temp[2].xy, const[2].ww__, temp[0].xy__, input[0].xy__; 16: MUL temp[9].xy, temp[2].xy__, const[4].xy__; 17: TEX temp[10].xyz, temp[9].xy__, 2D[0]; 18: MOV temp[2].xyz, temp[10].xyz_; 19: MAD temp[1].xyz, temp[2].xyz_, const[2].yyy_, temp[1].xyz_; 20: MAD temp[0].xy, const[3].xx__, temp[0].xy__, input[0].xy__; 21: MUL temp[11].xy, temp[0].xy__, const[4].xy__; 22: TEX temp[12].xyz, temp[11].xy__, 2D[0]; 23: MOV temp[0].xyz, temp[12].xyz_; 24: MAD temp[1].xyz, temp[0].xyz_, const[1].www_, temp[1].xyz_; 25: MUL temp[0].xyz, temp[1].xyz_, const[3].yyy_; 26: MOV temp[0].xyz, temp[0].xyz_; 27: MOV temp[0].w, const[1].___x; 28: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MUL temp[0].xy, const[1].xy__, const[0].xx__; 1: MAD temp[1].xy, const[1].zz__, temp[0].xy__, input[0].xy__; 2: MUL temp[3].xy, temp[1].xy__, const[4].xy__; 3: TEX temp[4].xyz, temp[3].xy__, 2D[0]; 4: MOV temp[1].xyz, temp[4].xyz_; 5: MUL temp[1].xyz, temp[1].xyz_, const[1].www_; 6: MAD temp[2].xy, const[2].xx__, temp[0].xy__, input[0].xy__; 7: MUL temp[5].xy, temp[2].xy__, const[4].xy__; 8: TEX temp[6].xyz, temp[5].xy__, 2D[0]; 9: MOV temp[2].xyz, temp[6].xyz_; 10: MAD temp[1].xyz, temp[2].xyz_, const[2].yyy_, temp[1].xyz_; 11: MUL temp[7].xy, input[0].xy__, const[4].xy__; 12: TEX temp[8].xyz, temp[7].xy__, 2D[0]; 13: MOV temp[2].xyz, temp[8].xyz_; 14: MAD temp[1].xyz, temp[2].xyz_, const[2].zzz_, temp[1].xyz_; 15: MAD temp[2].xy, const[2].ww__, temp[0].xy__, input[0].xy__; 16: MUL temp[9].xy, temp[2].xy__, const[4].xy__; 17: TEX temp[10].xyz, temp[9].xy__, 2D[0]; 18: MOV temp[2].xyz, temp[10].xyz_; 19: MAD temp[1].xyz, temp[2].xyz_, const[2].yyy_, temp[1].xyz_; 20: MAD temp[0].xy, const[3].xx__, temp[0].xy__, input[0].xy__; 21: MUL temp[11].xy, temp[0].xy__, const[4].xy__; 22: TEX temp[12].xyz, temp[11].xy__, 2D[0]; 23: MOV temp[0].xyz, temp[12].xyz_; 24: MAD temp[1].xyz, temp[0].xyz_, const[1].www_, temp[1].xyz_; 25: MUL temp[0].xyz, temp[1].xyz_, const[3].yyy_; 26: MOV temp[0].xyz, temp[0].xyz_; 27: MOV temp[0].w, const[1].___x; 28: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MUL temp[13].xy, const[1].xy__, const[0].xx__; 1: MAD temp[14].xy, const[1].zz__, temp[13].xy__, input[0].xy__; 2: MUL temp[15].xy, temp[14].xy__, const[4].xy__; 3: TEX temp[16].xyz, temp[15].xy__, 2D[0]; 4: MOV temp[17].xyz, temp[16].xyz_; 5: MUL temp[18].xyz, temp[17].xyz_, const[1].www_; 6: MAD temp[19].xy, const[2].xx__, temp[13].xy__, input[0].xy__; 7: MUL temp[20].xy, temp[19].xy__, const[4].xy__; 8: TEX temp[21].xyz, temp[20].xy__, 2D[0]; 9: MOV temp[22].xyz, temp[21].xyz_; 10: MAD temp[23].xyz, temp[22].xyz_, const[2].yyy_, temp[18].xyz_; 11: MUL temp[24].xy, input[0].xy__, const[4].xy__; 12: TEX temp[25].xyz, temp[24].xy__, 2D[0]; 13: MOV temp[26].xyz, temp[25].xyz_; 14: MAD temp[27].xyz, temp[26].xyz_, const[2].zzz_, temp[23].xyz_; 15: MAD temp[28].xy, const[2].ww__, temp[13].xy__, input[0].xy__; 16: MUL temp[29].xy, temp[28].xy__, const[4].xy__; 17: TEX temp[30].xyz, temp[29].xy__, 2D[0]; 18: MOV temp[31].xyz, temp[30].xyz_; 19: MAD temp[32].xyz, temp[31].xyz_, const[2].yyy_, temp[27].xyz_; 20: MAD temp[33].xy, const[3].xx__, temp[13].xy__, input[0].xy__; 21: MUL temp[34].xy, temp[33].xy__, const[4].xy__; 22: TEX temp[35].xyz, temp[34].xy__, 2D[0]; 23: MOV temp[36].xyz, temp[35].xyz_; 24: MAD temp[37].xyz, temp[36].xyz_, const[1].www_, temp[32].xyz_; 25: MUL temp[38].xyz, temp[37].xyz_, const[3].yyy_; 26: MOV temp[39].xyz, temp[38].xyz_; 27: MOV temp[39].w, const[1].___x; 28: MOV output[0], temp[39]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[13].xy, const[1].xy__, const[0].xx__; 1: MAD temp[14].xy, const[1].zz__, temp[13].xy__, input[0].xy__; 2: MUL temp[15].xy, temp[14].xy__, const[4].xy__; 3: TEX temp[16].xyz, temp[15].xy__, 2D[0]; 4: MUL temp[18].xyz, temp[16].xyz_, const[1].www_; 5: MAD temp[19].xy, const[2].xx__, temp[13].xy__, input[0].xy__; 6: MUL temp[20].xy, temp[19].xy__, const[4].xy__; 7: TEX temp[21].xyz, temp[20].xy__, 2D[0]; 8: MAD temp[23].xyz, temp[21].xyz_, const[2].yyy_, temp[18].xyz_; 9: MUL temp[24].xy, input[0].xy__, const[4].xy__; 10: TEX temp[25].xyz, temp[24].xy__, 2D[0]; 11: MAD temp[27].xyz, temp[25].xyz_, none.HHH_, temp[23].xyz_; 12: MAD temp[28].xy, const[2].ww__, temp[13].xy__, input[0].xy__; 13: MUL temp[29].xy, temp[28].xy__, const[4].xy__; 14: TEX temp[30].xyz, temp[29].xy__, 2D[0]; 15: MAD temp[32].xyz, temp[30].xyz_, const[2].yyy_, temp[27].xyz_; 16: MAD temp[33].xy, const[3].xx__, temp[13].xy__, input[0].xy__; 17: MUL temp[34].xy, temp[33].xy__, const[4].xy__; 18: TEX temp[35].xyz, temp[34].xy__, 2D[0]; 19: MAD temp[37].xyz, temp[35].xyz_, const[1].www_, temp[32].xyz_; 20: MUL temp[38].xyz, temp[37].xyz_, const[3].yyy_; 21: MOV temp[39].xyz, temp[38].xyz_; 22: MOV temp[39].w, none.___1; 23: MOV output[0], temp[39]; CONST[1] = { 1.0000 0.0000 -2.5000 0.2500 } CONST[2] = { -0.7500 0.3000 0.5000 0.7500 } CONST[3] = { 2.5000 0.6250 0.0000 0.0000 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[13].xy, const[1].xy__, const[0].xx__; 1: MAD temp[14].xy, const[1].zz__, temp[13].xy__, input[0].xy__; 2: MUL temp[15].xy, temp[14].xy__, const[4].xy__; 3: TEX temp[16].xyz, temp[15].xy__, 2D[0]; 4: MUL temp[18].xyz, temp[16].xyz_, const[1].www_; 5: MAD temp[19].xy, const[2].xx__, temp[13].xy__, input[0].xy__; 6: MUL temp[20].xy, temp[19].xy__, const[4].xy__; 7: TEX temp[21].xyz, temp[20].xy__, 2D[0]; 8: MAD temp[23].xyz, temp[21].xyz_, const[2].yyy_, temp[18].xyz_; 9: MUL temp[24].xy, input[0].xy__, const[4].xy__; 10: TEX temp[25].xyz, temp[24].xy__, 2D[0]; 11: MAD temp[27].xyz, temp[25].xyz_, none.HHH_, temp[23].xyz_; 12: MAD temp[28].xy, const[2].ww__, temp[13].xy__, input[0].xy__; 13: MUL temp[29].xy, temp[28].xy__, const[4].xy__; 14: TEX temp[30].xyz, temp[29].xy__, 2D[0]; 15: MAD temp[32].xyz, temp[30].xyz_, const[2].yyy_, temp[27].xyz_; 16: MAD temp[33].xy, const[3].xx__, temp[13].xy__, input[0].xy__; 17: MUL temp[34].xy, temp[33].xy__, const[4].xy__; 18: TEX temp[35].xyz, temp[34].xy__, 2D[0]; 19: MAD temp[37].xyz, temp[35].xyz_, const[1].www_, temp[32].xyz_; 20: MUL temp[38].xyz, temp[37].xyz_, const[3].yyy_; 21: MOV temp[39].xyz, temp[38].xyz_; 22: MOV temp[39].w, none.___1; 23: MOV output[0], temp[39]; CONST[1] = { 1.0000 0.0000 -2.5000 0.2500 } CONST[2] = { -0.7500 0.3000 0.5000 0.7500 } CONST[3] = { 2.5000 0.6250 0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[13].xy, const[1].xy__, const[0].xx__; 1: MAD temp[14].xy, const[1].zz__, temp[13].xy__, input[0].xy__; 2: MUL temp[15].xy, temp[14].xy__, const[4].xy__; 3: TEX temp[16].xyz, temp[15].xy__, 2D[0]; 4: MUL temp[18].xyz, temp[16].xyz_, const[1].www_; 5: MAD temp[19].xy, const[2].xx__, temp[13].xy__, input[0].xy__; 6: MUL temp[20].xy, temp[19].xy__, const[4].xy__; 7: TEX temp[21].xyz, temp[20].xy__, 2D[0]; 8: MAD temp[23].xyz, temp[21].xyz_, const[2].yyy_, temp[18].xyz_; 9: MUL temp[24].xy, input[0].xy__, const[4].xy__; 10: TEX temp[25].xyz, temp[24].xy__, 2D[0]; 11: MAD temp[27].xyz, temp[25].xyz_, none.HHH_, temp[23].xyz_; 12: MAD temp[28].xy, const[2].ww__, temp[13].xy__, input[0].xy__; 13: MUL temp[29].xy, temp[28].xy__, const[4].xy__; 14: TEX temp[30].xyz, temp[29].xy__, 2D[0]; 15: MAD temp[32].xyz, temp[30].xyz_, const[2].yyy_, temp[27].xyz_; 16: MAD temp[33].xy, const[3].xx__, temp[13].xy__, input[0].xy__; 17: MUL temp[34].xy, temp[33].xy__, const[4].xy__; 18: TEX temp[35].xyz, temp[34].xy__, 2D[0]; 19: MAD temp[37].xyz, temp[35].xyz_, const[1].www_, temp[32].xyz_; 20: MUL temp[38].xyz, temp[37].xyz_, const[3].yyy_; 21: MOV temp[39].xyz, temp[38].xyz_; 22: MOV temp[39].w, none.___1; 23: MOV output[0], temp[39]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = const[1], src1.xyz = const[0] MAD temp[13].xy, src0.xy_, src1.xx_, src0.000 1: src0.xyz = const[1], src1.xyz = temp[13], src2.xyz = input[0] MAD temp[14].xy, src0.zz_, src1.xy_, src2.xy_ 2: src0.xyz = temp[14], src1.xyz = const[4] MAD temp[15].xy, src0.xy_, src1.xy_, src0.000 3: TEX temp[16].xyz, temp[15].xy__, 2D[0]; 4: src0.xyz = temp[16], src0.w = const[1] MAD temp[18].xyz, src0.xyz, src0.www, src0.000 5: src0.xyz = const[2], src1.xyz = temp[13], src2.xyz = input[0] MAD temp[19].xy, src0.xx_, src1.xy_, src2.xy_ 6: src0.xyz = temp[19], src1.xyz = const[4] MAD temp[20].xy, src0.xy_, src1.xy_, src0.000 7: TEX temp[21].xyz, temp[20].xy__, 2D[0]; 8: src0.xyz = temp[21], src1.xyz = const[2], src2.xyz = temp[18] MAD temp[23].xyz, src0.xyz, src1.yyy, src2.xyz 9: src0.xyz = input[0], src1.xyz = const[4] MAD temp[24].xy, src0.xy_, src1.xy_, src0.000 10: TEX temp[25].xyz, temp[24].xy__, 2D[0]; 11: src0.xyz = temp[25], src1.xyz = temp[23] MAD temp[27].xyz, src0.xyz, src0.HHH, src1.xyz 12: src0.xyz = temp[13], src0.w = const[2], src1.xyz = input[0] MAD temp[28].xy, src0.ww_, src0.xy_, src1.xy_ 13: src0.xyz = temp[28], src1.xyz = const[4] MAD temp[29].xy, src0.xy_, src1.xy_, src0.000 14: TEX temp[30].xyz, temp[29].xy__, 2D[0]; 15: src0.xyz = temp[30], src1.xyz = const[2], src2.xyz = temp[27] MAD temp[32].xyz, src0.xyz, src1.yyy, src2.xyz 16: src0.xyz = const[3], src1.xyz = temp[13], src2.xyz = input[0] MAD temp[33].xy, src0.xx_, src1.xy_, src2.xy_ 17: src0.xyz = temp[33], src1.xyz = const[4] MAD temp[34].xy, src0.xy_, src1.xy_, src0.000 18: TEX temp[35].xyz, temp[34].xy__, 2D[0]; 19: src0.xyz = temp[35], src0.w = const[1], src1.xyz = temp[32] MAD temp[37].xyz, src0.xyz, src0.www, src1.xyz 20: src0.xyz = temp[37], src1.xyz = const[3] MAD temp[38].xyz, src0.xyz, src1.yyy, src0.000 21: src0.xyz = temp[38] MAD temp[39].xyz, src0.xyz, src0.111, src0.000 22: MAD temp[39].w, src0.1, src0.1, src0.0 23: src0.xyz = temp[39], src0.w = temp[39] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = const[1], src1.xyz = const[0] MAD temp[13].xy, src0.xy_, src1.xx_, src0.000 MAD temp[39].w, src0.1, src0.1, src0.0 1: src0.xyz = input[0], src1.xyz = const[4] MAD temp[24].xy, src0.xy_, src1.xy_, src0.000 2: src0.xyz = const[3], src1.xyz = temp[13], src2.xyz = input[0] MAD temp[33].xy, src0.xx_, src1.xy_, src2.xy_ 3: src0.xyz = temp[13], src0.w = const[2], src1.xyz = input[0] MAD temp[28].xy, src0.ww_, src0.xy_, src1.xy_ 4: src0.xyz = const[2], src1.xyz = temp[13], src2.xyz = input[0] MAD temp[19].xy, src0.xx_, src1.xy_, src2.xy_ 5: src0.xyz = const[1], src1.xyz = temp[13], src2.xyz = input[0] MAD temp[14].xy, src0.zz_, src1.xy_, src2.xy_ 6: src0.xyz = temp[33], src1.xyz = const[4] MAD temp[34].xy, src0.xy_, src1.xy_, src0.000 7: src0.xyz = temp[28], src1.xyz = const[4] MAD temp[29].xy, src0.xy_, src1.xy_, src0.000 8: src0.xyz = temp[19], src1.xyz = const[4] MAD temp[20].xy, src0.xy_, src1.xy_, src0.000 9: src0.xyz = temp[14], src1.xyz = const[4] MAD temp[15].xy, src0.xy_, src1.xy_, src0.000 10: BEGIN_TEX; 11: TEX temp[25].xyz, temp[24].xy__, 2D[0]; 12: TEX temp[35].xyz, temp[34].xy__, 2D[0]; 13: TEX temp[30].xyz, temp[29].xy__, 2D[0]; 14: TEX temp[21].xyz, temp[20].xy__, 2D[0]; 15: TEX temp[16].xyz, temp[15].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 16: src0.xyz = temp[16], src0.w = const[1] SEM_WAIT MAD temp[18].xyz, src0.xyz, src0.www, src0.000 17: src0.xyz = temp[21], src1.xyz = const[2], src2.xyz = temp[18] MAD temp[23].xyz, src0.xyz, src1.yyy, src2.xyz 18: src0.xyz = temp[25], src1.xyz = temp[23] MAD temp[27].xyz, src0.xyz, src0.HHH, src1.xyz 19: src0.xyz = temp[30], src1.xyz = const[2], src2.xyz = temp[27] MAD temp[32].xyz, src0.xyz, src1.yyy, src2.xyz 20: src0.xyz = temp[35], src0.w = const[1], src1.xyz = temp[32] MAD temp[37].xyz, src0.xyz, src0.www, src1.xyz 21: src0.xyz = temp[37], src1.xyz = const[3] MAD temp[38].xyz, src0.xyz, src1.yyy, src0.000 22: src0.xyz = temp[38] MAD temp[39].xyz, src0.xyz, src0.111, src0.000 23: src0.xyz = temp[39], src0.w = temp[39] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = const[1], src1.xyz = const[0] MAD temp[13].xy, src0.xy_, src1.xx_, src0.000 MAD temp[39].w, src0.1, src0.1, src0.0 1: src0.xyz = input[0], src1.xyz = const[4] MAD temp[24].xy, src0.xy_, src1.xy_, src0.000 2: src0.xyz = const[3], src1.xyz = temp[13], src2.xyz = input[0] MAD temp[33].xy, src0.xx_, src1.xy_, src2.xy_ 3: src0.xyz = temp[13], src0.w = const[2], src1.xyz = input[0] MAD temp[28].xy, src0.ww_, src0.xy_, src1.xy_ 4: src0.xyz = const[2], src1.xyz = temp[13], src2.xyz = input[0] MAD temp[19].xy, src0.xx_, src1.xy_, src2.xy_ 5: src0.xyz = const[1], src1.xyz = temp[13], src2.xyz = input[0] MAD temp[14].xy, src0.zz_, src1.xy_, src2.xy_ 6: src0.xyz = temp[33], src1.xyz = const[4] MAD temp[34].xy, src0.xy_, src1.xy_, src0.000 7: src0.xyz = temp[28], src1.xyz = const[4] MAD temp[29].xy, src0.xy_, src1.xy_, src0.000 8: src0.xyz = temp[19], src1.xyz = const[4] MAD temp[20].xy, src0.xy_, src1.xy_, src0.000 9: src0.xyz = temp[14], src1.xyz = const[4] MAD temp[15].xy, src0.xy_, src1.xy_, src0.000 10: BEGIN_TEX; 11: TEX temp[25].xyz, temp[24].xy__, 2D[0]; 12: TEX temp[35].xyz, temp[34].xy__, 2D[0]; 13: TEX temp[30].xyz, temp[29].xy__, 2D[0]; 14: TEX temp[21].xyz, temp[20].xy__, 2D[0]; 15: TEX temp[16].xyz, temp[15].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 16: src0.xyz = temp[16], src0.w = const[1] SEM_WAIT MAD temp[18].xyz, src0.xyz, src0.www, src0.000 17: src0.xyz = temp[21], src1.xyz = const[2], src2.xyz = temp[18] MAD temp[23].xyz, src0.xyz, src1.yyy, src2.xyz 18: src0.xyz = temp[25], src1.xyz = temp[23] MAD temp[27].xyz, src0.xyz, src0.HHH, src1.xyz 19: src0.xyz = temp[30], src1.xyz = const[2], src2.xyz = temp[27] MAD temp[32].xyz, src0.xyz, src1.yyy, src2.xyz 20: src0.xyz = temp[35], src0.w = const[1], src1.xyz = temp[32] MAD temp[37].xyz, src0.xyz, src0.www, src1.xyz 21: src0.xyz = temp[37], src1.xyz = const[3] MAD temp[38].xyz, src0.xyz, src1.yyy, src0.000 22: src0.xyz = temp[38] MAD temp[39].xyz, src0.xyz, src0.111, src0.000 23: src0.xyz = temp[39], src0.w = temp[39] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = const[1], src1.xyz = const[0] MAD temp[1].xy, src0.xy_, src1.xx_, src0.00_ MAD temp[0].w, src0.1, src0.1, src0.0 1: src0.xyz = input[0], src1.xyz = const[4] MAD temp[2].xy, src0.xy_, src1.xy_, src0.00_ 2: src0.xyz = const[3], src1.xyz = temp[1], src2.xyz = input[0] MAD temp[3].xy, src0.xx_, src1.xy_, src2.xy_ 3: src0.xyz = temp[1], src0.w = const[2], src1.xyz = input[0] MAD temp[4].xy, src0.ww_, src0.xy_, src1.xy_ 4: src0.xyz = const[2], src1.xyz = temp[1], src2.xyz = input[0] MAD temp[5].xy, src0.xx_, src1.xy_, src2.xy_ 5: src0.xyz = const[1], src1.xyz = temp[1], src2.xyz = input[0] MAD temp[0].xy, src0.zz_, src1.xy_, src2.xy_ 6: src0.xyz = temp[3], src1.xyz = const[4] MAD temp[1].xy, src0.xy_, src1.xy_, src0.00_ 7: src0.xyz = temp[4], src1.xyz = const[4] MAD temp[3].xy, src0.xy_, src1.xy_, src0.00_ 8: src0.xyz = temp[5], src1.xyz = const[4] MAD temp[4].xy, src0.xy_, src1.xy_, src0.00_ 9: src0.xyz = temp[0], src1.xyz = const[4] MAD temp[0].xy, src0.xy_, src1.xy_, src0.00_ 10: BEGIN_TEX; 11: TEX temp[2].xyz, temp[2].xy__, 2D[0]; 12: TEX temp[1].xyz, temp[1].xy__, 2D[0]; 13: TEX temp[3].xyz, temp[3].xy__, 2D[0]; 14: TEX temp[4].xyz, temp[4].xy__, 2D[0]; 15: TEX temp[5].xyz, temp[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 16: src0.xyz = temp[5], src0.w = const[1] SEM_WAIT MAD temp[0].xyz, src0.xyz, src0.www, src0.000 17: src0.xyz = temp[4], src1.xyz = const[2], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.yyy, src2.xyz 18: src0.xyz = temp[2], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.HHH, src1.xyz 19: src0.xyz = temp[3], src1.xyz = const[2], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.yyy, src2.xyz 20: src0.xyz = temp[1], src0.w = const[1], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.www, src1.xyz 21: src0.xyz = temp[0], src1.xyz = const[3] MAD temp[0].xyz, src0.xyz, src1.yyy, src0.000 22: src0.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.111, src0.000 23: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=41************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 9, tex_end: 0 (code_addr: 00000240) 0: xyz: c1 c0 t0 bias-> t1.xy (01840821) w: t0 t0 t0 bias-> t0.w (00800000) xyz: c1.xyz c0.xxx 0.0 op: 00050280 w: 1.0 1.0 0.0 op: 00040891 1: xyz: t0 c4 t0 bias-> t2.xy (01880900) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c4.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 2: xyz: c3 t1 t0 bias-> t3.xy (018c0063) w: t0 t0 t0 bias-> (00000000) xyz: c3.xxx t1.xyz t0.xyz op: 00020201 w: c3.x c3.x c3.x op: 00000000 3: xyz: t1 t0 t0 bias-> t4.xy (01900001) w: c2 t0 t0 bias-> (00000022) xyz: c2.www t1.xyz t0.xyz op: 0001000c w: t1.x t1.x t1.x op: 00000000 4: xyz: c2 t1 t0 bias-> t5.xy (01940062) w: t0 t0 t0 bias-> (00000000) xyz: c2.xxx t1.xyz t0.xyz op: 00020201 w: c2.x c2.x c2.x op: 00000000 5: xyz: c1 t1 t0 bias-> t0.xy (01800061) w: t0 t0 t0 bias-> (00000000) xyz: c1.zzz t1.xyz t0.xyz op: 00020203 w: c1.x c1.x c1.x op: 00000000 6: xyz: t3 c4 t0 bias-> t1.xy (01840903) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c4.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 7: xyz: t4 c4 t0 bias-> t3.xy (018c0904) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz c4.xyz 0.0 op: 00050200 w: t4.x t4.x t4.x op: 00000000 8: xyz: t5 c4 t0 bias-> t4.xy (01900905) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz c4.xyz 0.0 op: 00050200 w: t5.x t5.x t5.x op: 00000000 9: xyz: t0 c4 t0 bias-> t0.xy (01800900) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c4.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 NODE 1: alu_offset: 10, tex_offset: 0, alu_end: 7, tex_end: 4 (code_addr: 004801ca) TEX: TEX t2, t2, texture[0] (00008082) TEX t1, t1, texture[0] (00008041) TEX t3, t3, texture[0] (000080c3) TEX t4, t4, texture[0] (00008104) TEX t5, t0, texture[0] (00008140) 10: xyz: t5 t0 t0 bias-> t0.xyz (03800005) w: c1 t0 t0 bias-> (00000021) xyz: t5.xyz c1.www 0.0 op: 00050600 w: t5.x t5.x t5.x op: 00000000 11: xyz: t4 c2 t0 bias-> t0.xyz (03800884) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz c2.yyy t0.xyz op: 00020300 w: t4.x t4.x t4.x op: 00000000 12: xyz: t2 t0 t0 bias-> t0.xyz (03800002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz 0.5 t0.xyz op: 00010b00 w: t2.x t2.x t2.x op: 00000000 13: xyz: t3 c2 t0 bias-> t0.xyz (03800883) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c2.yyy t0.xyz op: 00020300 w: t3.x t3.x t3.x op: 00000000 14: xyz: t1 t0 t0 bias-> t0.xyz (03800001) w: c1 t0 t0 bias-> (00000021) xyz: t1.xyz c1.www t0.xyz op: 00010600 w: t1.x t1.x t1.x op: 00000000 15: xyz: t0 c3 t0 bias-> t0.xyz (038008c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c3.yyy 0.0 op: 00050300 w: t0.x t0.x t0.x op: 00000000 16: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 17: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL IN[1], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL CONST[0] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL 0: TEX TEMP[0], IN[0].xyyy, SAMP[1], RECT 1: DP3 TEMP[1].x, TEMP[0].xyzz, CONST[0].xyzz 2: MUL TEMP[1], TEMP[0], TEMP[1].xxxx 3: TEX TEMP[2], IN[1].xyyy, SAMP[0], RECT 4: MAD TEMP[0], TEMP[0], TEMP[1], TEMP[2] 5: MOV OUT[0], TEMP[0] 6: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, RECT[1]; 1: DP3 temp[1].x, temp[0].xyzz, const[0].xyzz; 2: MUL temp[1], temp[0], temp[1].xxxx; 3: TEX temp[2], input[1].xyyy, RECT[0]; 4: MAD temp[0], temp[0], temp[1], temp[2]; 5: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, RECT[1]; 1: DP3 temp[1].x, temp[0].xyzz, const[0].xyzz; 2: MUL temp[1], temp[0], temp[1].xxxx; 3: TEX temp[2], input[1].xyyy, RECT[0]; 4: MAD temp[0], temp[0], temp[1], temp[2]; 5: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, RECT[1]; 1: DP3 temp[1].x, temp[0].xyzz, const[0].xyzz; 2: MUL temp[1], temp[0], temp[1].xxxx; 3: TEX temp[2], input[1].xyyy, RECT[0]; 4: MAD temp[0], temp[0], temp[1], temp[2]; 5: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, RECT[1]; 1: DP3 temp[1].x, temp[0].xyzz, const[0].xyzz; 2: MUL temp[1], temp[0], temp[1].xxxx; 3: TEX temp[2], input[1].xyyy, RECT[0]; 4: MAD temp[0], temp[0], temp[1], temp[2]; 5: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, RECT[1]; 1: DP3 temp[1].x, temp[0].xyzz, const[0].xyzz; 2: MUL temp[1], temp[0], temp[1].xxxx; 3: TEX temp[2], input[1].xyyy, RECT[0]; 4: MAD temp[0], temp[0], temp[1], temp[2]; 5: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MUL temp[3], input[0].xyyy, const[1]; 1: TEX temp[0], temp[3], 2D[1]; 2: DP3 temp[1].x, temp[0].xyzz, const[0].xyzz; 3: MUL temp[1], temp[0], temp[1].xxxx; 4: MUL temp[4], input[1].xyyy, const[2]; 5: TEX temp[2], temp[4], 2D[0]; 6: MAD temp[0], temp[0], temp[1], temp[2]; 7: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[3], input[0].xyyy, const[1]; 1: TEX temp[0], temp[3], 2D[1]; 2: DP3 temp[1].x, temp[0].xyzz, const[0].xyzz; 3: MUL temp[1], temp[0], temp[1].xxxx; 4: MUL temp[4], input[1].xyyy, const[2]; 5: TEX temp[2], temp[4], 2D[0]; 6: MAD temp[0], temp[0], temp[1], temp[2]; 7: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[3].xy, input[0].xy__, const[1].xy__; 1: TEX temp[0], temp[3].xy__, 2D[1]; 2: DP3 temp[1].x, temp[0].xyz_, const[0].xyz_; 3: MUL temp[1], temp[0], temp[1].xxxx; 4: MUL temp[4].xy, input[1].xy__, const[2].xy__; 5: TEX temp[2], temp[4].xy__, 2D[0]; 6: MAD temp[0], temp[0], temp[1], temp[2]; 7: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MUL temp[3].xy, input[0].xy__, const[1].xy__; 1: TEX temp[0], temp[3].xy__, 2D[1]; 2: DP3 temp[1].x, temp[0].xyz_, const[0].xyz_; 3: MUL temp[1], temp[0], temp[1].xxxx; 4: MUL temp[4].xy, input[1].xy__, const[2].xy__; 5: TEX temp[2], temp[4].xy__, 2D[0]; 6: MAD temp[0], temp[0], temp[1], temp[2]; 7: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MUL temp[5].xy, input[0].xy__, const[1].xy__; 1: TEX temp[6], temp[5].xy__, 2D[1]; 2: DP3 temp[7].x, temp[6].xyz_, const[0].xyz_; 3: MUL temp[8], temp[6], temp[7].xxxx; 4: MUL temp[9].xy, input[1].xy__, const[2].xy__; 5: TEX temp[10], temp[9].xy__, 2D[0]; 6: MAD temp[11], temp[6], temp[8], temp[10]; 7: MOV output[0], temp[11]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[5].xy, input[0].xy__, const[1].xy__; 1: TEX temp[6], temp[5].xy__, 2D[1]; 2: DP3 temp[7].x, temp[6].xyz_, const[0].xyz_; 3: MUL temp[8], temp[6], temp[7].xxxx; 4: MUL temp[9].xy, input[1].xy__, const[2].xy__; 5: TEX temp[10], temp[9].xy__, 2D[0]; 6: MAD temp[11], temp[6], temp[8], temp[10]; 7: MOV output[0], temp[11]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[5].xy, input[0].xy__, const[1].xy__; 1: TEX temp[6], temp[5].xy__, 2D[1]; 2: DP3 temp[7].x, temp[6].xyz_, const[0].xyz_; 3: MUL temp[8], temp[6], temp[7].xxxx; 4: MUL temp[9].xy, input[1].xy__, const[2].xy__; 5: TEX temp[10], temp[9].xy__, 2D[0]; 6: MAD temp[11], temp[6], temp[8], temp[10]; 7: MOV output[0], temp[11]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[5].xy, input[0].xy__, const[1].xy__; 1: TEX temp[6], temp[5].xy__, 2D[1]; 2: DP3 temp[7].x, temp[6].xyz_, const[0].xyz_; 3: MUL temp[8], temp[6], temp[7].xxxx; 4: MUL temp[9].xy, input[1].xy__, const[2].xy__; 5: TEX temp[10], temp[9].xy__, 2D[0]; 6: MAD temp[11], temp[6], temp[8], temp[10]; 7: MOV output[0], temp[11]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[1] MAD temp[5].xy, src0.xy_, src1.xy_, src0.000 1: TEX temp[6], temp[5].xy__, 2D[1]; 2: src0.xyz = temp[6], src1.xyz = const[0] DP3 temp[7].x, src0.xyz, src1.xyz 3: src0.xyz = temp[6], src0.w = temp[6], src1.xyz = temp[7] MAD temp[8].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[8].w, src0.w, src1.x, src0.0 4: src0.xyz = input[1], src1.xyz = const[2] MAD temp[9].xy, src0.xy_, src1.xy_, src0.000 5: TEX temp[10], temp[9].xy__, 2D[0]; 6: src0.xyz = temp[6], src0.w = temp[6], src1.xyz = temp[8], src1.w = temp[8], src2.xyz = temp[10], src2.w = temp[10] MAD temp[11].xyz, src0.xyz, src1.xyz, src2.xyz MAD temp[11].w, src0.w, src1.w, src2.w 7: src0.xyz = temp[11], src0.w = temp[11] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[1] MAD temp[5].xy, src0.xy_, src1.xy_, src0.000 1: src0.xyz = input[1], src1.xyz = const[2] MAD temp[9].xy, src0.xy_, src1.xy_, src0.000 2: BEGIN_TEX; 3: TEX temp[6], temp[5].xy__, 2D[1]; 4: TEX temp[10], temp[9].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 5: src0.xyz = temp[6], src1.xyz = const[0] SEM_WAIT DP3 temp[7].x, src0.xyz, src1.xyz 6: src0.xyz = temp[6], src0.w = temp[6], src1.xyz = temp[7] MAD temp[8].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[8].w, src0.w, src1.x, src0.0 7: src0.xyz = temp[6], src0.w = temp[6], src1.xyz = temp[8], src1.w = temp[8], src2.xyz = temp[10], src2.w = temp[10] MAD temp[11].xyz, src0.xyz, src1.xyz, src2.xyz MAD temp[11].w, src0.w, src1.w, src2.w 8: src0.xyz = temp[11], src0.w = temp[11] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[1] MAD temp[5].xy, src0.xy_, src1.xy_, src0.000 1: src0.xyz = input[1], src1.xyz = const[2] MAD temp[9].xy, src0.xy_, src1.xy_, src0.000 2: BEGIN_TEX; 3: TEX temp[6], temp[5].xy__, 2D[1]; 4: TEX temp[10], temp[9].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 5: src0.xyz = temp[6], src1.xyz = const[0] SEM_WAIT DP3 temp[7].x, src0.xyz, src1.xyz 6: src0.xyz = temp[6], src0.w = temp[6], src1.xyz = temp[7] MAD temp[8].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[8].w, src0.w, src1.x, src0.0 7: src0.xyz = temp[6], src0.w = temp[6], src1.xyz = temp[8], src1.w = temp[8], src2.xyz = temp[10], src2.w = temp[10] MAD temp[11].xyz, src0.xyz, src1.xyz, src2.xyz MAD temp[11].w, src0.w, src1.w, src2.w 8: src0.xyz = temp[11], src0.w = temp[11] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[1] MAD temp[0].xy, src0.xy_, src1.xy_, src0.00_ 1: src0.xyz = input[1], src1.xyz = const[2] MAD temp[1].xy, src0.xy_, src1.xy_, src0.00_ 2: BEGIN_TEX; 3: TEX temp[0], temp[0].xy__, 2D[1]; 4: TEX temp[1], temp[1].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 5: src0.xyz = temp[0], src1.xyz = const[0] SEM_WAIT DP3 temp[2].x, src0.xyz, src1.xyz 6: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[2].w, src0.w, src1.x, src0.0 7: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[2], src1.w = temp[2], src2.xyz = temp[1], src2.w = temp[1] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz MAD temp[0].w, src0.w, src1.w, src2.w 8: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=42************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 1, tex_end: 0 (code_addr: 00000040) 0: xyz: t0 c1 t0 bias-> t0.xy (01800840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c1.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 1: xyz: t1 c2 t0 bias-> t1.xy (01840881) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c2.xyz 0.0 op: 00050200 w: t1.x t1.x t1.x op: 00000000 NODE 1: alu_offset: 2, tex_offset: 0, alu_end: 3, tex_end: 1 (code_addr: 004200c2) TEX: TEX t0, t0, texture[1] (00008800) TEX t1, t1, texture[0] (00008041) 2: xyz: t0 c0 t0 bias-> t2.x (00880800) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c0.xyz t0.xxx op: 00804200 w: t0.x t0.x t0.x op: 00000000 3: xyz: t0 t2 t0 bias-> t2.xyz (03880080) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t0.xyz t2.xxx 0.0 op: 00050280 w: t0.w t2.x 0.0 op: 00040189 4: xyz: t0 t2 t1 bias-> t0.xyz (03801080) w: t0 t2 t1 bias-> t0.w (00801080) xyz: t0.xyz t2.xyz t1.xyz op: 00020200 w: t0.w t2.w t1.w op: 0002c509 5: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], LINEAR DCL OUT[0], COLOR 0: MOV OUT[0], IN[0] 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=43************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0] DCL TEMP[0], LOCAL 0: TEX TEMP[0].xyz, IN[0].xyyy, SAMP[0], RECT 1: MOV TEMP[0].xyz, TEMP[0].xyzx 2: MOV TEMP[0].w, CONST[0].xxxx 3: MOV OUT[0], TEMP[0] 4: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0].xyz, input[0].xyyy, RECT[0]; 1: MOV temp[0].xyz, temp[0].xyzx; 2: MOV temp[0].w, const[0].xxxx; 3: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0].xyz, input[0].xyyy, RECT[0]; 1: MOV temp[0].xyz, temp[0].xyzx; 2: MOV temp[0].w, const[0].xxxx; 3: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0].xyz, input[0].xyyy, RECT[0]; 1: MOV temp[0].xyz, temp[0].xyzx; 2: MOV temp[0].w, const[0].xxxx; 3: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0].xyz, input[0].xyyy, RECT[0]; 1: MOV temp[0].xyz, temp[0].xyzx; 2: MOV temp[0].w, const[0].xxxx; 3: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0].xyz, input[0].xyyy, RECT[0]; 1: MOV temp[0].xyz, temp[0].xyzx; 2: MOV temp[0].w, const[0].xxxx; 3: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MUL temp[1], input[0].xyyy, const[1]; 1: TEX temp[2], temp[1], 2D[0]; 2: MOV temp[0].xyz, temp[2]; 3: MOV temp[0].xyz, temp[0].xyzx; 4: MOV temp[0].w, const[0].xxxx; 5: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[1], input[0].xyyy, const[1]; 1: TEX temp[2], temp[1], 2D[0]; 2: MOV temp[0].xyz, temp[2]; 3: MOV temp[0].xyz, temp[0].xyzx; 4: MOV temp[0].w, const[0].xxxx; 5: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[1].xy, input[0].xy__, const[1].xy__; 1: TEX temp[2].xyz, temp[1].xy__, 2D[0]; 2: MOV temp[0].xyz, temp[2].xyz_; 3: MOV temp[0].xyz, temp[0].xyz_; 4: MOV temp[0].w, const[0].___x; 5: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MUL temp[1].xy, input[0].xy__, const[1].xy__; 1: TEX temp[2].xyz, temp[1].xy__, 2D[0]; 2: MOV temp[0].xyz, temp[2].xyz_; 3: MOV temp[0].xyz, temp[0].xyz_; 4: MOV temp[0].w, const[0].___x; 5: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MUL temp[3].xy, input[0].xy__, const[1].xy__; 1: TEX temp[4].xyz, temp[3].xy__, 2D[0]; 2: MOV temp[5].xyz, temp[4].xyz_; 3: MOV temp[6].xyz, temp[5].xyz_; 4: MOV temp[6].w, const[0].___x; 5: MOV output[0], temp[6]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[3].xy, input[0].xy__, const[1].xy__; 1: TEX temp[4].xyz, temp[3].xy__, 2D[0]; 2: MOV temp[6].xyz, temp[4].xyz_; 3: MOV temp[6].w, const[0].___x; 4: MOV output[0], temp[6]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[3].xy, input[0].xy__, const[1].xy__; 1: TEX temp[4].xyz, temp[3].xy__, 2D[0]; 2: MOV temp[6].xyz, temp[4].xyz_; 3: MOV temp[6].w, const[0].___x; 4: MOV output[0], temp[6]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[3].xy, input[0].xy__, const[1].xy__; 1: TEX temp[4].xyz, temp[3].xy__, 2D[0]; 2: MOV temp[6].xyz, temp[4].xyz_; 3: MOV temp[6].w, const[0].___x; 4: MOV output[0], temp[6]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[1] MAD temp[3].xy, src0.xy_, src1.xy_, src0.000 1: TEX temp[4].xyz, temp[3].xy__, 2D[0]; 2: src0.xyz = temp[4] MAD temp[6].xyz, src0.xyz, src0.111, src0.000 3: src0.xyz = const[0] MAD temp[6].w, src0.x, src0.1, src0.0 4: src0.xyz = temp[6], src0.w = temp[6] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[1], src2.xyz = const[0] MAD temp[3].xy, src0.xy_, src1.xy_, src0.000 MAD temp[6].w, src2.x, src0.1, src0.0 1: BEGIN_TEX; 2: TEX temp[4].xyz, temp[3].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 3: src0.xyz = temp[4] SEM_WAIT MAD temp[6].xyz, src0.xyz, src0.111, src0.000 4: src0.xyz = temp[6], src0.w = temp[6] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[1], src2.xyz = const[0] MAD temp[3].xy, src0.xy_, src1.xy_, src0.000 MAD temp[6].w, src2.x, src0.1, src0.0 1: BEGIN_TEX; 2: TEX temp[4].xyz, temp[3].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 3: src0.xyz = temp[4] SEM_WAIT MAD temp[6].xyz, src0.xyz, src0.111, src0.000 4: src0.xyz = temp[6], src0.w = temp[6] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[1], src2.xyz = const[0] MAD temp[0].xy, src0.xy_, src1.xy_, src0.00_ MAD temp[0].w, src2.x, src0.1, src0.0 1: BEGIN_TEX; 2: TEX temp[1].xyz, temp[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 3: src0.xyz = temp[1] SEM_WAIT MAD temp[0].xyz, src0.xyz, src0.111, src0.000 4: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=44************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00000000) 0: xyz: t0 c1 c0 bias-> t0.xy (01820840) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xyz c1.xyz 0.0 op: 00050200 w: c0.x 1.0 0.0 op: 00040886 NODE 1: alu_offset: 1, tex_offset: 0, alu_end: 1, tex_end: 0 (code_addr: 00400041) TEX: TEX t1, t0, texture[0] (00008040) 1: xyz: t1 t0 t0 bias-> t0.xyz (03800001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 2: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], POSITION, LINEAR DCL IN[1], GENERIC[12], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL CONST[6..7] DCL CONST[4..5] DCL TEMP[0] DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL IMM[0] FLT32 { 1.0000, 0.0039, 0.0000, 2.0000} IMM[1] FLT32 { -1.0000, 0.0000, 0.0000, 0.0000} 0: MOV TEMP[0], IN[0] 1: MAD TEMP[0].y, IN[0], CONST[7].xxxx, CONST[7].yyyy 2: TEX TEMP[1].xyz, TEMP[0].xyyy, SAMP[1], RECT 3: DP3 TEMP[1].x, TEMP[1].xyzz, IMM[0].xyzz 4: MUL TEMP[1].xyz, IN[1].xyzz, TEMP[1].xxxx 5: ADD TEMP[1].xyz, CONST[6].xyzz, -TEMP[1].xyzz 6: MUL TEMP[1].xyz, TEMP[1].xyzz, CONST[5].xxxx 7: TEX TEMP[2].xyz, TEMP[0].xyyy, SAMP[3], RECT 8: MUL TEMP[2].xyz, TEMP[2].xyzz, CONST[4].xyzz 9: DP3 TEMP[3].x, TEMP[1].xyzz, TEMP[1].xyzz 10: RSQ TEMP[3].x, TEMP[3].xxxx 11: MUL TEMP[3].xyz, TEMP[1].xyzz, TEMP[3].xxxx 12: TEX TEMP[4].xyz, TEMP[0].xyyy, SAMP[2], RECT 13: MAD TEMP[4].xyz, TEMP[4].xyzz, IMM[0].wwww, IMM[1].xxxx 14: DP3 TEMP[3].x, TEMP[3].xyzz, TEMP[4].xyzz 15: MAX TEMP[3].x, TEMP[3].xxxx, IMM[1].yyyy 16: MUL TEMP[2].xyz, TEMP[2].xyzz, TEMP[3].xxxx 17: DP3 TEMP[1].x, TEMP[1].xyzz, TEMP[1].xyzz 18: TEX TEMP[1].x, TEMP[1].xxxx, SAMP[0], 1D 19: MUL TEMP[1].xyz, TEMP[2].xyzz, TEMP[1].xxxx 20: MOV OUT[0], TEMP[1] 21: END Fragment Program: before compilation # Radeon Compiler Program 0: RCP temp[5].w, input[0].wwww; 1: MUL temp[5].xyz, input[0], temp[5].wwww; 2: MAD temp[5].xyz, temp[5].xyz0, const[10].xyz0, const[11].xyz0; 3: MOV temp[0], temp[5]; 4: MAD temp[0].y, temp[5], const[7].xxxx, const[7].yyyy; 5: TEX temp[1].xyz, temp[0].xyyy, RECT[1]; 6: DP3 temp[1].x, temp[1].xyzz, const[8].xyzz; 7: MUL temp[1].xyz, input[1].xyzz, temp[1].xxxx; 8: ADD temp[1].xyz, const[6].xyzz, -temp[1].xyzz; 9: MUL temp[1].xyz, temp[1].xyzz, const[5].xxxx; 10: TEX temp[2].xyz, temp[0].xyyy, RECT[3]; 11: MUL temp[2].xyz, temp[2].xyzz, const[4].xyzz; 12: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 13: RSQ temp[3].x, temp[3].xxxx; 14: MUL temp[3].xyz, temp[1].xyzz, temp[3].xxxx; 15: TEX temp[4].xyz, temp[0].xyyy, RECT[2]; 16: MAD temp[4].xyz, temp[4].xyzz, const[8].wwww, const[9].xxxx; 17: DP3 temp[3].x, temp[3].xyzz, temp[4].xyzz; 18: MAX temp[3].x, temp[3].xxxx, const[9].yyyy; 19: MUL temp[2].xyz, temp[2].xyzz, temp[3].xxxx; 20: DP3 temp[1].x, temp[1].xyzz, temp[1].xyzz; 21: TEX temp[1].x, temp[1].xxxx, 1D[0]; 22: MUL temp[1].xyz, temp[2].xyzz, temp[1].xxxx; 23: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: RCP temp[5].w, input[0].wwww; 1: MUL temp[5].xyz, input[0], temp[5].wwww; 2: MAD temp[5].xyz, temp[5].xyz0, const[10].xyz0, const[11].xyz0; 3: MOV temp[0], temp[5]; 4: MAD temp[0].y, temp[5], const[7].xxxx, const[7].yyyy; 5: TEX temp[1].xyz, temp[0].xyyy, RECT[1]; 6: DP3 temp[1].x, temp[1].xyzz, const[8].xyzz; 7: MUL temp[1].xyz, input[1].xyzz, temp[1].xxxx; 8: ADD temp[1].xyz, const[6].xyzz, -temp[1].xyzz; 9: MUL temp[1].xyz, temp[1].xyzz, const[5].xxxx; 10: TEX temp[2].xyz, temp[0].xyyy, RECT[3]; 11: MUL temp[2].xyz, temp[2].xyzz, const[4].xyzz; 12: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 13: RSQ temp[3].x, temp[3].xxxx; 14: MUL temp[3].xyz, temp[1].xyzz, temp[3].xxxx; 15: TEX temp[4].xyz, temp[0].xyyy, RECT[2]; 16: MAD temp[4].xyz, temp[4].xyzz, const[8].wwww, const[9].xxxx; 17: DP3 temp[3].x, temp[3].xyzz, temp[4].xyzz; 18: MAX temp[3].x, temp[3].xxxx, const[9].yyyy; 19: MUL temp[2].xyz, temp[2].xyzz, temp[3].xxxx; 20: DP3 temp[1].x, temp[1].xyzz, temp[1].xyzz; 21: TEX temp[1].x, temp[1].xxxx, 1D[0]; 22: MUL temp[1].xyz, temp[2].xyzz, temp[1].xxxx; 23: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: RCP temp[5].w, input[0].wwww; 1: MUL temp[5].xyz, input[0], temp[5].wwww; 2: MAD temp[5].xyz, temp[5].xyz0, const[10].xyz0, const[11].xyz0; 3: MOV temp[0], temp[5]; 4: MAD temp[0].y, temp[5], const[7].xxxx, const[7].yyyy; 5: TEX temp[1].xyz, temp[0].xyyy, RECT[1]; 6: DP3 temp[1].x, temp[1].xyzz, const[8].xyzz; 7: MUL temp[1].xyz, input[1].xyzz, temp[1].xxxx; 8: ADD temp[1].xyz, const[6].xyzz, -temp[1].xyzz; 9: MUL temp[1].xyz, temp[1].xyzz, const[5].xxxx; 10: TEX temp[2].xyz, temp[0].xyyy, RECT[3]; 11: MUL temp[2].xyz, temp[2].xyzz, const[4].xyzz; 12: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 13: RSQ temp[3].x, temp[3].xxxx; 14: MUL temp[3].xyz, temp[1].xyzz, temp[3].xxxx; 15: TEX temp[4].xyz, temp[0].xyyy, RECT[2]; 16: MAD temp[4].xyz, temp[4].xyzz, const[8].wwww, const[9].xxxx; 17: DP3 temp[3].x, temp[3].xyzz, temp[4].xyzz; 18: MAX temp[3].x, temp[3].xxxx, const[9].yyyy; 19: MUL temp[2].xyz, temp[2].xyzz, temp[3].xxxx; 20: DP3 temp[1].x, temp[1].xyzz, temp[1].xyzz; 21: TEX temp[1].x, temp[1].xxxx, 1D[0]; 22: MUL temp[1].xyz, temp[2].xyzz, temp[1].xxxx; 23: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: RCP temp[5].w, input[0].wwww; 1: MUL temp[5].xyz, input[0], temp[5].wwww; 2: MAD temp[5].xyz, temp[5].xyz0, const[10].xyz0, const[11].xyz0; 3: MOV temp[0], temp[5]; 4: MAD temp[0].y, temp[5], const[7].xxxx, const[7].yyyy; 5: TEX temp[1].xyz, temp[0].xyyy, RECT[1]; 6: DP3 temp[1].x, temp[1].xyzz, const[8].xyzz; 7: MUL temp[1].xyz, input[1].xyzz, temp[1].xxxx; 8: ADD temp[1].xyz, const[6].xyzz, -temp[1].xyzz; 9: MUL temp[1].xyz, temp[1].xyzz, const[5].xxxx; 10: TEX temp[2].xyz, temp[0].xyyy, RECT[3]; 11: MUL temp[2].xyz, temp[2].xyzz, const[4].xyzz; 12: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 13: RSQ temp[3].x, temp[3].xxxx; 14: MUL temp[3].xyz, temp[1].xyzz, temp[3].xxxx; 15: TEX temp[4].xyz, temp[0].xyyy, RECT[2]; 16: MAD temp[4].xyz, temp[4].xyzz, const[8].wwww, const[9].xxxx; 17: DP3 temp[3].x, temp[3].xyzz, temp[4].xyzz; 18: MAX temp[3].x, temp[3].xxxx, const[9].yyyy; 19: MUL temp[2].xyz, temp[2].xyzz, temp[3].xxxx; 20: DP3 temp[1].x, temp[1].xyzz, temp[1].xyzz; 21: TEX temp[1].x, temp[1].xxxx, 1D[0]; 22: MUL temp[1].xyz, temp[2].xyzz, temp[1].xxxx; 23: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: RCP temp[5].w, input[0].wwww; 1: MUL temp[5].xyz, input[0], temp[5].wwww; 2: MAD temp[5].xyz, temp[5].xyz0, const[10].xyz0, const[11].xyz0; 3: MOV temp[0], temp[5]; 4: MAD temp[0].y, temp[5], const[7].xxxx, const[7].yyyy; 5: TEX temp[1].xyz, temp[0].xyyy, RECT[1]; 6: DP3 temp[1].x, temp[1].xyzz, const[8].xyzz; 7: MUL temp[1].xyz, input[1].xyzz, temp[1].xxxx; 8: ADD temp[1].xyz, const[6].xyzz, -temp[1].xyzz; 9: MUL temp[1].xyz, temp[1].xyzz, const[5].xxxx; 10: TEX temp[2].xyz, temp[0].xyyy, RECT[3]; 11: MUL temp[2].xyz, temp[2].xyzz, const[4].xyzz; 12: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 13: RSQ temp[3].x, temp[3].xxxx; 14: MUL temp[3].xyz, temp[1].xyzz, temp[3].xxxx; 15: TEX temp[4].xyz, temp[0].xyyy, RECT[2]; 16: MAD temp[4].xyz, temp[4].xyzz, const[8].wwww, const[9].xxxx; 17: DP3 temp[3].x, temp[3].xyzz, temp[4].xyzz; 18: MAX temp[3].x, temp[3].xxxx, const[9].yyyy; 19: MUL temp[2].xyz, temp[2].xyzz, temp[3].xxxx; 20: DP3 temp[1].x, temp[1].xyzz, temp[1].xyzz; 21: TEX temp[1].x, temp[1].xxxx, 1D[0]; 22: MUL temp[1].xyz, temp[2].xyzz, temp[1].xxxx; 23: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: RCP temp[5].w, input[0].wwww; 1: MUL temp[5].xyz, input[0], temp[5].wwww; 2: MAD temp[5].xyz, temp[5].xyz0, const[10].xyz0, const[11].xyz0; 3: MOV temp[0], temp[5]; 4: MAD temp[0].y, temp[5], const[7].xxxx, const[7].yyyy; 5: MUL temp[6], temp[0].xyyy, const[12]; 6: TEX temp[7], temp[6], 2D[1]; 7: MOV temp[1].xyz, temp[7]; 8: DP3 temp[1].x, temp[1].xyzz, const[8].xyzz; 9: MUL temp[1].xyz, input[1].xyzz, temp[1].xxxx; 10: ADD temp[1].xyz, const[6].xyzz, -temp[1].xyzz; 11: MUL temp[1].xyz, temp[1].xyzz, const[5].xxxx; 12: MUL temp[8], temp[0].xyyy, const[13]; 13: TEX temp[9], temp[8], 2D[3]; 14: MOV temp[2].xyz, temp[9]; 15: MUL temp[2].xyz, temp[2].xyzz, const[4].xyzz; 16: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 17: RSQ temp[3].x, temp[3].xxxx; 18: MUL temp[3].xyz, temp[1].xyzz, temp[3].xxxx; 19: MUL temp[10], temp[0].xyyy, const[14]; 20: TEX temp[11], temp[10], 2D[2]; 21: MOV temp[4].xyz, temp[11]; 22: MAD temp[4].xyz, temp[4].xyzz, const[8].wwww, const[9].xxxx; 23: DP3 temp[3].x, temp[3].xyzz, temp[4].xyzz; 24: MAX temp[3].x, temp[3].xxxx, const[9].yyyy; 25: MUL temp[2].xyz, temp[2].xyzz, temp[3].xxxx; 26: DP3 temp[1].x, temp[1].xyzz, temp[1].xyzz; 27: TEX temp[12], temp[1].xxxx, 1D[0]; 28: MOV temp[1].x, temp[12]; 29: MUL temp[1].xyz, temp[2].xyzz, temp[1].xxxx; 30: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: RCP temp[5].w, input[0].wwww; 1: MUL temp[5].xyz, input[0], temp[5].wwww; 2: MAD temp[5].xyz, temp[5].xyz0, const[10].xyz0, const[11].xyz0; 3: MOV temp[0], temp[5]; 4: MAD temp[0].y, temp[5], const[7].xxxx, const[7].yyyy; 5: MUL temp[6], temp[0].xyyy, const[12]; 6: TEX temp[7], temp[6], 2D[1]; 7: MOV temp[1].xyz, temp[7]; 8: DP3 temp[1].x, temp[1].xyzz, const[8].xyzz; 9: MUL temp[1].xyz, input[1].xyzz, temp[1].xxxx; 10: ADD temp[1].xyz, const[6].xyzz, -temp[1].xyzz; 11: MUL temp[1].xyz, temp[1].xyzz, const[5].xxxx; 12: MUL temp[8], temp[0].xyyy, const[13]; 13: TEX temp[9], temp[8], 2D[3]; 14: MOV temp[2].xyz, temp[9]; 15: MUL temp[2].xyz, temp[2].xyzz, const[4].xyzz; 16: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 17: RSQ temp[3].x, |temp[3].xxxx|; 18: MUL temp[3].xyz, temp[1].xyzz, temp[3].xxxx; 19: MUL temp[10], temp[0].xyyy, const[14]; 20: TEX temp[11], temp[10], 2D[2]; 21: MOV temp[4].xyz, temp[11]; 22: MAD temp[4].xyz, temp[4].xyzz, const[8].wwww, const[9].xxxx; 23: DP3 temp[3].x, temp[3].xyzz, temp[4].xyzz; 24: MAX temp[3].x, temp[3].xxxx, const[9].yyyy; 25: MUL temp[2].xyz, temp[2].xyzz, temp[3].xxxx; 26: DP3 temp[1].x, temp[1].xyzz, temp[1].xyzz; 27: TEX temp[12], temp[1].xxxx, 1D[0]; 28: MOV temp[1].x, temp[12]; 29: MUL temp[1].xyz, temp[2].xyzz, temp[1].xxxx; 30: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: RCP temp[5].w, input[0].___w; 1: MUL temp[5].xy, input[0].xy__, temp[5].ww__; 2: MAD temp[5].xy, temp[5].xy__, const[10].xy__, const[11].xy__; 3: MOV temp[0].x, temp[5].x___; 4: MAD temp[0].y, temp[5]._y__, const[7]._x__, const[7]._y__; 5: MUL temp[6].xy, temp[0].xy__, const[12].xy__; 6: TEX temp[7].xyz, temp[6].xy__, 2D[1]; 7: MOV temp[1].xyz, temp[7].xyz_; 8: DP3 temp[1].x, temp[1].xyz_, const[8].xyz_; 9: MUL temp[1].xyz, input[1].xyz_, temp[1].xxx_; 10: ADD temp[1].xyz, const[6].xyz_, -temp[1].xyz_; 11: MUL temp[1].xyz, temp[1].xyz_, const[5].xxx_; 12: MUL temp[8].xy, temp[0].xy__, const[13].xy__; 13: TEX temp[9].xyz, temp[8].xy__, 2D[3]; 14: MOV temp[2].xyz, temp[9].xyz_; 15: MUL temp[2].xyz, temp[2].xyz_, const[4].xyz_; 16: DP3 temp[3].x, temp[1].xyz_, temp[1].xyz_; 17: RSQ temp[3].x, |temp[3].x___|; 18: MUL temp[3].xyz, temp[1].xyz_, temp[3].xxx_; 19: MUL temp[10].xy, temp[0].xy__, const[14].xy__; 20: TEX temp[11].xyz, temp[10].xy__, 2D[2]; 21: MOV temp[4].xyz, temp[11].xyz_; 22: MAD temp[4].xyz, temp[4].xyz_, const[8].www_, const[9].xxx_; 23: DP3 temp[3].x, temp[3].xyz_, temp[4].xyz_; 24: MAX temp[3].x, temp[3].x___, const[9].y___; 25: MUL temp[2].xyz, temp[2].xyz_, temp[3].xxx_; 26: DP3 temp[1].x, temp[1].xyz_, temp[1].xyz_; 27: TEX temp[12].x, temp[1].x___, 1D[0]; 28: MOV temp[1].x, temp[12].x___; 29: MUL temp[1].xyz, temp[2].xyz_, temp[1].xxx_; 30: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: RCP temp[5].w, input[0].___w; 1: MUL temp[5].xy, input[0].xy__, temp[5].ww__; 2: MAD temp[5].xy, temp[5].xy__, const[10].xy__, const[11].xy__; 3: MOV temp[0].x, temp[5].x___; 4: MAD temp[0].y, temp[5]._y__, const[7]._x__, const[7]._y__; 5: MUL temp[6].xy, temp[0].xy__, const[12].xy__; 6: TEX temp[7].xyz, temp[6].xy__, 2D[1]; 7: MOV temp[1].xyz, temp[7].xyz_; 8: DP3 temp[1].x, temp[1].xyz_, const[8].xyz_; 9: MUL temp[1].xyz, input[1].xyz_, temp[1].xxx_; 10: ADD temp[1].xyz, const[6].xyz_, -temp[1].xyz_; 11: MUL temp[1].xyz, temp[1].xyz_, const[5].xxx_; 12: MUL temp[8].xy, temp[0].xy__, const[13].xy__; 13: TEX temp[9].xyz, temp[8].xy__, 2D[3]; 14: MOV temp[2].xyz, temp[9].xyz_; 15: MUL temp[2].xyz, temp[2].xyz_, const[4].xyz_; 16: DP3 temp[3].x, temp[1].xyz_, temp[1].xyz_; 17: RSQ temp[3].x, |temp[3].x___|; 18: MUL temp[3].xyz, temp[1].xyz_, temp[3].xxx_; 19: MUL temp[10].xy, temp[0].xy__, const[14].xy__; 20: TEX temp[11].xyz, temp[10].xy__, 2D[2]; 21: MOV temp[4].xyz, temp[11].xyz_; 22: MAD temp[4].xyz, temp[4].xyz_, const[8].www_, const[9].xxx_; 23: DP3 temp[3].x, temp[3].xyz_, temp[4].xyz_; 24: MAX temp[3].x, temp[3].x___, const[9].y___; 25: MUL temp[2].xyz, temp[2].xyz_, temp[3].xxx_; 26: DP3 temp[1].x, temp[1].xyz_, temp[1].xyz_; 27: TEX temp[12].x, temp[1].x___, 1D[0]; 28: MOV temp[1].x, temp[12].x___; 29: MUL temp[1].xyz, temp[2].xyz_, temp[1].xxx_; 30: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: RCP temp[13].w, input[0].___w; 1: MUL temp[14].xy, input[0].xy__, temp[13].ww__; 2: MAD temp[15].xy, temp[14].xy__, const[10].xy__, const[11].xy__; 3: MOV temp[16].x, temp[15].x___; 4: MAD temp[16].y, temp[15]._y__, const[7]._x__, const[7]._y__; 5: MUL temp[17].xy, temp[16].xy__, const[12].xy__; 6: TEX temp[18].xyz, temp[17].xy__, 2D[1]; 7: MOV temp[19].xyz, temp[18].xyz_; 8: DP3 temp[20].x, temp[19].xyz_, const[8].xyz_; 9: MUL temp[21].xyz, input[1].xyz_, temp[20].xxx_; 10: ADD temp[22].xyz, const[6].xyz_, -temp[21].xyz_; 11: MUL temp[23].xyz, temp[22].xyz_, const[5].xxx_; 12: MUL temp[24].xy, temp[16].xy__, const[13].xy__; 13: TEX temp[25].xyz, temp[24].xy__, 2D[3]; 14: MOV temp[26].xyz, temp[25].xyz_; 15: MUL temp[27].xyz, temp[26].xyz_, const[4].xyz_; 16: DP3 temp[28].x, temp[23].xyz_, temp[23].xyz_; 17: RSQ temp[29].x, |temp[28].x___|; 18: MUL temp[30].xyz, temp[23].xyz_, temp[29].xxx_; 19: MUL temp[31].xy, temp[16].xy__, const[14].xy__; 20: TEX temp[32].xyz, temp[31].xy__, 2D[2]; 21: MOV temp[33].xyz, temp[32].xyz_; 22: MAD temp[34].xyz, temp[33].xyz_, const[8].www_, const[9].xxx_; 23: DP3 temp[35].x, temp[30].xyz_, temp[34].xyz_; 24: MAX temp[36].x, temp[35].x___, const[9].y___; 25: MUL temp[37].xyz, temp[27].xyz_, temp[36].xxx_; 26: DP3 temp[38].x, temp[23].xyz_, temp[23].xyz_; 27: TEX temp[39].x, temp[38].x___, 1D[0]; 28: MOV temp[40].x, temp[39].x___; 29: MUL temp[41].xyz, temp[37].xyz_, temp[40].xxx_; 30: MOV output[0], temp[41]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: RCP temp[13].w, input[0].___w; 1: MUL temp[14].xy, input[0].xy__, temp[13].ww__; 2: MAD temp[15].xy, temp[14].xy__, const[10].xy__, const[11].xy__; 3: MOV temp[16].x, temp[15].x___; 4: MAD temp[16].y, temp[15]._y__, const[7]._x__, const[7]._y__; 5: MUL temp[17].xy, temp[16].xy__, const[12].xy__; 6: TEX temp[18].xyz, temp[17].xy__, 2D[1]; 7: DP3 temp[20].x, temp[18].xyz_, const[8].xyz_; 8: MUL temp[21].xyz, input[1].xyz_, temp[20].xxx_; 9: MUL temp[23].xyz, (const[6] - temp[21]).xyz_, const[5].xxx_; 10: MUL temp[24].xy, temp[16].xy__, const[13].xy__; 11: TEX temp[25].xyz, temp[24].xy__, 2D[3]; 12: MUL temp[27].xyz, temp[25].xyz_, const[4].xyz_; 13: DP3 temp[28].x, temp[23].xyz_, temp[23].xyz_; 14: RSQ temp[29].x, |temp[28].x___|; 15: MUL temp[30].xyz, temp[23].xyz_, temp[29].xxx_; 16: MUL temp[31].xy, temp[16].xy__, const[14].xy__; 17: TEX temp[32].xyz, temp[31].xy__, 2D[2]; 18: MAD temp[34].xyz, temp[32].xyz_, const[8].www_, none.-1-1-1_; 19: DP3 temp[35].x, temp[30].xyz_, temp[34].xyz_; 20: MAX temp[36].x, temp[35].x___, none.0___; 21: MUL temp[37].xyz, temp[27].xyz_, temp[36].xxx_; 22: DP3 temp[38].x, temp[23].xyz_, temp[23].xyz_; 23: TEX temp[39].x, temp[38].x___, 1D[0]; 24: MUL temp[41].xyz, temp[37].xyz_, temp[39].xxx_; 25: MOV output[0], temp[41]; CONST[8] = { 1.0000 0.0039 0.0000 2.0000 } CONST[9] = { -1.0000 0.0000 0.0000 0.0000 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: RCP temp[13].w, input[0].___w; 1: MUL temp[14].xy, input[0].xy__, temp[13].ww__; 2: MAD temp[15].xy, temp[14].xy__, const[10].xy__, const[11].xy__; 3: MOV temp[16].x, temp[15].x___; 4: MAD temp[16].y, temp[15]._y__, const[7]._x__, const[7]._y__; 5: MUL temp[17].xy, temp[16].xy__, const[12].xy__; 6: TEX temp[18].xyz, temp[17].xy__, 2D[1]; 7: DP3 temp[20].x, temp[18].xyz_, const[8].xyz_; 8: MUL temp[21].xyz, input[1].xyz_, temp[20].xxx_; 9: MUL temp[23].xyz, (const[6] - temp[21]).xyz_, const[5].xxx_; 10: MUL temp[24].xy, temp[16].xy__, const[13].xy__; 11: TEX temp[25].xyz, temp[24].xy__, 2D[3]; 12: MUL temp[27].xyz, temp[25].xyz_, const[4].xyz_; 13: DP3 temp[28].x, temp[23].xyz_, temp[23].xyz_; 14: RSQ temp[29].x, |temp[28].x___|; 15: MUL temp[30].xyz, temp[23].xyz_, temp[29].xxx_; 16: MUL temp[31].xy, temp[16].xy__, const[14].xy__; 17: TEX temp[32].xyz, temp[31].xy__, 2D[2]; 18: MAD temp[34].xyz, temp[32].xyz_, const[8].www_, none.-1-1-1_; 19: DP3 temp[35].x, temp[30].xyz_, temp[34].xyz_; 20: MAX temp[36].x, temp[35].x___, none.0___; 21: MUL temp[37].xyz, temp[27].xyz_, temp[36].xxx_; 22: DP3 temp[38].x, temp[23].xyz_, temp[23].xyz_; 23: TEX temp[39].x, temp[38].x___, 1D[0]; 24: MUL temp[41].xyz, temp[37].xyz_, temp[39].xxx_; 25: MOV output[0], temp[41]; CONST[4] = { 1.0000 0.0039 0.0000 2.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: RCP temp[13].w, input[0].___w; 1: MUL temp[14].xy, input[0].xy__, temp[13].ww__; 2: MAD temp[15].xy, temp[14].xy__, const[5].xy__, const[6].xy__; 3: MOV temp[16].x, temp[15].x___; 4: MAD temp[16].y, temp[15]._y__, const[3]._x__, const[3]._y__; 5: MUL temp[17].xy, temp[16].xy__, const[7].xy__; 6: TEX temp[18].xyz, temp[17].xy__, 2D[1]; 7: DP3 temp[20].x, temp[18].xyz_, const[4].xyz_; 8: MUL temp[21].xyz, input[1].xyz_, temp[20].xxx_; 9: MUL temp[23].xyz, (const[2] - temp[21]).xyz_, const[1].xxx_; 10: MUL temp[24].xy, temp[16].xy__, const[8].xy__; 11: TEX temp[25].xyz, temp[24].xy__, 2D[3]; 12: MUL temp[27].xyz, temp[25].xyz_, const[0].xyz_; 13: DP3 temp[28].x, temp[23].xyz_, temp[23].xyz_; 14: RSQ temp[29].x, |temp[28].x___|; 15: MUL temp[30].xyz, temp[23].xyz_, temp[29].xxx_; 16: MUL temp[31].xy, temp[16].xy__, const[9].xy__; 17: TEX temp[32].xyz, temp[31].xy__, 2D[2]; 18: MAD temp[34].xyz, temp[32].xyz_, const[4].www_, none.-1-1-1_; 19: DP3 temp[35].x, temp[30].xyz_, temp[34].xyz_; 20: MAX temp[36].x, temp[35].x___, none.0___; 21: MUL temp[37].xyz, temp[27].xyz_, temp[36].xxx_; 22: DP3 temp[38].x, temp[23].xyz_, temp[23].xyz_; 23: TEX temp[39].x, temp[38].x___, 1D[0]; 24: MUL temp[41].xyz, temp[37].xyz_, temp[39].xxx_; 25: MOV output[0], temp[41]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[13].w, src0.w 1: src0.xyz = input[0], src0.w = temp[13] MAD temp[14].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[14], src1.xyz = const[5], src2.xyz = const[6] MAD temp[15].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[15] MAD temp[16].x, src0.x__, src0.111, src0.000 4: src0.xyz = temp[15], src1.xyz = const[3] MAD temp[16].y, src0._y_, src1._x_, src1._y_ 5: src0.xyz = temp[16], src1.xyz = const[7] MAD temp[17].xy, src0.xy_, src1.xy_, src0.000 6: TEX temp[18].xyz, temp[17].xy__, 2D[1]; 7: src0.xyz = temp[18], src1.xyz = const[4] DP3 temp[20].x, src0.xyz, src1.xyz 8: src0.xyz = input[1], src1.xyz = temp[20] MAD temp[21].xyz, src0.xyz, src1.xxx, src0.000 9: src0.xyz = temp[21], src1.xyz = const[2], src2.xyz = const[1], srcp.xyz = (src1 - src0) MAD temp[23].xyz, srcp.xyz, src2.xxx, src0.000 10: src0.xyz = temp[16], src1.xyz = const[8] MAD temp[24].xy, src0.xy_, src1.xy_, src0.000 11: TEX temp[25].xyz, temp[24].xy__, 2D[3]; 12: src0.xyz = temp[25], src1.xyz = const[0] MAD temp[27].xyz, src0.xyz, src1.xyz, src0.000 13: src0.xyz = temp[23] DP3 temp[28].x, src0.xyz, src0.xyz 14: src0.xyz = temp[28] REPL_ALPHA temp[29].x RSQ, |src0.x| 15: src0.xyz = temp[23], src1.xyz = temp[29] MAD temp[30].xyz, src0.xyz, src1.xxx, src0.000 16: src0.xyz = temp[16], src1.xyz = const[9] MAD temp[31].xy, src0.xy_, src1.xy_, src0.000 17: TEX temp[32].xyz, temp[31].xy__, 2D[2]; 18: src0.xyz = temp[32], src0.w = const[4] MAD temp[34].xyz, src0.xyz, src0.www, -src0.111 19: src0.xyz = temp[30], src1.xyz = temp[34] DP3 temp[35].x, src0.xyz, src1.xyz 20: src0.xyz = temp[35] MAX temp[36].x, src0.x__, src0.0__ 21: src0.xyz = temp[27], src1.xyz = temp[36] MAD temp[37].xyz, src0.xyz, src1.xxx, src0.000 22: src0.xyz = temp[23] DP3 temp[38].x, src0.xyz, src0.xyz 23: TEX temp[39].x, temp[38].x___, 1D[0]; 24: src0.xyz = temp[37], src1.xyz = temp[39] MAD temp[41].xyz, src0.xyz, src1.xxx, src0.000 25: src0.xyz = temp[41], src0.w = temp[41] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[13].w, src0.w 1: src0.xyz = input[0], src0.w = temp[13] MAD temp[14].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[14], src1.xyz = const[5], src2.xyz = const[6] MAD temp[15].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[15], src1.xyz = const[3] MAD temp[16].y, src0._y_, src1._x_, src1._y_ 4: src0.xyz = temp[15] MAD temp[16].x, src0.x__, src0.111, src0.000 5: src0.xyz = temp[16], src1.xyz = const[9] MAD temp[31].xy, src0.xy_, src1.xy_, src0.000 6: src0.xyz = temp[16], src1.xyz = const[8] MAD temp[24].xy, src0.xy_, src1.xy_, src0.000 7: src0.xyz = temp[16], src1.xyz = const[7] MAD temp[17].xy, src0.xy_, src1.xy_, src0.000 8: BEGIN_TEX; 9: TEX temp[32].xyz, temp[31].xy__, 2D[2]; 10: TEX temp[25].xyz, temp[24].xy__, 2D[3]; 11: TEX temp[18].xyz, temp[17].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 12: src0.xyz = temp[32], src0.w = const[4] SEM_WAIT MAD temp[34].xyz, src0.xyz, src0.www, -src0.111 13: src0.xyz = temp[25], src1.xyz = const[0] MAD temp[27].xyz, src0.xyz, src1.xyz, src0.000 14: src0.xyz = temp[18], src1.xyz = const[4] DP3 temp[20].x, src0.xyz, src1.xyz 15: src0.xyz = input[1], src1.xyz = temp[20] MAD temp[21].xyz, src0.xyz, src1.xxx, src0.000 16: src0.xyz = temp[21], src1.xyz = const[2], src2.xyz = const[1], srcp.xyz = (src1 - src0) MAD temp[23].xyz, srcp.xyz, src2.xxx, src0.000 17: src0.xyz = temp[23] DP3 temp[38].x, src0.xyz, src0.xyz 18: src0.xyz = temp[23] DP3 temp[28].x, src0.xyz, src0.xyz 19: src0.xyz = temp[28] REPL_ALPHA temp[29].x RSQ, |src0.x| 20: src0.xyz = temp[23], src1.xyz = temp[29] MAD temp[30].xyz, src0.xyz, src1.xxx, src0.000 21: src0.xyz = temp[30], src1.xyz = temp[34] DP3 temp[35].x, src0.xyz, src1.xyz 22: src0.xyz = temp[35] MAX temp[36].x, src0.x__, src0.0__ 23: src0.xyz = temp[27], src1.xyz = temp[36] MAD temp[37].xyz, src0.xyz, src1.xxx, src0.000 24: BEGIN_TEX; 25: TEX temp[39].x, temp[38].x___, 1D[0] SEM_WAIT SEM_ACQUIRE; 26: src0.xyz = temp[37], src1.xyz = temp[39] SEM_WAIT MAD temp[41].xyz, src0.xyz, src1.xxx, src0.000 27: src0.xyz = temp[41], src0.w = temp[41] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[13].w, src0.w 1: src0.xyz = input[0], src0.w = temp[13] MAD temp[14].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[14], src1.xyz = const[5], src2.xyz = const[6] MAD temp[15].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[15], src1.xyz = const[3] MAD temp[16].y, src0._y_, src1._x_, src1._y_ 4: src0.xyz = temp[15] MAD temp[16].x, src0.x__, src0.111, src0.000 5: src0.xyz = temp[16], src1.xyz = const[9] MAD temp[31].xy, src0.xy_, src1.xy_, src0.000 6: src0.xyz = temp[16], src1.xyz = const[8] MAD temp[24].xy, src0.xy_, src1.xy_, src0.000 7: src0.xyz = temp[16], src1.xyz = const[7] MAD temp[17].xy, src0.xy_, src1.xy_, src0.000 8: BEGIN_TEX; 9: TEX temp[32].xyz, temp[31].xy__, 2D[2]; 10: TEX temp[25].xyz, temp[24].xy__, 2D[3]; 11: TEX temp[18].xyz, temp[17].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 12: src0.xyz = temp[32], src0.w = const[4] SEM_WAIT MAD temp[34].xyz, src0.xyz, src0.www, -src0.111 13: src0.xyz = temp[25], src1.xyz = const[0] MAD temp[27].xyz, src0.xyz, src1.xyz, src0.000 14: src0.xyz = temp[18], src1.xyz = const[4] DP3 temp[20].x, src0.xyz, src1.xyz 15: src0.xyz = input[1], src1.xyz = temp[20] MAD temp[21].xyz, src0.xyz, src1.xxx, src0.000 16: src0.xyz = temp[21], src1.xyz = const[2], src2.xyz = const[1], srcp.xyz = (src1 - src0) MAD temp[23].xyz, srcp.xyz, src2.xxx, src0.000 17: src0.xyz = temp[23] DP3 temp[38].x, src0.xyz, src0.xyz 18: src0.xyz = temp[23] DP3 temp[28].x, src0.xyz, src0.xyz 19: src0.xyz = temp[28] REPL_ALPHA temp[29].x RSQ, |src0.x| 20: src0.xyz = temp[23], src1.xyz = temp[29] MAD temp[30].xyz, src0.xyz, src1.xxx, src0.000 21: src0.xyz = temp[30], src1.xyz = temp[34] DP3 temp[35].x, src0.xyz, src1.xyz 22: src0.xyz = temp[35] MAX temp[36].x, src0.x__, src0.0__ 23: src0.xyz = temp[27], src1.xyz = temp[36] MAD temp[37].xyz, src0.xyz, src1.xxx, src0.000 24: BEGIN_TEX; 25: TEX temp[39].x, temp[38].x___, 1D[0] SEM_WAIT SEM_ACQUIRE; 26: src0.xyz = temp[37], src1.xyz = temp[39] SEM_WAIT MAD temp[41].xyz, src0.xyz, src1.xxx, src0.000 27: src0.xyz = temp[41], src0.w = temp[41] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.w = input[1] RCP temp[0].w, src0.w 1: src0.xyz = input[1], src0.w = temp[0] MAD temp[1].xy, src0.xy_, src0.ww_, src0.00_ 2: src0.xyz = temp[1], src1.xyz = const[5], src2.xyz = const[6] MAD temp[1].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[1], src1.xyz = const[3] MAD temp[2].y, src0._y_, src1._x_, src1._y_ 4: src0.xyz = temp[1] MAD temp[2].x, src0.x__, src0.11_, src0.00_ 5: src0.xyz = temp[2], src1.xyz = const[9] MAD temp[1].xy, src0.xy_, src1.xy_, src0.00_ 6: src0.xyz = temp[2], src1.xyz = const[8] MAD temp[3].xy, src0.xy_, src1.xy_, src0.00_ 7: src0.xyz = temp[2], src1.xyz = const[7] MAD temp[2].xy, src0.xy_, src1.xy_, src0.00_ 8: BEGIN_TEX; 9: TEX temp[1].xyz, temp[1].xy__, 2D[2]; 10: TEX temp[3].xyz, temp[3].xy__, 2D[3]; 11: TEX temp[2].xyz, temp[2].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 12: src0.xyz = temp[1], src0.w = const[4] SEM_WAIT MAD temp[1].xyz, src0.xyz, src0.www, -src0.111 13: src0.xyz = temp[3], src1.xyz = const[0] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 14: src0.xyz = temp[2], src1.xyz = const[4] DP3 temp[2].x, src0.xyz, src1.xyz 15: src0.xyz = input[0], src1.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 16: src0.xyz = temp[0], src1.xyz = const[2], src2.xyz = const[1], srcp.xyz = (src1 - src0) MAD temp[0].xyz, srcp.xyz, src2.xxx, src0.000 17: src0.xyz = temp[0] DP3 temp[2].x, src0.xyz, src0.xyz 18: src0.xyz = temp[0] DP3 temp[2].y, src0.xyz, src0.xyz 19: src0.xyz = temp[2] REPL_ALPHA temp[2].y RSQ, |src0.y| 20: src0.xyz = temp[0], src1.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src1.yyy, src0.000 21: src0.xyz = temp[0], src1.xyz = temp[1] DP3 temp[0].x, src0.xyz, src1.xyz 22: src0.xyz = temp[0] MAX temp[0].x, src0.x__, src0.0__ 23: src0.xyz = temp[3], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 24: BEGIN_TEX; 25: TEX temp[1].x, temp[2].x___, 1D[0] SEM_WAIT SEM_ACQUIRE; 26: src0.xyz = temp[0], src1.xyz = temp[1] SEM_WAIT MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 27: src0.xyz = temp[0], src0.w = temp[41] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 r300compiler error: Too many hardware temporaries used. r300 FP: Compiler Error: Too many hardware temporaries used. Using a dummy shader instead. r300: Initial fragment program FRAG DCL OUT[0], COLOR IMM[0] FLT32 { 0.0000, 1.0000, 0.0000, 0.0000} 0: MOV OUT[0], IMM[0].xxxy 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], none.0001; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], none.0001; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], none.0001; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: MAD color[0].xyz, src0.000, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: MAD color[0].xyz, src0.000, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: MAD color[0].xyz, src0.000, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: MAD color[0].xyz, src0.000, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 pc=45************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: 1.0 1.0 0.0 op: 00040891 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], LINEAR DCL OUT[0], COLOR DCL SAMP[0] 0: TEX OUT[0], IN[0], SAMP[0], 2D 1: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[1], input[0], 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[1], input[0], 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[0], src0.w = temp[0] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[0], src0.w = temp[0] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[0], src0.w = temp[0] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=46************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL IMM[0] FLT32 { -4.3500, 0.0000, 0.1000, -2.5000} IMM[1] FLT32 { 0.2500, -0.7500, 0.0000, 0.3000} IMM[2] FLT32 { 0.5000, 0.7500, 0.0000, 2.5000} IMM[3] FLT32 { 4.3500, 0.0000, 0.5556, 1.0000} 0: ADD TEMP[0].xy, IN[0].xyyy, IMM[0].xyyy 1: TEX TEMP[0].xyz, TEMP[0].xyyy, SAMP[0], RECT 2: MUL TEMP[0].xyz, TEMP[0].xyzz, IMM[0].zzzz 3: ADD TEMP[1].xy, IN[0].xyyy, IMM[0].wyyy 4: TEX TEMP[1].xyz, TEMP[1].xyyy, SAMP[0], RECT 5: MAD TEMP[0].xyz, TEMP[1].xyzz, IMM[1].xxxx, TEMP[0].xyzz 6: ADD TEMP[1].xy, IN[0].xyyy, IMM[1].yzzz 7: TEX TEMP[1].xyz, TEMP[1].xyyy, SAMP[0], RECT 8: MAD TEMP[0].xyz, TEMP[1].xyzz, IMM[1].wwww, TEMP[0].xyzz 9: TEX TEMP[1].xyz, IN[0].xyyy, SAMP[0], RECT 10: MAD TEMP[0].xyz, TEMP[1].xyzz, IMM[2].xxxx, TEMP[0].xyzz 11: ADD TEMP[1].xy, IN[0].xyyy, IMM[2].yzzz 12: TEX TEMP[1].xyz, TEMP[1].xyyy, SAMP[0], RECT 13: MAD TEMP[0].xyz, TEMP[1].xyzz, IMM[1].wwww, TEMP[0].xyzz 14: ADD TEMP[1].xy, IN[0].xyyy, IMM[2].wzzz 15: TEX TEMP[1].xyz, TEMP[1].xyyy, SAMP[0], RECT 16: MAD TEMP[0].xyz, TEMP[1].xyzz, IMM[1].xxxx, TEMP[0].xyzz 17: ADD TEMP[1].xy, IN[0].xyyy, IMM[3].xyyy 18: TEX TEMP[1].xyz, TEMP[1].xyyy, SAMP[0], RECT 19: MAD TEMP[0].xyz, TEMP[1].xyzz, IMM[0].zzzz, TEMP[0].xyzz 20: MUL TEMP[0].xyz, TEMP[0].xyzz, IMM[3].zzzz 21: MOV TEMP[0].xyz, TEMP[0].xyzx 22: MOV TEMP[0].w, IMM[3].wwww 23: MOV OUT[0], TEMP[0] 24: END Fragment Program: before compilation # Radeon Compiler Program 0: ADD temp[0].xy, input[0].xyyy, const[0].xyyy; 1: TEX temp[0].xyz, temp[0].xyyy, RECT[0]; 2: MUL temp[0].xyz, temp[0].xyzz, const[0].zzzz; 3: ADD temp[1].xy, input[0].xyyy, const[0].wyyy; 4: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 5: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 6: ADD temp[1].xy, input[0].xyyy, const[1].yzzz; 7: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 8: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 9: TEX temp[1].xyz, input[0].xyyy, RECT[0]; 10: MAD temp[0].xyz, temp[1].xyzz, const[2].xxxx, temp[0].xyzz; 11: ADD temp[1].xy, input[0].xyyy, const[2].yzzz; 12: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 13: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 14: ADD temp[1].xy, input[0].xyyy, const[2].wzzz; 15: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 16: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 17: ADD temp[1].xy, input[0].xyyy, const[3].xyyy; 18: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 19: MAD temp[0].xyz, temp[1].xyzz, const[0].zzzz, temp[0].xyzz; 20: MUL temp[0].xyz, temp[0].xyzz, const[3].zzzz; 21: MOV temp[0].xyz, temp[0].xyzx; 22: MOV temp[0].w, const[3].wwww; 23: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: ADD temp[0].xy, input[0].xyyy, const[0].xyyy; 1: TEX temp[0].xyz, temp[0].xyyy, RECT[0]; 2: MUL temp[0].xyz, temp[0].xyzz, const[0].zzzz; 3: ADD temp[1].xy, input[0].xyyy, const[0].wyyy; 4: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 5: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 6: ADD temp[1].xy, input[0].xyyy, const[1].yzzz; 7: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 8: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 9: TEX temp[1].xyz, input[0].xyyy, RECT[0]; 10: MAD temp[0].xyz, temp[1].xyzz, const[2].xxxx, temp[0].xyzz; 11: ADD temp[1].xy, input[0].xyyy, const[2].yzzz; 12: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 13: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 14: ADD temp[1].xy, input[0].xyyy, const[2].wzzz; 15: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 16: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 17: ADD temp[1].xy, input[0].xyyy, const[3].xyyy; 18: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 19: MAD temp[0].xyz, temp[1].xyzz, const[0].zzzz, temp[0].xyzz; 20: MUL temp[0].xyz, temp[0].xyzz, const[3].zzzz; 21: MOV temp[0].xyz, temp[0].xyzx; 22: MOV temp[0].w, const[3].wwww; 23: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: ADD temp[0].xy, input[0].xyyy, const[0].xyyy; 1: TEX temp[0].xyz, temp[0].xyyy, RECT[0]; 2: MUL temp[0].xyz, temp[0].xyzz, const[0].zzzz; 3: ADD temp[1].xy, input[0].xyyy, const[0].wyyy; 4: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 5: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 6: ADD temp[1].xy, input[0].xyyy, const[1].yzzz; 7: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 8: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 9: TEX temp[1].xyz, input[0].xyyy, RECT[0]; 10: MAD temp[0].xyz, temp[1].xyzz, const[2].xxxx, temp[0].xyzz; 11: ADD temp[1].xy, input[0].xyyy, const[2].yzzz; 12: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 13: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 14: ADD temp[1].xy, input[0].xyyy, const[2].wzzz; 15: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 16: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 17: ADD temp[1].xy, input[0].xyyy, const[3].xyyy; 18: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 19: MAD temp[0].xyz, temp[1].xyzz, const[0].zzzz, temp[0].xyzz; 20: MUL temp[0].xyz, temp[0].xyzz, const[3].zzzz; 21: MOV temp[0].xyz, temp[0].xyzx; 22: MOV temp[0].w, const[3].wwww; 23: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: ADD temp[0].xy, input[0].xyyy, const[0].xyyy; 1: TEX temp[0].xyz, temp[0].xyyy, RECT[0]; 2: MUL temp[0].xyz, temp[0].xyzz, const[0].zzzz; 3: ADD temp[1].xy, input[0].xyyy, const[0].wyyy; 4: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 5: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 6: ADD temp[1].xy, input[0].xyyy, const[1].yzzz; 7: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 8: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 9: TEX temp[1].xyz, input[0].xyyy, RECT[0]; 10: MAD temp[0].xyz, temp[1].xyzz, const[2].xxxx, temp[0].xyzz; 11: ADD temp[1].xy, input[0].xyyy, const[2].yzzz; 12: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 13: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 14: ADD temp[1].xy, input[0].xyyy, const[2].wzzz; 15: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 16: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 17: ADD temp[1].xy, input[0].xyyy, const[3].xyyy; 18: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 19: MAD temp[0].xyz, temp[1].xyzz, const[0].zzzz, temp[0].xyzz; 20: MUL temp[0].xyz, temp[0].xyzz, const[3].zzzz; 21: MOV temp[0].xyz, temp[0].xyzx; 22: MOV temp[0].w, const[3].wwww; 23: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].xy, input[0].xyyy, const[0].xyyy; 1: TEX temp[0].xyz, temp[0].xyyy, RECT[0]; 2: MUL temp[0].xyz, temp[0].xyzz, const[0].zzzz; 3: ADD temp[1].xy, input[0].xyyy, const[0].wyyy; 4: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 5: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 6: ADD temp[1].xy, input[0].xyyy, const[1].yzzz; 7: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 8: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 9: TEX temp[1].xyz, input[0].xyyy, RECT[0]; 10: MAD temp[0].xyz, temp[1].xyzz, const[2].xxxx, temp[0].xyzz; 11: ADD temp[1].xy, input[0].xyyy, const[2].yzzz; 12: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 13: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 14: ADD temp[1].xy, input[0].xyyy, const[2].wzzz; 15: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 16: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 17: ADD temp[1].xy, input[0].xyyy, const[3].xyyy; 18: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 19: MAD temp[0].xyz, temp[1].xyzz, const[0].zzzz, temp[0].xyzz; 20: MUL temp[0].xyz, temp[0].xyzz, const[3].zzzz; 21: MOV temp[0].xyz, temp[0].xyzx; 22: MOV temp[0].w, const[3].wwww; 23: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: ADD temp[0].xy, input[0].xyyy, const[0].xyyy; 1: MUL temp[2], temp[0].xyyy, const[4]; 2: TEX temp[3], temp[2], 2D[0]; 3: MOV temp[0].xyz, temp[3]; 4: MUL temp[0].xyz, temp[0].xyzz, const[0].zzzz; 5: ADD temp[1].xy, input[0].xyyy, const[0].wyyy; 6: MUL temp[4], temp[1].xyyy, const[4]; 7: TEX temp[5], temp[4], 2D[0]; 8: MOV temp[1].xyz, temp[5]; 9: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 10: ADD temp[1].xy, input[0].xyyy, const[1].yzzz; 11: MUL temp[6], temp[1].xyyy, const[4]; 12: TEX temp[7], temp[6], 2D[0]; 13: MOV temp[1].xyz, temp[7]; 14: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 15: MUL temp[8], input[0].xyyy, const[4]; 16: TEX temp[9], temp[8], 2D[0]; 17: MOV temp[1].xyz, temp[9]; 18: MAD temp[0].xyz, temp[1].xyzz, const[2].xxxx, temp[0].xyzz; 19: ADD temp[1].xy, input[0].xyyy, const[2].yzzz; 20: MUL temp[10], temp[1].xyyy, const[4]; 21: TEX temp[11], temp[10], 2D[0]; 22: MOV temp[1].xyz, temp[11]; 23: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 24: ADD temp[1].xy, input[0].xyyy, const[2].wzzz; 25: MUL temp[12], temp[1].xyyy, const[4]; 26: TEX temp[13], temp[12], 2D[0]; 27: MOV temp[1].xyz, temp[13]; 28: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 29: ADD temp[1].xy, input[0].xyyy, const[3].xyyy; 30: MUL temp[14], temp[1].xyyy, const[4]; 31: TEX temp[15], temp[14], 2D[0]; 32: MOV temp[1].xyz, temp[15]; 33: MAD temp[0].xyz, temp[1].xyzz, const[0].zzzz, temp[0].xyzz; 34: MUL temp[0].xyz, temp[0].xyzz, const[3].zzzz; 35: MOV temp[0].xyz, temp[0].xyzx; 36: MOV temp[0].w, const[3].wwww; 37: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].xy, input[0].xyyy, const[0].xyyy; 1: MUL temp[2], temp[0].xyyy, const[4]; 2: TEX temp[3], temp[2], 2D[0]; 3: MOV temp[0].xyz, temp[3]; 4: MUL temp[0].xyz, temp[0].xyzz, const[0].zzzz; 5: ADD temp[1].xy, input[0].xyyy, const[0].wyyy; 6: MUL temp[4], temp[1].xyyy, const[4]; 7: TEX temp[5], temp[4], 2D[0]; 8: MOV temp[1].xyz, temp[5]; 9: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 10: ADD temp[1].xy, input[0].xyyy, const[1].yzzz; 11: MUL temp[6], temp[1].xyyy, const[4]; 12: TEX temp[7], temp[6], 2D[0]; 13: MOV temp[1].xyz, temp[7]; 14: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 15: MUL temp[8], input[0].xyyy, const[4]; 16: TEX temp[9], temp[8], 2D[0]; 17: MOV temp[1].xyz, temp[9]; 18: MAD temp[0].xyz, temp[1].xyzz, const[2].xxxx, temp[0].xyzz; 19: ADD temp[1].xy, input[0].xyyy, const[2].yzzz; 20: MUL temp[10], temp[1].xyyy, const[4]; 21: TEX temp[11], temp[10], 2D[0]; 22: MOV temp[1].xyz, temp[11]; 23: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 24: ADD temp[1].xy, input[0].xyyy, const[2].wzzz; 25: MUL temp[12], temp[1].xyyy, const[4]; 26: TEX temp[13], temp[12], 2D[0]; 27: MOV temp[1].xyz, temp[13]; 28: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 29: ADD temp[1].xy, input[0].xyyy, const[3].xyyy; 30: MUL temp[14], temp[1].xyyy, const[4]; 31: TEX temp[15], temp[14], 2D[0]; 32: MOV temp[1].xyz, temp[15]; 33: MAD temp[0].xyz, temp[1].xyzz, const[0].zzzz, temp[0].xyzz; 34: MUL temp[0].xyz, temp[0].xyzz, const[3].zzzz; 35: MOV temp[0].xyz, temp[0].xyzx; 36: MOV temp[0].w, const[3].wwww; 37: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0].xy, input[0].xy__, const[0].xy__; 1: MUL temp[2].xy, temp[0].xy__, const[4].xy__; 2: TEX temp[3].xyz, temp[2].xy__, 2D[0]; 3: MOV temp[0].xyz, temp[3].xyz_; 4: MUL temp[0].xyz, temp[0].xyz_, const[0].zzz_; 5: ADD temp[1].xy, input[0].xy__, const[0].wy__; 6: MUL temp[4].xy, temp[1].xy__, const[4].xy__; 7: TEX temp[5].xyz, temp[4].xy__, 2D[0]; 8: MOV temp[1].xyz, temp[5].xyz_; 9: MAD temp[0].xyz, temp[1].xyz_, const[1].xxx_, temp[0].xyz_; 10: ADD temp[1].xy, input[0].xy__, const[1].yz__; 11: MUL temp[6].xy, temp[1].xy__, const[4].xy__; 12: TEX temp[7].xyz, temp[6].xy__, 2D[0]; 13: MOV temp[1].xyz, temp[7].xyz_; 14: MAD temp[0].xyz, temp[1].xyz_, const[1].www_, temp[0].xyz_; 15: MUL temp[8].xy, input[0].xy__, const[4].xy__; 16: TEX temp[9].xyz, temp[8].xy__, 2D[0]; 17: MOV temp[1].xyz, temp[9].xyz_; 18: MAD temp[0].xyz, temp[1].xyz_, const[2].xxx_, temp[0].xyz_; 19: ADD temp[1].xy, input[0].xy__, const[2].yz__; 20: MUL temp[10].xy, temp[1].xy__, const[4].xy__; 21: TEX temp[11].xyz, temp[10].xy__, 2D[0]; 22: MOV temp[1].xyz, temp[11].xyz_; 23: MAD temp[0].xyz, temp[1].xyz_, const[1].www_, temp[0].xyz_; 24: ADD temp[1].xy, input[0].xy__, const[2].wz__; 25: MUL temp[12].xy, temp[1].xy__, const[4].xy__; 26: TEX temp[13].xyz, temp[12].xy__, 2D[0]; 27: MOV temp[1].xyz, temp[13].xyz_; 28: MAD temp[0].xyz, temp[1].xyz_, const[1].xxx_, temp[0].xyz_; 29: ADD temp[1].xy, input[0].xy__, const[3].xy__; 30: MUL temp[14].xy, temp[1].xy__, const[4].xy__; 31: TEX temp[15].xyz, temp[14].xy__, 2D[0]; 32: MOV temp[1].xyz, temp[15].xyz_; 33: MAD temp[0].xyz, temp[1].xyz_, const[0].zzz_, temp[0].xyz_; 34: MUL temp[0].xyz, temp[0].xyz_, const[3].zzz_; 35: MOV temp[0].xyz, temp[0].xyz_; 36: MOV temp[0].w, const[3].___w; 37: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: ADD temp[0].xy, input[0].xy__, const[0].xy__; 1: MUL temp[2].xy, temp[0].xy__, const[4].xy__; 2: TEX temp[3].xyz, temp[2].xy__, 2D[0]; 3: MOV temp[0].xyz, temp[3].xyz_; 4: MUL temp[0].xyz, temp[0].xyz_, const[0].zzz_; 5: ADD temp[1].xy, input[0].xy__, const[0].wy__; 6: MUL temp[4].xy, temp[1].xy__, const[4].xy__; 7: TEX temp[5].xyz, temp[4].xy__, 2D[0]; 8: MOV temp[1].xyz, temp[5].xyz_; 9: MAD temp[0].xyz, temp[1].xyz_, const[1].xxx_, temp[0].xyz_; 10: ADD temp[1].xy, input[0].xy__, const[1].yz__; 11: MUL temp[6].xy, temp[1].xy__, const[4].xy__; 12: TEX temp[7].xyz, temp[6].xy__, 2D[0]; 13: MOV temp[1].xyz, temp[7].xyz_; 14: MAD temp[0].xyz, temp[1].xyz_, const[1].www_, temp[0].xyz_; 15: MUL temp[8].xy, input[0].xy__, const[4].xy__; 16: TEX temp[9].xyz, temp[8].xy__, 2D[0]; 17: MOV temp[1].xyz, temp[9].xyz_; 18: MAD temp[0].xyz, temp[1].xyz_, const[2].xxx_, temp[0].xyz_; 19: ADD temp[1].xy, input[0].xy__, const[2].yz__; 20: MUL temp[10].xy, temp[1].xy__, const[4].xy__; 21: TEX temp[11].xyz, temp[10].xy__, 2D[0]; 22: MOV temp[1].xyz, temp[11].xyz_; 23: MAD temp[0].xyz, temp[1].xyz_, const[1].www_, temp[0].xyz_; 24: ADD temp[1].xy, input[0].xy__, const[2].wz__; 25: MUL temp[12].xy, temp[1].xy__, const[4].xy__; 26: TEX temp[13].xyz, temp[12].xy__, 2D[0]; 27: MOV temp[1].xyz, temp[13].xyz_; 28: MAD temp[0].xyz, temp[1].xyz_, const[1].xxx_, temp[0].xyz_; 29: ADD temp[1].xy, input[0].xy__, const[3].xy__; 30: MUL temp[14].xy, temp[1].xy__, const[4].xy__; 31: TEX temp[15].xyz, temp[14].xy__, 2D[0]; 32: MOV temp[1].xyz, temp[15].xyz_; 33: MAD temp[0].xyz, temp[1].xyz_, const[0].zzz_, temp[0].xyz_; 34: MUL temp[0].xyz, temp[0].xyz_, const[3].zzz_; 35: MOV temp[0].xyz, temp[0].xyz_; 36: MOV temp[0].w, const[3].___w; 37: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: ADD temp[16].xy, input[0].xy__, const[0].xy__; 1: MUL temp[17].xy, temp[16].xy__, const[4].xy__; 2: TEX temp[18].xyz, temp[17].xy__, 2D[0]; 3: MOV temp[19].xyz, temp[18].xyz_; 4: MUL temp[20].xyz, temp[19].xyz_, const[0].zzz_; 5: ADD temp[21].xy, input[0].xy__, const[0].wy__; 6: MUL temp[22].xy, temp[21].xy__, const[4].xy__; 7: TEX temp[23].xyz, temp[22].xy__, 2D[0]; 8: MOV temp[24].xyz, temp[23].xyz_; 9: MAD temp[25].xyz, temp[24].xyz_, const[1].xxx_, temp[20].xyz_; 10: ADD temp[26].xy, input[0].xy__, const[1].yz__; 11: MUL temp[27].xy, temp[26].xy__, const[4].xy__; 12: TEX temp[28].xyz, temp[27].xy__, 2D[0]; 13: MOV temp[29].xyz, temp[28].xyz_; 14: MAD temp[30].xyz, temp[29].xyz_, const[1].www_, temp[25].xyz_; 15: MUL temp[31].xy, input[0].xy__, const[4].xy__; 16: TEX temp[32].xyz, temp[31].xy__, 2D[0]; 17: MOV temp[33].xyz, temp[32].xyz_; 18: MAD temp[34].xyz, temp[33].xyz_, const[2].xxx_, temp[30].xyz_; 19: ADD temp[35].xy, input[0].xy__, const[2].yz__; 20: MUL temp[36].xy, temp[35].xy__, const[4].xy__; 21: TEX temp[37].xyz, temp[36].xy__, 2D[0]; 22: MOV temp[38].xyz, temp[37].xyz_; 23: MAD temp[39].xyz, temp[38].xyz_, const[1].www_, temp[34].xyz_; 24: ADD temp[40].xy, input[0].xy__, const[2].wz__; 25: MUL temp[41].xy, temp[40].xy__, const[4].xy__; 26: TEX temp[42].xyz, temp[41].xy__, 2D[0]; 27: MOV temp[43].xyz, temp[42].xyz_; 28: MAD temp[44].xyz, temp[43].xyz_, const[1].xxx_, temp[39].xyz_; 29: ADD temp[45].xy, input[0].xy__, const[3].xy__; 30: MUL temp[46].xy, temp[45].xy__, const[4].xy__; 31: TEX temp[47].xyz, temp[46].xy__, 2D[0]; 32: MOV temp[48].xyz, temp[47].xyz_; 33: MAD temp[49].xyz, temp[48].xyz_, const[0].zzz_, temp[44].xyz_; 34: MUL temp[50].xyz, temp[49].xyz_, const[3].zzz_; 35: MOV temp[51].xyz, temp[50].xyz_; 36: MOV temp[51].w, const[3].___w; 37: MOV output[0], temp[51]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[17].xy, (const[0] + input[0]).xy__, const[4].xy__; 1: TEX temp[18].xyz, temp[17].xy__, 2D[0]; 2: MUL temp[20].xyz, temp[18].xyz_, const[0].zzz_; 3: ADD temp[21].xy, input[0].xy__, const[0].w0__; 4: MUL temp[22].xy, temp[21].xy__, const[4].xy__; 5: TEX temp[23].xyz, temp[22].xy__, 2D[0]; 6: MAD temp[25].xyz, temp[23].xyz_, const[1].xxx_, temp[20].xyz_; 7: ADD temp[26].xy, input[0].xy__, const[1].yz__; 8: MUL temp[27].xy, temp[26].xy__, const[4].xy__; 9: TEX temp[28].xyz, temp[27].xy__, 2D[0]; 10: MAD temp[30].xyz, temp[28].xyz_, const[1].www_, temp[25].xyz_; 11: MUL temp[31].xy, input[0].xy__, const[4].xy__; 12: TEX temp[32].xyz, temp[31].xy__, 2D[0]; 13: MAD temp[34].xyz, temp[32].xyz_, none.HHH_, temp[30].xyz_; 14: ADD temp[35].xy, input[0].xy__, const[2].yz__; 15: MUL temp[36].xy, temp[35].xy__, const[4].xy__; 16: TEX temp[37].xyz, temp[36].xy__, 2D[0]; 17: MAD temp[39].xyz, temp[37].xyz_, const[1].www_, temp[34].xyz_; 18: ADD temp[40].xy, input[0].xy__, const[2].wz__; 19: MUL temp[41].xy, temp[40].xy__, const[4].xy__; 20: TEX temp[42].xyz, temp[41].xy__, 2D[0]; 21: MAD temp[44].xyz, temp[42].xyz_, const[1].xxx_, temp[39].xyz_; 22: MUL temp[46].xy, (const[3] + input[0]).xy__, const[4].xy__; 23: TEX temp[47].xyz, temp[46].xy__, 2D[0]; 24: MAD temp[49].xyz, temp[47].xyz_, const[0].zzz_, temp[44].xyz_; 25: MUL temp[50].xyz, temp[49].xyz_, const[3].zzz_; 26: MOV temp[51].xyz, temp[50].xyz_; 27: MOV temp[51].w, none.___1; 28: MOV output[0], temp[51]; CONST[0] = { -4.3500 0.0000 0.1000 -2.5000 } CONST[1] = { 0.2500 -0.7500 0.0000 0.3000 } CONST[2] = { 0.5000 0.7500 0.0000 2.5000 } CONST[3] = { 4.3500 0.0000 0.5556 1.0000 } CONST[5] = { 0.0000 0.0000 0.0000 -2.5000 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[17].xy, (const[0] + input[0]).xy__, const[4].xy__; 1: TEX temp[18].xyz, temp[17].xy__, 2D[0]; 2: MUL temp[20].xyz, temp[18].xyz_, const[0].zzz_; 3: ADD temp[21].xy, input[0].xy__, const[5].wz__; 4: MUL temp[22].xy, temp[21].xy__, const[4].xy__; 5: TEX temp[23].xyz, temp[22].xy__, 2D[0]; 6: MAD temp[25].xyz, temp[23].xyz_, const[1].xxx_, temp[20].xyz_; 7: ADD temp[26].xy, input[0].xy__, const[1].yz__; 8: MUL temp[27].xy, temp[26].xy__, const[4].xy__; 9: TEX temp[28].xyz, temp[27].xy__, 2D[0]; 10: MAD temp[30].xyz, temp[28].xyz_, const[1].www_, temp[25].xyz_; 11: MUL temp[31].xy, input[0].xy__, const[4].xy__; 12: TEX temp[32].xyz, temp[31].xy__, 2D[0]; 13: MAD temp[34].xyz, temp[32].xyz_, none.HHH_, temp[30].xyz_; 14: ADD temp[35].xy, input[0].xy__, const[2].yz__; 15: MUL temp[36].xy, temp[35].xy__, const[4].xy__; 16: TEX temp[37].xyz, temp[36].xy__, 2D[0]; 17: MAD temp[39].xyz, temp[37].xyz_, const[1].www_, temp[34].xyz_; 18: ADD temp[40].xy, input[0].xy__, const[2].wz__; 19: MUL temp[41].xy, temp[40].xy__, const[4].xy__; 20: TEX temp[42].xyz, temp[41].xy__, 2D[0]; 21: MAD temp[44].xyz, temp[42].xyz_, const[1].xxx_, temp[39].xyz_; 22: MUL temp[46].xy, (const[3] + input[0]).xy__, const[4].xy__; 23: TEX temp[47].xyz, temp[46].xy__, 2D[0]; 24: MAD temp[49].xyz, temp[47].xyz_, const[0].zzz_, temp[44].xyz_; 25: MUL temp[50].xyz, temp[49].xyz_, const[3].zzz_; 26: MOV temp[51].xyz, temp[50].xyz_; 27: MOV temp[51].w, none.___1; 28: MOV output[0], temp[51]; CONST[0] = { -4.3500 0.0000 0.1000 -2.5000 } CONST[1] = { 0.2500 -0.7500 0.0000 0.3000 } CONST[2] = { 0.5000 0.7500 0.0000 2.5000 } CONST[3] = { 4.3500 0.0000 0.5556 1.0000 } CONST[5] = { 0.0000 0.0000 0.0000 -2.5000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[17].xy, (const[0] + input[0]).xy__, const[4].xy__; 1: TEX temp[18].xyz, temp[17].xy__, 2D[0]; 2: MUL temp[20].xyz, temp[18].xyz_, const[0].zzz_; 3: ADD temp[21].xy, input[0].xy__, const[5].wz__; 4: MUL temp[22].xy, temp[21].xy__, const[4].xy__; 5: TEX temp[23].xyz, temp[22].xy__, 2D[0]; 6: MAD temp[25].xyz, temp[23].xyz_, const[1].xxx_, temp[20].xyz_; 7: ADD temp[26].xy, input[0].xy__, const[1].yz__; 8: MUL temp[27].xy, temp[26].xy__, const[4].xy__; 9: TEX temp[28].xyz, temp[27].xy__, 2D[0]; 10: MAD temp[30].xyz, temp[28].xyz_, const[1].www_, temp[25].xyz_; 11: MUL temp[31].xy, input[0].xy__, const[4].xy__; 12: TEX temp[32].xyz, temp[31].xy__, 2D[0]; 13: MAD temp[34].xyz, temp[32].xyz_, none.HHH_, temp[30].xyz_; 14: ADD temp[35].xy, input[0].xy__, const[2].yz__; 15: MUL temp[36].xy, temp[35].xy__, const[4].xy__; 16: TEX temp[37].xyz, temp[36].xy__, 2D[0]; 17: MAD temp[39].xyz, temp[37].xyz_, const[1].www_, temp[34].xyz_; 18: ADD temp[40].xy, input[0].xy__, const[2].wz__; 19: MUL temp[41].xy, temp[40].xy__, const[4].xy__; 20: TEX temp[42].xyz, temp[41].xy__, 2D[0]; 21: MAD temp[44].xyz, temp[42].xyz_, const[1].xxx_, temp[39].xyz_; 22: MUL temp[46].xy, (const[3] + input[0]).xy__, const[4].xy__; 23: TEX temp[47].xyz, temp[46].xy__, 2D[0]; 24: MAD temp[49].xyz, temp[47].xyz_, const[0].zzz_, temp[44].xyz_; 25: MUL temp[50].xyz, temp[49].xyz_, const[3].zzz_; 26: MOV temp[51].xyz, temp[50].xyz_; 27: MOV temp[51].w, none.___1; 28: MOV output[0], temp[51]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[0], src2.xyz = const[4], srcp.xyz = (src1 + src0) MAD temp[17].xy, srcp.xy_, src2.xy_, src0.000 1: TEX temp[18].xyz, temp[17].xy__, 2D[0]; 2: src0.xyz = temp[18], src1.xyz = const[0] MAD temp[20].xyz, src0.xyz, src1.zzz, src0.000 3: src0.xyz = input[0], src1.xyz = const[5], src1.w = const[5] MAD temp[21].xy, src0.xy_, src0.111, src1.wz_ 4: src0.xyz = temp[21], src1.xyz = const[4] MAD temp[22].xy, src0.xy_, src1.xy_, src0.000 5: TEX temp[23].xyz, temp[22].xy__, 2D[0]; 6: src0.xyz = temp[23], src1.xyz = const[1], src2.xyz = temp[20] MAD temp[25].xyz, src0.xyz, src1.xxx, src2.xyz 7: src0.xyz = input[0], src1.xyz = const[1] MAD temp[26].xy, src0.xy_, src0.111, src1.yz_ 8: src0.xyz = temp[26], src1.xyz = const[4] MAD temp[27].xy, src0.xy_, src1.xy_, src0.000 9: TEX temp[28].xyz, temp[27].xy__, 2D[0]; 10: src0.xyz = temp[28], src0.w = const[1], src1.xyz = temp[25] MAD temp[30].xyz, src0.xyz, src0.www, src1.xyz 11: src0.xyz = input[0], src1.xyz = const[4] MAD temp[31].xy, src0.xy_, src1.xy_, src0.000 12: TEX temp[32].xyz, temp[31].xy__, 2D[0]; 13: src0.xyz = temp[32], src1.xyz = temp[30] MAD temp[34].xyz, src0.xyz, src0.HHH, src1.xyz 14: src0.xyz = input[0], src1.xyz = const[2] MAD temp[35].xy, src0.xy_, src0.111, src1.yz_ 15: src0.xyz = temp[35], src1.xyz = const[4] MAD temp[36].xy, src0.xy_, src1.xy_, src0.000 16: TEX temp[37].xyz, temp[36].xy__, 2D[0]; 17: src0.xyz = temp[37], src0.w = const[1], src1.xyz = temp[34] MAD temp[39].xyz, src0.xyz, src0.www, src1.xyz 18: src0.xyz = input[0], src1.xyz = const[2], src1.w = const[2] MAD temp[40].xy, src0.xy_, src0.111, src1.wz_ 19: src0.xyz = temp[40], src1.xyz = const[4] MAD temp[41].xy, src0.xy_, src1.xy_, src0.000 20: TEX temp[42].xyz, temp[41].xy__, 2D[0]; 21: src0.xyz = temp[42], src1.xyz = const[1], src2.xyz = temp[39] MAD temp[44].xyz, src0.xyz, src1.xxx, src2.xyz 22: src0.xyz = input[0], src1.xyz = const[3], src2.xyz = const[4], srcp.xyz = (src1 + src0) MAD temp[46].xy, srcp.xy_, src2.xy_, src0.000 23: TEX temp[47].xyz, temp[46].xy__, 2D[0]; 24: src0.xyz = temp[47], src1.xyz = const[0], src2.xyz = temp[44] MAD temp[49].xyz, src0.xyz, src1.zzz, src2.xyz 25: src0.xyz = temp[49], src1.xyz = const[3] MAD temp[50].xyz, src0.xyz, src1.zzz, src0.000 26: src0.xyz = temp[50] MAD temp[51].xyz, src0.xyz, src0.111, src0.000 27: MAD temp[51].w, src0.1, src0.1, src0.0 28: src0.xyz = temp[51], src0.w = temp[51] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[0], src2.xyz = const[4], srcp.xyz = (src1 + src0) MAD temp[17].xy, srcp.xy_, src2.xy_, src0.000 MAD temp[51].w, src0.1, src0.1, src0.0 1: src0.xyz = input[0], src1.xyz = const[3], src2.xyz = const[4], srcp.xyz = (src1 + src0) MAD temp[46].xy, srcp.xy_, src2.xy_, src0.000 2: src0.xyz = input[0], src1.xyz = const[5], src1.w = const[5] MAD temp[21].xy, src0.xy_, src0.111, src1.wz_ 3: src0.xyz = input[0], src1.xyz = const[2], src1.w = const[2] MAD temp[40].xy, src0.xy_, src0.111, src1.wz_ 4: src0.xyz = input[0], src1.xyz = const[1] MAD temp[26].xy, src0.xy_, src0.111, src1.yz_ 5: src0.xyz = input[0], src1.xyz = const[4] MAD temp[31].xy, src0.xy_, src1.xy_, src0.000 6: src0.xyz = input[0], src1.xyz = const[2] MAD temp[35].xy, src0.xy_, src0.111, src1.yz_ 7: src0.xyz = temp[21], src1.xyz = const[4] MAD temp[22].xy, src0.xy_, src1.xy_, src0.000 8: src0.xyz = temp[40], src1.xyz = const[4] MAD temp[41].xy, src0.xy_, src1.xy_, src0.000 9: src0.xyz = temp[26], src1.xyz = const[4] MAD temp[27].xy, src0.xy_, src1.xy_, src0.000 10: src0.xyz = temp[35], src1.xyz = const[4] MAD temp[36].xy, src0.xy_, src1.xy_, src0.000 11: BEGIN_TEX; 12: TEX temp[18].xyz, temp[17].xy__, 2D[0]; 13: TEX temp[47].xyz, temp[46].xy__, 2D[0]; 14: TEX temp[32].xyz, temp[31].xy__, 2D[0]; 15: TEX temp[23].xyz, temp[22].xy__, 2D[0]; 16: TEX temp[42].xyz, temp[41].xy__, 2D[0]; 17: TEX temp[28].xyz, temp[27].xy__, 2D[0]; 18: TEX temp[37].xyz, temp[36].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 19: src0.xyz = temp[18], src1.xyz = const[0] SEM_WAIT MAD temp[20].xyz, src0.xyz, src1.zzz, src0.000 20: src0.xyz = temp[23], src1.xyz = const[1], src2.xyz = temp[20] MAD temp[25].xyz, src0.xyz, src1.xxx, src2.xyz 21: src0.xyz = temp[28], src0.w = const[1], src1.xyz = temp[25] MAD temp[30].xyz, src0.xyz, src0.www, src1.xyz 22: src0.xyz = temp[32], src1.xyz = temp[30] MAD temp[34].xyz, src0.xyz, src0.HHH, src1.xyz 23: src0.xyz = temp[37], src0.w = const[1], src1.xyz = temp[34] MAD temp[39].xyz, src0.xyz, src0.www, src1.xyz 24: src0.xyz = temp[42], src1.xyz = const[1], src2.xyz = temp[39] MAD temp[44].xyz, src0.xyz, src1.xxx, src2.xyz 25: src0.xyz = temp[47], src1.xyz = const[0], src2.xyz = temp[44] MAD temp[49].xyz, src0.xyz, src1.zzz, src2.xyz 26: src0.xyz = temp[49], src1.xyz = const[3] MAD temp[50].xyz, src0.xyz, src1.zzz, src0.000 27: src0.xyz = temp[50] MAD temp[51].xyz, src0.xyz, src0.111, src0.000 28: src0.xyz = temp[51], src0.w = temp[51] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[0], src2.xyz = const[4], srcp.xyz = (src1 + src0) MAD temp[17].xy, srcp.xy_, src2.xy_, src0.000 MAD temp[51].w, src0.1, src0.1, src0.0 1: src0.xyz = input[0], src1.xyz = const[3], src2.xyz = const[4], srcp.xyz = (src1 + src0) MAD temp[46].xy, srcp.xy_, src2.xy_, src0.000 2: src0.xyz = input[0], src1.xyz = const[5], src1.w = const[5] MAD temp[21].xy, src0.xy_, src0.111, src1.wz_ 3: src0.xyz = input[0], src1.xyz = const[2], src1.w = const[2] MAD temp[40].xy, src0.xy_, src0.111, src1.wz_ 4: src0.xyz = input[0], src1.xyz = const[1] MAD temp[26].xy, src0.xy_, src0.111, src1.yz_ 5: src0.xyz = input[0], src1.xyz = const[4] MAD temp[31].xy, src0.xy_, src1.xy_, src0.000 6: src0.xyz = input[0], src1.xyz = const[2] MAD temp[35].xy, src0.xy_, src0.111, src1.yz_ 7: src0.xyz = temp[21], src1.xyz = const[4] MAD temp[22].xy, src0.xy_, src1.xy_, src0.000 8: src0.xyz = temp[40], src1.xyz = const[4] MAD temp[41].xy, src0.xy_, src1.xy_, src0.000 9: src0.xyz = temp[26], src1.xyz = const[4] MAD temp[27].xy, src0.xy_, src1.xy_, src0.000 10: src0.xyz = temp[35], src1.xyz = const[4] MAD temp[36].xy, src0.xy_, src1.xy_, src0.000 11: BEGIN_TEX; 12: TEX temp[18].xyz, temp[17].xy__, 2D[0]; 13: TEX temp[47].xyz, temp[46].xy__, 2D[0]; 14: TEX temp[32].xyz, temp[31].xy__, 2D[0]; 15: TEX temp[23].xyz, temp[22].xy__, 2D[0]; 16: TEX temp[42].xyz, temp[41].xy__, 2D[0]; 17: TEX temp[28].xyz, temp[27].xy__, 2D[0]; 18: TEX temp[37].xyz, temp[36].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 19: src0.xyz = temp[18], src1.xyz = const[0] SEM_WAIT MAD temp[20].xyz, src0.xyz, src1.zzz, src0.000 20: src0.xyz = temp[23], src1.xyz = const[1], src2.xyz = temp[20] MAD temp[25].xyz, src0.xyz, src1.xxx, src2.xyz 21: src0.xyz = temp[28], src0.w = const[1], src1.xyz = temp[25] MAD temp[30].xyz, src0.xyz, src0.www, src1.xyz 22: src0.xyz = temp[32], src1.xyz = temp[30] MAD temp[34].xyz, src0.xyz, src0.HHH, src1.xyz 23: src0.xyz = temp[37], src0.w = const[1], src1.xyz = temp[34] MAD temp[39].xyz, src0.xyz, src0.www, src1.xyz 24: src0.xyz = temp[42], src1.xyz = const[1], src2.xyz = temp[39] MAD temp[44].xyz, src0.xyz, src1.xxx, src2.xyz 25: src0.xyz = temp[47], src1.xyz = const[0], src2.xyz = temp[44] MAD temp[49].xyz, src0.xyz, src1.zzz, src2.xyz 26: src0.xyz = temp[49], src1.xyz = const[3] MAD temp[50].xyz, src0.xyz, src1.zzz, src0.000 27: src0.xyz = temp[50] MAD temp[51].xyz, src0.xyz, src0.111, src0.000 28: src0.xyz = temp[51], src0.w = temp[51] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[0], src2.xyz = const[4], srcp.xyz = (src1 + src0) MAD temp[1].xy, srcp.xy_, src2.xy_, src0.00_ MAD temp[0].w, src0.1, src0.1, src0.0 1: src0.xyz = input[0], src1.xyz = const[3], src2.xyz = const[4], srcp.xyz = (src1 + src0) MAD temp[2].xy, srcp.xy_, src2.xy_, src0.00_ 2: src0.xyz = input[0], src1.xyz = const[5], src1.w = const[5] MAD temp[3].xy, src0.xy_, src0.11_, src1.wz_ 3: src0.xyz = input[0], src1.xyz = const[2], src1.w = const[2] MAD temp[4].xy, src0.xy_, src0.11_, src1.wz_ 4: src0.xyz = input[0], src1.xyz = const[1] MAD temp[5].xy, src0.xy_, src0.11_, src1.yz_ 5: src0.xyz = input[0], src1.xyz = const[4] MAD temp[6].xy, src0.xy_, src1.xy_, src0.00_ 6: src0.xyz = input[0], src1.xyz = const[2] MAD temp[0].xy, src0.xy_, src0.11_, src1.yz_ 7: src0.xyz = temp[3], src1.xyz = const[4] MAD temp[3].xy, src0.xy_, src1.xy_, src0.00_ 8: src0.xyz = temp[4], src1.xyz = const[4] MAD temp[4].xy, src0.xy_, src1.xy_, src0.00_ 9: src0.xyz = temp[5], src1.xyz = const[4] MAD temp[5].xy, src0.xy_, src1.xy_, src0.00_ 10: src0.xyz = temp[0], src1.xyz = const[4] MAD temp[0].xy, src0.xy_, src1.xy_, src0.00_ 11: BEGIN_TEX; 12: TEX temp[1].xyz, temp[1].xy__, 2D[0]; 13: TEX temp[2].xyz, temp[2].xy__, 2D[0]; 14: TEX temp[6].xyz, temp[6].xy__, 2D[0]; 15: TEX temp[3].xyz, temp[3].xy__, 2D[0]; 16: TEX temp[4].xyz, temp[4].xy__, 2D[0]; 17: TEX temp[5].xyz, temp[5].xy__, 2D[0]; 18: TEX temp[7].xyz, temp[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 19: src0.xyz = temp[1], src1.xyz = const[0] SEM_WAIT MAD temp[0].xyz, src0.xyz, src1.zzz, src0.000 20: src0.xyz = temp[3], src1.xyz = const[1], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xxx, src2.xyz 21: src0.xyz = temp[5], src0.w = const[1], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.www, src1.xyz 22: src0.xyz = temp[6], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.HHH, src1.xyz 23: src0.xyz = temp[7], src0.w = const[1], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.www, src1.xyz 24: src0.xyz = temp[4], src1.xyz = const[1], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xxx, src2.xyz 25: src0.xyz = temp[2], src1.xyz = const[0], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.zzz, src2.xyz 26: src0.xyz = temp[0], src1.xyz = const[3] MAD temp[0].xyz, src0.xyz, src1.zzz, src0.000 27: src0.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.111, src0.000 28: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=47************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 10, tex_end: 0 (code_addr: 00000280) 0: xyz: t0 c0 c4 add-> t1.xy (01864800) w: t0 t0 t0 bias-> t0.w (00800000) xyz: srcp.xyz c4.xyz 0.0 op: 0045040f w: 1.0 1.0 0.0 op: 00040891 1: xyz: t0 c3 c4 add-> t2.xy (018a48c0) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xyz c4.xyz 0.0 op: 0045040f w: t0.x t0.x t0.x op: 00000000 2: xyz: t0 c5 t0 bias-> t3.xy (018c0940) w: t0 c5 t0 bias-> (00000940) xyz: t0.xyz 1.0 c5.Wzy op: 00078a80 w: t0.x t0.x t0.x op: 00000000 3: xyz: t0 c2 t0 bias-> t4.xy (01900880) w: t0 c2 t0 bias-> (00000880) xyz: t0.xyz 1.0 c2.Wzy op: 00078a80 w: t0.x t0.x t0.x op: 00000000 4: xyz: t0 c1 t0 bias-> t5.xy (01940840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 c1.yzx op: 00060a80 w: t0.x t0.x t0.x op: 00000000 5: xyz: t0 c4 t0 bias-> t6.xy (01980900) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c4.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 6: xyz: t0 c2 t0 bias-> t0.xy (01800880) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 c2.yzx op: 00060a80 w: t0.x t0.x t0.x op: 00000000 7: xyz: t3 c4 t0 bias-> t3.xy (018c0903) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c4.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 8: xyz: t4 c4 t0 bias-> t4.xy (01900904) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz c4.xyz 0.0 op: 00050200 w: t4.x t4.x t4.x op: 00000000 9: xyz: t5 c4 t0 bias-> t5.xy (01940905) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz c4.xyz 0.0 op: 00050200 w: t5.x t5.x t5.x op: 00000000 10: xyz: t0 c4 t0 bias-> t0.xy (01800900) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c4.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 NODE 1: alu_offset: 11, tex_offset: 0, alu_end: 9, tex_end: 6 (code_addr: 004c024b) TEX: TEX t1, t1, texture[0] (00008041) TEX t2, t2, texture[0] (00008082) TEX t6, t6, texture[0] (00008186) TEX t3, t3, texture[0] (000080c3) TEX t4, t4, texture[0] (00008104) TEX t5, t5, texture[0] (00008145) TEX t7, t0, texture[0] (000081c0) 11: xyz: t1 c0 t0 bias-> t0.xyz (03800801) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c0.zzz 0.0 op: 00050380 w: t1.x t1.x t1.x op: 00000000 12: xyz: t3 c1 t0 bias-> t0.xyz (03800843) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c1.xxx t0.xyz op: 00020280 w: t3.x t3.x t3.x op: 00000000 13: xyz: t5 t0 t0 bias-> t0.xyz (03800005) w: c1 t0 t0 bias-> (00000021) xyz: t5.xyz c1.www t0.xyz op: 00010600 w: t5.x t5.x t5.x op: 00000000 14: xyz: t6 t0 t0 bias-> t0.xyz (03800006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz 0.5 t0.xyz op: 00010b00 w: t6.x t6.x t6.x op: 00000000 15: xyz: t7 t0 t0 bias-> t0.xyz (03800007) w: c1 t0 t0 bias-> (00000021) xyz: t7.xyz c1.www t0.xyz op: 00010600 w: t7.x t7.x t7.x op: 00000000 16: xyz: t4 c1 t0 bias-> t0.xyz (03800844) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz c1.xxx t0.xyz op: 00020280 w: t4.x t4.x t4.x op: 00000000 17: xyz: t2 c0 t0 bias-> t0.xyz (03800802) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c0.zzz t0.xyz op: 00020380 w: t2.x t2.x t2.x op: 00000000 18: xyz: t0 c3 t0 bias-> t0.xyz (038008c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c3.zzz 0.0 op: 00050380 w: t0.x t0.x t0.x op: 00000000 19: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 20: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL IMM[0] FLT32 { 0.0000, -4.3500, 0.1000, -2.5000} IMM[1] FLT32 { 0.2500, 0.0000, -0.7500, 0.3000} IMM[2] FLT32 { 0.5000, 0.0000, 0.7500, 2.5000} IMM[3] FLT32 { 0.0000, 4.3500, 0.5556, 1.0000} 0: ADD TEMP[0].xy, IN[0].xyyy, IMM[0].xyyy 1: TEX TEMP[0].xyz, TEMP[0].xyyy, SAMP[0], RECT 2: MUL TEMP[0].xyz, TEMP[0].xyzz, IMM[0].zzzz 3: ADD TEMP[1].xy, IN[0].xyyy, IMM[0].xwww 4: TEX TEMP[1].xyz, TEMP[1].xyyy, SAMP[0], RECT 5: MAD TEMP[0].xyz, TEMP[1].xyzz, IMM[1].xxxx, TEMP[0].xyzz 6: ADD TEMP[1].xy, IN[0].xyyy, IMM[1].yzzz 7: TEX TEMP[1].xyz, TEMP[1].xyyy, SAMP[0], RECT 8: MAD TEMP[0].xyz, TEMP[1].xyzz, IMM[1].wwww, TEMP[0].xyzz 9: TEX TEMP[1].xyz, IN[0].xyyy, SAMP[0], RECT 10: MAD TEMP[0].xyz, TEMP[1].xyzz, IMM[2].xxxx, TEMP[0].xyzz 11: ADD TEMP[1].xy, IN[0].xyyy, IMM[2].yzzz 12: TEX TEMP[1].xyz, TEMP[1].xyyy, SAMP[0], RECT 13: MAD TEMP[0].xyz, TEMP[1].xyzz, IMM[1].wwww, TEMP[0].xyzz 14: ADD TEMP[1].xy, IN[0].xyyy, IMM[2].ywww 15: TEX TEMP[1].xyz, TEMP[1].xyyy, SAMP[0], RECT 16: MAD TEMP[0].xyz, TEMP[1].xyzz, IMM[1].xxxx, TEMP[0].xyzz 17: ADD TEMP[1].xy, IN[0].xyyy, IMM[3].xyyy 18: TEX TEMP[1].xyz, TEMP[1].xyyy, SAMP[0], RECT 19: MAD TEMP[0].xyz, TEMP[1].xyzz, IMM[0].zzzz, TEMP[0].xyzz 20: MUL TEMP[0].xyz, TEMP[0].xyzz, IMM[3].zzzz 21: MOV TEMP[0].xyz, TEMP[0].xyzx 22: MOV TEMP[0].w, IMM[3].wwww 23: MOV OUT[0], TEMP[0] 24: END Fragment Program: before compilation # Radeon Compiler Program 0: ADD temp[0].xy, input[0].xyyy, const[0].xyyy; 1: TEX temp[0].xyz, temp[0].xyyy, RECT[0]; 2: MUL temp[0].xyz, temp[0].xyzz, const[0].zzzz; 3: ADD temp[1].xy, input[0].xyyy, const[0].xwww; 4: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 5: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 6: ADD temp[1].xy, input[0].xyyy, const[1].yzzz; 7: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 8: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 9: TEX temp[1].xyz, input[0].xyyy, RECT[0]; 10: MAD temp[0].xyz, temp[1].xyzz, const[2].xxxx, temp[0].xyzz; 11: ADD temp[1].xy, input[0].xyyy, const[2].yzzz; 12: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 13: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 14: ADD temp[1].xy, input[0].xyyy, const[2].ywww; 15: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 16: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 17: ADD temp[1].xy, input[0].xyyy, const[3].xyyy; 18: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 19: MAD temp[0].xyz, temp[1].xyzz, const[0].zzzz, temp[0].xyzz; 20: MUL temp[0].xyz, temp[0].xyzz, const[3].zzzz; 21: MOV temp[0].xyz, temp[0].xyzx; 22: MOV temp[0].w, const[3].wwww; 23: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: ADD temp[0].xy, input[0].xyyy, const[0].xyyy; 1: TEX temp[0].xyz, temp[0].xyyy, RECT[0]; 2: MUL temp[0].xyz, temp[0].xyzz, const[0].zzzz; 3: ADD temp[1].xy, input[0].xyyy, const[0].xwww; 4: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 5: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 6: ADD temp[1].xy, input[0].xyyy, const[1].yzzz; 7: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 8: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 9: TEX temp[1].xyz, input[0].xyyy, RECT[0]; 10: MAD temp[0].xyz, temp[1].xyzz, const[2].xxxx, temp[0].xyzz; 11: ADD temp[1].xy, input[0].xyyy, const[2].yzzz; 12: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 13: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 14: ADD temp[1].xy, input[0].xyyy, const[2].ywww; 15: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 16: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 17: ADD temp[1].xy, input[0].xyyy, const[3].xyyy; 18: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 19: MAD temp[0].xyz, temp[1].xyzz, const[0].zzzz, temp[0].xyzz; 20: MUL temp[0].xyz, temp[0].xyzz, const[3].zzzz; 21: MOV temp[0].xyz, temp[0].xyzx; 22: MOV temp[0].w, const[3].wwww; 23: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: ADD temp[0].xy, input[0].xyyy, const[0].xyyy; 1: TEX temp[0].xyz, temp[0].xyyy, RECT[0]; 2: MUL temp[0].xyz, temp[0].xyzz, const[0].zzzz; 3: ADD temp[1].xy, input[0].xyyy, const[0].xwww; 4: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 5: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 6: ADD temp[1].xy, input[0].xyyy, const[1].yzzz; 7: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 8: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 9: TEX temp[1].xyz, input[0].xyyy, RECT[0]; 10: MAD temp[0].xyz, temp[1].xyzz, const[2].xxxx, temp[0].xyzz; 11: ADD temp[1].xy, input[0].xyyy, const[2].yzzz; 12: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 13: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 14: ADD temp[1].xy, input[0].xyyy, const[2].ywww; 15: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 16: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 17: ADD temp[1].xy, input[0].xyyy, const[3].xyyy; 18: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 19: MAD temp[0].xyz, temp[1].xyzz, const[0].zzzz, temp[0].xyzz; 20: MUL temp[0].xyz, temp[0].xyzz, const[3].zzzz; 21: MOV temp[0].xyz, temp[0].xyzx; 22: MOV temp[0].w, const[3].wwww; 23: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: ADD temp[0].xy, input[0].xyyy, const[0].xyyy; 1: TEX temp[0].xyz, temp[0].xyyy, RECT[0]; 2: MUL temp[0].xyz, temp[0].xyzz, const[0].zzzz; 3: ADD temp[1].xy, input[0].xyyy, const[0].xwww; 4: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 5: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 6: ADD temp[1].xy, input[0].xyyy, const[1].yzzz; 7: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 8: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 9: TEX temp[1].xyz, input[0].xyyy, RECT[0]; 10: MAD temp[0].xyz, temp[1].xyzz, const[2].xxxx, temp[0].xyzz; 11: ADD temp[1].xy, input[0].xyyy, const[2].yzzz; 12: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 13: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 14: ADD temp[1].xy, input[0].xyyy, const[2].ywww; 15: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 16: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 17: ADD temp[1].xy, input[0].xyyy, const[3].xyyy; 18: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 19: MAD temp[0].xyz, temp[1].xyzz, const[0].zzzz, temp[0].xyzz; 20: MUL temp[0].xyz, temp[0].xyzz, const[3].zzzz; 21: MOV temp[0].xyz, temp[0].xyzx; 22: MOV temp[0].w, const[3].wwww; 23: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].xy, input[0].xyyy, const[0].xyyy; 1: TEX temp[0].xyz, temp[0].xyyy, RECT[0]; 2: MUL temp[0].xyz, temp[0].xyzz, const[0].zzzz; 3: ADD temp[1].xy, input[0].xyyy, const[0].xwww; 4: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 5: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 6: ADD temp[1].xy, input[0].xyyy, const[1].yzzz; 7: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 8: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 9: TEX temp[1].xyz, input[0].xyyy, RECT[0]; 10: MAD temp[0].xyz, temp[1].xyzz, const[2].xxxx, temp[0].xyzz; 11: ADD temp[1].xy, input[0].xyyy, const[2].yzzz; 12: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 13: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 14: ADD temp[1].xy, input[0].xyyy, const[2].ywww; 15: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 16: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 17: ADD temp[1].xy, input[0].xyyy, const[3].xyyy; 18: TEX temp[1].xyz, temp[1].xyyy, RECT[0]; 19: MAD temp[0].xyz, temp[1].xyzz, const[0].zzzz, temp[0].xyzz; 20: MUL temp[0].xyz, temp[0].xyzz, const[3].zzzz; 21: MOV temp[0].xyz, temp[0].xyzx; 22: MOV temp[0].w, const[3].wwww; 23: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: ADD temp[0].xy, input[0].xyyy, const[0].xyyy; 1: MUL temp[2], temp[0].xyyy, const[4]; 2: TEX temp[3], temp[2], 2D[0]; 3: MOV temp[0].xyz, temp[3]; 4: MUL temp[0].xyz, temp[0].xyzz, const[0].zzzz; 5: ADD temp[1].xy, input[0].xyyy, const[0].xwww; 6: MUL temp[4], temp[1].xyyy, const[4]; 7: TEX temp[5], temp[4], 2D[0]; 8: MOV temp[1].xyz, temp[5]; 9: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 10: ADD temp[1].xy, input[0].xyyy, const[1].yzzz; 11: MUL temp[6], temp[1].xyyy, const[4]; 12: TEX temp[7], temp[6], 2D[0]; 13: MOV temp[1].xyz, temp[7]; 14: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 15: MUL temp[8], input[0].xyyy, const[4]; 16: TEX temp[9], temp[8], 2D[0]; 17: MOV temp[1].xyz, temp[9]; 18: MAD temp[0].xyz, temp[1].xyzz, const[2].xxxx, temp[0].xyzz; 19: ADD temp[1].xy, input[0].xyyy, const[2].yzzz; 20: MUL temp[10], temp[1].xyyy, const[4]; 21: TEX temp[11], temp[10], 2D[0]; 22: MOV temp[1].xyz, temp[11]; 23: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 24: ADD temp[1].xy, input[0].xyyy, const[2].ywww; 25: MUL temp[12], temp[1].xyyy, const[4]; 26: TEX temp[13], temp[12], 2D[0]; 27: MOV temp[1].xyz, temp[13]; 28: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 29: ADD temp[1].xy, input[0].xyyy, const[3].xyyy; 30: MUL temp[14], temp[1].xyyy, const[4]; 31: TEX temp[15], temp[14], 2D[0]; 32: MOV temp[1].xyz, temp[15]; 33: MAD temp[0].xyz, temp[1].xyzz, const[0].zzzz, temp[0].xyzz; 34: MUL temp[0].xyz, temp[0].xyzz, const[3].zzzz; 35: MOV temp[0].xyz, temp[0].xyzx; 36: MOV temp[0].w, const[3].wwww; 37: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].xy, input[0].xyyy, const[0].xyyy; 1: MUL temp[2], temp[0].xyyy, const[4]; 2: TEX temp[3], temp[2], 2D[0]; 3: MOV temp[0].xyz, temp[3]; 4: MUL temp[0].xyz, temp[0].xyzz, const[0].zzzz; 5: ADD temp[1].xy, input[0].xyyy, const[0].xwww; 6: MUL temp[4], temp[1].xyyy, const[4]; 7: TEX temp[5], temp[4], 2D[0]; 8: MOV temp[1].xyz, temp[5]; 9: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 10: ADD temp[1].xy, input[0].xyyy, const[1].yzzz; 11: MUL temp[6], temp[1].xyyy, const[4]; 12: TEX temp[7], temp[6], 2D[0]; 13: MOV temp[1].xyz, temp[7]; 14: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 15: MUL temp[8], input[0].xyyy, const[4]; 16: TEX temp[9], temp[8], 2D[0]; 17: MOV temp[1].xyz, temp[9]; 18: MAD temp[0].xyz, temp[1].xyzz, const[2].xxxx, temp[0].xyzz; 19: ADD temp[1].xy, input[0].xyyy, const[2].yzzz; 20: MUL temp[10], temp[1].xyyy, const[4]; 21: TEX temp[11], temp[10], 2D[0]; 22: MOV temp[1].xyz, temp[11]; 23: MAD temp[0].xyz, temp[1].xyzz, const[1].wwww, temp[0].xyzz; 24: ADD temp[1].xy, input[0].xyyy, const[2].ywww; 25: MUL temp[12], temp[1].xyyy, const[4]; 26: TEX temp[13], temp[12], 2D[0]; 27: MOV temp[1].xyz, temp[13]; 28: MAD temp[0].xyz, temp[1].xyzz, const[1].xxxx, temp[0].xyzz; 29: ADD temp[1].xy, input[0].xyyy, const[3].xyyy; 30: MUL temp[14], temp[1].xyyy, const[4]; 31: TEX temp[15], temp[14], 2D[0]; 32: MOV temp[1].xyz, temp[15]; 33: MAD temp[0].xyz, temp[1].xyzz, const[0].zzzz, temp[0].xyzz; 34: MUL temp[0].xyz, temp[0].xyzz, const[3].zzzz; 35: MOV temp[0].xyz, temp[0].xyzx; 36: MOV temp[0].w, const[3].wwww; 37: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0].xy, input[0].xy__, const[0].xy__; 1: MUL temp[2].xy, temp[0].xy__, const[4].xy__; 2: TEX temp[3].xyz, temp[2].xy__, 2D[0]; 3: MOV temp[0].xyz, temp[3].xyz_; 4: MUL temp[0].xyz, temp[0].xyz_, const[0].zzz_; 5: ADD temp[1].xy, input[0].xy__, const[0].xw__; 6: MUL temp[4].xy, temp[1].xy__, const[4].xy__; 7: TEX temp[5].xyz, temp[4].xy__, 2D[0]; 8: MOV temp[1].xyz, temp[5].xyz_; 9: MAD temp[0].xyz, temp[1].xyz_, const[1].xxx_, temp[0].xyz_; 10: ADD temp[1].xy, input[0].xy__, const[1].yz__; 11: MUL temp[6].xy, temp[1].xy__, const[4].xy__; 12: TEX temp[7].xyz, temp[6].xy__, 2D[0]; 13: MOV temp[1].xyz, temp[7].xyz_; 14: MAD temp[0].xyz, temp[1].xyz_, const[1].www_, temp[0].xyz_; 15: MUL temp[8].xy, input[0].xy__, const[4].xy__; 16: TEX temp[9].xyz, temp[8].xy__, 2D[0]; 17: MOV temp[1].xyz, temp[9].xyz_; 18: MAD temp[0].xyz, temp[1].xyz_, const[2].xxx_, temp[0].xyz_; 19: ADD temp[1].xy, input[0].xy__, const[2].yz__; 20: MUL temp[10].xy, temp[1].xy__, const[4].xy__; 21: TEX temp[11].xyz, temp[10].xy__, 2D[0]; 22: MOV temp[1].xyz, temp[11].xyz_; 23: MAD temp[0].xyz, temp[1].xyz_, const[1].www_, temp[0].xyz_; 24: ADD temp[1].xy, input[0].xy__, const[2].yw__; 25: MUL temp[12].xy, temp[1].xy__, const[4].xy__; 26: TEX temp[13].xyz, temp[12].xy__, 2D[0]; 27: MOV temp[1].xyz, temp[13].xyz_; 28: MAD temp[0].xyz, temp[1].xyz_, const[1].xxx_, temp[0].xyz_; 29: ADD temp[1].xy, input[0].xy__, const[3].xy__; 30: MUL temp[14].xy, temp[1].xy__, const[4].xy__; 31: TEX temp[15].xyz, temp[14].xy__, 2D[0]; 32: MOV temp[1].xyz, temp[15].xyz_; 33: MAD temp[0].xyz, temp[1].xyz_, const[0].zzz_, temp[0].xyz_; 34: MUL temp[0].xyz, temp[0].xyz_, const[3].zzz_; 35: MOV temp[0].xyz, temp[0].xyz_; 36: MOV temp[0].w, const[3].___w; 37: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: ADD temp[0].xy, input[0].xy__, const[0].xy__; 1: MUL temp[2].xy, temp[0].xy__, const[4].xy__; 2: TEX temp[3].xyz, temp[2].xy__, 2D[0]; 3: MOV temp[0].xyz, temp[3].xyz_; 4: MUL temp[0].xyz, temp[0].xyz_, const[0].zzz_; 5: ADD temp[1].xy, input[0].xy__, const[0].xw__; 6: MUL temp[4].xy, temp[1].xy__, const[4].xy__; 7: TEX temp[5].xyz, temp[4].xy__, 2D[0]; 8: MOV temp[1].xyz, temp[5].xyz_; 9: MAD temp[0].xyz, temp[1].xyz_, const[1].xxx_, temp[0].xyz_; 10: ADD temp[1].xy, input[0].xy__, const[1].yz__; 11: MUL temp[6].xy, temp[1].xy__, const[4].xy__; 12: TEX temp[7].xyz, temp[6].xy__, 2D[0]; 13: MOV temp[1].xyz, temp[7].xyz_; 14: MAD temp[0].xyz, temp[1].xyz_, const[1].www_, temp[0].xyz_; 15: MUL temp[8].xy, input[0].xy__, const[4].xy__; 16: TEX temp[9].xyz, temp[8].xy__, 2D[0]; 17: MOV temp[1].xyz, temp[9].xyz_; 18: MAD temp[0].xyz, temp[1].xyz_, const[2].xxx_, temp[0].xyz_; 19: ADD temp[1].xy, input[0].xy__, const[2].yz__; 20: MUL temp[10].xy, temp[1].xy__, const[4].xy__; 21: TEX temp[11].xyz, temp[10].xy__, 2D[0]; 22: MOV temp[1].xyz, temp[11].xyz_; 23: MAD temp[0].xyz, temp[1].xyz_, const[1].www_, temp[0].xyz_; 24: ADD temp[1].xy, input[0].xy__, const[2].yw__; 25: MUL temp[12].xy, temp[1].xy__, const[4].xy__; 26: TEX temp[13].xyz, temp[12].xy__, 2D[0]; 27: MOV temp[1].xyz, temp[13].xyz_; 28: MAD temp[0].xyz, temp[1].xyz_, const[1].xxx_, temp[0].xyz_; 29: ADD temp[1].xy, input[0].xy__, const[3].xy__; 30: MUL temp[14].xy, temp[1].xy__, const[4].xy__; 31: TEX temp[15].xyz, temp[14].xy__, 2D[0]; 32: MOV temp[1].xyz, temp[15].xyz_; 33: MAD temp[0].xyz, temp[1].xyz_, const[0].zzz_, temp[0].xyz_; 34: MUL temp[0].xyz, temp[0].xyz_, const[3].zzz_; 35: MOV temp[0].xyz, temp[0].xyz_; 36: MOV temp[0].w, const[3].___w; 37: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: ADD temp[16].xy, input[0].xy__, const[0].xy__; 1: MUL temp[17].xy, temp[16].xy__, const[4].xy__; 2: TEX temp[18].xyz, temp[17].xy__, 2D[0]; 3: MOV temp[19].xyz, temp[18].xyz_; 4: MUL temp[20].xyz, temp[19].xyz_, const[0].zzz_; 5: ADD temp[21].xy, input[0].xy__, const[0].xw__; 6: MUL temp[22].xy, temp[21].xy__, const[4].xy__; 7: TEX temp[23].xyz, temp[22].xy__, 2D[0]; 8: MOV temp[24].xyz, temp[23].xyz_; 9: MAD temp[25].xyz, temp[24].xyz_, const[1].xxx_, temp[20].xyz_; 10: ADD temp[26].xy, input[0].xy__, const[1].yz__; 11: MUL temp[27].xy, temp[26].xy__, const[4].xy__; 12: TEX temp[28].xyz, temp[27].xy__, 2D[0]; 13: MOV temp[29].xyz, temp[28].xyz_; 14: MAD temp[30].xyz, temp[29].xyz_, const[1].www_, temp[25].xyz_; 15: MUL temp[31].xy, input[0].xy__, const[4].xy__; 16: TEX temp[32].xyz, temp[31].xy__, 2D[0]; 17: MOV temp[33].xyz, temp[32].xyz_; 18: MAD temp[34].xyz, temp[33].xyz_, const[2].xxx_, temp[30].xyz_; 19: ADD temp[35].xy, input[0].xy__, const[2].yz__; 20: MUL temp[36].xy, temp[35].xy__, const[4].xy__; 21: TEX temp[37].xyz, temp[36].xy__, 2D[0]; 22: MOV temp[38].xyz, temp[37].xyz_; 23: MAD temp[39].xyz, temp[38].xyz_, const[1].www_, temp[34].xyz_; 24: ADD temp[40].xy, input[0].xy__, const[2].yw__; 25: MUL temp[41].xy, temp[40].xy__, const[4].xy__; 26: TEX temp[42].xyz, temp[41].xy__, 2D[0]; 27: MOV temp[43].xyz, temp[42].xyz_; 28: MAD temp[44].xyz, temp[43].xyz_, const[1].xxx_, temp[39].xyz_; 29: ADD temp[45].xy, input[0].xy__, const[3].xy__; 30: MUL temp[46].xy, temp[45].xy__, const[4].xy__; 31: TEX temp[47].xyz, temp[46].xy__, 2D[0]; 32: MOV temp[48].xyz, temp[47].xyz_; 33: MAD temp[49].xyz, temp[48].xyz_, const[0].zzz_, temp[44].xyz_; 34: MUL temp[50].xyz, temp[49].xyz_, const[3].zzz_; 35: MOV temp[51].xyz, temp[50].xyz_; 36: MOV temp[51].w, const[3].___w; 37: MOV output[0], temp[51]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[17].xy, (const[0] + input[0]).xy__, const[4].xy__; 1: TEX temp[18].xyz, temp[17].xy__, 2D[0]; 2: MUL temp[20].xyz, temp[18].xyz_, const[0].zzz_; 3: ADD temp[21].xy, input[0].xy__, const[0].0w__; 4: MUL temp[22].xy, temp[21].xy__, const[4].xy__; 5: TEX temp[23].xyz, temp[22].xy__, 2D[0]; 6: MAD temp[25].xyz, temp[23].xyz_, const[1].xxx_, temp[20].xyz_; 7: ADD temp[26].xy, input[0].xy__, const[1].yz__; 8: MUL temp[27].xy, temp[26].xy__, const[4].xy__; 9: TEX temp[28].xyz, temp[27].xy__, 2D[0]; 10: MAD temp[30].xyz, temp[28].xyz_, const[1].www_, temp[25].xyz_; 11: MUL temp[31].xy, input[0].xy__, const[4].xy__; 12: TEX temp[32].xyz, temp[31].xy__, 2D[0]; 13: MAD temp[34].xyz, temp[32].xyz_, none.HHH_, temp[30].xyz_; 14: ADD temp[35].xy, input[0].xy__, const[2].yz__; 15: MUL temp[36].xy, temp[35].xy__, const[4].xy__; 16: TEX temp[37].xyz, temp[36].xy__, 2D[0]; 17: MAD temp[39].xyz, temp[37].xyz_, const[1].www_, temp[34].xyz_; 18: ADD temp[40].xy, input[0].xy__, const[2].0w__; 19: MUL temp[41].xy, temp[40].xy__, const[4].xy__; 20: TEX temp[42].xyz, temp[41].xy__, 2D[0]; 21: MAD temp[44].xyz, temp[42].xyz_, const[1].xxx_, temp[39].xyz_; 22: MUL temp[46].xy, (const[3] + input[0]).xy__, const[4].xy__; 23: TEX temp[47].xyz, temp[46].xy__, 2D[0]; 24: MAD temp[49].xyz, temp[47].xyz_, const[0].zzz_, temp[44].xyz_; 25: MUL temp[50].xyz, temp[49].xyz_, const[3].zzz_; 26: MOV temp[51].xyz, temp[50].xyz_; 27: MOV temp[51].w, none.___1; 28: MOV output[0], temp[51]; CONST[0] = { 0.0000 -4.3500 0.1000 -2.5000 } CONST[1] = { 0.2500 0.0000 -0.7500 0.3000 } CONST[2] = { 0.5000 0.0000 0.7500 2.5000 } CONST[3] = { 0.0000 4.3500 0.5556 1.0000 } CONST[5] = { 0.0000 0.0000 -2.5000 0.0000 } CONST[6] = { 0.0000 0.0000 2.5000 0.0000 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[17].xy, (const[0] + input[0]).xy__, const[4].xy__; 1: TEX temp[18].xyz, temp[17].xy__, 2D[0]; 2: MUL temp[20].xyz, temp[18].xyz_, const[0].zzz_; 3: ADD temp[21].xy, input[0].xy__, const[5].yz__; 4: MUL temp[22].xy, temp[21].xy__, const[4].xy__; 5: TEX temp[23].xyz, temp[22].xy__, 2D[0]; 6: MAD temp[25].xyz, temp[23].xyz_, const[1].xxx_, temp[20].xyz_; 7: ADD temp[26].xy, input[0].xy__, const[1].yz__; 8: MUL temp[27].xy, temp[26].xy__, const[4].xy__; 9: TEX temp[28].xyz, temp[27].xy__, 2D[0]; 10: MAD temp[30].xyz, temp[28].xyz_, const[1].www_, temp[25].xyz_; 11: MUL temp[31].xy, input[0].xy__, const[4].xy__; 12: TEX temp[32].xyz, temp[31].xy__, 2D[0]; 13: MAD temp[34].xyz, temp[32].xyz_, none.HHH_, temp[30].xyz_; 14: ADD temp[35].xy, input[0].xy__, const[2].yz__; 15: MUL temp[36].xy, temp[35].xy__, const[4].xy__; 16: TEX temp[37].xyz, temp[36].xy__, 2D[0]; 17: MAD temp[39].xyz, temp[37].xyz_, const[1].www_, temp[34].xyz_; 18: ADD temp[40].xy, input[0].xy__, const[6].yz__; 19: MUL temp[41].xy, temp[40].xy__, const[4].xy__; 20: TEX temp[42].xyz, temp[41].xy__, 2D[0]; 21: MAD temp[44].xyz, temp[42].xyz_, const[1].xxx_, temp[39].xyz_; 22: MUL temp[46].xy, (const[3] + input[0]).xy__, const[4].xy__; 23: TEX temp[47].xyz, temp[46].xy__, 2D[0]; 24: MAD temp[49].xyz, temp[47].xyz_, const[0].zzz_, temp[44].xyz_; 25: MUL temp[50].xyz, temp[49].xyz_, const[3].zzz_; 26: MOV temp[51].xyz, temp[50].xyz_; 27: MOV temp[51].w, none.___1; 28: MOV output[0], temp[51]; CONST[0] = { 0.0000 -4.3500 0.1000 -2.5000 } CONST[1] = { 0.2500 0.0000 -0.7500 0.3000 } CONST[2] = { 0.5000 0.0000 0.7500 2.5000 } CONST[3] = { 0.0000 4.3500 0.5556 1.0000 } CONST[5] = { 0.0000 0.0000 -2.5000 0.0000 } CONST[6] = { 0.0000 0.0000 2.5000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[17].xy, (const[0] + input[0]).xy__, const[4].xy__; 1: TEX temp[18].xyz, temp[17].xy__, 2D[0]; 2: MUL temp[20].xyz, temp[18].xyz_, const[0].zzz_; 3: ADD temp[21].xy, input[0].xy__, const[5].yz__; 4: MUL temp[22].xy, temp[21].xy__, const[4].xy__; 5: TEX temp[23].xyz, temp[22].xy__, 2D[0]; 6: MAD temp[25].xyz, temp[23].xyz_, const[1].xxx_, temp[20].xyz_; 7: ADD temp[26].xy, input[0].xy__, const[1].yz__; 8: MUL temp[27].xy, temp[26].xy__, const[4].xy__; 9: TEX temp[28].xyz, temp[27].xy__, 2D[0]; 10: MAD temp[30].xyz, temp[28].xyz_, const[1].www_, temp[25].xyz_; 11: MUL temp[31].xy, input[0].xy__, const[4].xy__; 12: TEX temp[32].xyz, temp[31].xy__, 2D[0]; 13: MAD temp[34].xyz, temp[32].xyz_, none.HHH_, temp[30].xyz_; 14: ADD temp[35].xy, input[0].xy__, const[2].yz__; 15: MUL temp[36].xy, temp[35].xy__, const[4].xy__; 16: TEX temp[37].xyz, temp[36].xy__, 2D[0]; 17: MAD temp[39].xyz, temp[37].xyz_, const[1].www_, temp[34].xyz_; 18: ADD temp[40].xy, input[0].xy__, const[6].yz__; 19: MUL temp[41].xy, temp[40].xy__, const[4].xy__; 20: TEX temp[42].xyz, temp[41].xy__, 2D[0]; 21: MAD temp[44].xyz, temp[42].xyz_, const[1].xxx_, temp[39].xyz_; 22: MUL temp[46].xy, (const[3] + input[0]).xy__, const[4].xy__; 23: TEX temp[47].xyz, temp[46].xy__, 2D[0]; 24: MAD temp[49].xyz, temp[47].xyz_, const[0].zzz_, temp[44].xyz_; 25: MUL temp[50].xyz, temp[49].xyz_, const[3].zzz_; 26: MOV temp[51].xyz, temp[50].xyz_; 27: MOV temp[51].w, none.___1; 28: MOV output[0], temp[51]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[0], src2.xyz = const[4], srcp.xyz = (src1 + src0) MAD temp[17].xy, srcp.xy_, src2.xy_, src0.000 1: TEX temp[18].xyz, temp[17].xy__, 2D[0]; 2: src0.xyz = temp[18], src1.xyz = const[0] MAD temp[20].xyz, src0.xyz, src1.zzz, src0.000 3: src0.xyz = input[0], src1.xyz = const[5] MAD temp[21].xy, src0.xy_, src0.111, src1.yz_ 4: src0.xyz = temp[21], src1.xyz = const[4] MAD temp[22].xy, src0.xy_, src1.xy_, src0.000 5: TEX temp[23].xyz, temp[22].xy__, 2D[0]; 6: src0.xyz = temp[23], src1.xyz = const[1], src2.xyz = temp[20] MAD temp[25].xyz, src0.xyz, src1.xxx, src2.xyz 7: src0.xyz = input[0], src1.xyz = const[1] MAD temp[26].xy, src0.xy_, src0.111, src1.yz_ 8: src0.xyz = temp[26], src1.xyz = const[4] MAD temp[27].xy, src0.xy_, src1.xy_, src0.000 9: TEX temp[28].xyz, temp[27].xy__, 2D[0]; 10: src0.xyz = temp[28], src0.w = const[1], src1.xyz = temp[25] MAD temp[30].xyz, src0.xyz, src0.www, src1.xyz 11: src0.xyz = input[0], src1.xyz = const[4] MAD temp[31].xy, src0.xy_, src1.xy_, src0.000 12: TEX temp[32].xyz, temp[31].xy__, 2D[0]; 13: src0.xyz = temp[32], src1.xyz = temp[30] MAD temp[34].xyz, src0.xyz, src0.HHH, src1.xyz 14: src0.xyz = input[0], src1.xyz = const[2] MAD temp[35].xy, src0.xy_, src0.111, src1.yz_ 15: src0.xyz = temp[35], src1.xyz = const[4] MAD temp[36].xy, src0.xy_, src1.xy_, src0.000 16: TEX temp[37].xyz, temp[36].xy__, 2D[0]; 17: src0.xyz = temp[37], src0.w = const[1], src1.xyz = temp[34] MAD temp[39].xyz, src0.xyz, src0.www, src1.xyz 18: src0.xyz = input[0], src1.xyz = const[6] MAD temp[40].xy, src0.xy_, src0.111, src1.yz_ 19: src0.xyz = temp[40], src1.xyz = const[4] MAD temp[41].xy, src0.xy_, src1.xy_, src0.000 20: TEX temp[42].xyz, temp[41].xy__, 2D[0]; 21: src0.xyz = temp[42], src1.xyz = const[1], src2.xyz = temp[39] MAD temp[44].xyz, src0.xyz, src1.xxx, src2.xyz 22: src0.xyz = input[0], src1.xyz = const[3], src2.xyz = const[4], srcp.xyz = (src1 + src0) MAD temp[46].xy, srcp.xy_, src2.xy_, src0.000 23: TEX temp[47].xyz, temp[46].xy__, 2D[0]; 24: src0.xyz = temp[47], src1.xyz = const[0], src2.xyz = temp[44] MAD temp[49].xyz, src0.xyz, src1.zzz, src2.xyz 25: src0.xyz = temp[49], src1.xyz = const[3] MAD temp[50].xyz, src0.xyz, src1.zzz, src0.000 26: src0.xyz = temp[50] MAD temp[51].xyz, src0.xyz, src0.111, src0.000 27: MAD temp[51].w, src0.1, src0.1, src0.0 28: src0.xyz = temp[51], src0.w = temp[51] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[0], src2.xyz = const[4], srcp.xyz = (src1 + src0) MAD temp[17].xy, srcp.xy_, src2.xy_, src0.000 MAD temp[51].w, src0.1, src0.1, src0.0 1: src0.xyz = input[0], src1.xyz = const[3], src2.xyz = const[4], srcp.xyz = (src1 + src0) MAD temp[46].xy, srcp.xy_, src2.xy_, src0.000 2: src0.xyz = input[0], src1.xyz = const[5] MAD temp[21].xy, src0.xy_, src0.111, src1.yz_ 3: src0.xyz = input[0], src1.xyz = const[1] MAD temp[26].xy, src0.xy_, src0.111, src1.yz_ 4: src0.xyz = input[0], src1.xyz = const[4] MAD temp[31].xy, src0.xy_, src1.xy_, src0.000 5: src0.xyz = input[0], src1.xyz = const[2] MAD temp[35].xy, src0.xy_, src0.111, src1.yz_ 6: src0.xyz = input[0], src1.xyz = const[6] MAD temp[40].xy, src0.xy_, src0.111, src1.yz_ 7: src0.xyz = temp[21], src1.xyz = const[4] MAD temp[22].xy, src0.xy_, src1.xy_, src0.000 8: src0.xyz = temp[26], src1.xyz = const[4] MAD temp[27].xy, src0.xy_, src1.xy_, src0.000 9: src0.xyz = temp[35], src1.xyz = const[4] MAD temp[36].xy, src0.xy_, src1.xy_, src0.000 10: src0.xyz = temp[40], src1.xyz = const[4] MAD temp[41].xy, src0.xy_, src1.xy_, src0.000 11: BEGIN_TEX; 12: TEX temp[18].xyz, temp[17].xy__, 2D[0]; 13: TEX temp[47].xyz, temp[46].xy__, 2D[0]; 14: TEX temp[32].xyz, temp[31].xy__, 2D[0]; 15: TEX temp[23].xyz, temp[22].xy__, 2D[0]; 16: TEX temp[28].xyz, temp[27].xy__, 2D[0]; 17: TEX temp[37].xyz, temp[36].xy__, 2D[0]; 18: TEX temp[42].xyz, temp[41].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 19: src0.xyz = temp[18], src1.xyz = const[0] SEM_WAIT MAD temp[20].xyz, src0.xyz, src1.zzz, src0.000 20: src0.xyz = temp[23], src1.xyz = const[1], src2.xyz = temp[20] MAD temp[25].xyz, src0.xyz, src1.xxx, src2.xyz 21: src0.xyz = temp[28], src0.w = const[1], src1.xyz = temp[25] MAD temp[30].xyz, src0.xyz, src0.www, src1.xyz 22: src0.xyz = temp[32], src1.xyz = temp[30] MAD temp[34].xyz, src0.xyz, src0.HHH, src1.xyz 23: src0.xyz = temp[37], src0.w = const[1], src1.xyz = temp[34] MAD temp[39].xyz, src0.xyz, src0.www, src1.xyz 24: src0.xyz = temp[42], src1.xyz = const[1], src2.xyz = temp[39] MAD temp[44].xyz, src0.xyz, src1.xxx, src2.xyz 25: src0.xyz = temp[47], src1.xyz = const[0], src2.xyz = temp[44] MAD temp[49].xyz, src0.xyz, src1.zzz, src2.xyz 26: src0.xyz = temp[49], src1.xyz = const[3] MAD temp[50].xyz, src0.xyz, src1.zzz, src0.000 27: src0.xyz = temp[50] MAD temp[51].xyz, src0.xyz, src0.111, src0.000 28: src0.xyz = temp[51], src0.w = temp[51] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[0], src2.xyz = const[4], srcp.xyz = (src1 + src0) MAD temp[17].xy, srcp.xy_, src2.xy_, src0.000 MAD temp[51].w, src0.1, src0.1, src0.0 1: src0.xyz = input[0], src1.xyz = const[3], src2.xyz = const[4], srcp.xyz = (src1 + src0) MAD temp[46].xy, srcp.xy_, src2.xy_, src0.000 2: src0.xyz = input[0], src1.xyz = const[5] MAD temp[21].xy, src0.xy_, src0.111, src1.yz_ 3: src0.xyz = input[0], src1.xyz = const[1] MAD temp[26].xy, src0.xy_, src0.111, src1.yz_ 4: src0.xyz = input[0], src1.xyz = const[4] MAD temp[31].xy, src0.xy_, src1.xy_, src0.000 5: src0.xyz = input[0], src1.xyz = const[2] MAD temp[35].xy, src0.xy_, src0.111, src1.yz_ 6: src0.xyz = input[0], src1.xyz = const[6] MAD temp[40].xy, src0.xy_, src0.111, src1.yz_ 7: src0.xyz = temp[21], src1.xyz = const[4] MAD temp[22].xy, src0.xy_, src1.xy_, src0.000 8: src0.xyz = temp[26], src1.xyz = const[4] MAD temp[27].xy, src0.xy_, src1.xy_, src0.000 9: src0.xyz = temp[35], src1.xyz = const[4] MAD temp[36].xy, src0.xy_, src1.xy_, src0.000 10: src0.xyz = temp[40], src1.xyz = const[4] MAD temp[41].xy, src0.xy_, src1.xy_, src0.000 11: BEGIN_TEX; 12: TEX temp[18].xyz, temp[17].xy__, 2D[0]; 13: TEX temp[47].xyz, temp[46].xy__, 2D[0]; 14: TEX temp[32].xyz, temp[31].xy__, 2D[0]; 15: TEX temp[23].xyz, temp[22].xy__, 2D[0]; 16: TEX temp[28].xyz, temp[27].xy__, 2D[0]; 17: TEX temp[37].xyz, temp[36].xy__, 2D[0]; 18: TEX temp[42].xyz, temp[41].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 19: src0.xyz = temp[18], src1.xyz = const[0] SEM_WAIT MAD temp[20].xyz, src0.xyz, src1.zzz, src0.000 20: src0.xyz = temp[23], src1.xyz = const[1], src2.xyz = temp[20] MAD temp[25].xyz, src0.xyz, src1.xxx, src2.xyz 21: src0.xyz = temp[28], src0.w = const[1], src1.xyz = temp[25] MAD temp[30].xyz, src0.xyz, src0.www, src1.xyz 22: src0.xyz = temp[32], src1.xyz = temp[30] MAD temp[34].xyz, src0.xyz, src0.HHH, src1.xyz 23: src0.xyz = temp[37], src0.w = const[1], src1.xyz = temp[34] MAD temp[39].xyz, src0.xyz, src0.www, src1.xyz 24: src0.xyz = temp[42], src1.xyz = const[1], src2.xyz = temp[39] MAD temp[44].xyz, src0.xyz, src1.xxx, src2.xyz 25: src0.xyz = temp[47], src1.xyz = const[0], src2.xyz = temp[44] MAD temp[49].xyz, src0.xyz, src1.zzz, src2.xyz 26: src0.xyz = temp[49], src1.xyz = const[3] MAD temp[50].xyz, src0.xyz, src1.zzz, src0.000 27: src0.xyz = temp[50] MAD temp[51].xyz, src0.xyz, src0.111, src0.000 28: src0.xyz = temp[51], src0.w = temp[51] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[0], src2.xyz = const[4], srcp.xyz = (src1 + src0) MAD temp[1].xy, srcp.xy_, src2.xy_, src0.00_ MAD temp[0].w, src0.1, src0.1, src0.0 1: src0.xyz = input[0], src1.xyz = const[3], src2.xyz = const[4], srcp.xyz = (src1 + src0) MAD temp[2].xy, srcp.xy_, src2.xy_, src0.00_ 2: src0.xyz = input[0], src1.xyz = const[5] MAD temp[3].xy, src0.xy_, src0.11_, src1.yz_ 3: src0.xyz = input[0], src1.xyz = const[1] MAD temp[4].xy, src0.xy_, src0.11_, src1.yz_ 4: src0.xyz = input[0], src1.xyz = const[4] MAD temp[5].xy, src0.xy_, src1.xy_, src0.00_ 5: src0.xyz = input[0], src1.xyz = const[2] MAD temp[6].xy, src0.xy_, src0.11_, src1.yz_ 6: src0.xyz = input[0], src1.xyz = const[6] MAD temp[0].xy, src0.xy_, src0.11_, src1.yz_ 7: src0.xyz = temp[3], src1.xyz = const[4] MAD temp[3].xy, src0.xy_, src1.xy_, src0.00_ 8: src0.xyz = temp[4], src1.xyz = const[4] MAD temp[4].xy, src0.xy_, src1.xy_, src0.00_ 9: src0.xyz = temp[6], src1.xyz = const[4] MAD temp[6].xy, src0.xy_, src1.xy_, src0.00_ 10: src0.xyz = temp[0], src1.xyz = const[4] MAD temp[0].xy, src0.xy_, src1.xy_, src0.00_ 11: BEGIN_TEX; 12: TEX temp[1].xyz, temp[1].xy__, 2D[0]; 13: TEX temp[2].xyz, temp[2].xy__, 2D[0]; 14: TEX temp[5].xyz, temp[5].xy__, 2D[0]; 15: TEX temp[3].xyz, temp[3].xy__, 2D[0]; 16: TEX temp[4].xyz, temp[4].xy__, 2D[0]; 17: TEX temp[6].xyz, temp[6].xy__, 2D[0]; 18: TEX temp[7].xyz, temp[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 19: src0.xyz = temp[1], src1.xyz = const[0] SEM_WAIT MAD temp[0].xyz, src0.xyz, src1.zzz, src0.000 20: src0.xyz = temp[3], src1.xyz = const[1], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xxx, src2.xyz 21: src0.xyz = temp[4], src0.w = const[1], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.www, src1.xyz 22: src0.xyz = temp[5], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.HHH, src1.xyz 23: src0.xyz = temp[6], src0.w = const[1], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.www, src1.xyz 24: src0.xyz = temp[7], src1.xyz = const[1], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xxx, src2.xyz 25: src0.xyz = temp[2], src1.xyz = const[0], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.zzz, src2.xyz 26: src0.xyz = temp[0], src1.xyz = const[3] MAD temp[0].xyz, src0.xyz, src1.zzz, src0.000 27: src0.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.111, src0.000 28: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=48************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 10, tex_end: 0 (code_addr: 00000280) 0: xyz: t0 c0 c4 add-> t1.xy (01864800) w: t0 t0 t0 bias-> t0.w (00800000) xyz: srcp.xyz c4.xyz 0.0 op: 0045040f w: 1.0 1.0 0.0 op: 00040891 1: xyz: t0 c3 c4 add-> t2.xy (018a48c0) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xyz c4.xyz 0.0 op: 0045040f w: t0.x t0.x t0.x op: 00000000 2: xyz: t0 c5 t0 bias-> t3.xy (018c0940) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 c5.yzx op: 00060a80 w: t0.x t0.x t0.x op: 00000000 3: xyz: t0 c1 t0 bias-> t4.xy (01900840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 c1.yzx op: 00060a80 w: t0.x t0.x t0.x op: 00000000 4: xyz: t0 c4 t0 bias-> t5.xy (01940900) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c4.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 5: xyz: t0 c2 t0 bias-> t6.xy (01980880) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 c2.yzx op: 00060a80 w: t0.x t0.x t0.x op: 00000000 6: xyz: t0 c6 t0 bias-> t0.xy (01800980) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 c6.yzx op: 00060a80 w: t0.x t0.x t0.x op: 00000000 7: xyz: t3 c4 t0 bias-> t3.xy (018c0903) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c4.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 8: xyz: t4 c4 t0 bias-> t4.xy (01900904) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz c4.xyz 0.0 op: 00050200 w: t4.x t4.x t4.x op: 00000000 9: xyz: t6 c4 t0 bias-> t6.xy (01980906) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz c4.xyz 0.0 op: 00050200 w: t6.x t6.x t6.x op: 00000000 10: xyz: t0 c4 t0 bias-> t0.xy (01800900) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c4.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 NODE 1: alu_offset: 11, tex_offset: 0, alu_end: 9, tex_end: 6 (code_addr: 004c024b) TEX: TEX t1, t1, texture[0] (00008041) TEX t2, t2, texture[0] (00008082) TEX t5, t5, texture[0] (00008145) TEX t3, t3, texture[0] (000080c3) TEX t4, t4, texture[0] (00008104) TEX t6, t6, texture[0] (00008186) TEX t7, t0, texture[0] (000081c0) 11: xyz: t1 c0 t0 bias-> t0.xyz (03800801) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c0.zzz 0.0 op: 00050380 w: t1.x t1.x t1.x op: 00000000 12: xyz: t3 c1 t0 bias-> t0.xyz (03800843) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c1.xxx t0.xyz op: 00020280 w: t3.x t3.x t3.x op: 00000000 13: xyz: t4 t0 t0 bias-> t0.xyz (03800004) w: c1 t0 t0 bias-> (00000021) xyz: t4.xyz c1.www t0.xyz op: 00010600 w: t4.x t4.x t4.x op: 00000000 14: xyz: t5 t0 t0 bias-> t0.xyz (03800005) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz 0.5 t0.xyz op: 00010b00 w: t5.x t5.x t5.x op: 00000000 15: xyz: t6 t0 t0 bias-> t0.xyz (03800006) w: c1 t0 t0 bias-> (00000021) xyz: t6.xyz c1.www t0.xyz op: 00010600 w: t6.x t6.x t6.x op: 00000000 16: xyz: t7 c1 t0 bias-> t0.xyz (03800847) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz c1.xxx t0.xyz op: 00020280 w: t7.x t7.x t7.x op: 00000000 17: xyz: t2 c0 t0 bias-> t0.xyz (03800802) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c0.zzz t0.xyz op: 00020380 w: t2.x t2.x t2.x op: 00000000 18: xyz: t0 c3 t0 bias-> t0.xyz (038008c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c3.zzz 0.0 op: 00050380 w: t0.x t0.x t0.x op: 00000000 19: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 20: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0], LOCAL 0: TEX TEMP[0], IN[0].xyyy, SAMP[0], 2D 1: MOV OUT[0], TEMP[0] 2: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[1], src0.w = temp[1] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[1], src0.w = temp[1] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[0], src0.w = temp[0] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=49************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], PERSPECTIVE DCL IN[1], GENERIC[12], PERSPECTIVE DCL IN[2], GENERIC[13], PERSPECTIVE DCL OUT[0], COLOR DCL OUT[1], COLOR[1] DCL OUT[2], COLOR[2] DCL SAMP[0] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL IMM[0] FLT32 { 0.5000, 255.0000, 0.0039, 0.0000} 0: TEX TEMP[0], IN[0].xyyy, SAMP[0], 2D 1: DP3 TEMP[1].x, IN[2].xyzz, IN[2].xyzz 2: RSQ TEMP[2].x, TEMP[1].xxxx 3: MUL TEMP[3].xyz, IN[2].xyzz, TEMP[2].xxxx 4: MAD TEMP[1].xyz, TEMP[3].xyzz, IMM[0].xxxx, IMM[0].xxxx 5: MUL TEMP[3].x, IN[1].xxxx, IMM[0].yyyy 6: FLR TEMP[4].x, TEMP[3].xxxx 7: MOV TEMP[5].x, TEMP[4].xxxx 8: ADD TEMP[3].x, TEMP[3].xxxx, -TEMP[4].xxxx 9: MUL TEMP[3].x, TEMP[3].xxxx, IMM[0].yyyy 10: FLR TEMP[4].x, TEMP[3].xxxx 11: MOV TEMP[5].y, TEMP[4].xxxx 12: ADD TEMP[3].x, TEMP[3].xxxx, -TEMP[4].xxxx 13: MOV TEMP[5].z, TEMP[3].xxxx 14: MUL TEMP[5].xy, TEMP[5].xyyy, IMM[0].zzzz 15: MOV TEMP[2].xyz, TEMP[5].xyzx 16: MOV TEMP[1].w, IMM[0].wwww 17: MOV TEMP[2].w, IMM[0].wwww 18: MOV OUT[0], TEMP[0] 19: MOV OUT[1], TEMP[1] 20: MOV OUT[2], TEMP[2] 21: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: MOV temp[1].w, const[0].wwww; 17: MOV temp[2].w, const[0].wwww; 18: MOV output[0], temp[0]; 19: MOV output[1], temp[1]; 20: MOV output[2], temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: MOV temp[1].w, const[0].wwww; 17: MOV temp[2].w, const[0].wwww; 18: MOV output[0], temp[0]; 19: MOV output[1], temp[1]; 20: MOV output[2], temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: MOV temp[1].w, const[0].wwww; 17: MOV temp[2].w, const[0].wwww; 18: MOV output[0], temp[0]; 19: MOV output[1], temp[1]; 20: MOV output[2], temp[2]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: MOV temp[1].w, const[0].wwww; 17: MOV temp[2].w, const[0].wwww; 18: MOV output[0], temp[0]; 19: MOV output[1], temp[1]; 20: MOV output[2], temp[2]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: MOV temp[1].w, const[0].wwww; 17: MOV temp[2].w, const[0].wwww; 18: MOV output[0], temp[0]; 19: MOV output[1], temp[1]; 20: MOV output[2], temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: MOV temp[1].w, const[0].wwww; 17: MOV temp[2].w, const[0].wwww; 18: MOV output[0], temp[0]; 19: MOV output[1], temp[1]; 20: MOV output[2], temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, |temp[1].xxxx|; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FRC temp[4].x, temp[3].xxxx; 7: ADD temp[4].x, temp[3].xxxx, -temp[4]; 8: MOV temp[5].x, temp[4].xxxx; 9: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 10: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 11: FRC temp[4].x, temp[3].xxxx; 12: ADD temp[4].x, temp[3].xxxx, -temp[4]; 13: MOV temp[5].y, temp[4].xxxx; 14: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 15: MOV temp[5].z, temp[3].xxxx; 16: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 17: MOV temp[2].xyz, temp[5].xyzx; 18: MOV temp[1].w, const[0].wwww; 19: MOV temp[2].w, const[0].wwww; 20: MOV output[0], temp[0]; 21: MOV output[1], temp[1]; 22: MOV output[2], temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: DP3 temp[1].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[2].x, |temp[1].x___|; 3: MUL temp[3].xyz, input[2].xyz_, temp[2].xxx_; 4: MAD temp[1].xyz, temp[3].xyz_, const[0].xxx_, const[0].xxx_; 5: MUL temp[3].x, input[1].x___, const[0].y___; 6: FRC temp[4].x, temp[3].x___; 7: ADD temp[4].x, temp[3].x___, -temp[4].x___; 8: MOV temp[5].x, temp[4].x___; 9: ADD temp[3].x, temp[3].x___, -temp[4].x___; 10: MUL temp[3].x, temp[3].x___, const[0].y___; 11: FRC temp[4].x, temp[3].x___; 12: ADD temp[4].x, temp[3].x___, -temp[4].x___; 13: MOV temp[5].y, temp[4]._x__; 14: ADD temp[3].x, temp[3].x___, -temp[4].x___; 15: MOV temp[5].z, temp[3].__x_; 16: MUL temp[5].xy, temp[5].xy__, const[0].zz__; 17: MOV temp[2].xyz, temp[5].xyz_; 18: MOV temp[1].w, const[0].___w; 19: MOV temp[2].w, const[0].___w; 20: MOV output[0], temp[0]; 21: MOV output[1], temp[1]; 22: MOV output[2], temp[2]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: DP3 temp[1].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[2].x, |temp[1].x___|; 3: MUL temp[3].xyz, input[2].xyz_, temp[2].xxx_; 4: MAD temp[1].xyz, temp[3].xyz_, const[0].xxx_, const[0].xxx_; 5: MUL temp[3].x, input[1].x___, const[0].y___; 6: FRC temp[4].x, temp[3].x___; 7: ADD temp[4].x, temp[3].x___, -temp[4].x___; 8: MOV temp[5].x, temp[4].x___; 9: ADD temp[3].x, temp[3].x___, -temp[4].x___; 10: MUL temp[3].x, temp[3].x___, const[0].y___; 11: FRC temp[4].x, temp[3].x___; 12: ADD temp[4].x, temp[3].x___, -temp[4].x___; 13: MOV temp[5].y, temp[4]._x__; 14: ADD temp[3].x, temp[3].x___, -temp[4].x___; 15: MOV temp[5].z, temp[3].__x_; 16: MUL temp[5].xy, temp[5].xy__, const[0].zz__; 17: MOV temp[2].xyz, temp[5].xyz_; 18: MOV temp[1].w, const[0].___w; 19: MOV temp[2].w, const[0].___w; 20: MOV output[0], temp[0]; 21: MOV output[1], temp[1]; 22: MOV output[2], temp[2]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[6], input[0].xy__, 2D[0]; 1: DP3 temp[7].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[8].x, |temp[7].x___|; 3: MUL temp[9].xyz, input[2].xyz_, temp[8].xxx_; 4: MAD temp[10].xyz, temp[9].xyz_, const[0].xxx_, const[0].xxx_; 5: MUL temp[11].x, input[1].x___, const[0].y___; 6: FRC temp[12].x, temp[11].x___; 7: ADD temp[13].x, temp[11].x___, -temp[12].x___; 8: MOV temp[14].x, temp[13].x___; 9: ADD temp[15].x, temp[11].x___, -temp[13].x___; 10: MUL temp[16].x, temp[15].x___, const[0].y___; 11: FRC temp[17].x, temp[16].x___; 12: ADD temp[18].x, temp[16].x___, -temp[17].x___; 13: MOV temp[14].y, temp[18]._x__; 14: ADD temp[19].x, temp[16].x___, -temp[18].x___; 15: MOV temp[20].z, temp[19].__x_; 16: MUL temp[20].xy, temp[14].xy__, const[0].zz__; 17: MOV temp[21].xyz, temp[20].xyz_; 18: MOV temp[10].w, const[0].___w; 19: MOV temp[21].w, const[0].___w; 20: MOV output[0], temp[6]; 21: MOV output[1], temp[10]; 22: MOV output[2], temp[21]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[6], input[0].xy__, 2D[0]; 1: DP3 temp[7].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[8].x, |temp[7].x___|; 3: MUL temp[9].xyz, input[2].xyz_, temp[8].xxx_; 4: MAD temp[10].xyz, temp[9].xyz_, none.HHH_, none.HHH_; 5: MUL temp[11].x, input[1].x___, const[0].y___; 6: FRC temp[12].x, temp[11].x___; 7: MOV temp[14].x, (temp[11] - temp[12]).x___; 8: ADD temp[15].x, temp[11].x___, -(temp[11] - temp[12]).x___; 9: MUL temp[16].x, temp[15].x___, const[0].y___; 10: FRC temp[17].x, temp[16].x___; 11: MOV temp[14].y, (temp[16] - temp[17])._x__; 12: ADD temp[19].x, temp[16].x___, -(temp[16] - temp[17]).x___; 13: MOV temp[20].z, temp[19].__x_; 14: MUL temp[20].xy, temp[14].xy__, const[0].zz__; 15: MOV temp[21].xyz, temp[20].xyz_; 16: MOV temp[10].w, none.___0; 17: MOV temp[21].w, none.___0; 18: MOV output[0], temp[6]; 19: MOV output[1], temp[10]; 20: MOV output[2], temp[21]; CONST[0] = { 0.5000 255.0000 0.0039 0.0000 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[6], input[0].xy__, 2D[0]; 1: DP3 temp[7].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[8].x, |temp[7].x___|; 3: MUL temp[9].xyz, input[2].xyz_, temp[8].xxx_; 4: MAD temp[10].xyz, temp[9].xyz_, none.HHH_, none.HHH_; 5: MUL temp[11].x, input[1].x___, const[0].y___; 6: FRC temp[12].x, temp[11].x___; 7: MOV temp[14].x, (temp[11] - temp[12]).x___; 8: ADD temp[15].x, temp[11].x___, -(temp[11] - temp[12]).x___; 9: MUL temp[16].x, temp[15].x___, const[0].y___; 10: FRC temp[17].x, temp[16].x___; 11: MOV temp[14].y, (temp[16] - temp[17])._x__; 12: ADD temp[19].x, temp[16].x___, -(temp[16] - temp[17]).x___; 13: MOV temp[20].z, temp[19].__x_; 14: MUL temp[20].xy, temp[14].xy__, const[0].zz__; 15: MOV temp[21].xyz, temp[20].xyz_; 16: MOV temp[10].w, none.___0; 17: MOV temp[21].w, none.___0; 18: MOV output[0], temp[6]; 19: MOV output[1], temp[10]; 20: MOV output[2], temp[21]; CONST[0] = { 0.5000 255.0000 0.0039 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[6], input[0].xy__, 2D[0]; 1: DP3 temp[7].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[8].x, |temp[7].x___|; 3: MUL temp[9].xyz, input[2].xyz_, temp[8].xxx_; 4: MAD temp[10].xyz, temp[9].xyz_, none.HHH_, none.HHH_; 5: MUL temp[11].x, input[1].x___, const[0].y___; 6: FRC temp[12].x, temp[11].x___; 7: MOV temp[14].x, (temp[11] - temp[12]).x___; 8: ADD temp[15].x, temp[11].x___, -(temp[11] - temp[12]).x___; 9: MUL temp[16].x, temp[15].x___, const[0].y___; 10: FRC temp[17].x, temp[16].x___; 11: MOV temp[14].y, (temp[16] - temp[17])._x__; 12: ADD temp[19].x, temp[16].x___, -(temp[16] - temp[17]).x___; 13: MOV temp[20].z, temp[19].__x_; 14: MUL temp[20].xy, temp[14].xy__, const[0].zz__; 15: MOV temp[21].xyz, temp[20].xyz_; 16: MOV temp[10].w, none.___0; 17: MOV temp[21].w, none.___0; 18: MOV output[0], temp[6]; 19: MOV output[1], temp[10]; 20: MOV output[2], temp[21]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[6], input[0].xy__, 2D[0]; 1: src0.xyz = input[2] DP3 temp[7].x, src0.xyz, src0.xyz 2: src0.xyz = temp[7] REPL_ALPHA temp[8].x RSQ, |src0.x| 3: src0.xyz = input[2], src1.xyz = temp[8] MAD temp[9].xyz, src0.xyz, src1.xxx, src0.000 4: src0.xyz = temp[9] MAD temp[10].xyz, src0.xyz, src0.HHH, src0.HHH 5: src0.xyz = input[1], src1.xyz = const[0] MAD temp[11].x, src0.x__, src1.y__, src0.000 6: src0.xyz = temp[11] FRC temp[12].x, src0.x__ 7: src0.xyz = temp[12], src1.xyz = temp[11], srcp.xyz = (src1 - src0) MAD temp[14].x, srcp.x__, src0.111, src0.000 8: src0.xyz = temp[12], src1.xyz = temp[11], srcp.xyz = (src1 - src0) MAD temp[15].x, src1.x__, src0.111, -srcp.x__ 9: src0.xyz = temp[15], src1.xyz = const[0] MAD temp[16].x, src0.x__, src1.y__, src0.000 10: src0.xyz = temp[16] FRC temp[17].x, src0.x__ 11: src0.xyz = temp[17], src1.xyz = temp[16], srcp.xyz = (src1 - src0) MAD temp[14].y, srcp._x_, src0.111, src0.000 12: src0.xyz = temp[17], src1.xyz = temp[16], srcp.xyz = (src1 - src0) MAD temp[19].x, src1.x__, src0.111, -srcp.x__ 13: src0.xyz = temp[19] MAD temp[20].z, src0.__x, src0.111, src0.000 14: src0.xyz = temp[14], src1.xyz = const[0] MAD temp[20].xy, src0.xy_, src1.zz_, src0.000 15: src0.xyz = temp[20] MAD temp[21].xyz, src0.xyz, src0.111, src0.000 16: MAD temp[10].w, src0.0, src0.1, src0.0 17: MAD temp[21].w, src0.0, src0.1, src0.0 18: src0.xyz = temp[6], src0.w = temp[6] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 19: src0.xyz = temp[10], src0.w = temp[10] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 20: src0.xyz = temp[21], src0.w = temp[21] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[6], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = input[1], src1.xyz = const[0] MAD temp[11].x, src0.x__, src1.y__, src0.000 MAD temp[21].w, src0.0, src0.1, src0.0 3: src0.xyz = input[2] DP3 temp[7].x, src0.xyz, src0.xyz MAD temp[10].w, src0.0, src0.1, src0.0 4: src0.xyz = temp[11], src1.xyz = temp[7] FRC temp[12].x, src0.x__ RSQ temp[8].w, |src1.x| 5: src0.xyz = temp[12], src1.xyz = temp[11], srcp.xyz = (src1 - src0) MAD temp[14].x, srcp.x__, src0.111, src0.000 6: src0.xyz = input[2], src0.w = temp[8], src1.xyz = temp[8] MAD temp[9].xyz, src0.xyz, src0.www, src0.000 7: src0.xyz = temp[12], src1.xyz = temp[11], src2.xyz = temp[9], srcp.xyz = (src1 - src0) MAD temp[10].xyz, src2.xyz, src0.HHH, src0.HHH MAD temp[15].w, src1.x, src0.1, -srcp.x 8: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = const[0] MAD temp[16].x, src0.w__, src1.y__, src0.000 9: src0.xyz = temp[16] FRC temp[17].x, src0.x__ 10: src0.xyz = temp[17], src1.xyz = temp[16], srcp.xyz = (src1 - src0) MAD temp[14].y, srcp._x_, src0.111, src0.000 11: src0.xyz = temp[17], src1.xyz = temp[16], srcp.xyz = (src1 - src0) MAD temp[19].w, src1.x, src0.1, -srcp.x 12: src0.xyz = temp[14], src1.xyz = const[0] MAD temp[20].xy, src0.xy_, src1.zz_, src0.000 13: src0.xyz = temp[19], src0.w = temp[19] MAD temp[20].z, src0.__w, src0.111, src0.000 14: src0.xyz = temp[20] MAD temp[21].xyz, src0.xyz, src0.111, src0.000 15: src0.xyz = temp[6], src0.w = temp[6] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 16: src0.xyz = temp[10], src0.w = temp[10] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 17: src0.xyz = temp[21], src0.w = temp[21] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[6], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = input[1], src1.xyz = const[0] MAD temp[11].x, src0.x__, src1.y__, src0.000 MAD temp[21].w, src0.0, src0.1, src0.0 3: src0.xyz = input[2] DP3 temp[7].x, src0.xyz, src0.xyz MAD temp[10].w, src0.0, src0.1, src0.0 4: src0.xyz = temp[11], src1.xyz = temp[7] FRC temp[12].x, src0.x__ RSQ temp[8].w, |src1.x| 5: src0.xyz = temp[12], src1.xyz = temp[11], srcp.xyz = (src1 - src0) MAD temp[14].x, srcp.x__, src0.111, src0.000 6: src0.xyz = input[2], src0.w = temp[8] MAD temp[9].xyz, src0.xyz, src0.www, src0.000 7: src0.xyz = temp[12], src1.xyz = temp[11], src2.xyz = temp[9], srcp.xyz = (src1 - src0) MAD temp[10].xyz, src2.xyz, src0.HHH, src0.HHH MAD temp[15].w, src1.x, src0.1, -srcp.x 8: src0.w = temp[15], src1.xyz = const[0] MAD temp[16].x, src0.w__, src1.y__, src0.000 9: src0.xyz = temp[16] FRC temp[17].x, src0.x__ 10: src0.xyz = temp[17], src1.xyz = temp[16], srcp.xyz = (src1 - src0) MAD temp[14].y, srcp._x_, src0.111, src0.000 11: src0.xyz = temp[17], src1.xyz = temp[16], srcp.xyz = (src1 - src0) MAD temp[19].w, src1.x, src0.1, -srcp.x 12: src0.xyz = temp[14], src1.xyz = const[0] MAD temp[20].xy, src0.xy_, src1.zz_, src0.000 13: src0.w = temp[19] MAD temp[20].z, src0.__w, src0.111, src0.000 14: src0.xyz = temp[20] MAD temp[21].xyz, src0.xyz, src0.111, src0.000 15: src0.xyz = temp[6], src0.w = temp[6] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 16: src0.xyz = temp[10], src0.w = temp[10] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 17: src0.xyz = temp[21], src0.w = temp[21] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = input[1], src1.xyz = const[0] MAD temp[1].x, src0.x__, src1.y__, src0.0__ MAD temp[1].w, src0.0, src0.1, src0.0 3: src0.xyz = input[2] DP3 temp[1].y, src0.xyz, src0.xyz MAD temp[2].w, src0.0, src0.1, src0.0 4: src0.xyz = temp[1], src1.xyz = temp[1] FRC temp[3].x, src0.x__ RSQ temp[3].w, |src1.y| 5: src0.xyz = temp[3], src1.xyz = temp[1], srcp.xyz = (src1 - src0) MAD temp[4].x, srcp.x__, src0.11_, src0.00_ 6: src0.xyz = input[2], src0.w = temp[3] MAD temp[2].xyz, src0.xyz, src0.www, src0.000 7: src0.xyz = temp[3], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD temp[1].xyz, src2.xyz, src0.HHH, src0.HHH MAD temp[3].w, src1.x, src0.1, -srcp.x 8: src0.w = temp[3], src1.xyz = const[0] MAD temp[2].x, src0.w__, src1.y__, src0.0__ 9: src0.xyz = temp[2] FRC temp[3].x, src0.x__ 10: src0.xyz = temp[3], src1.xyz = temp[2], srcp.xyz = (src1 - src0) MAD temp[4].y, srcp._x_, src0.11_, src0.00_ 11: src0.xyz = temp[3], src1.xyz = temp[2], srcp.xyz = (src1 - src0) MAD temp[3].w, src1.x, src0.1, -srcp.x 12: src0.xyz = temp[4], src1.xyz = const[0] MAD temp[2].xy, src0.xy_, src1.zz_, src0.000 13: src0.w = temp[3] MAD temp[2].z, src0.__w, src0.111, src0.000 14: src0.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src0.111, src0.000 15: src0.xyz = temp[0], src0.w = temp[0] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 16: src0.xyz = temp[1], src0.w = temp[2] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 17: src0.xyz = temp[2], src0.w = temp[1] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 pc=50************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 15, tex_end: 0 (code_addr: 004003c0) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t1 c0 t0 bias-> t1.x (00840801) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t1.xyz c0.yyy 0.0 op: 00050300 w: 0.0 1.0 0.0 op: 00040890 1: xyz: t2 t0 t0 bias-> t1.y (01040002) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: 0.0 1.0 0.0 op: 00040890 2: xyz: t1 t1 t0 bias-> t3.x (008c0041) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: t1.xyz t1.xxx t1.xxx op: 84804080 NOP w: |t1.y| t1.x t1.x op: 05800044 3: xyz: t3 t1 t0 sub-> t4.x (00900043) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xyz 1.0 0.0 op: 00250a8f w: t3.x t3.x t3.x op: 00000000 4: xyz: t2 t0 t0 bias-> t2.xyz (03880002) w: t3 t0 t0 bias-> (00000003) xyz: t2.xyz t3.www 0.0 op: 00050600 w: t2.x t2.x t2.x op: 00000000 5: xyz: t3 t1 t2 sub-> t1.xyz (03842043) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: t2.xyz 0.5 0.5 op: 00258b08 w: t1.x 1.0 -srcp.x op: 000b0883 6: xyz: t0 c0 t0 bias-> t2.x (00880800) w: t3 t0 t0 bias-> (00000003) xyz: t3.www c0.yyy 0.0 op: 0005030c w: t0.x t0.x t0.x op: 00000000 7: xyz: t2 t0 t0 bias-> t3.x (008c0002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t2.xxx t2.xxx op: 84804080 NOP w: t2.x t2.x t2.x op: 00000000 8: xyz: t3 t2 t0 sub-> t4.y (01100083) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xxx 1.0 0.0 op: 00250a90 w: t3.x t3.x t3.x op: 00000000 9: xyz: t3 t2 t0 sub-> (00000083) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: t3.xxx t3.xxx t3.xxx op: 00204081 w: t2.x 1.0 -srcp.x op: 000b0883 10: xyz: t4 c0 t0 bias-> t2.xy (01880804) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz c0.zzz 0.0 op: 00050380 w: t4.x t4.x t4.x op: 00000000 11: xyz: t0 t0 t0 bias-> t2.z (02080000) w: t3 t0 t0 bias-> (00000003) xyz: t3.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 12: xyz: t2 t0 t0 bias-> t2.xyz (03880002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz 1.0 0.0 op: 00050a80 w: t2.x t2.x t2.x op: 00000000 13: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 14: xyz: t1 t0 t0 bias-> o1.xyz (3c000001) w: t2 t0 t0 bias-> o1.w (03000002) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t2.w 1.0 0.0 op: 00040889 15: xyz: t2 t0 t0 bias-> o2.xyz (5c000002) w: t1 t0 t0 bias-> o2.w (05000001) xyz: t2.xyz 1.0 0.0 op: 00050a80 w: t1.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], PERSPECTIVE DCL IN[1], GENERIC[12], PERSPECTIVE DCL IN[2], GENERIC[13], PERSPECTIVE DCL IN[3], GENERIC[14], PERSPECTIVE DCL IN[4], GENERIC[15], PERSPECTIVE DCL OUT[0], COLOR DCL OUT[1], COLOR[1] DCL OUT[2], COLOR[2] DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL IMM[0] FLT32 { -0.5000, 0.5000, 255.0000, 0.0039} 0: TEX TEMP[0], IN[0].xyyy, SAMP[2], 2D 1: TEX TEMP[1].xyz, IN[0].xyyy, SAMP[1], 2D 2: ADD TEMP[2].xyz, TEMP[1].xyzz, IMM[0].xxxx 3: MUL TEMP[3].xyz, TEMP[2].xxxx, IN[3].xyzz 4: MAD TEMP[3].xyz, TEMP[2].yyyy, IN[2].xyzz, TEMP[3].xyzz 5: MAD TEMP[3].xyz, TEMP[2].zzzz, IN[4].xyzz, TEMP[3].xyzz 6: DP3 TEMP[4].x, TEMP[3].xyzz, TEMP[3].xyzz 7: RSQ TEMP[4].x, TEMP[4].xxxx 8: MUL TEMP[3].xyz, TEMP[3].xyzz, TEMP[4].xxxx 9: MAD TEMP[1].xyz, TEMP[3].xyzz, IMM[0].yyyy, IMM[0].yyyy 10: MUL TEMP[3].x, IN[1].xxxx, IMM[0].zzzz 11: FLR TEMP[4].x, TEMP[3].xxxx 12: MOV TEMP[5].x, TEMP[4].xxxx 13: ADD TEMP[3].x, TEMP[3].xxxx, -TEMP[4].xxxx 14: MUL TEMP[3].x, TEMP[3].xxxx, IMM[0].zzzz 15: FLR TEMP[4].x, TEMP[3].xxxx 16: MOV TEMP[5].y, TEMP[4].xxxx 17: ADD TEMP[3].x, TEMP[3].xxxx, -TEMP[4].xxxx 18: MOV TEMP[5].z, TEMP[3].xxxx 19: MUL TEMP[5].xy, TEMP[5].xyyy, IMM[0].wwww 20: MOV TEMP[2].xyz, TEMP[5].xyzx 21: TEX TEMP[3].xy, IN[0].xyyy, SAMP[0], 2D 22: MOV TEMP[1].w, TEMP[3].xxxx 23: MOV TEMP[2].w, TEMP[3].yyyy 24: MOV OUT[0], TEMP[0] 25: MOV OUT[1], TEMP[1] 26: MOV OUT[2], TEMP[2] 27: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[2]; 1: TEX temp[1].xyz, input[0].xyyy, 2D[1]; 2: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 3: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 4: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 5: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 6: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 7: RSQ temp[4].x, temp[4].xxxx; 8: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 9: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 10: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 11: FLR temp[4].x, temp[3].xxxx; 12: MOV temp[5].x, temp[4].xxxx; 13: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 14: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 15: FLR temp[4].x, temp[3].xxxx; 16: MOV temp[5].y, temp[4].xxxx; 17: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 18: MOV temp[5].z, temp[3].xxxx; 19: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 20: MOV temp[2].xyz, temp[5].xyzx; 21: TEX temp[3].xy, input[0].xyyy, 2D[0]; 22: MOV temp[1].w, temp[3].xxxx; 23: MOV temp[2].w, temp[3].yyyy; 24: MOV output[0], temp[0]; 25: MOV output[1], temp[1]; 26: MOV output[2], temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[2]; 1: TEX temp[1].xyz, input[0].xyyy, 2D[1]; 2: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 3: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 4: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 5: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 6: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 7: RSQ temp[4].x, temp[4].xxxx; 8: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 9: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 10: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 11: FLR temp[4].x, temp[3].xxxx; 12: MOV temp[5].x, temp[4].xxxx; 13: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 14: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 15: FLR temp[4].x, temp[3].xxxx; 16: MOV temp[5].y, temp[4].xxxx; 17: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 18: MOV temp[5].z, temp[3].xxxx; 19: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 20: MOV temp[2].xyz, temp[5].xyzx; 21: TEX temp[3].xy, input[0].xyyy, 2D[0]; 22: MOV temp[1].w, temp[3].xxxx; 23: MOV temp[2].w, temp[3].yyyy; 24: MOV output[0], temp[0]; 25: MOV output[1], temp[1]; 26: MOV output[2], temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[2]; 1: TEX temp[1].xyz, input[0].xyyy, 2D[1]; 2: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 3: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 4: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 5: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 6: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 7: RSQ temp[4].x, temp[4].xxxx; 8: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 9: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 10: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 11: FLR temp[4].x, temp[3].xxxx; 12: MOV temp[5].x, temp[4].xxxx; 13: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 14: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 15: FLR temp[4].x, temp[3].xxxx; 16: MOV temp[5].y, temp[4].xxxx; 17: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 18: MOV temp[5].z, temp[3].xxxx; 19: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 20: MOV temp[2].xyz, temp[5].xyzx; 21: TEX temp[3].xy, input[0].xyyy, 2D[0]; 22: MOV temp[1].w, temp[3].xxxx; 23: MOV temp[2].w, temp[3].yyyy; 24: MOV output[0], temp[0]; 25: MOV output[1], temp[1]; 26: MOV output[2], temp[2]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[2]; 1: TEX temp[1].xyz, input[0].xyyy, 2D[1]; 2: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 3: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 4: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 5: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 6: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 7: RSQ temp[4].x, temp[4].xxxx; 8: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 9: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 10: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 11: FLR temp[4].x, temp[3].xxxx; 12: MOV temp[5].x, temp[4].xxxx; 13: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 14: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 15: FLR temp[4].x, temp[3].xxxx; 16: MOV temp[5].y, temp[4].xxxx; 17: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 18: MOV temp[5].z, temp[3].xxxx; 19: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 20: MOV temp[2].xyz, temp[5].xyzx; 21: TEX temp[3].xy, input[0].xyyy, 2D[0]; 22: MOV temp[1].w, temp[3].xxxx; 23: MOV temp[2].w, temp[3].yyyy; 24: MOV output[0], temp[0]; 25: MOV output[1], temp[1]; 26: MOV output[2], temp[2]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[2]; 1: TEX temp[1].xyz, input[0].xyyy, 2D[1]; 2: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 3: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 4: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 5: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 6: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 7: RSQ temp[4].x, temp[4].xxxx; 8: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 9: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 10: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 11: FLR temp[4].x, temp[3].xxxx; 12: MOV temp[5].x, temp[4].xxxx; 13: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 14: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 15: FLR temp[4].x, temp[3].xxxx; 16: MOV temp[5].y, temp[4].xxxx; 17: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 18: MOV temp[5].z, temp[3].xxxx; 19: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 20: MOV temp[2].xyz, temp[5].xyzx; 21: TEX temp[3].xy, input[0].xyyy, 2D[0]; 22: MOV temp[1].w, temp[3].xxxx; 23: MOV temp[2].w, temp[3].yyyy; 24: MOV output[0], temp[0]; 25: MOV output[1], temp[1]; 26: MOV output[2], temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[2]; 1: TEX temp[6], input[0].xyyy, 2D[1]; 2: MOV temp[1].xyz, temp[6]; 3: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 4: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 5: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 6: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 7: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 10: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 11: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 12: FLR temp[4].x, temp[3].xxxx; 13: MOV temp[5].x, temp[4].xxxx; 14: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 15: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 16: FLR temp[4].x, temp[3].xxxx; 17: MOV temp[5].y, temp[4].xxxx; 18: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 19: MOV temp[5].z, temp[3].xxxx; 20: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 21: MOV temp[2].xyz, temp[5].xyzx; 22: TEX temp[7], input[0].xyyy, 2D[0]; 23: MOV temp[3].xy, temp[7]; 24: MOV temp[1].w, temp[3].xxxx; 25: MOV temp[2].w, temp[3].yyyy; 26: MOV output[0], temp[0]; 27: MOV output[1], temp[1]; 28: MOV output[2], temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[2]; 1: TEX temp[6], input[0].xyyy, 2D[1]; 2: MOV temp[1].xyz, temp[6]; 3: ADD temp[2].xyz, temp[1].xyzz, const[0].xxxx; 4: MUL temp[3].xyz, temp[2].xxxx, input[3].xyzz; 5: MAD temp[3].xyz, temp[2].yyyy, input[2].xyzz, temp[3].xyzz; 6: MAD temp[3].xyz, temp[2].zzzz, input[4].xyzz, temp[3].xyzz; 7: DP3 temp[4].x, temp[3].xyzz, temp[3].xyzz; 8: RSQ temp[4].x, |temp[4].xxxx|; 9: MUL temp[3].xyz, temp[3].xyzz, temp[4].xxxx; 10: MAD temp[1].xyz, temp[3].xyzz, const[0].yyyy, const[0].yyyy; 11: MUL temp[3].x, input[1].xxxx, const[0].zzzz; 12: FRC temp[4].x, temp[3].xxxx; 13: ADD temp[4].x, temp[3].xxxx, -temp[4]; 14: MOV temp[5].x, temp[4].xxxx; 15: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 16: MUL temp[3].x, temp[3].xxxx, const[0].zzzz; 17: FRC temp[4].x, temp[3].xxxx; 18: ADD temp[4].x, temp[3].xxxx, -temp[4]; 19: MOV temp[5].y, temp[4].xxxx; 20: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 21: MOV temp[5].z, temp[3].xxxx; 22: MUL temp[5].xy, temp[5].xyyy, const[0].wwww; 23: MOV temp[2].xyz, temp[5].xyzx; 24: TEX temp[7], input[0].xyyy, 2D[0]; 25: MOV temp[3].xy, temp[7]; 26: MOV temp[1].w, temp[3].xxxx; 27: MOV temp[2].w, temp[3].yyyy; 28: MOV output[0], temp[0]; 29: MOV output[1], temp[1]; 30: MOV output[2], temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[2]; 1: TEX temp[6].xyz, input[0].xy__, 2D[1]; 2: MOV temp[1].xyz, temp[6].xyz_; 3: ADD temp[2].xyz, temp[1].xyz_, const[0].xxx_; 4: MUL temp[3].xyz, temp[2].xxx_, input[3].xyz_; 5: MAD temp[3].xyz, temp[2].yyy_, input[2].xyz_, temp[3].xyz_; 6: MAD temp[3].xyz, temp[2].zzz_, input[4].xyz_, temp[3].xyz_; 7: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[3].xyz, temp[3].xyz_, temp[4].xxx_; 10: MAD temp[1].xyz, temp[3].xyz_, const[0].yyy_, const[0].yyy_; 11: MUL temp[3].x, input[1].x___, const[0].z___; 12: FRC temp[4].x, temp[3].x___; 13: ADD temp[4].x, temp[3].x___, -temp[4].x___; 14: MOV temp[5].x, temp[4].x___; 15: ADD temp[3].x, temp[3].x___, -temp[4].x___; 16: MUL temp[3].x, temp[3].x___, const[0].z___; 17: FRC temp[4].x, temp[3].x___; 18: ADD temp[4].x, temp[3].x___, -temp[4].x___; 19: MOV temp[5].y, temp[4]._x__; 20: ADD temp[3].x, temp[3].x___, -temp[4].x___; 21: MOV temp[5].z, temp[3].__x_; 22: MUL temp[5].xy, temp[5].xy__, const[0].ww__; 23: MOV temp[2].xyz, temp[5].xyz_; 24: TEX temp[7].xy, input[0].xy__, 2D[0]; 25: MOV temp[3].xy, temp[7].xy__; 26: MOV temp[1].w, temp[3].___x; 27: MOV temp[2].w, temp[3].___y; 28: MOV output[0], temp[0]; 29: MOV output[1], temp[1]; 30: MOV output[2], temp[2]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[2]; 1: TEX temp[6].xyz, input[0].xy__, 2D[1]; 2: MOV temp[1].xyz, temp[6].xyz_; 3: ADD temp[2].xyz, temp[1].xyz_, const[0].xxx_; 4: MUL temp[3].xyz, temp[2].xxx_, input[3].xyz_; 5: MAD temp[3].xyz, temp[2].yyy_, input[2].xyz_, temp[3].xyz_; 6: MAD temp[3].xyz, temp[2].zzz_, input[4].xyz_, temp[3].xyz_; 7: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[3].xyz, temp[3].xyz_, temp[4].xxx_; 10: MAD temp[1].xyz, temp[3].xyz_, const[0].yyy_, const[0].yyy_; 11: MUL temp[3].x, input[1].x___, const[0].z___; 12: FRC temp[4].x, temp[3].x___; 13: ADD temp[4].x, temp[3].x___, -temp[4].x___; 14: MOV temp[5].x, temp[4].x___; 15: ADD temp[3].x, temp[3].x___, -temp[4].x___; 16: MUL temp[3].x, temp[3].x___, const[0].z___; 17: FRC temp[4].x, temp[3].x___; 18: ADD temp[4].x, temp[3].x___, -temp[4].x___; 19: MOV temp[5].y, temp[4]._x__; 20: ADD temp[3].x, temp[3].x___, -temp[4].x___; 21: MOV temp[5].z, temp[3].__x_; 22: MUL temp[5].xy, temp[5].xy__, const[0].ww__; 23: MOV temp[2].xyz, temp[5].xyz_; 24: TEX temp[7].xy, input[0].xy__, 2D[0]; 25: MOV temp[3].xy, temp[7].xy__; 26: MOV temp[1].w, temp[3].___x; 27: MOV temp[2].w, temp[3].___y; 28: MOV output[0], temp[0]; 29: MOV output[1], temp[1]; 30: MOV output[2], temp[2]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[8], input[0].xy__, 2D[2]; 1: TEX temp[9].xyz, input[0].xy__, 2D[1]; 2: MOV temp[10].xyz, temp[9].xyz_; 3: ADD temp[11].xyz, temp[10].xyz_, const[0].xxx_; 4: MUL temp[12].xyz, temp[11].xxx_, input[3].xyz_; 5: MAD temp[13].xyz, temp[11].yyy_, input[2].xyz_, temp[12].xyz_; 6: MAD temp[14].xyz, temp[11].zzz_, input[4].xyz_, temp[13].xyz_; 7: DP3 temp[15].x, temp[14].xyz_, temp[14].xyz_; 8: RSQ temp[16].x, |temp[15].x___|; 9: MUL temp[17].xyz, temp[14].xyz_, temp[16].xxx_; 10: MAD temp[18].xyz, temp[17].xyz_, const[0].yyy_, const[0].yyy_; 11: MUL temp[19].x, input[1].x___, const[0].z___; 12: FRC temp[20].x, temp[19].x___; 13: ADD temp[21].x, temp[19].x___, -temp[20].x___; 14: MOV temp[22].x, temp[21].x___; 15: ADD temp[23].x, temp[19].x___, -temp[21].x___; 16: MUL temp[24].x, temp[23].x___, const[0].z___; 17: FRC temp[25].x, temp[24].x___; 18: ADD temp[26].x, temp[24].x___, -temp[25].x___; 19: MOV temp[22].y, temp[26]._x__; 20: ADD temp[27].x, temp[24].x___, -temp[26].x___; 21: MOV temp[28].z, temp[27].__x_; 22: MUL temp[28].xy, temp[22].xy__, const[0].ww__; 23: MOV temp[29].xyz, temp[28].xyz_; 24: TEX temp[30].xy, input[0].xy__, 2D[0]; 25: MOV temp[31].xy, temp[30].xy__; 26: MOV temp[18].w, temp[31].___x; 27: MOV temp[29].w, temp[31].___y; 28: MOV output[0], temp[8]; 29: MOV output[1], temp[18]; 30: MOV output[2], temp[29]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[8], input[0].xy__, 2D[2]; 1: TEX temp[9].xyz, input[0].xy__, 2D[1]; 2: ADD temp[11].xyz, temp[9].xyz_, none.-H-H-H_; 3: MUL temp[12].xyz, temp[11].xxx_, input[3].xyz_; 4: MAD temp[13].xyz, temp[11].yyy_, input[2].xyz_, temp[12].xyz_; 5: MAD temp[14].xyz, temp[11].zzz_, input[4].xyz_, temp[13].xyz_; 6: DP3 temp[15].x, temp[14].xyz_, temp[14].xyz_; 7: RSQ temp[16].x, |temp[15].x___|; 8: MUL temp[17].xyz, temp[14].xyz_, temp[16].xxx_; 9: MAD temp[18].xyz, temp[17].xyz_, none.HHH_, none.HHH_; 10: MUL temp[19].x, input[1].x___, const[0].z___; 11: FRC temp[20].x, temp[19].x___; 12: MOV temp[22].x, (temp[19] - temp[20]).x___; 13: ADD temp[23].x, temp[19].x___, -(temp[19] - temp[20]).x___; 14: MUL temp[24].x, temp[23].x___, const[0].z___; 15: FRC temp[25].x, temp[24].x___; 16: MOV temp[22].y, (temp[24] - temp[25])._x__; 17: ADD temp[27].x, temp[24].x___, -(temp[24] - temp[25]).x___; 18: MOV temp[28].z, temp[27].__x_; 19: MUL temp[28].xy, temp[22].xy__, const[0].ww__; 20: MOV temp[29].xyz, temp[28].xyz_; 21: TEX temp[30].xy, input[0].xy__, 2D[0]; 22: MOV temp[18].w, temp[30].___x; 23: MOV temp[29].w, temp[30].___y; 24: MOV output[0], temp[8]; 25: MOV output[1], temp[18]; 26: MOV output[2], temp[29]; CONST[0] = { -0.5000 0.5000 255.0000 0.0039 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[8], input[0].xy__, 2D[2]; 1: TEX temp[9].xyz, input[0].xy__, 2D[1]; 2: ADD temp[11].xyz, temp[9].xyz_, none.-H-H-H_; 3: MUL temp[12].xyz, temp[11].xxx_, input[3].xyz_; 4: MAD temp[13].xyz, temp[11].yyy_, input[2].xyz_, temp[12].xyz_; 5: MAD temp[14].xyz, temp[11].zzz_, input[4].xyz_, temp[13].xyz_; 6: DP3 temp[15].x, temp[14].xyz_, temp[14].xyz_; 7: RSQ temp[16].x, |temp[15].x___|; 8: MUL temp[17].xyz, temp[14].xyz_, temp[16].xxx_; 9: MAD temp[18].xyz, temp[17].xyz_, none.HHH_, none.HHH_; 10: MUL temp[19].x, input[1].x___, const[0].z___; 11: FRC temp[20].x, temp[19].x___; 12: MOV temp[22].x, (temp[19] - temp[20]).x___; 13: ADD temp[23].x, temp[19].x___, -(temp[19] - temp[20]).x___; 14: MUL temp[24].x, temp[23].x___, const[0].z___; 15: FRC temp[25].x, temp[24].x___; 16: MOV temp[22].y, (temp[24] - temp[25])._x__; 17: ADD temp[27].x, temp[24].x___, -(temp[24] - temp[25]).x___; 18: MOV temp[28].z, temp[27].__x_; 19: MUL temp[28].xy, temp[22].xy__, const[0].ww__; 20: MOV temp[29].xyz, temp[28].xyz_; 21: TEX temp[30].xy, input[0].xy__, 2D[0]; 22: MOV temp[18].w, temp[30].___x; 23: MOV temp[29].w, temp[30].___y; 24: MOV output[0], temp[8]; 25: MOV output[1], temp[18]; 26: MOV output[2], temp[29]; CONST[0] = { -0.5000 0.5000 255.0000 0.0039 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[8], input[0].xy__, 2D[2]; 1: TEX temp[9].xyz, input[0].xy__, 2D[1]; 2: ADD temp[11].xyz, temp[9].xyz_, none.-H-H-H_; 3: MUL temp[12].xyz, temp[11].xxx_, input[3].xyz_; 4: MAD temp[13].xyz, temp[11].yyy_, input[2].xyz_, temp[12].xyz_; 5: MAD temp[14].xyz, temp[11].zzz_, input[4].xyz_, temp[13].xyz_; 6: DP3 temp[15].x, temp[14].xyz_, temp[14].xyz_; 7: RSQ temp[16].x, |temp[15].x___|; 8: MUL temp[17].xyz, temp[14].xyz_, temp[16].xxx_; 9: MAD temp[18].xyz, temp[17].xyz_, none.HHH_, none.HHH_; 10: MUL temp[19].x, input[1].x___, const[0].z___; 11: FRC temp[20].x, temp[19].x___; 12: MOV temp[22].x, (temp[19] - temp[20]).x___; 13: ADD temp[23].x, temp[19].x___, -(temp[19] - temp[20]).x___; 14: MUL temp[24].x, temp[23].x___, const[0].z___; 15: FRC temp[25].x, temp[24].x___; 16: MOV temp[22].y, (temp[24] - temp[25])._x__; 17: ADD temp[27].x, temp[24].x___, -(temp[24] - temp[25]).x___; 18: MOV temp[28].z, temp[27].__x_; 19: MUL temp[28].xy, temp[22].xy__, const[0].ww__; 20: MOV temp[29].xyz, temp[28].xyz_; 21: TEX temp[30].xy, input[0].xy__, 2D[0]; 22: MOV temp[18].w, temp[30].___x; 23: MOV temp[29].w, temp[30].___y; 24: MOV output[0], temp[8]; 25: MOV output[1], temp[18]; 26: MOV output[2], temp[29]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[8], input[0].xy__, 2D[2]; 1: TEX temp[9].xyz, input[0].xy__, 2D[1]; 2: src0.xyz = temp[9] MAD temp[11].xyz, src0.xyz, src0.111, -src0.HHH 3: src0.xyz = temp[11], src1.xyz = input[3] MAD temp[12].xyz, src0.xxx, src1.xyz, src0.000 4: src0.xyz = temp[11], src1.xyz = input[2], src2.xyz = temp[12] MAD temp[13].xyz, src0.yyy, src1.xyz, src2.xyz 5: src0.xyz = temp[11], src1.xyz = input[4], src2.xyz = temp[13] MAD temp[14].xyz, src0.zzz, src1.xyz, src2.xyz 6: src0.xyz = temp[14] DP3 temp[15].x, src0.xyz, src0.xyz 7: src0.xyz = temp[15] REPL_ALPHA temp[16].x RSQ, |src0.x| 8: src0.xyz = temp[14], src1.xyz = temp[16] MAD temp[17].xyz, src0.xyz, src1.xxx, src0.000 9: src0.xyz = temp[17] MAD temp[18].xyz, src0.xyz, src0.HHH, src0.HHH 10: src0.xyz = input[1], src1.xyz = const[0] MAD temp[19].x, src0.x__, src1.z__, src0.000 11: src0.xyz = temp[19] FRC temp[20].x, src0.x__ 12: src0.xyz = temp[20], src1.xyz = temp[19], srcp.xyz = (src1 - src0) MAD temp[22].x, srcp.x__, src0.111, src0.000 13: src0.xyz = temp[20], src1.xyz = temp[19], srcp.xyz = (src1 - src0) MAD temp[23].x, src1.x__, src0.111, -srcp.x__ 14: src0.xyz = temp[23], src1.xyz = const[0] MAD temp[24].x, src0.x__, src1.z__, src0.000 15: src0.xyz = temp[24] FRC temp[25].x, src0.x__ 16: src0.xyz = temp[25], src1.xyz = temp[24], srcp.xyz = (src1 - src0) MAD temp[22].y, srcp._x_, src0.111, src0.000 17: src0.xyz = temp[25], src1.xyz = temp[24], srcp.xyz = (src1 - src0) MAD temp[27].x, src1.x__, src0.111, -srcp.x__ 18: src0.xyz = temp[27] MAD temp[28].z, src0.__x, src0.111, src0.000 19: src0.xyz = temp[22], src0.w = const[0] MAD temp[28].xy, src0.xy_, src0.ww_, src0.000 20: src0.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src0.111, src0.000 21: TEX temp[30].xy, input[0].xy__, 2D[0]; 22: src0.xyz = temp[30] MAD temp[18].w, src0.x, src0.1, src0.0 23: src0.xyz = temp[30] MAD temp[29].w, src0.y, src0.1, src0.0 24: src0.xyz = temp[8], src0.w = temp[8] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 25: src0.xyz = temp[18], src0.w = temp[18] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 26: src0.xyz = temp[29], src0.w = temp[29] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[8], input[0].xy__, 2D[2]; 2: TEX temp[9].xyz, input[0].xy__, 2D[1]; 3: TEX temp[30].xy, input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 4: src0.xyz = input[1], src1.xyz = const[0], src2.xyz = temp[30] SEM_WAIT MAD temp[19].x, src0.x__, src1.z__, src0.000 MAD temp[18].w, src2.x, src0.1, src0.0 5: src0.xyz = temp[9], src1.xyz = temp[30] MAD temp[11].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[29].w, src1.y, src0.1, src0.0 6: src0.xyz = temp[19] FRC temp[20].x, src0.x__ 7: src0.xyz = temp[11], src1.xyz = input[3] MAD temp[12].xyz, src0.xxx, src1.xyz, src0.000 8: src0.xyz = temp[20], src1.xyz = temp[19], srcp.xyz = (src1 - src0) MAD temp[22].x, srcp.x__, src0.111, src0.000 9: src0.xyz = temp[20], src1.xyz = temp[19], srcp.xyz = (src1 - src0) MAD temp[23].w, src1.x, src0.1, -srcp.x 10: src0.xyz = temp[11], src1.xyz = input[2], src2.xyz = temp[12] MAD temp[13].xyz, src0.yyy, src1.xyz, src2.xyz 11: src0.xyz = temp[23], src0.w = temp[23], src1.xyz = const[0] MAD temp[24].x, src0.w__, src1.z__, src0.000 12: src0.xyz = temp[11], src1.xyz = input[4], src2.xyz = temp[13] MAD temp[14].xyz, src0.zzz, src1.xyz, src2.xyz 13: src0.xyz = temp[24] FRC temp[25].x, src0.x__ 14: src0.xyz = temp[25], src1.xyz = temp[24], src2.xyz = temp[14], srcp.xyz = (src1 - src0) DP3 temp[15].x, src2.xyz, src2.xyz MAD temp[27].w, src1.x, src0.1, -srcp.x 15: src0.xyz = temp[25], src1.xyz = temp[24], src2.xyz = temp[15], srcp.xyz = (src1 - src0) MAD temp[22].y, srcp._x_, src0.111, src0.000 RSQ temp[16].w, |src2.x| 16: src0.xyz = temp[27], src0.w = temp[27] MAD temp[28].z, src0.__w, src0.111, src0.000 17: src0.xyz = temp[14], src0.w = temp[16], src1.xyz = temp[16] MAD temp[17].xyz, src0.xyz, src0.www, src0.000 18: src0.xyz = temp[22], src0.w = const[0] MAD temp[28].xy, src0.xy_, src0.ww_, src0.000 19: src0.xyz = temp[17] MAD temp[18].xyz, src0.xyz, src0.HHH, src0.HHH 20: src0.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src0.111, src0.000 21: src0.xyz = temp[8], src0.w = temp[8] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 22: src0.xyz = temp[18], src0.w = temp[18] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 23: src0.xyz = temp[29], src0.w = temp[29] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[8], input[0].xy__, 2D[2]; 2: TEX temp[9].xyz, input[0].xy__, 2D[1]; 3: TEX temp[30].xy, input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 4: src0.xyz = input[1], src1.xyz = const[0], src2.xyz = temp[30] SEM_WAIT MAD temp[19].x, src0.x__, src1.z__, src0.000 MAD temp[18].w, src2.x, src0.1, src0.0 5: src0.xyz = temp[9], src1.xyz = temp[30] MAD temp[11].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[29].w, src1.y, src0.1, src0.0 6: src0.xyz = temp[19] FRC temp[20].x, src0.x__ 7: src0.xyz = temp[11], src1.xyz = input[3] MAD temp[12].xyz, src0.xxx, src1.xyz, src0.000 8: src0.xyz = temp[20], src1.xyz = temp[19], srcp.xyz = (src1 - src0) MAD temp[22].x, srcp.x__, src0.111, src0.000 9: src0.xyz = temp[20], src1.xyz = temp[19], srcp.xyz = (src1 - src0) MAD temp[23].w, src1.x, src0.1, -srcp.x 10: src0.xyz = temp[11], src1.xyz = input[2], src2.xyz = temp[12] MAD temp[13].xyz, src0.yyy, src1.xyz, src2.xyz 11: src0.w = temp[23], src1.xyz = const[0] MAD temp[24].x, src0.w__, src1.z__, src0.000 12: src0.xyz = temp[11], src1.xyz = input[4], src2.xyz = temp[13] MAD temp[14].xyz, src0.zzz, src1.xyz, src2.xyz 13: src0.xyz = temp[24] FRC temp[25].x, src0.x__ 14: src0.xyz = temp[25], src1.xyz = temp[24], src2.xyz = temp[14], srcp.xyz = (src1 - src0) DP3 temp[15].x, src2.xyz, src2.xyz MAD temp[27].w, src1.x, src0.1, -srcp.x 15: src0.xyz = temp[25], src1.xyz = temp[24], src2.xyz = temp[15], srcp.xyz = (src1 - src0) MAD temp[22].y, srcp._x_, src0.111, src0.000 RSQ temp[16].w, |src2.x| 16: src0.w = temp[27] MAD temp[28].z, src0.__w, src0.111, src0.000 17: src0.xyz = temp[14], src0.w = temp[16] MAD temp[17].xyz, src0.xyz, src0.www, src0.000 18: src0.xyz = temp[22], src0.w = const[0] MAD temp[28].xy, src0.xy_, src0.ww_, src0.000 19: src0.xyz = temp[17] MAD temp[18].xyz, src0.xyz, src0.HHH, src0.HHH 20: src0.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src0.111, src0.000 21: src0.xyz = temp[8], src0.w = temp[8] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 22: src0.xyz = temp[18], src0.w = temp[18] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 23: src0.xyz = temp[29], src0.w = temp[29] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[5], input[0].xy__, 2D[2]; 2: TEX temp[6].xyz, input[0].xy__, 2D[1]; 3: TEX temp[0].xy, input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 4: src0.xyz = input[1], src1.xyz = const[0], src2.xyz = temp[0] SEM_WAIT MAD temp[1].x, src0.x__, src1.z__, src0.0__ MAD temp[1].w, src2.x, src0.1, src0.0 5: src0.xyz = temp[6], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[0].w, src1.y, src0.1, src0.0 6: src0.xyz = temp[1] FRC temp[6].x, src0.x__ 7: src0.xyz = temp[0], src1.xyz = input[3] MAD temp[3].xyz, src0.xxx, src1.xyz, src0.000 8: src0.xyz = temp[6], src1.xyz = temp[1], srcp.xyz = (src1 - src0) MAD temp[7].x, srcp.x__, src0.11_, src0.00_ 9: src0.xyz = temp[6], src1.xyz = temp[1], srcp.xyz = (src1 - src0) MAD temp[2].w, src1.x, src0.1, -srcp.x 10: src0.xyz = temp[0], src1.xyz = input[2], src2.xyz = temp[3] MAD temp[1].xyz, src0.yyy, src1.xyz, src2.xyz 11: src0.w = temp[2], src1.xyz = const[0] MAD temp[2].x, src0.w__, src1.z__, src0.0__ 12: src0.xyz = temp[0], src1.xyz = input[4], src2.xyz = temp[1] MAD temp[0].xyz, src0.zzz, src1.xyz, src2.xyz 13: src0.xyz = temp[2] FRC temp[1].x, src0.x__ 14: src0.xyz = temp[1], src1.xyz = temp[2], src2.xyz = temp[0], srcp.xyz = (src1 - src0) DP3 temp[1].y, src2.xyz, src2.xyz MAD temp[2].w, src1.x, src0.1, -srcp.x 15: src0.xyz = temp[1], src1.xyz = temp[2], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD temp[7].y, srcp._x_, src0.11_, src0.00_ RSQ temp[3].w, |src2.y| 16: src0.w = temp[2] MAD temp[1].z, src0.__w, src0.111, src0.000 17: src0.xyz = temp[0], src0.w = temp[3] MAD temp[0].xyz, src0.xyz, src0.www, src0.000 18: src0.xyz = temp[7], src0.w = const[0] MAD temp[1].xy, src0.xy_, src0.ww_, src0.000 19: src0.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.HHH, src0.HHH 20: src0.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src0.111, src0.000 21: src0.xyz = temp[5], src0.w = temp[5] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 22: src0.xyz = temp[0], src0.w = temp[1] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 23: src0.xyz = temp[1], src0.w = temp[0] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 pc=51************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 19, tex_end: 2 (code_addr: 004404c0) TEX: TEX t5, t0, texture[2] (00009140) TEX t6, t0, texture[1] (00008980) TEX t0, t0, texture[0] (00008000) 0: xyz: t1 c0 t0 bias-> t1.x (00840801) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t1.xyz c0.zzz 0.0 op: 00050380 w: t0.x 1.0 0.0 op: 00040886 1: xyz: t6 t0 t0 bias-> t0.xyz (03800006) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t6.xyz 1.0 -0.5 op: 000d8a80 w: t0.y 1.0 0.0 op: 00040884 2: xyz: t1 t0 t0 bias-> t6.x (00980001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t1.xxx t1.xxx op: 04804080 w: t1.x t1.x t1.x op: 00000000 3: xyz: t0 t3 t0 bias-> t3.xyz (038c00c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t3.xyz 0.0 op: 00050201 w: t0.x t0.x t0.x op: 00000000 4: xyz: t6 t1 t0 sub-> t7.x (009c0046) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xyz 1.0 0.0 op: 00250a8f w: t6.x t6.x t6.x op: 00000000 5: xyz: t6 t1 t0 sub-> (00000046) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t6.xxx t6.xxx t6.xxx op: 00204081 w: t1.x 1.0 -srcp.x op: 000b0883 6: xyz: t0 t2 t3 bias-> t1.xyz (03843080) w: t0 t0 t0 bias-> (00000000) xyz: t0.yyy t2.xyz t3.xyz op: 00020202 w: t0.x t0.x t0.x op: 00000000 7: xyz: t0 c0 t0 bias-> t2.x (00880800) w: t2 t0 t0 bias-> (00000002) xyz: t2.www c0.zzz 0.0 op: 0005038c w: t0.x t0.x t0.x op: 00000000 8: xyz: t0 t4 t1 bias-> t0.xyz (03801100) w: t0 t0 t0 bias-> (00000000) xyz: t0.zzz t4.xyz t1.xyz op: 00020203 w: t0.x t0.x t0.x op: 00000000 9: xyz: t2 t0 t0 bias-> t1.x (00840002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t2.xxx t2.xxx op: 84804080 NOP w: t2.x t2.x t2.x op: 00000000 10: xyz: t1 t2 t0 sub-> t1.y (01040081) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t0.xyz t0.xyz t1.xxx op: 00a04408 w: t2.x 1.0 -srcp.x op: 000b0883 11: xyz: t1 t2 t1 sub-> t7.y (011c1081) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: srcp.xxx 1.0 0.0 op: 00250a90 w: |t1.y| t1.x t1.x op: 05800047 12: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t2 t0 t0 bias-> (00000002) xyz: t2.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 13: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t3 t0 t0 bias-> (00000003) xyz: t0.xyz t3.www 0.0 op: 00050600 w: t0.x t0.x t0.x op: 00000000 14: xyz: t7 t0 t0 bias-> t1.xy (01840007) w: c0 t0 t0 bias-> (00000020) xyz: t7.xyz c0.www 0.0 op: 00050600 w: t7.x t7.x t7.x op: 00000000 15: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 0.5 0.5 op: 00058b00 w: t0.x t0.x t0.x op: 00000000 16: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 17: xyz: t5 t0 t0 bias-> o0.xyz (1c000005) w: t5 t0 t0 bias-> o0.w (01000005) xyz: t5.xyz 1.0 0.0 op: 00050a80 w: t5.w 1.0 0.0 op: 00040889 18: xyz: t0 t0 t0 bias-> o1.xyz (3c000000) w: t1 t0 t0 bias-> o1.w (03000001) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t1.w 1.0 0.0 op: 00040889 19: xyz: t1 t0 t0 bias-> o2.xyz (5c000001) w: t0 t0 t0 bias-> o2.w (05000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], PERSPECTIVE DCL IN[1], GENERIC[12], PERSPECTIVE DCL IN[2], GENERIC[13], PERSPECTIVE DCL OUT[0], COLOR DCL OUT[1], COLOR[1] DCL OUT[2], COLOR[2] DCL SAMP[0] DCL SAMP[1] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL IMM[0] FLT32 { 0.5000, 255.0000, 0.0039, 0.0000} 0: TEX TEMP[0], IN[0].xyyy, SAMP[1], 2D 1: DP3 TEMP[1].x, IN[2].xyzz, IN[2].xyzz 2: RSQ TEMP[2].x, TEMP[1].xxxx 3: MUL TEMP[3].xyz, IN[2].xyzz, TEMP[2].xxxx 4: MAD TEMP[1].xyz, TEMP[3].xyzz, IMM[0].xxxx, IMM[0].xxxx 5: MUL TEMP[3].x, IN[1].xxxx, IMM[0].yyyy 6: FLR TEMP[4].x, TEMP[3].xxxx 7: MOV TEMP[5].x, TEMP[4].xxxx 8: ADD TEMP[3].x, TEMP[3].xxxx, -TEMP[4].xxxx 9: MUL TEMP[3].x, TEMP[3].xxxx, IMM[0].yyyy 10: FLR TEMP[4].x, TEMP[3].xxxx 11: MOV TEMP[5].y, TEMP[4].xxxx 12: ADD TEMP[3].x, TEMP[3].xxxx, -TEMP[4].xxxx 13: MOV TEMP[5].z, TEMP[3].xxxx 14: MUL TEMP[5].xy, TEMP[5].xyyy, IMM[0].zzzz 15: MOV TEMP[2].xyz, TEMP[5].xyzx 16: TEX TEMP[3].xy, IN[0].xyyy, SAMP[0], 2D 17: MOV TEMP[1].w, TEMP[3].xxxx 18: MOV TEMP[2].w, TEMP[3].yyyy 19: MOV OUT[0], TEMP[0] 20: MOV OUT[1], TEMP[1] 21: MOV OUT[2], TEMP[2] 22: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[1]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: TEX temp[3].xy, input[0].xyyy, 2D[0]; 17: MOV temp[1].w, temp[3].xxxx; 18: MOV temp[2].w, temp[3].yyyy; 19: MOV output[0], temp[0]; 20: MOV output[1], temp[1]; 21: MOV output[2], temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[1]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: TEX temp[3].xy, input[0].xyyy, 2D[0]; 17: MOV temp[1].w, temp[3].xxxx; 18: MOV temp[2].w, temp[3].yyyy; 19: MOV output[0], temp[0]; 20: MOV output[1], temp[1]; 21: MOV output[2], temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[1]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: TEX temp[3].xy, input[0].xyyy, 2D[0]; 17: MOV temp[1].w, temp[3].xxxx; 18: MOV temp[2].w, temp[3].yyyy; 19: MOV output[0], temp[0]; 20: MOV output[1], temp[1]; 21: MOV output[2], temp[2]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[1]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: TEX temp[3].xy, input[0].xyyy, 2D[0]; 17: MOV temp[1].w, temp[3].xxxx; 18: MOV temp[2].w, temp[3].yyyy; 19: MOV output[0], temp[0]; 20: MOV output[1], temp[1]; 21: MOV output[2], temp[2]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[1]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: TEX temp[3].xy, input[0].xyyy, 2D[0]; 17: MOV temp[1].w, temp[3].xxxx; 18: MOV temp[2].w, temp[3].yyyy; 19: MOV output[0], temp[0]; 20: MOV output[1], temp[1]; 21: MOV output[2], temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[1]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, temp[1].xxxx; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FLR temp[4].x, temp[3].xxxx; 7: MOV temp[5].x, temp[4].xxxx; 8: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 9: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 10: FLR temp[4].x, temp[3].xxxx; 11: MOV temp[5].y, temp[4].xxxx; 12: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 13: MOV temp[5].z, temp[3].xxxx; 14: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 15: MOV temp[2].xyz, temp[5].xyzx; 16: TEX temp[6], input[0].xyyy, 2D[0]; 17: MOV temp[3].xy, temp[6]; 18: MOV temp[1].w, temp[3].xxxx; 19: MOV temp[2].w, temp[3].yyyy; 20: MOV output[0], temp[0]; 21: MOV output[1], temp[1]; 22: MOV output[2], temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[1]; 1: DP3 temp[1].x, input[2].xyzz, input[2].xyzz; 2: RSQ temp[2].x, |temp[1].xxxx|; 3: MUL temp[3].xyz, input[2].xyzz, temp[2].xxxx; 4: MAD temp[1].xyz, temp[3].xyzz, const[0].xxxx, const[0].xxxx; 5: MUL temp[3].x, input[1].xxxx, const[0].yyyy; 6: FRC temp[4].x, temp[3].xxxx; 7: ADD temp[4].x, temp[3].xxxx, -temp[4]; 8: MOV temp[5].x, temp[4].xxxx; 9: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 10: MUL temp[3].x, temp[3].xxxx, const[0].yyyy; 11: FRC temp[4].x, temp[3].xxxx; 12: ADD temp[4].x, temp[3].xxxx, -temp[4]; 13: MOV temp[5].y, temp[4].xxxx; 14: ADD temp[3].x, temp[3].xxxx, -temp[4].xxxx; 15: MOV temp[5].z, temp[3].xxxx; 16: MUL temp[5].xy, temp[5].xyyy, const[0].zzzz; 17: MOV temp[2].xyz, temp[5].xyzx; 18: TEX temp[6], input[0].xyyy, 2D[0]; 19: MOV temp[3].xy, temp[6]; 20: MOV temp[1].w, temp[3].xxxx; 21: MOV temp[2].w, temp[3].yyyy; 22: MOV output[0], temp[0]; 23: MOV output[1], temp[1]; 24: MOV output[2], temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[1]; 1: DP3 temp[1].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[2].x, |temp[1].x___|; 3: MUL temp[3].xyz, input[2].xyz_, temp[2].xxx_; 4: MAD temp[1].xyz, temp[3].xyz_, const[0].xxx_, const[0].xxx_; 5: MUL temp[3].x, input[1].x___, const[0].y___; 6: FRC temp[4].x, temp[3].x___; 7: ADD temp[4].x, temp[3].x___, -temp[4].x___; 8: MOV temp[5].x, temp[4].x___; 9: ADD temp[3].x, temp[3].x___, -temp[4].x___; 10: MUL temp[3].x, temp[3].x___, const[0].y___; 11: FRC temp[4].x, temp[3].x___; 12: ADD temp[4].x, temp[3].x___, -temp[4].x___; 13: MOV temp[5].y, temp[4]._x__; 14: ADD temp[3].x, temp[3].x___, -temp[4].x___; 15: MOV temp[5].z, temp[3].__x_; 16: MUL temp[5].xy, temp[5].xy__, const[0].zz__; 17: MOV temp[2].xyz, temp[5].xyz_; 18: TEX temp[6].xy, input[0].xy__, 2D[0]; 19: MOV temp[3].xy, temp[6].xy__; 20: MOV temp[1].w, temp[3].___x; 21: MOV temp[2].w, temp[3].___y; 22: MOV output[0], temp[0]; 23: MOV output[1], temp[1]; 24: MOV output[2], temp[2]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[1]; 1: DP3 temp[1].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[2].x, |temp[1].x___|; 3: MUL temp[3].xyz, input[2].xyz_, temp[2].xxx_; 4: MAD temp[1].xyz, temp[3].xyz_, const[0].xxx_, const[0].xxx_; 5: MUL temp[3].x, input[1].x___, const[0].y___; 6: FRC temp[4].x, temp[3].x___; 7: ADD temp[4].x, temp[3].x___, -temp[4].x___; 8: MOV temp[5].x, temp[4].x___; 9: ADD temp[3].x, temp[3].x___, -temp[4].x___; 10: MUL temp[3].x, temp[3].x___, const[0].y___; 11: FRC temp[4].x, temp[3].x___; 12: ADD temp[4].x, temp[3].x___, -temp[4].x___; 13: MOV temp[5].y, temp[4]._x__; 14: ADD temp[3].x, temp[3].x___, -temp[4].x___; 15: MOV temp[5].z, temp[3].__x_; 16: MUL temp[5].xy, temp[5].xy__, const[0].zz__; 17: MOV temp[2].xyz, temp[5].xyz_; 18: TEX temp[6].xy, input[0].xy__, 2D[0]; 19: MOV temp[3].xy, temp[6].xy__; 20: MOV temp[1].w, temp[3].___x; 21: MOV temp[2].w, temp[3].___y; 22: MOV output[0], temp[0]; 23: MOV output[1], temp[1]; 24: MOV output[2], temp[2]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[7], input[0].xy__, 2D[1]; 1: DP3 temp[8].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[9].x, |temp[8].x___|; 3: MUL temp[10].xyz, input[2].xyz_, temp[9].xxx_; 4: MAD temp[11].xyz, temp[10].xyz_, const[0].xxx_, const[0].xxx_; 5: MUL temp[12].x, input[1].x___, const[0].y___; 6: FRC temp[13].x, temp[12].x___; 7: ADD temp[14].x, temp[12].x___, -temp[13].x___; 8: MOV temp[15].x, temp[14].x___; 9: ADD temp[16].x, temp[12].x___, -temp[14].x___; 10: MUL temp[17].x, temp[16].x___, const[0].y___; 11: FRC temp[18].x, temp[17].x___; 12: ADD temp[19].x, temp[17].x___, -temp[18].x___; 13: MOV temp[15].y, temp[19]._x__; 14: ADD temp[20].x, temp[17].x___, -temp[19].x___; 15: MOV temp[21].z, temp[20].__x_; 16: MUL temp[21].xy, temp[15].xy__, const[0].zz__; 17: MOV temp[22].xyz, temp[21].xyz_; 18: TEX temp[23].xy, input[0].xy__, 2D[0]; 19: MOV temp[24].xy, temp[23].xy__; 20: MOV temp[11].w, temp[24].___x; 21: MOV temp[22].w, temp[24].___y; 22: MOV output[0], temp[7]; 23: MOV output[1], temp[11]; 24: MOV output[2], temp[22]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[7], input[0].xy__, 2D[1]; 1: DP3 temp[8].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[9].x, |temp[8].x___|; 3: MUL temp[10].xyz, input[2].xyz_, temp[9].xxx_; 4: MAD temp[11].xyz, temp[10].xyz_, none.HHH_, none.HHH_; 5: MUL temp[12].x, input[1].x___, const[0].y___; 6: FRC temp[13].x, temp[12].x___; 7: MOV temp[15].x, (temp[12] - temp[13]).x___; 8: ADD temp[16].x, temp[12].x___, -(temp[12] - temp[13]).x___; 9: MUL temp[17].x, temp[16].x___, const[0].y___; 10: FRC temp[18].x, temp[17].x___; 11: MOV temp[15].y, (temp[17] - temp[18])._x__; 12: ADD temp[20].x, temp[17].x___, -(temp[17] - temp[18]).x___; 13: MOV temp[21].z, temp[20].__x_; 14: MUL temp[21].xy, temp[15].xy__, const[0].zz__; 15: MOV temp[22].xyz, temp[21].xyz_; 16: TEX temp[23].xy, input[0].xy__, 2D[0]; 17: MOV temp[11].w, temp[23].___x; 18: MOV temp[22].w, temp[23].___y; 19: MOV output[0], temp[7]; 20: MOV output[1], temp[11]; 21: MOV output[2], temp[22]; CONST[0] = { 0.5000 255.0000 0.0039 0.0000 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[7], input[0].xy__, 2D[1]; 1: DP3 temp[8].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[9].x, |temp[8].x___|; 3: MUL temp[10].xyz, input[2].xyz_, temp[9].xxx_; 4: MAD temp[11].xyz, temp[10].xyz_, none.HHH_, none.HHH_; 5: MUL temp[12].x, input[1].x___, const[0].y___; 6: FRC temp[13].x, temp[12].x___; 7: MOV temp[15].x, (temp[12] - temp[13]).x___; 8: ADD temp[16].x, temp[12].x___, -(temp[12] - temp[13]).x___; 9: MUL temp[17].x, temp[16].x___, const[0].y___; 10: FRC temp[18].x, temp[17].x___; 11: MOV temp[15].y, (temp[17] - temp[18])._x__; 12: ADD temp[20].x, temp[17].x___, -(temp[17] - temp[18]).x___; 13: MOV temp[21].z, temp[20].__x_; 14: MUL temp[21].xy, temp[15].xy__, const[0].zz__; 15: MOV temp[22].xyz, temp[21].xyz_; 16: TEX temp[23].xy, input[0].xy__, 2D[0]; 17: MOV temp[11].w, temp[23].___x; 18: MOV temp[22].w, temp[23].___y; 19: MOV output[0], temp[7]; 20: MOV output[1], temp[11]; 21: MOV output[2], temp[22]; CONST[0] = { 0.5000 255.0000 0.0039 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[7], input[0].xy__, 2D[1]; 1: DP3 temp[8].x, input[2].xyz_, input[2].xyz_; 2: RSQ temp[9].x, |temp[8].x___|; 3: MUL temp[10].xyz, input[2].xyz_, temp[9].xxx_; 4: MAD temp[11].xyz, temp[10].xyz_, none.HHH_, none.HHH_; 5: MUL temp[12].x, input[1].x___, const[0].y___; 6: FRC temp[13].x, temp[12].x___; 7: MOV temp[15].x, (temp[12] - temp[13]).x___; 8: ADD temp[16].x, temp[12].x___, -(temp[12] - temp[13]).x___; 9: MUL temp[17].x, temp[16].x___, const[0].y___; 10: FRC temp[18].x, temp[17].x___; 11: MOV temp[15].y, (temp[17] - temp[18])._x__; 12: ADD temp[20].x, temp[17].x___, -(temp[17] - temp[18]).x___; 13: MOV temp[21].z, temp[20].__x_; 14: MUL temp[21].xy, temp[15].xy__, const[0].zz__; 15: MOV temp[22].xyz, temp[21].xyz_; 16: TEX temp[23].xy, input[0].xy__, 2D[0]; 17: MOV temp[11].w, temp[23].___x; 18: MOV temp[22].w, temp[23].___y; 19: MOV output[0], temp[7]; 20: MOV output[1], temp[11]; 21: MOV output[2], temp[22]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[7], input[0].xy__, 2D[1]; 1: src0.xyz = input[2] DP3 temp[8].x, src0.xyz, src0.xyz 2: src0.xyz = temp[8] REPL_ALPHA temp[9].x RSQ, |src0.x| 3: src0.xyz = input[2], src1.xyz = temp[9] MAD temp[10].xyz, src0.xyz, src1.xxx, src0.000 4: src0.xyz = temp[10] MAD temp[11].xyz, src0.xyz, src0.HHH, src0.HHH 5: src0.xyz = input[1], src1.xyz = const[0] MAD temp[12].x, src0.x__, src1.y__, src0.000 6: src0.xyz = temp[12] FRC temp[13].x, src0.x__ 7: src0.xyz = temp[13], src1.xyz = temp[12], srcp.xyz = (src1 - src0) MAD temp[15].x, srcp.x__, src0.111, src0.000 8: src0.xyz = temp[13], src1.xyz = temp[12], srcp.xyz = (src1 - src0) MAD temp[16].x, src1.x__, src0.111, -srcp.x__ 9: src0.xyz = temp[16], src1.xyz = const[0] MAD temp[17].x, src0.x__, src1.y__, src0.000 10: src0.xyz = temp[17] FRC temp[18].x, src0.x__ 11: src0.xyz = temp[18], src1.xyz = temp[17], srcp.xyz = (src1 - src0) MAD temp[15].y, srcp._x_, src0.111, src0.000 12: src0.xyz = temp[18], src1.xyz = temp[17], srcp.xyz = (src1 - src0) MAD temp[20].x, src1.x__, src0.111, -srcp.x__ 13: src0.xyz = temp[20] MAD temp[21].z, src0.__x, src0.111, src0.000 14: src0.xyz = temp[15], src1.xyz = const[0] MAD temp[21].xy, src0.xy_, src1.zz_, src0.000 15: src0.xyz = temp[21] MAD temp[22].xyz, src0.xyz, src0.111, src0.000 16: TEX temp[23].xy, input[0].xy__, 2D[0]; 17: src0.xyz = temp[23] MAD temp[11].w, src0.x, src0.1, src0.0 18: src0.xyz = temp[23] MAD temp[22].w, src0.y, src0.1, src0.0 19: src0.xyz = temp[7], src0.w = temp[7] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 20: src0.xyz = temp[11], src0.w = temp[11] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 21: src0.xyz = temp[22], src0.w = temp[22] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[7], input[0].xy__, 2D[1]; 2: TEX temp[23].xy, input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 3: src0.xyz = input[1], src1.xyz = const[0], src2.xyz = temp[23] SEM_WAIT MAD temp[12].x, src0.x__, src1.y__, src0.000 MAD temp[22].w, src2.y, src0.1, src0.0 4: src0.xyz = input[2], src1.xyz = temp[23] DP3 temp[8].x, src0.xyz, src0.xyz MAD temp[11].w, src1.x, src0.1, src0.0 5: src0.xyz = temp[12], src1.xyz = temp[8] FRC temp[13].x, src0.x__ RSQ temp[9].w, |src1.x| 6: src0.xyz = temp[13], src1.xyz = temp[12], srcp.xyz = (src1 - src0) MAD temp[15].x, srcp.x__, src0.111, src0.000 7: src0.xyz = input[2], src0.w = temp[9], src1.xyz = temp[9] MAD temp[10].xyz, src0.xyz, src0.www, src0.000 8: src0.xyz = temp[13], src1.xyz = temp[12], src2.xyz = temp[10], srcp.xyz = (src1 - src0) MAD temp[11].xyz, src2.xyz, src0.HHH, src0.HHH MAD temp[16].w, src1.x, src0.1, -srcp.x 9: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = const[0] MAD temp[17].x, src0.w__, src1.y__, src0.000 10: src0.xyz = temp[17] FRC temp[18].x, src0.x__ 11: src0.xyz = temp[18], src1.xyz = temp[17], srcp.xyz = (src1 - src0) MAD temp[15].y, srcp._x_, src0.111, src0.000 12: src0.xyz = temp[18], src1.xyz = temp[17], srcp.xyz = (src1 - src0) MAD temp[20].w, src1.x, src0.1, -srcp.x 13: src0.xyz = temp[15], src1.xyz = const[0] MAD temp[21].xy, src0.xy_, src1.zz_, src0.000 14: src0.xyz = temp[20], src0.w = temp[20] MAD temp[21].z, src0.__w, src0.111, src0.000 15: src0.xyz = temp[21] MAD temp[22].xyz, src0.xyz, src0.111, src0.000 16: src0.xyz = temp[7], src0.w = temp[7] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 17: src0.xyz = temp[11], src0.w = temp[11] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 18: src0.xyz = temp[22], src0.w = temp[22] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[7], input[0].xy__, 2D[1]; 2: TEX temp[23].xy, input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 3: src0.xyz = input[1], src1.xyz = const[0], src2.xyz = temp[23] SEM_WAIT MAD temp[12].x, src0.x__, src1.y__, src0.000 MAD temp[22].w, src2.y, src0.1, src0.0 4: src0.xyz = input[2], src1.xyz = temp[23] DP3 temp[8].x, src0.xyz, src0.xyz MAD temp[11].w, src1.x, src0.1, src0.0 5: src0.xyz = temp[12], src1.xyz = temp[8] FRC temp[13].x, src0.x__ RSQ temp[9].w, |src1.x| 6: src0.xyz = temp[13], src1.xyz = temp[12], srcp.xyz = (src1 - src0) MAD temp[15].x, srcp.x__, src0.111, src0.000 7: src0.xyz = input[2], src0.w = temp[9] MAD temp[10].xyz, src0.xyz, src0.www, src0.000 8: src0.xyz = temp[13], src1.xyz = temp[12], src2.xyz = temp[10], srcp.xyz = (src1 - src0) MAD temp[11].xyz, src2.xyz, src0.HHH, src0.HHH MAD temp[16].w, src1.x, src0.1, -srcp.x 9: src0.w = temp[16], src1.xyz = const[0] MAD temp[17].x, src0.w__, src1.y__, src0.000 10: src0.xyz = temp[17] FRC temp[18].x, src0.x__ 11: src0.xyz = temp[18], src1.xyz = temp[17], srcp.xyz = (src1 - src0) MAD temp[15].y, srcp._x_, src0.111, src0.000 12: src0.xyz = temp[18], src1.xyz = temp[17], srcp.xyz = (src1 - src0) MAD temp[20].w, src1.x, src0.1, -srcp.x 13: src0.xyz = temp[15], src1.xyz = const[0] MAD temp[21].xy, src0.xy_, src1.zz_, src0.000 14: src0.w = temp[20] MAD temp[21].z, src0.__w, src0.111, src0.000 15: src0.xyz = temp[21] MAD temp[22].xyz, src0.xyz, src0.111, src0.000 16: src0.xyz = temp[7], src0.w = temp[7] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 17: src0.xyz = temp[11], src0.w = temp[11] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 18: src0.xyz = temp[22], src0.w = temp[22] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[3], input[0].xy__, 2D[1]; 2: TEX temp[0].xy, input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 3: src0.xyz = input[1], src1.xyz = const[0], src2.xyz = temp[0] SEM_WAIT MAD temp[1].x, src0.x__, src1.y__, src0.0__ MAD temp[1].w, src2.y, src0.1, src0.0 4: src0.xyz = input[2], src1.xyz = temp[0] DP3 temp[0].x, src0.xyz, src0.xyz MAD temp[0].w, src1.x, src0.1, src0.0 5: src0.xyz = temp[1], src1.xyz = temp[0] FRC temp[0].x, src0.x__ RSQ temp[2].w, |src1.x| 6: src0.xyz = temp[0], src1.xyz = temp[1], srcp.xyz = (src1 - src0) MAD temp[4].x, srcp.x__, src0.11_, src0.00_ 7: src0.xyz = input[2], src0.w = temp[2] MAD temp[2].xyz, src0.xyz, src0.www, src0.000 8: src0.xyz = temp[0], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD temp[0].xyz, src2.xyz, src0.HHH, src0.HHH MAD temp[2].w, src1.x, src0.1, -srcp.x 9: src0.w = temp[2], src1.xyz = const[0] MAD temp[1].x, src0.w__, src1.y__, src0.0__ 10: src0.xyz = temp[1] FRC temp[2].x, src0.x__ 11: src0.xyz = temp[2], src1.xyz = temp[1], srcp.xyz = (src1 - src0) MAD temp[4].y, srcp._x_, src0.11_, src0.00_ 12: src0.xyz = temp[2], src1.xyz = temp[1], srcp.xyz = (src1 - src0) MAD temp[2].w, src1.x, src0.1, -srcp.x 13: src0.xyz = temp[4], src1.xyz = const[0] MAD temp[1].xy, src0.xy_, src1.zz_, src0.000 14: src0.w = temp[2] MAD temp[1].z, src0.__w, src0.111, src0.000 15: src0.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src0.111, src0.000 16: src0.xyz = temp[3], src0.w = temp[3] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 17: src0.xyz = temp[0], src0.w = temp[0] MAD color[1].xyz, src0.xyz, src0.111, src0.000 MAD color[1].w, src0.w, src0.1, src0.0 18: src0.xyz = temp[1], src0.w = temp[1] MAD color[2].xyz, src0.xyz, src0.111, src0.000 MAD color[2].w, src0.w, src0.1, src0.0 pc=52************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 15, tex_end: 1 (code_addr: 004203c0) TEX: TEX t3, t0, texture[1] (000088c0) TEX t0, t0, texture[0] (00008000) 0: xyz: t1 c0 t0 bias-> t1.x (00840801) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t1.xyz c0.yyy 0.0 op: 00050300 w: t0.y 1.0 0.0 op: 00040887 1: xyz: t2 t0 t0 bias-> t0.x (00800002) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: t0.x 1.0 0.0 op: 00040883 2: xyz: t1 t0 t0 bias-> t0.x (00800001) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t1.xyz t1.xxx t1.xxx op: 84804080 NOP w: |t0.x| t1.x t1.x op: 05800043 3: xyz: t0 t1 t0 sub-> t4.x (00900040) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xyz 1.0 0.0 op: 00250a8f w: t0.x t0.x t0.x op: 00000000 4: xyz: t2 t0 t0 bias-> t2.xyz (03880002) w: t2 t0 t0 bias-> (00000002) xyz: t2.xyz t2.www 0.0 op: 00050600 w: t2.x t2.x t2.x op: 00000000 5: xyz: t0 t1 t2 sub-> t0.xyz (03802040) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t2.xyz 0.5 0.5 op: 00258b08 w: t1.x 1.0 -srcp.x op: 000b0883 6: xyz: t0 c0 t0 bias-> t1.x (00840800) w: t2 t0 t0 bias-> (00000002) xyz: t2.www c0.yyy 0.0 op: 0005030c w: t0.x t0.x t0.x op: 00000000 7: xyz: t1 t0 t0 bias-> t2.x (00880001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t1.xxx t1.xxx op: 84804080 NOP w: t1.x t1.x t1.x op: 00000000 8: xyz: t2 t1 t0 sub-> t4.y (01100042) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xxx 1.0 0.0 op: 00250a90 w: t2.x t2.x t2.x op: 00000000 9: xyz: t2 t1 t0 sub-> (00000042) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t2.xxx t2.xxx t2.xxx op: 00204081 w: t1.x 1.0 -srcp.x op: 000b0883 10: xyz: t4 c0 t0 bias-> t1.xy (01840804) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz c0.zzz 0.0 op: 00050380 w: t4.x t4.x t4.x op: 00000000 11: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t2 t0 t0 bias-> (00000002) xyz: t2.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 12: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 13: xyz: t3 t0 t0 bias-> o0.xyz (1c000003) w: t3 t0 t0 bias-> o0.w (01000003) xyz: t3.xyz 1.0 0.0 op: 00050a80 w: t3.w 1.0 0.0 op: 00040889 14: xyz: t0 t0 t0 bias-> o1.xyz (3c000000) w: t0 t0 t0 bias-> o1.w (03000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 15: xyz: t1 t0 t0 bias-> o2.xyz (5c000001) w: t1 t0 t0 bias-> o2.w (05000001) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL IN[1], GENERIC[12], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0], LOCAL 0: TEX TEMP[0], IN[0].xyyy, SAMP[0], 2D 1: MUL TEMP[0], TEMP[0], IN[1] 2: MOV OUT[0], TEMP[0] 3: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[0], temp[0], input[1]; 2: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MUL temp[2], temp[1], input[1]; 2: MOV output[0], temp[2]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MUL temp[2], temp[1], input[1]; 2: MOV output[0], temp[2]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MUL temp[2], temp[1], input[1]; 2: MOV output[0], temp[2]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MUL temp[2], temp[1], input[1]; 2: MOV output[0], temp[2]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[1], src1.w = input[1] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[2].w, src0.w, src1.w, src0.0 2: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[1], src1.w = input[1] SEM_WAIT MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[2].w, src0.w, src1.w, src0.0 3: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[1], src1.w = input[1] SEM_WAIT MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[2].w, src0.w, src1.w, src0.0 3: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[1], src1.w = input[1] SEM_WAIT MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 3: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=53************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 1, tex_end: 0 (code_addr: 00400040) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t0 t1 t0 bias-> t0.xyz (03800040) w: t0 t1 t0 bias-> t0.w (00800040) xyz: t0.xyz t1.xyz 0.0 op: 00050200 w: t0.w t1.w 0.0 op: 00040509 1: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], POSITION, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL IN[2], GENERIC[12], PERSPECTIVE DCL IN[3], GENERIC[13], PERSPECTIVE DCL IN[4], GENERIC[14], PERSPECTIVE DCL IN[5], GENERIC[15], PERSPECTIVE DCL IN[6], GENERIC[16], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL CONST[13] DCL CONST[0..8] DCL TEMP[0] DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL IMM[0] FLT32 { 1.0000, 2.0000, -1.0000, 10.0000} IMM[1] FLT32 { 0.0000, -1.0000, 0.0000, 0.0000} 0: MOV TEMP[0], IN[0] 1: MAD TEMP[0].y, IN[0], CONST[13].xxxx, CONST[13].yyyy 2: TEX TEMP[1], IN[1].xyyy, SAMP[3], 2D 3: MUL TEMP[1], TEMP[1], IN[3] 4: MOV TEMP[2].w, TEMP[1].wwww 5: ADD TEMP[3].xyz, IMM[0].xxxx, -TEMP[1].xyzz 6: ADD TEMP[4].x, IMM[0].xxxx, -CONST[8].xxxx 7: MAD TEMP[2].xyz, TEMP[3].xyzz, TEMP[4].xxxx, TEMP[1].xyzz 8: TEX TEMP[1].xyz, IN[1].xyyy, SAMP[2], 2D 9: MAD TEMP[1].xyz, TEMP[1].xyzz, IMM[0].yyyy, IMM[0].zzzz 10: MUL TEMP[3].xyz, TEMP[1].xxxx, IN[5].xyzz 11: MAD TEMP[3].xyz, TEMP[1].yyyy, IN[4].xyzz, TEMP[3].xyzz 12: MAD TEMP[1].xyz, TEMP[1].zzzz, IN[6].xyzz, TEMP[3].xyzz 13: DP3 TEMP[3].x, TEMP[1].xyzz, TEMP[1].xyzz 14: RSQ TEMP[3].x, TEMP[3].xxxx 15: MUL TEMP[1].xyz, TEMP[1].xyzz, TEMP[3].xxxx 16: RCP TEMP[3].x, IN[2].zzzz 17: MIN TEMP[3].x, TEMP[3].xxxx, IMM[0].wwww 18: MUL TEMP[3].x, CONST[6].xxxx, TEMP[3].xxxx 19: MAD TEMP[3].xy, TEMP[1].xyyy, TEMP[3].xxxx, TEMP[0].xyyy 20: TEX TEMP[3].xyz, TEMP[3].xyyy, SAMP[1], RECT 21: MUL TEMP[2].xyz, TEMP[2].xyzz, TEMP[3].xyzz 22: DP3 TEMP[3].x, IN[2].xyzz, IN[2].xyzz 23: RSQ TEMP[3].x, TEMP[3].xxxx 24: MUL TEMP[3].xyz, IN[2].xyzz, TEMP[3].xxxx 25: DP3 TEMP[5].x, TEMP[1].xyzz, TEMP[3].xyzz 26: MUL TEMP[5].xyz, TEMP[5].xxxx, TEMP[1].xyzz 27: MUL TEMP[5].xyz, IMM[0].yyyy, TEMP[5].xyzz 28: ADD TEMP[4].xyz, TEMP[3].xyzz, -TEMP[5].xyzz 29: MUL TEMP[5], CONST[2], TEMP[4].xxxx 30: MAD TEMP[5], CONST[3], TEMP[4].yyyy, TEMP[5] 31: MAD TEMP[4], CONST[4], TEMP[4].zzzz, TEMP[5] 32: ADD TEMP[4].xyz, TEMP[4], CONST[5] 33: TEX TEMP[4].xyz, TEMP[4].xyzz, SAMP[0], CUBE 34: ADD TEMP[5].x, IMM[0].xxxx, -CONST[1].xxxx 35: DP3 TEMP[3].x, -TEMP[3].xyzz, TEMP[1].xyzz 36: MAX TEMP[3].x, TEMP[3].xxxx, IMM[1].xxxx 37: ADD TEMP[3].x, IMM[0].xxxx, -TEMP[3].xxxx 38: POW TEMP[3].x, TEMP[3].xxxx, CONST[1].yyyy 39: MAD TEMP[3].x, TEMP[5].xxxx, TEMP[3].xxxx, CONST[1].xxxx 40: MAX TEMP[3].x, TEMP[3].xxxx, IMM[1].xxxx 41: MUL TEMP[3].xyz, TEMP[4].xyzz, TEMP[3].xxxx 42: MUL TEMP[3].xyz, TEMP[3].xyzz, CONST[8].xxxx 43: MAD TEMP[2].xyz, TEMP[3].xyzz, CONST[7].xxxx, TEMP[2].xyzz 44: DP3 TEMP[1].x, TEMP[1].xyzz, IMM[1].xxyy 45: ABS TEMP[1].x, TEMP[1].xxxx 46: ADD TEMP[1].x, IMM[0].xxxx, -TEMP[1].xxxx 47: POW TEMP[1].x, TEMP[1].xxxx, CONST[0].yyyy 48: MUL TEMP[1].x, TEMP[1].xxxx, CONST[0].xxxx 49: MUL TEMP[1].xyz, TEMP[4].xyzz, TEMP[1].xxxx 50: MUL TEMP[1].xyz, TEMP[1].xyzz, CONST[8].xxxx 51: MAD TEMP[2].xyz, TEMP[1].xyzz, CONST[7].xxxx, TEMP[2].xyzz 52: MOV OUT[0], TEMP[2] 53: END Fragment Program: before compilation # Radeon Compiler Program 0: RCP temp[6].w, input[0].wwww; 1: MUL temp[6].xyz, input[0], temp[6].wwww; 2: MAD temp[6].xyz, temp[6].xyz0, const[16].xyz0, const[17].xyz0; 3: MOV temp[0], temp[6]; 4: MAD temp[0].y, temp[6], const[13].xxxx, const[13].yyyy; 5: TEX temp[1], input[1].xyyy, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: MOV temp[2].w, temp[1].wwww; 8: ADD temp[3].xyz, const[14].xxxx, -temp[1].xyzz; 9: ADD temp[4].x, const[14].xxxx, -const[8].xxxx; 10: MAD temp[2].xyz, temp[3].xyzz, temp[4].xxxx, temp[1].xyzz; 11: TEX temp[1].xyz, input[1].xyyy, 2D[2]; 12: MAD temp[1].xyz, temp[1].xyzz, const[14].yyyy, const[14].zzzz; 13: MUL temp[3].xyz, temp[1].xxxx, input[5].xyzz; 14: MAD temp[3].xyz, temp[1].yyyy, input[4].xyzz, temp[3].xyzz; 15: MAD temp[1].xyz, temp[1].zzzz, input[6].xyzz, temp[3].xyzz; 16: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 17: RSQ temp[3].x, temp[3].xxxx; 18: MUL temp[1].xyz, temp[1].xyzz, temp[3].xxxx; 19: RCP temp[3].x, input[2].zzzz; 20: MIN temp[3].x, temp[3].xxxx, const[14].wwww; 21: MUL temp[3].x, const[6].xxxx, temp[3].xxxx; 22: MAD temp[3].xy, temp[1].xyyy, temp[3].xxxx, temp[0].xyyy; 23: TEX temp[3].xyz, temp[3].xyyy, RECT[1]; 24: MUL temp[2].xyz, temp[2].xyzz, temp[3].xyzz; 25: DP3 temp[3].x, input[2].xyzz, input[2].xyzz; 26: RSQ temp[3].x, temp[3].xxxx; 27: MUL temp[3].xyz, input[2].xyzz, temp[3].xxxx; 28: DP3 temp[5].x, temp[1].xyzz, temp[3].xyzz; 29: MUL temp[5].xyz, temp[5].xxxx, temp[1].xyzz; 30: MUL temp[5].xyz, const[14].yyyy, temp[5].xyzz; 31: ADD temp[4].xyz, temp[3].xyzz, -temp[5].xyzz; 32: MUL temp[5], const[2], temp[4].xxxx; 33: MAD temp[5], const[3], temp[4].yyyy, temp[5]; 34: MAD temp[4], const[4], temp[4].zzzz, temp[5]; 35: ADD temp[4].xyz, temp[4], const[5]; 36: TEX temp[4].xyz, temp[4].xyzz, CUBE[0]; 37: ADD temp[5].x, const[14].xxxx, -const[1].xxxx; 38: DP3 temp[3].x, -temp[3].xyzz, temp[1].xyzz; 39: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 40: ADD temp[3].x, const[14].xxxx, -temp[3].xxxx; 41: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 42: MAD temp[3].x, temp[5].xxxx, temp[3].xxxx, const[1].xxxx; 43: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 44: MUL temp[3].xyz, temp[4].xyzz, temp[3].xxxx; 45: MUL temp[3].xyz, temp[3].xyzz, const[8].xxxx; 46: MAD temp[2].xyz, temp[3].xyzz, const[7].xxxx, temp[2].xyzz; 47: DP3 temp[1].x, temp[1].xyzz, const[15].xxyy; 48: ABS temp[1].x, temp[1].xxxx; 49: ADD temp[1].x, const[14].xxxx, -temp[1].xxxx; 50: POW temp[1].x, temp[1].xxxx, const[0].yyyy; 51: MUL temp[1].x, temp[1].xxxx, const[0].xxxx; 52: MUL temp[1].xyz, temp[4].xyzz, temp[1].xxxx; 53: MUL temp[1].xyz, temp[1].xyzz, const[8].xxxx; 54: MAD temp[2].xyz, temp[1].xyzz, const[7].xxxx, temp[2].xyzz; 55: MOV output[0], temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: RCP temp[6].w, input[0].wwww; 1: MUL temp[6].xyz, input[0], temp[6].wwww; 2: MAD temp[6].xyz, temp[6].xyz0, const[16].xyz0, const[17].xyz0; 3: MOV temp[0], temp[6]; 4: MAD temp[0].y, temp[6], const[13].xxxx, const[13].yyyy; 5: TEX temp[1], input[1].xyyy, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: MOV temp[2].w, temp[1].wwww; 8: ADD temp[3].xyz, const[14].xxxx, -temp[1].xyzz; 9: ADD temp[4].x, const[14].xxxx, -const[8].xxxx; 10: MAD temp[2].xyz, temp[3].xyzz, temp[4].xxxx, temp[1].xyzz; 11: TEX temp[1].xyz, input[1].xyyy, 2D[2]; 12: MAD temp[1].xyz, temp[1].xyzz, const[14].yyyy, const[14].zzzz; 13: MUL temp[3].xyz, temp[1].xxxx, input[5].xyzz; 14: MAD temp[3].xyz, temp[1].yyyy, input[4].xyzz, temp[3].xyzz; 15: MAD temp[1].xyz, temp[1].zzzz, input[6].xyzz, temp[3].xyzz; 16: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 17: RSQ temp[3].x, temp[3].xxxx; 18: MUL temp[1].xyz, temp[1].xyzz, temp[3].xxxx; 19: RCP temp[3].x, input[2].zzzz; 20: MIN temp[3].x, temp[3].xxxx, const[14].wwww; 21: MUL temp[3].x, const[6].xxxx, temp[3].xxxx; 22: MAD temp[3].xy, temp[1].xyyy, temp[3].xxxx, temp[0].xyyy; 23: TEX temp[3].xyz, temp[3].xyyy, RECT[1]; 24: MUL temp[2].xyz, temp[2].xyzz, temp[3].xyzz; 25: DP3 temp[3].x, input[2].xyzz, input[2].xyzz; 26: RSQ temp[3].x, temp[3].xxxx; 27: MUL temp[3].xyz, input[2].xyzz, temp[3].xxxx; 28: DP3 temp[5].x, temp[1].xyzz, temp[3].xyzz; 29: MUL temp[5].xyz, temp[5].xxxx, temp[1].xyzz; 30: MUL temp[5].xyz, const[14].yyyy, temp[5].xyzz; 31: ADD temp[4].xyz, temp[3].xyzz, -temp[5].xyzz; 32: MUL temp[5], const[2], temp[4].xxxx; 33: MAD temp[5], const[3], temp[4].yyyy, temp[5]; 34: MAD temp[4], const[4], temp[4].zzzz, temp[5]; 35: ADD temp[4].xyz, temp[4], const[5]; 36: TEX temp[4].xyz, temp[4].xyzz, CUBE[0]; 37: ADD temp[5].x, const[14].xxxx, -const[1].xxxx; 38: DP3 temp[3].x, -temp[3].xyzz, temp[1].xyzz; 39: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 40: ADD temp[3].x, const[14].xxxx, -temp[3].xxxx; 41: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 42: MAD temp[3].x, temp[5].xxxx, temp[3].xxxx, const[1].xxxx; 43: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 44: MUL temp[3].xyz, temp[4].xyzz, temp[3].xxxx; 45: MUL temp[3].xyz, temp[3].xyzz, const[8].xxxx; 46: MAD temp[2].xyz, temp[3].xyzz, const[7].xxxx, temp[2].xyzz; 47: DP3 temp[1].x, temp[1].xyzz, const[15].xxyy; 48: ABS temp[1].x, temp[1].xxxx; 49: ADD temp[1].x, const[14].xxxx, -temp[1].xxxx; 50: POW temp[1].x, temp[1].xxxx, const[0].yyyy; 51: MUL temp[1].x, temp[1].xxxx, const[0].xxxx; 52: MUL temp[1].xyz, temp[4].xyzz, temp[1].xxxx; 53: MUL temp[1].xyz, temp[1].xyzz, const[8].xxxx; 54: MAD temp[2].xyz, temp[1].xyzz, const[7].xxxx, temp[2].xyzz; 55: MOV output[0], temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: RCP temp[6].w, input[0].wwww; 1: MUL temp[6].xyz, input[0], temp[6].wwww; 2: MAD temp[6].xyz, temp[6].xyz0, const[16].xyz0, const[17].xyz0; 3: MOV temp[0], temp[6]; 4: MAD temp[0].y, temp[6], const[13].xxxx, const[13].yyyy; 5: TEX temp[1], input[1].xyyy, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: MOV temp[2].w, temp[1].wwww; 8: ADD temp[3].xyz, const[14].xxxx, -temp[1].xyzz; 9: ADD temp[4].x, const[14].xxxx, -const[8].xxxx; 10: MAD temp[2].xyz, temp[3].xyzz, temp[4].xxxx, temp[1].xyzz; 11: TEX temp[1].xyz, input[1].xyyy, 2D[2]; 12: MAD temp[1].xyz, temp[1].xyzz, const[14].yyyy, const[14].zzzz; 13: MUL temp[3].xyz, temp[1].xxxx, input[5].xyzz; 14: MAD temp[3].xyz, temp[1].yyyy, input[4].xyzz, temp[3].xyzz; 15: MAD temp[1].xyz, temp[1].zzzz, input[6].xyzz, temp[3].xyzz; 16: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 17: RSQ temp[3].x, temp[3].xxxx; 18: MUL temp[1].xyz, temp[1].xyzz, temp[3].xxxx; 19: RCP temp[3].x, input[2].zzzz; 20: MIN temp[3].x, temp[3].xxxx, const[14].wwww; 21: MUL temp[3].x, const[6].xxxx, temp[3].xxxx; 22: MAD temp[3].xy, temp[1].xyyy, temp[3].xxxx, temp[0].xyyy; 23: TEX temp[3].xyz, temp[3].xyyy, RECT[1]; 24: MUL temp[2].xyz, temp[2].xyzz, temp[3].xyzz; 25: DP3 temp[3].x, input[2].xyzz, input[2].xyzz; 26: RSQ temp[3].x, temp[3].xxxx; 27: MUL temp[3].xyz, input[2].xyzz, temp[3].xxxx; 28: DP3 temp[5].x, temp[1].xyzz, temp[3].xyzz; 29: MUL temp[5].xyz, temp[5].xxxx, temp[1].xyzz; 30: MUL temp[5].xyz, const[14].yyyy, temp[5].xyzz; 31: ADD temp[4].xyz, temp[3].xyzz, -temp[5].xyzz; 32: MUL temp[5], const[2], temp[4].xxxx; 33: MAD temp[5], const[3], temp[4].yyyy, temp[5]; 34: MAD temp[4], const[4], temp[4].zzzz, temp[5]; 35: ADD temp[4].xyz, temp[4], const[5]; 36: TEX temp[4].xyz, temp[4].xyzz, CUBE[0]; 37: ADD temp[5].x, const[14].xxxx, -const[1].xxxx; 38: DP3 temp[3].x, -temp[3].xyzz, temp[1].xyzz; 39: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 40: ADD temp[3].x, const[14].xxxx, -temp[3].xxxx; 41: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 42: MAD temp[3].x, temp[5].xxxx, temp[3].xxxx, const[1].xxxx; 43: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 44: MUL temp[3].xyz, temp[4].xyzz, temp[3].xxxx; 45: MUL temp[3].xyz, temp[3].xyzz, const[8].xxxx; 46: MAD temp[2].xyz, temp[3].xyzz, const[7].xxxx, temp[2].xyzz; 47: DP3 temp[1].x, temp[1].xyzz, const[15].xxyy; 48: ABS temp[1].x, temp[1].xxxx; 49: ADD temp[1].x, const[14].xxxx, -temp[1].xxxx; 50: POW temp[1].x, temp[1].xxxx, const[0].yyyy; 51: MUL temp[1].x, temp[1].xxxx, const[0].xxxx; 52: MUL temp[1].xyz, temp[4].xyzz, temp[1].xxxx; 53: MUL temp[1].xyz, temp[1].xyzz, const[8].xxxx; 54: MAD temp[2].xyz, temp[1].xyzz, const[7].xxxx, temp[2].xyzz; 55: MOV output[0], temp[2]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: RCP temp[6].w, input[0].wwww; 1: MUL temp[6].xyz, input[0], temp[6].wwww; 2: MAD temp[6].xyz, temp[6].xyz0, const[16].xyz0, const[17].xyz0; 3: MOV temp[0], temp[6]; 4: MAD temp[0].y, temp[6], const[13].xxxx, const[13].yyyy; 5: TEX temp[1], input[1].xyyy, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: MOV temp[2].w, temp[1].wwww; 8: ADD temp[3].xyz, const[14].xxxx, -temp[1].xyzz; 9: ADD temp[4].x, const[14].xxxx, -const[8].xxxx; 10: MAD temp[2].xyz, temp[3].xyzz, temp[4].xxxx, temp[1].xyzz; 11: TEX temp[1].xyz, input[1].xyyy, 2D[2]; 12: MAD temp[1].xyz, temp[1].xyzz, const[14].yyyy, const[14].zzzz; 13: MUL temp[3].xyz, temp[1].xxxx, input[5].xyzz; 14: MAD temp[3].xyz, temp[1].yyyy, input[4].xyzz, temp[3].xyzz; 15: MAD temp[1].xyz, temp[1].zzzz, input[6].xyzz, temp[3].xyzz; 16: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 17: RSQ temp[3].x, temp[3].xxxx; 18: MUL temp[1].xyz, temp[1].xyzz, temp[3].xxxx; 19: RCP temp[3].x, input[2].zzzz; 20: MIN temp[3].x, temp[3].xxxx, const[14].wwww; 21: MUL temp[3].x, const[6].xxxx, temp[3].xxxx; 22: MAD temp[3].xy, temp[1].xyyy, temp[3].xxxx, temp[0].xyyy; 23: TEX temp[3].xyz, temp[3].xyyy, RECT[1]; 24: MUL temp[2].xyz, temp[2].xyzz, temp[3].xyzz; 25: DP3 temp[3].x, input[2].xyzz, input[2].xyzz; 26: RSQ temp[3].x, temp[3].xxxx; 27: MUL temp[3].xyz, input[2].xyzz, temp[3].xxxx; 28: DP3 temp[5].x, temp[1].xyzz, temp[3].xyzz; 29: MUL temp[5].xyz, temp[5].xxxx, temp[1].xyzz; 30: MUL temp[5].xyz, const[14].yyyy, temp[5].xyzz; 31: ADD temp[4].xyz, temp[3].xyzz, -temp[5].xyzz; 32: MUL temp[5], const[2], temp[4].xxxx; 33: MAD temp[5], const[3], temp[4].yyyy, temp[5]; 34: MAD temp[4], const[4], temp[4].zzzz, temp[5]; 35: ADD temp[4].xyz, temp[4], const[5]; 36: TEX temp[4].xyz, temp[4].xyzz, CUBE[0]; 37: ADD temp[5].x, const[14].xxxx, -const[1].xxxx; 38: DP3 temp[3].x, -temp[3].xyzz, temp[1].xyzz; 39: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 40: ADD temp[3].x, const[14].xxxx, -temp[3].xxxx; 41: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 42: MAD temp[3].x, temp[5].xxxx, temp[3].xxxx, const[1].xxxx; 43: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 44: MUL temp[3].xyz, temp[4].xyzz, temp[3].xxxx; 45: MUL temp[3].xyz, temp[3].xyzz, const[8].xxxx; 46: MAD temp[2].xyz, temp[3].xyzz, const[7].xxxx, temp[2].xyzz; 47: DP3 temp[1].x, temp[1].xyzz, const[15].xxyy; 48: ABS temp[1].x, temp[1].xxxx; 49: ADD temp[1].x, const[14].xxxx, -temp[1].xxxx; 50: POW temp[1].x, temp[1].xxxx, const[0].yyyy; 51: MUL temp[1].x, temp[1].xxxx, const[0].xxxx; 52: MUL temp[1].xyz, temp[4].xyzz, temp[1].xxxx; 53: MUL temp[1].xyz, temp[1].xyzz, const[8].xxxx; 54: MAD temp[2].xyz, temp[1].xyzz, const[7].xxxx, temp[2].xyzz; 55: MOV output[0], temp[2]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: RCP temp[6].w, input[0].wwww; 1: MUL temp[6].xyz, input[0], temp[6].wwww; 2: MAD temp[6].xyz, temp[6].xyz0, const[16].xyz0, const[17].xyz0; 3: MOV temp[0], temp[6]; 4: MAD temp[0].y, temp[6], const[13].xxxx, const[13].yyyy; 5: TEX temp[1], input[1].xyyy, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: MOV temp[2].w, temp[1].wwww; 8: ADD temp[3].xyz, const[14].xxxx, -temp[1].xyzz; 9: ADD temp[4].x, const[14].xxxx, -const[8].xxxx; 10: MAD temp[2].xyz, temp[3].xyzz, temp[4].xxxx, temp[1].xyzz; 11: TEX temp[1].xyz, input[1].xyyy, 2D[2]; 12: MAD temp[1].xyz, temp[1].xyzz, const[14].yyyy, const[14].zzzz; 13: MUL temp[3].xyz, temp[1].xxxx, input[5].xyzz; 14: MAD temp[3].xyz, temp[1].yyyy, input[4].xyzz, temp[3].xyzz; 15: MAD temp[1].xyz, temp[1].zzzz, input[6].xyzz, temp[3].xyzz; 16: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 17: RSQ temp[3].x, temp[3].xxxx; 18: MUL temp[1].xyz, temp[1].xyzz, temp[3].xxxx; 19: RCP temp[3].x, input[2].zzzz; 20: MIN temp[3].x, temp[3].xxxx, const[14].wwww; 21: MUL temp[3].x, const[6].xxxx, temp[3].xxxx; 22: MAD temp[3].xy, temp[1].xyyy, temp[3].xxxx, temp[0].xyyy; 23: TEX temp[3].xyz, temp[3].xyyy, RECT[1]; 24: MUL temp[2].xyz, temp[2].xyzz, temp[3].xyzz; 25: DP3 temp[3].x, input[2].xyzz, input[2].xyzz; 26: RSQ temp[3].x, temp[3].xxxx; 27: MUL temp[3].xyz, input[2].xyzz, temp[3].xxxx; 28: DP3 temp[5].x, temp[1].xyzz, temp[3].xyzz; 29: MUL temp[5].xyz, temp[5].xxxx, temp[1].xyzz; 30: MUL temp[5].xyz, const[14].yyyy, temp[5].xyzz; 31: ADD temp[4].xyz, temp[3].xyzz, -temp[5].xyzz; 32: MUL temp[5], const[2], temp[4].xxxx; 33: MAD temp[5], const[3], temp[4].yyyy, temp[5]; 34: MAD temp[4], const[4], temp[4].zzzz, temp[5]; 35: ADD temp[4].xyz, temp[4], const[5]; 36: TEX temp[4].xyz, temp[4].xyzz, CUBE[0]; 37: ADD temp[5].x, const[14].xxxx, -const[1].xxxx; 38: DP3 temp[3].x, -temp[3].xyzz, temp[1].xyzz; 39: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 40: ADD temp[3].x, const[14].xxxx, -temp[3].xxxx; 41: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 42: MAD temp[3].x, temp[5].xxxx, temp[3].xxxx, const[1].xxxx; 43: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 44: MUL temp[3].xyz, temp[4].xyzz, temp[3].xxxx; 45: MUL temp[3].xyz, temp[3].xyzz, const[8].xxxx; 46: MAD temp[2].xyz, temp[3].xyzz, const[7].xxxx, temp[2].xyzz; 47: DP3 temp[1].x, temp[1].xyzz, const[15].xxyy; 48: ABS temp[1].x, temp[1].xxxx; 49: ADD temp[1].x, const[14].xxxx, -temp[1].xxxx; 50: POW temp[1].x, temp[1].xxxx, const[0].yyyy; 51: MUL temp[1].x, temp[1].xxxx, const[0].xxxx; 52: MUL temp[1].xyz, temp[4].xyzz, temp[1].xxxx; 53: MUL temp[1].xyz, temp[1].xyzz, const[8].xxxx; 54: MAD temp[2].xyz, temp[1].xyzz, const[7].xxxx, temp[2].xyzz; 55: MOV output[0], temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: RCP temp[6].w, input[0].wwww; 1: MUL temp[6].xyz, input[0], temp[6].wwww; 2: MAD temp[6].xyz, temp[6].xyz0, const[16].xyz0, const[17].xyz0; 3: MOV temp[0], temp[6]; 4: MAD temp[0].y, temp[6], const[13].xxxx, const[13].yyyy; 5: TEX temp[1], input[1].xyyy, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: MOV temp[2].w, temp[1].wwww; 8: ADD temp[3].xyz, const[14].xxxx, -temp[1].xyzz; 9: ADD temp[4].x, const[14].xxxx, -const[8].xxxx; 10: MAD temp[2].xyz, temp[3].xyzz, temp[4].xxxx, temp[1].xyzz; 11: TEX temp[7], input[1].xyyy, 2D[2]; 12: MOV temp[1].xyz, temp[7]; 13: MAD temp[1].xyz, temp[1].xyzz, const[14].yyyy, const[14].zzzz; 14: MUL temp[3].xyz, temp[1].xxxx, input[5].xyzz; 15: MAD temp[3].xyz, temp[1].yyyy, input[4].xyzz, temp[3].xyzz; 16: MAD temp[1].xyz, temp[1].zzzz, input[6].xyzz, temp[3].xyzz; 17: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 18: RSQ temp[3].x, temp[3].xxxx; 19: MUL temp[1].xyz, temp[1].xyzz, temp[3].xxxx; 20: RCP temp[3].x, input[2].zzzz; 21: MIN temp[3].x, temp[3].xxxx, const[14].wwww; 22: MUL temp[3].x, const[6].xxxx, temp[3].xxxx; 23: MAD temp[3].xy, temp[1].xyyy, temp[3].xxxx, temp[0].xyyy; 24: MUL temp[8], temp[3].xyyy, const[18]; 25: TEX temp[9], temp[8], 2D[1]; 26: MOV temp[3].xyz, temp[9]; 27: MUL temp[2].xyz, temp[2].xyzz, temp[3].xyzz; 28: DP3 temp[3].x, input[2].xyzz, input[2].xyzz; 29: RSQ temp[3].x, temp[3].xxxx; 30: MUL temp[3].xyz, input[2].xyzz, temp[3].xxxx; 31: DP3 temp[5].x, temp[1].xyzz, temp[3].xyzz; 32: MUL temp[5].xyz, temp[5].xxxx, temp[1].xyzz; 33: MUL temp[5].xyz, const[14].yyyy, temp[5].xyzz; 34: ADD temp[4].xyz, temp[3].xyzz, -temp[5].xyzz; 35: MUL temp[5], const[2], temp[4].xxxx; 36: MAD temp[5], const[3], temp[4].yyyy, temp[5]; 37: MAD temp[4], const[4], temp[4].zzzz, temp[5]; 38: ADD temp[4].xyz, temp[4], const[5]; 39: TEX temp[10], temp[4].xyzz, CUBE[0]; 40: MOV temp[4].xyz, temp[10]; 41: ADD temp[5].x, const[14].xxxx, -const[1].xxxx; 42: DP3 temp[3].x, -temp[3].xyzz, temp[1].xyzz; 43: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 44: ADD temp[3].x, const[14].xxxx, -temp[3].xxxx; 45: POW temp[3].x, temp[3].xxxx, const[1].yyyy; 46: MAD temp[3].x, temp[5].xxxx, temp[3].xxxx, const[1].xxxx; 47: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 48: MUL temp[3].xyz, temp[4].xyzz, temp[3].xxxx; 49: MUL temp[3].xyz, temp[3].xyzz, const[8].xxxx; 50: MAD temp[2].xyz, temp[3].xyzz, const[7].xxxx, temp[2].xyzz; 51: DP3 temp[1].x, temp[1].xyzz, const[15].xxyy; 52: ABS temp[1].x, temp[1].xxxx; 53: ADD temp[1].x, const[14].xxxx, -temp[1].xxxx; 54: POW temp[1].x, temp[1].xxxx, const[0].yyyy; 55: MUL temp[1].x, temp[1].xxxx, const[0].xxxx; 56: MUL temp[1].xyz, temp[4].xyzz, temp[1].xxxx; 57: MUL temp[1].xyz, temp[1].xyzz, const[8].xxxx; 58: MAD temp[2].xyz, temp[1].xyzz, const[7].xxxx, temp[2].xyzz; 59: MOV output[0], temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: RCP temp[6].w, input[0].wwww; 1: MUL temp[6].xyz, input[0], temp[6].wwww; 2: MAD temp[6].xyz, temp[6].xyz0, const[16].xyz0, const[17].xyz0; 3: MOV temp[0], temp[6]; 4: MAD temp[0].y, temp[6], const[13].xxxx, const[13].yyyy; 5: TEX temp[1], input[1].xyyy, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: MOV temp[2].w, temp[1].wwww; 8: ADD temp[3].xyz, const[14].xxxx, -temp[1].xyzz; 9: ADD temp[4].x, const[14].xxxx, -const[8].xxxx; 10: MAD temp[2].xyz, temp[3].xyzz, temp[4].xxxx, temp[1].xyzz; 11: TEX temp[7], input[1].xyyy, 2D[2]; 12: MOV temp[1].xyz, temp[7]; 13: MAD temp[1].xyz, temp[1].xyzz, const[14].yyyy, const[14].zzzz; 14: MUL temp[3].xyz, temp[1].xxxx, input[5].xyzz; 15: MAD temp[3].xyz, temp[1].yyyy, input[4].xyzz, temp[3].xyzz; 16: MAD temp[1].xyz, temp[1].zzzz, input[6].xyzz, temp[3].xyzz; 17: DP3 temp[3].x, temp[1].xyzz, temp[1].xyzz; 18: RSQ temp[3].x, |temp[3].xxxx|; 19: MUL temp[1].xyz, temp[1].xyzz, temp[3].xxxx; 20: RCP temp[3].x, input[2].zzzz; 21: MIN temp[3].x, temp[3].xxxx, const[14].wwww; 22: MUL temp[3].x, const[6].xxxx, temp[3].xxxx; 23: MAD temp[3].xy, temp[1].xyyy, temp[3].xxxx, temp[0].xyyy; 24: MUL temp[8], temp[3].xyyy, const[18]; 25: TEX temp[9], temp[8], 2D[1]; 26: MOV temp[3].xyz, temp[9]; 27: MUL temp[2].xyz, temp[2].xyzz, temp[3].xyzz; 28: DP3 temp[3].x, input[2].xyzz, input[2].xyzz; 29: RSQ temp[3].x, |temp[3].xxxx|; 30: MUL temp[3].xyz, input[2].xyzz, temp[3].xxxx; 31: DP3 temp[5].x, temp[1].xyzz, temp[3].xyzz; 32: MUL temp[5].xyz, temp[5].xxxx, temp[1].xyzz; 33: MUL temp[5].xyz, const[14].yyyy, temp[5].xyzz; 34: ADD temp[4].xyz, temp[3].xyzz, -temp[5].xyzz; 35: MUL temp[5], const[2], temp[4].xxxx; 36: MAD temp[5], const[3], temp[4].yyyy, temp[5]; 37: MAD temp[4], const[4], temp[4].zzzz, temp[5]; 38: ADD temp[4].xyz, temp[4], const[5]; 39: TEX temp[10], temp[4].xyzz, CUBE[0]; 40: MOV temp[4].xyz, temp[10]; 41: ADD temp[5].x, const[14].xxxx, -const[1].xxxx; 42: DP3 temp[3].x, -temp[3].xyzz, temp[1].xyzz; 43: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 44: ADD temp[3].x, const[14].xxxx, -temp[3].xxxx; 45: LG2 temp[11].w, temp[3].xxxx; 46: MUL temp[11].w, temp[11].wwww, const[1].yyyy; 47: EX2 temp[3].x, temp[11].wwww; 48: MAD temp[3].x, temp[5].xxxx, temp[3].xxxx, const[1].xxxx; 49: MAX temp[3].x, temp[3].xxxx, const[15].xxxx; 50: MUL temp[3].xyz, temp[4].xyzz, temp[3].xxxx; 51: MUL temp[3].xyz, temp[3].xyzz, const[8].xxxx; 52: MAD temp[2].xyz, temp[3].xyzz, const[7].xxxx, temp[2].xyzz; 53: DP3 temp[1].x, temp[1].xyzz, const[15].xxyy; 54: MOV temp[1].x, |temp[1].xxxx|; 55: ADD temp[1].x, const[14].xxxx, -temp[1].xxxx; 56: LG2 temp[12].w, temp[1].xxxx; 57: MUL temp[12].w, temp[12].wwww, const[0].yyyy; 58: EX2 temp[1].x, temp[12].wwww; 59: MUL temp[1].x, temp[1].xxxx, const[0].xxxx; 60: MUL temp[1].xyz, temp[4].xyzz, temp[1].xxxx; 61: MUL temp[1].xyz, temp[1].xyzz, const[8].xxxx; 62: MAD temp[2].xyz, temp[1].xyzz, const[7].xxxx, temp[2].xyzz; 63: MOV output[0], temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: RCP temp[6].w, input[0].___w; 1: MUL temp[6].xy, input[0].xy__, temp[6].ww__; 2: MAD temp[6].xy, temp[6].xy__, const[16].xy__, const[17].xy__; 3: MOV temp[0].x, temp[6].x___; 4: MAD temp[0].y, temp[6]._y__, const[13]._x__, const[13]._y__; 5: TEX temp[1], input[1].xy__, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: MOV temp[2].w, temp[1].___w; 8: ADD temp[3].xyz, const[14].xxx_, -temp[1].xyz_; 9: ADD temp[4].x, const[14].x___, -const[8].x___; 10: MAD temp[2].xyz, temp[3].xyz_, temp[4].xxx_, temp[1].xyz_; 11: TEX temp[7].xyz, input[1].xy__, 2D[2]; 12: MOV temp[1].xyz, temp[7].xyz_; 13: MAD temp[1].xyz, temp[1].xyz_, const[14].yyy_, const[14].zzz_; 14: MUL temp[3].xyz, temp[1].xxx_, input[5].xyz_; 15: MAD temp[3].xyz, temp[1].yyy_, input[4].xyz_, temp[3].xyz_; 16: MAD temp[1].xyz, temp[1].zzz_, input[6].xyz_, temp[3].xyz_; 17: DP3 temp[3].x, temp[1].xyz_, temp[1].xyz_; 18: RSQ temp[3].x, |temp[3].x___|; 19: MUL temp[1].xyz, temp[1].xyz_, temp[3].xxx_; 20: RCP temp[3].x, input[2].z___; 21: MIN temp[3].x, temp[3].x___, const[14].w___; 22: MUL temp[3].x, const[6].x___, temp[3].x___; 23: MAD temp[3].xy, temp[1].xy__, temp[3].xx__, temp[0].xy__; 24: MUL temp[8].xy, temp[3].xy__, const[18].xy__; 25: TEX temp[9].xyz, temp[8].xy__, 2D[1]; 26: MOV temp[3].xyz, temp[9].xyz_; 27: MUL temp[2].xyz, temp[2].xyz_, temp[3].xyz_; 28: DP3 temp[3].x, input[2].xyz_, input[2].xyz_; 29: RSQ temp[3].x, |temp[3].x___|; 30: MUL temp[3].xyz, input[2].xyz_, temp[3].xxx_; 31: DP3 temp[5].x, temp[1].xyz_, temp[3].xyz_; 32: MUL temp[5].xyz, temp[5].xxx_, temp[1].xyz_; 33: MUL temp[5].xyz, const[14].yyy_, temp[5].xyz_; 34: ADD temp[4].xyz, temp[3].xyz_, -temp[5].xyz_; 35: MUL temp[5].xyz, const[2].xyz_, temp[4].xxx_; 36: MAD temp[5].xyz, const[3].xyz_, temp[4].yyy_, temp[5].xyz_; 37: MAD temp[4].xyz, const[4].xyz_, temp[4].zzz_, temp[5].xyz_; 38: ADD temp[4].xyz, temp[4].xyz_, const[5].xyz_; 39: TEX temp[10].xyz, temp[4].xyz_, CUBE[0]; 40: MOV temp[4].xyz, temp[10].xyz_; 41: ADD temp[5].x, const[14].x___, -const[1].x___; 42: DP3 temp[3].x, -temp[3].xyz_, temp[1].xyz_; 43: MAX temp[3].x, temp[3].x___, const[15].x___; 44: ADD temp[3].x, const[14].x___, -temp[3].x___; 45: LG2 temp[11].w, temp[3].___x; 46: MUL temp[11].w, temp[11].___w, const[1].___y; 47: EX2 temp[3].x, temp[11].w___; 48: MAD temp[3].x, temp[5].x___, temp[3].x___, const[1].x___; 49: MAX temp[3].x, temp[3].x___, const[15].x___; 50: MUL temp[3].xyz, temp[4].xyz_, temp[3].xxx_; 51: MUL temp[3].xyz, temp[3].xyz_, const[8].xxx_; 52: MAD temp[2].xyz, temp[3].xyz_, const[7].xxx_, temp[2].xyz_; 53: DP3 temp[1].x, temp[1].xyz_, const[15].xxy_; 54: MOV temp[1].x, |temp[1].x___|; 55: ADD temp[1].x, const[14].x___, -temp[1].x___; 56: LG2 temp[12].w, temp[1].___x; 57: MUL temp[12].w, temp[12].___w, const[0].___y; 58: EX2 temp[1].x, temp[12].w___; 59: MUL temp[1].x, temp[1].x___, const[0].x___; 60: MUL temp[1].xyz, temp[4].xyz_, temp[1].xxx_; 61: MUL temp[1].xyz, temp[1].xyz_, const[8].xxx_; 62: MAD temp[2].xyz, temp[1].xyz_, const[7].xxx_, temp[2].xyz_; 63: MOV output[0], temp[2]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: RCP temp[6].w, input[0].___w; 1: MUL temp[6].xy, input[0].xy__, temp[6].ww__; 2: MAD temp[6].xy, temp[6].xy__, const[16].xy__, const[17].xy__; 3: MOV temp[0].x, temp[6].x___; 4: MAD temp[0].y, temp[6]._y__, const[13]._x__, const[13]._y__; 5: TEX temp[1], input[1].xy__, 2D[3]; 6: MUL temp[1], temp[1], input[3]; 7: MOV temp[2].w, temp[1].___w; 8: ADD temp[3].xyz, const[14].xxx_, -temp[1].xyz_; 9: ADD temp[4].x, const[14].x___, -const[8].x___; 10: MAD temp[2].xyz, temp[3].xyz_, temp[4].xxx_, temp[1].xyz_; 11: TEX temp[7].xyz, input[1].xy__, 2D[2]; 12: MOV temp[1].xyz, temp[7].xyz_; 13: MAD temp[1].xyz, temp[1].xyz_, const[14].yyy_, const[14].zzz_; 14: MUL temp[3].xyz, temp[1].xxx_, input[5].xyz_; 15: MAD temp[3].xyz, temp[1].yyy_, input[4].xyz_, temp[3].xyz_; 16: MAD temp[1].xyz, temp[1].zzz_, input[6].xyz_, temp[3].xyz_; 17: DP3 temp[3].x, temp[1].xyz_, temp[1].xyz_; 18: RSQ temp[3].x, |temp[3].x___|; 19: MUL temp[1].xyz, temp[1].xyz_, temp[3].xxx_; 20: RCP temp[3].x, input[2].z___; 21: MIN temp[3].x, temp[3].x___, const[14].w___; 22: MUL temp[3].x, const[6].x___, temp[3].x___; 23: MAD temp[3].xy, temp[1].xy__, temp[3].xx__, temp[0].xy__; 24: MUL temp[8].xy, temp[3].xy__, const[18].xy__; 25: TEX temp[9].xyz, temp[8].xy__, 2D[1]; 26: MOV temp[3].xyz, temp[9].xyz_; 27: MUL temp[2].xyz, temp[2].xyz_, temp[3].xyz_; 28: DP3 temp[3].x, input[2].xyz_, input[2].xyz_; 29: RSQ temp[3].x, |temp[3].x___|; 30: MUL temp[3].xyz, input[2].xyz_, temp[3].xxx_; 31: DP3 temp[5].x, temp[1].xyz_, temp[3].xyz_; 32: MUL temp[5].xyz, temp[5].xxx_, temp[1].xyz_; 33: MUL temp[5].xyz, const[14].yyy_, temp[5].xyz_; 34: ADD temp[4].xyz, temp[3].xyz_, -temp[5].xyz_; 35: MUL temp[5].xyz, const[2].xyz_, temp[4].xxx_; 36: MAD temp[5].xyz, const[3].xyz_, temp[4].yyy_, temp[5].xyz_; 37: MAD temp[4].xyz, const[4].xyz_, temp[4].zzz_, temp[5].xyz_; 38: ADD temp[4].xyz, temp[4].xyz_, const[5].xyz_; 39: TEX temp[10].xyz, temp[4].xyz_, CUBE[0]; 40: MOV temp[4].xyz, temp[10].xyz_; 41: ADD temp[5].x, const[14].x___, -const[1].x___; 42: DP3 temp[3].x, -temp[3].xyz_, temp[1].xyz_; 43: MAX temp[3].x, temp[3].x___, const[15].x___; 44: ADD temp[3].x, const[14].x___, -temp[3].x___; 45: LG2 temp[11].w, temp[3].___x; 46: MUL temp[11].w, temp[11].___w, const[1].___y; 47: EX2 temp[3].x, temp[11].w___; 48: MAD temp[3].x, temp[5].x___, temp[3].x___, const[1].x___; 49: MAX temp[3].x, temp[3].x___, const[15].x___; 50: MUL temp[3].xyz, temp[4].xyz_, temp[3].xxx_; 51: MUL temp[3].xyz, temp[3].xyz_, const[8].xxx_; 52: MAD temp[2].xyz, temp[3].xyz_, const[7].xxx_, temp[2].xyz_; 53: DP3 temp[1].x, temp[1].xyz_, const[15].xxy_; 54: MOV temp[1].x, |temp[1].x___|; 55: ADD temp[1].x, const[14].x___, -temp[1].x___; 56: LG2 temp[12].w, temp[1].___x; 57: MUL temp[12].w, temp[12].___w, const[0].___y; 58: EX2 temp[1].x, temp[12].w___; 59: MUL temp[1].x, temp[1].x___, const[0].x___; 60: MUL temp[1].xyz, temp[4].xyz_, temp[1].xxx_; 61: MUL temp[1].xyz, temp[1].xyz_, const[8].xxx_; 62: MAD temp[2].xyz, temp[1].xyz_, const[7].xxx_, temp[2].xyz_; 63: MOV output[0], temp[2]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: RCP temp[13].w, input[0].___w; 1: MUL temp[14].xy, input[0].xy__, temp[13].ww__; 2: MAD temp[15].xy, temp[14].xy__, const[16].xy__, const[17].xy__; 3: MOV temp[16].x, temp[15].x___; 4: MAD temp[16].y, temp[15]._y__, const[13]._x__, const[13]._y__; 5: TEX temp[17], input[1].xy__, 2D[3]; 6: MUL temp[18], temp[17], input[3]; 7: MOV temp[19].w, temp[18].___w; 8: ADD temp[20].xyz, const[14].xxx_, -temp[18].xyz_; 9: ADD temp[21].x, const[14].x___, -const[8].x___; 10: MAD temp[22].xyz, temp[20].xyz_, temp[21].xxx_, temp[18].xyz_; 11: TEX temp[23].xyz, input[1].xy__, 2D[2]; 12: MOV temp[24].xyz, temp[23].xyz_; 13: MAD temp[25].xyz, temp[24].xyz_, const[14].yyy_, const[14].zzz_; 14: MUL temp[26].xyz, temp[25].xxx_, input[5].xyz_; 15: MAD temp[27].xyz, temp[25].yyy_, input[4].xyz_, temp[26].xyz_; 16: MAD temp[28].xyz, temp[25].zzz_, input[6].xyz_, temp[27].xyz_; 17: DP3 temp[29].x, temp[28].xyz_, temp[28].xyz_; 18: RSQ temp[30].x, |temp[29].x___|; 19: MUL temp[31].xyz, temp[28].xyz_, temp[30].xxx_; 20: RCP temp[32].x, input[2].z___; 21: MIN temp[33].x, temp[32].x___, const[14].w___; 22: MUL temp[34].x, const[6].x___, temp[33].x___; 23: MAD temp[35].xy, temp[31].xy__, temp[34].xx__, temp[16].xy__; 24: MUL temp[36].xy, temp[35].xy__, const[18].xy__; 25: TEX temp[37].xyz, temp[36].xy__, 2D[1]; 26: MOV temp[38].xyz, temp[37].xyz_; 27: MUL temp[39].xyz, temp[22].xyz_, temp[38].xyz_; 28: DP3 temp[40].x, input[2].xyz_, input[2].xyz_; 29: RSQ temp[41].x, |temp[40].x___|; 30: MUL temp[42].xyz, input[2].xyz_, temp[41].xxx_; 31: DP3 temp[43].x, temp[31].xyz_, temp[42].xyz_; 32: MUL temp[44].xyz, temp[43].xxx_, temp[31].xyz_; 33: MUL temp[45].xyz, const[14].yyy_, temp[44].xyz_; 34: ADD temp[46].xyz, temp[42].xyz_, -temp[45].xyz_; 35: MUL temp[47].xyz, const[2].xyz_, temp[46].xxx_; 36: MAD temp[48].xyz, const[3].xyz_, temp[46].yyy_, temp[47].xyz_; 37: MAD temp[49].xyz, const[4].xyz_, temp[46].zzz_, temp[48].xyz_; 38: ADD temp[50].xyz, temp[49].xyz_, const[5].xyz_; 39: TEX temp[51].xyz, temp[50].xyz_, CUBE[0]; 40: MOV temp[52].xyz, temp[51].xyz_; 41: ADD temp[53].x, const[14].x___, -const[1].x___; 42: DP3 temp[54].x, -temp[42].xyz_, temp[31].xyz_; 43: MAX temp[55].x, temp[54].x___, const[15].x___; 44: ADD temp[56].x, const[14].x___, -temp[55].x___; 45: LG2 temp[57].w, temp[56].___x; 46: MUL temp[58].w, temp[57].___w, const[1].___y; 47: EX2 temp[59].x, temp[58].w___; 48: MAD temp[60].x, temp[53].x___, temp[59].x___, const[1].x___; 49: MAX temp[61].x, temp[60].x___, const[15].x___; 50: MUL temp[62].xyz, temp[52].xyz_, temp[61].xxx_; 51: MUL temp[63].xyz, temp[62].xyz_, const[8].xxx_; 52: MAD temp[64].xyz, temp[63].xyz_, const[7].xxx_, temp[39].xyz_; 53: DP3 temp[65].x, temp[31].xyz_, const[15].xxy_; 54: MOV temp[66].x, |temp[65].x___|; 55: ADD temp[67].x, const[14].x___, -temp[66].x___; 56: LG2 temp[68].w, temp[67].___x; 57: MUL temp[69].w, temp[68].___w, const[0].___y; 58: EX2 temp[70].x, temp[69].w___; 59: MUL temp[71].x, temp[70].x___, const[0].x___; 60: MUL temp[72].xyz, temp[52].xyz_, temp[71].xxx_; 61: MUL temp[73].xyz, temp[72].xyz_, const[8].xxx_; 62: MAD temp[19].xyz, temp[73].xyz_, const[7].xxx_, temp[64].xyz_; 63: MOV output[0], temp[19]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: RCP temp[13].w, input[0].___w; 1: MUL temp[14].xy, input[0].xy__, temp[13].ww__; 2: MAD temp[15].xy, temp[14].xy__, const[16].xy__, const[17].xy__; 3: MOV temp[16].x, temp[15].x___; 4: MAD temp[16].y, temp[15]._y__, const[13]._x__, const[13]._y__; 5: TEX temp[17], input[1].xy__, 2D[3]; 6: MUL temp[18], temp[17], input[3]; 7: MOV temp[19].w, temp[18].___w; 8: ADD temp[20].xyz, none.111_, -temp[18].xyz_; 9: ADD temp[21].x, none.1___, -const[8].x___; 10: MAD temp[22].xyz, temp[20].xyz_, temp[21].xxx_, temp[18].xyz_; 11: TEX temp[23].xyz, input[1].xy__, 2D[2]; 12: MAD temp[25].xyz, temp[23].xyz_, const[14].yyy_, none.-1-1-1_; 13: MUL temp[26].xyz, temp[25].xxx_, input[5].xyz_; 14: MAD temp[27].xyz, temp[25].yyy_, input[4].xyz_, temp[26].xyz_; 15: MAD temp[28].xyz, temp[25].zzz_, input[6].xyz_, temp[27].xyz_; 16: DP3 temp[29].x, temp[28].xyz_, temp[28].xyz_; 17: RSQ temp[30].x, |temp[29].x___|; 18: MUL temp[31].xyz, temp[28].xyz_, temp[30].xxx_; 19: RCP temp[32].x, input[2].z___; 20: MIN temp[33].x, temp[32].x___, const[14].w___; 21: MUL temp[34].x, const[6].x___, temp[33].x___; 22: MAD temp[35].xy, temp[31].xy__, temp[34].xx__, temp[16].xy__; 23: MUL temp[36].xy, temp[35].xy__, const[18].xy__; 24: TEX temp[37].xyz, temp[36].xy__, 2D[1]; 25: MUL temp[39].xyz, temp[22].xyz_, temp[37].xyz_; 26: DP3 temp[40].x, input[2].xyz_, input[2].xyz_; 27: RSQ temp[41].x, |temp[40].x___|; 28: MUL temp[42].xyz, input[2].xyz_, temp[41].xxx_; 29: DP3 temp[43].x, temp[31].xyz_, temp[42].xyz_; 30: MUL temp[45].xyz * 2, temp[43].xxx_, temp[31].xyz_; 31: ADD temp[46].xyz, temp[42].xyz_, -temp[45].xyz_; 32: MUL temp[47].xyz, const[2].xyz_, temp[46].xxx_; 33: MAD temp[48].xyz, const[3].xyz_, temp[46].yyy_, temp[47].xyz_; 34: MAD temp[49].xyz, const[4].xyz_, temp[46].zzz_, temp[48].xyz_; 35: ADD temp[50].xyz, temp[49].xyz_, const[5].xyz_; 36: TEX temp[51].xyz, temp[50].xyz_, CUBE[0]; 37: ADD temp[53].x, none.1___, -const[1].x___; 38: DP3 temp[54].x, -temp[42].xyz_, temp[31].xyz_; 39: MAX temp[55].x, temp[54].x___, none.0___; 40: ADD temp[56].x, none.1___, -temp[55].x___; 41: LG2 temp[57].w, temp[56].___x; 42: MUL temp[58].w, temp[57].___w, const[1].___y; 43: EX2 temp[59].x, temp[58].w___; 44: MAD temp[60].x, temp[53].x___, temp[59].x___, const[1].x___; 45: MAX temp[61].x, temp[60].x___, none.0___; 46: MUL temp[62].xyz, temp[51].xyz_, temp[61].xxx_; 47: MUL temp[63].xyz, temp[62].xyz_, const[8].xxx_; 48: MAD temp[64].xyz, temp[63].xyz_, const[7].xxx_, temp[39].xyz_; 49: DP3 temp[65].x, temp[31].xyz_, none.00-1_; 50: ADD temp[67].x, none.1___, -|temp[65].x___|; 51: LG2 temp[68].w, temp[67].___x; 52: MUL temp[69].w, temp[68].___w, const[0].___y; 53: EX2 temp[70].x, temp[69].w___; 54: MUL temp[71].x, temp[70].x___, const[0].x___; 55: MUL temp[72].xyz, temp[51].xyz_, temp[71].xxx_; 56: MUL temp[73].xyz, temp[72].xyz_, const[8].xxx_; 57: MAD temp[19].xyz, temp[73].xyz_, const[7].xxx_, temp[64].xyz_; 58: MOV output[0], temp[19]; CONST[14] = { 1.0000 2.0000 -1.0000 10.0000 } CONST[15] = { 0.0000 -1.0000 0.0000 0.0000 } CONST[19] = { 0.0000 0.0000 -1.0000 0.0000 } Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: RCP temp[13].w, input[0].___w; 1: MUL temp[14].xy, input[0].xy__, temp[13].ww__; 2: MAD temp[15].xy, temp[14].xy__, const[16].xy__, const[17].xy__; 3: MOV temp[16].x, temp[15].x___; 4: MAD temp[16].y, temp[15]._y__, const[13]._x__, const[13]._y__; 5: TEX temp[17], input[1].xy__, 2D[3]; 6: MUL temp[18], temp[17], input[3]; 7: MOV temp[19].w, temp[18].___w; 8: ADD temp[20].xyz, none.111_, -temp[18].xyz_; 9: ADD temp[21].x, none.1___, -const[8].x___; 10: MAD temp[22].xyz, temp[20].xyz_, temp[21].xxx_, temp[18].xyz_; 11: TEX temp[23].xyz, input[1].xy__, 2D[2]; 12: MAD temp[25].xyz, temp[23].xyz_, const[14].yyy_, none.-1-1-1_; 13: MUL temp[26].xyz, temp[25].xxx_, input[5].xyz_; 14: MAD temp[27].xyz, temp[25].yyy_, input[4].xyz_, temp[26].xyz_; 15: MAD temp[28].xyz, temp[25].zzz_, input[6].xyz_, temp[27].xyz_; 16: DP3 temp[29].x, temp[28].xyz_, temp[28].xyz_; 17: RSQ temp[30].x, |temp[29].x___|; 18: MUL temp[31].xyz, temp[28].xyz_, temp[30].xxx_; 19: RCP temp[32].x, input[2].z___; 20: MIN temp[33].x, temp[32].x___, const[14].w___; 21: MUL temp[34].x, const[6].x___, temp[33].x___; 22: MAD temp[35].xy, temp[31].xy__, temp[34].xx__, temp[16].xy__; 23: MUL temp[36].xy, temp[35].xy__, const[18].xy__; 24: TEX temp[37].xyz, temp[36].xy__, 2D[1]; 25: MUL temp[39].xyz, temp[22].xyz_, temp[37].xyz_; 26: DP3 temp[40].x, input[2].xyz_, input[2].xyz_; 27: RSQ temp[41].x, |temp[40].x___|; 28: MUL temp[42].xyz, input[2].xyz_, temp[41].xxx_; 29: DP3 temp[43].x, temp[31].xyz_, temp[42].xyz_; 30: MUL temp[45].xyz * 2, temp[43].xxx_, temp[31].xyz_; 31: ADD temp[46].xyz, temp[42].xyz_, -temp[45].xyz_; 32: MUL temp[47].xyz, const[2].xyz_, temp[46].xxx_; 33: MAD temp[48].xyz, const[3].xyz_, temp[46].yyy_, temp[47].xyz_; 34: MAD temp[49].xyz, const[4].xyz_, temp[46].zzz_, temp[48].xyz_; 35: ADD temp[50].xyz, temp[49].xyz_, const[5].xyz_; 36: TEX temp[51].xyz, temp[50].xyz_, CUBE[0]; 37: ADD temp[53].x, none.1___, -const[1].x___; 38: DP3 temp[54].x, -temp[42].xyz_, temp[31].xyz_; 39: MAX temp[55].x, temp[54].x___, none.0___; 40: ADD temp[56].x, none.1___, -temp[55].x___; 41: LG2 temp[57].w, temp[56].___x; 42: MUL temp[58].w, temp[57].___w, const[1].___y; 43: EX2 temp[59].x, temp[58].w___; 44: MAD temp[60].x, temp[53].x___, temp[59].x___, const[1].x___; 45: MAX temp[61].x, temp[60].x___, none.0___; 46: MUL temp[62].xyz, temp[51].xyz_, temp[61].xxx_; 47: MUL temp[63].xyz, temp[62].xyz_, const[8].xxx_; 48: MAD temp[64].xyz, temp[63].xyz_, const[7].xxx_, temp[39].xyz_; 49: DP3 temp[65].x, temp[31].xyz_, const[19].xyz_; 50: ADD temp[67].x, none.1___, -|temp[65].x___|; 51: LG2 temp[68].w, temp[67].___x; 52: MUL temp[69].w, temp[68].___w, const[0].___y; 53: EX2 temp[70].x, temp[69].w___; 54: MUL temp[71].x, temp[70].x___, const[0].x___; 55: MUL temp[72].xyz, temp[51].xyz_, temp[71].xxx_; 56: MUL temp[73].xyz, temp[72].xyz_, const[8].xxx_; 57: MAD temp[19].xyz, temp[73].xyz_, const[7].xxx_, temp[64].xyz_; 58: MOV output[0], temp[19]; CONST[10] = { 1.0000 2.0000 -1.0000 10.0000 } CONST[14] = { 0.0000 0.0000 -1.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: RCP temp[13].w, input[0].___w; 1: MUL temp[14].xy, input[0].xy__, temp[13].ww__; 2: MAD temp[15].xy, temp[14].xy__, const[11].xy__, const[12].xy__; 3: MOV temp[16].x, temp[15].x___; 4: MAD temp[16].y, temp[15]._y__, const[9]._x__, const[9]._y__; 5: TEX temp[17], input[1].xy__, 2D[3]; 6: MUL temp[18], temp[17], input[3]; 7: MOV temp[19].w, temp[18].___w; 8: ADD temp[20].xyz, none.111_, -temp[18].xyz_; 9: ADD temp[21].x, none.1___, -const[8].x___; 10: MAD temp[22].xyz, temp[20].xyz_, temp[21].xxx_, temp[18].xyz_; 11: TEX temp[23].xyz, input[1].xy__, 2D[2]; 12: MAD temp[25].xyz, temp[23].xyz_, const[10].yyy_, none.-1-1-1_; 13: MUL temp[26].xyz, temp[25].xxx_, input[5].xyz_; 14: MAD temp[27].xyz, temp[25].yyy_, input[4].xyz_, temp[26].xyz_; 15: MAD temp[28].xyz, temp[25].zzz_, input[6].xyz_, temp[27].xyz_; 16: DP3 temp[29].x, temp[28].xyz_, temp[28].xyz_; 17: RSQ temp[30].x, |temp[29].x___|; 18: MUL temp[31].xyz, temp[28].xyz_, temp[30].xxx_; 19: RCP temp[32].x, input[2].z___; 20: MIN temp[33].x, temp[32].x___, const[10].w___; 21: MUL temp[34].x, const[6].x___, temp[33].x___; 22: MAD temp[35].xy, temp[31].xy__, temp[34].xx__, temp[16].xy__; 23: MUL temp[36].xy, temp[35].xy__, const[13].xy__; 24: TEX temp[37].xyz, temp[36].xy__, 2D[1]; 25: MUL temp[39].xyz, temp[22].xyz_, temp[37].xyz_; 26: DP3 temp[40].x, input[2].xyz_, input[2].xyz_; 27: RSQ temp[41].x, |temp[40].x___|; 28: MUL temp[42].xyz, input[2].xyz_, temp[41].xxx_; 29: DP3 temp[43].x, temp[31].xyz_, temp[42].xyz_; 30: MUL temp[45].xyz * 2, temp[43].xxx_, temp[31].xyz_; 31: ADD temp[46].xyz, temp[42].xyz_, -temp[45].xyz_; 32: MUL temp[47].xyz, const[2].xyz_, temp[46].xxx_; 33: MAD temp[48].xyz, const[3].xyz_, temp[46].yyy_, temp[47].xyz_; 34: MAD temp[49].xyz, const[4].xyz_, temp[46].zzz_, temp[48].xyz_; 35: ADD temp[50].xyz, temp[49].xyz_, const[5].xyz_; 36: TEX temp[51].xyz, temp[50].xyz_, CUBE[0]; 37: ADD temp[53].x, none.1___, -const[1].x___; 38: DP3 temp[54].x, -temp[42].xyz_, temp[31].xyz_; 39: MAX temp[55].x, temp[54].x___, none.0___; 40: ADD temp[56].x, none.1___, -temp[55].x___; 41: LG2 temp[57].w, temp[56].___x; 42: MUL temp[58].w, temp[57].___w, const[1].___y; 43: EX2 temp[59].x, temp[58].w___; 44: MAD temp[60].x, temp[53].x___, temp[59].x___, const[1].x___; 45: MAX temp[61].x, temp[60].x___, none.0___; 46: MUL temp[62].xyz, temp[51].xyz_, temp[61].xxx_; 47: MUL temp[63].xyz, temp[62].xyz_, const[8].xxx_; 48: MAD temp[64].xyz, temp[63].xyz_, const[7].xxx_, temp[39].xyz_; 49: DP3 temp[65].x, temp[31].xyz_, const[14].xyz_; 50: ADD temp[67].x, none.1___, -|temp[65].x___|; 51: LG2 temp[68].w, temp[67].___x; 52: MUL temp[69].w, temp[68].___w, const[0].___y; 53: EX2 temp[70].x, temp[69].w___; 54: MUL temp[71].x, temp[70].x___, const[0].x___; 55: MUL temp[72].xyz, temp[51].xyz_, temp[71].xxx_; 56: MUL temp[73].xyz, temp[72].xyz_, const[8].xxx_; 57: MAD temp[19].xyz, temp[73].xyz_, const[7].xxx_, temp[64].xyz_; 58: MOV output[0], temp[19]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[13].w, src0.w 1: src0.xyz = input[0], src0.w = temp[13] MAD temp[14].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[14], src1.xyz = const[11], src2.xyz = const[12] MAD temp[15].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[15] MAD temp[16].x, src0.x__, src0.111, src0.000 4: src0.xyz = temp[15], src1.xyz = const[9] MAD temp[16].y, src0._y_, src1._x_, src1._y_ 5: TEX temp[17], input[1].xy__, 2D[3]; 6: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = input[3], src1.w = input[3] MAD temp[18].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[18].w, src0.w, src1.w, src0.0 7: src0.w = temp[18] MAD temp[19].w, src0.w, src0.1, src0.0 8: src0.xyz = temp[18] MAD temp[20].xyz, src0.111, src0.111, -src0.xyz 9: src0.xyz = const[8] MAD temp[21].x, src0.1__, src0.111, -src0.x__ 10: src0.xyz = temp[20], src1.xyz = temp[21], src2.xyz = temp[18] MAD temp[22].xyz, src0.xyz, src1.xxx, src2.xyz 11: TEX temp[23].xyz, input[1].xy__, 2D[2]; 12: src0.xyz = temp[23], src1.xyz = const[10] MAD temp[25].xyz, src0.xyz, src1.yyy, -src0.111 13: src0.xyz = temp[25], src1.xyz = input[5] MAD temp[26].xyz, src0.xxx, src1.xyz, src0.000 14: src0.xyz = temp[25], src1.xyz = input[4], src2.xyz = temp[26] MAD temp[27].xyz, src0.yyy, src1.xyz, src2.xyz 15: src0.xyz = temp[25], src1.xyz = input[6], src2.xyz = temp[27] MAD temp[28].xyz, src0.zzz, src1.xyz, src2.xyz 16: src0.xyz = temp[28] DP3 temp[29].x, src0.xyz, src0.xyz 17: src0.xyz = temp[29] REPL_ALPHA temp[30].x RSQ, |src0.x| 18: src0.xyz = temp[28], src1.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.xxx, src0.000 19: src0.xyz = input[2] REPL_ALPHA temp[32].x RCP, src0.z 20: src0.xyz = temp[32], src0.w = const[10] MIN temp[33].x, src0.x__, src0.w__ 21: src0.xyz = const[6], src1.xyz = temp[33] MAD temp[34].x, src0.x__, src1.x__, src0.000 22: src0.xyz = temp[31], src1.xyz = temp[34], src2.xyz = temp[16] MAD temp[35].xy, src0.xy_, src1.xx_, src2.xy_ 23: src0.xyz = temp[35], src1.xyz = const[13] MAD temp[36].xy, src0.xy_, src1.xy_, src0.000 24: TEX temp[37].xyz, temp[36].xy__, 2D[1]; 25: src0.xyz = temp[22], src1.xyz = temp[37] MAD temp[39].xyz, src0.xyz, src1.xyz, src0.000 26: src0.xyz = input[2] DP3 temp[40].x, src0.xyz, src0.xyz 27: src0.xyz = temp[40] REPL_ALPHA temp[41].x RSQ, |src0.x| 28: src0.xyz = input[2], src1.xyz = temp[41] MAD temp[42].xyz, src0.xyz, src1.xxx, src0.000 29: src0.xyz = temp[31], src1.xyz = temp[42] DP3 temp[43].x, src0.xyz, src1.xyz 30: src0.xyz = temp[43], src1.xyz = temp[31] MAD temp[45].xyz * 2, src0.xxx, src1.xyz, src0.000 31: src0.xyz = temp[42], src1.xyz = temp[45] MAD temp[46].xyz, src0.xyz, src0.111, -src1.xyz 32: src0.xyz = const[2], src1.xyz = temp[46] MAD temp[47].xyz, src0.xyz, src1.xxx, src0.000 33: src0.xyz = const[3], src1.xyz = temp[46], src2.xyz = temp[47] MAD temp[48].xyz, src0.xyz, src1.yyy, src2.xyz 34: src0.xyz = const[4], src1.xyz = temp[46], src2.xyz = temp[48] MAD temp[49].xyz, src0.xyz, src1.zzz, src2.xyz 35: src0.xyz = temp[49], src1.xyz = const[5] MAD temp[50].xyz, src0.xyz, src0.111, src1.xyz 36: TEX temp[51].xyz, temp[50].xyz_, CUBE[0]; 37: src0.xyz = const[1] MAD temp[53].x, src0.1__, src0.111, -src0.x__ 38: src0.xyz = temp[42], src1.xyz = temp[31] DP3 temp[54].x, -src0.xyz, src1.xyz 39: src0.xyz = temp[54] MAX temp[55].x, src0.x__, src0.0__ 40: src0.xyz = temp[55] MAD temp[56].x, src0.1__, src0.111, -src0.x__ 41: src0.xyz = temp[56] LG2 temp[57].w, src0.x 42: src0.xyz = const[1], src0.w = temp[57] MAD temp[58].w, src0.w, src0.y, src0.0 43: src0.w = temp[58] REPL_ALPHA temp[59].x EX2, src0.w 44: src0.xyz = temp[53], src1.xyz = temp[59], src2.xyz = const[1] MAD temp[60].x, src0.x__, src1.x__, src2.x__ 45: src0.xyz = temp[60] MAX temp[61].x, src0.x__, src0.0__ 46: src0.xyz = temp[51], src1.xyz = temp[61] MAD temp[62].xyz, src0.xyz, src1.xxx, src0.000 47: src0.xyz = temp[62], src1.xyz = const[8] MAD temp[63].xyz, src0.xyz, src1.xxx, src0.000 48: src0.xyz = temp[63], src1.xyz = const[7], src2.xyz = temp[39] MAD temp[64].xyz, src0.xyz, src1.xxx, src2.xyz 49: src0.xyz = temp[31], src1.xyz = const[14] DP3 temp[65].x, src0.xyz, src1.xyz 50: src0.xyz = temp[65] MAD temp[67].x, src0.1__, |src0.111|, -|src0.x__| 51: src0.xyz = temp[67] LG2 temp[68].w, src0.x 52: src0.xyz = const[0], src0.w = temp[68] MAD temp[69].w, src0.w, src0.y, src0.0 53: src0.w = temp[69] REPL_ALPHA temp[70].x EX2, src0.w 54: src0.xyz = temp[70], src1.xyz = const[0] MAD temp[71].x, src0.x__, src1.x__, src0.000 55: src0.xyz = temp[51], src1.xyz = temp[71] MAD temp[72].xyz, src0.xyz, src1.xxx, src0.000 56: src0.xyz = temp[72], src1.xyz = const[8] MAD temp[73].xyz, src0.xyz, src1.xxx, src0.000 57: src0.xyz = temp[73], src1.xyz = const[7], src2.xyz = temp[64] MAD temp[19].xyz, src0.xyz, src1.xxx, src2.xyz 58: src0.xyz = temp[19], src0.w = temp[19] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[2] DP3 temp[40].x, src0.xyz, src0.xyz RCP temp[32].w, src0.z 1: src0.xyz = const[1], src1.xyz = temp[40] MAD temp[53].x, src0.1__, src0.111, -src0.x__ RSQ temp[41].w, |src1.x| 2: src0.xyz = input[2], src0.w = temp[41], src1.xyz = temp[41], src1.w = temp[32], src2.w = const[10] MAD temp[42].xyz, src0.xyz, src0.www, src0.000 MIN temp[33].w, src1.w, src2.w 3: src0.xyz = const[8], src0.w = input[0] MAD temp[21].x, src0.1__, src0.111, -src0.x__ RCP temp[13].w, src0.w 4: src0.xyz = input[0], src0.w = temp[13], src1.xyz = const[6], src1.w = temp[33] MAD temp[14].xy, src0.xy_, src0.ww_, src0.000 MAD temp[34].w, src1.x, src1.w, src0.0 5: src0.xyz = temp[14], src1.xyz = const[11], src2.xyz = const[12] MAD temp[15].xy, src0.xy_, src1.xy_, src2.xy_ 6: src0.xyz = temp[15], src1.xyz = const[9] MAD temp[16].y, src0._y_, src1._x_, src1._y_ 7: src0.xyz = temp[15] MAD temp[16].x, src0.x__, src0.111, src0.000 8: BEGIN_TEX; 9: TEX temp[17], input[1].xy__, 2D[3]; 10: TEX temp[23].xyz, input[1].xy__, 2D[2] SEM_WAIT SEM_ACQUIRE; 11: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = input[3], src1.w = input[3] SEM_WAIT MAD temp[18].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[18].w, src0.w, src1.w, src0.0 12: src0.xyz = temp[23], src0.w = temp[18], src1.xyz = const[10] MAD temp[25].xyz, src0.xyz, src1.yyy, -src0.111 MAD temp[19].w, src0.w, src0.1, src0.0 13: src0.xyz = temp[18] MAD temp[20].xyz, src0.111, src0.111, -src0.xyz 14: src0.xyz = temp[25], src1.xyz = input[5] MAD temp[26].xyz, src0.xxx, src1.xyz, src0.000 15: src0.xyz = temp[20], src1.xyz = temp[21], src2.xyz = temp[18] MAD temp[22].xyz, src0.xyz, src1.xxx, src2.xyz 16: src0.xyz = temp[25], src1.xyz = input[4], src2.xyz = temp[26] MAD temp[27].xyz, src0.yyy, src1.xyz, src2.xyz 17: src0.xyz = temp[25], src1.xyz = input[6], src2.xyz = temp[27] MAD temp[28].xyz, src0.zzz, src1.xyz, src2.xyz 18: src0.xyz = temp[28] DP3 temp[29].x, src0.xyz, src0.xyz 19: src0.xyz = temp[29] REPL_ALPHA temp[30].x RSQ, |src0.x| 20: src0.xyz = temp[28], src1.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.xxx, src0.000 21: src0.xyz = temp[31], src0.w = temp[34], src1.xyz = temp[34], src2.xyz = temp[16] MAD temp[35].xy, src0.xy_, src0.ww_, src2.xy_ 22: src0.xyz = temp[31], src1.xyz = const[14] DP3 temp[65].x, src0.xyz, src1.xyz 23: src0.xyz = temp[42], src1.xyz = temp[31], src2.xyz = temp[65] DP3 temp[54].x, -src0.xyz, src1.xyz MAD temp[67].w, src0.1, |src0.1|, -|src2.x| 24: src0.xyz = temp[31], src0.w = temp[67], src1.xyz = temp[42] DP3 temp[43].x, src0.xyz, src1.xyz LG2 temp[68].w, src0.w 25: src0.xyz = temp[35], src1.xyz = const[13], src2.xyz = temp[54] MAD temp[36].xy, src0.xy_, src1.xy_, src0.000 MAX temp[55].w, src2.x, src0.0 26: src0.xyz = temp[43], src0.w = temp[68], src1.xyz = temp[31], src2.xyz = const[0] MAD temp[45].xyz * 2, src0.xxx, src1.xyz, src0.000 MAD temp[69].w, src0.w, src2.y, src0.0 27: src0.xyz = temp[42], src0.w = temp[55], src1.xyz = temp[45] MAD temp[46].xyz, src0.xyz, src0.111, -src1.xyz MAD temp[56].w, src0.1, src0.1, -src0.w 28: src0.xyz = const[2], src0.w = temp[56], src1.xyz = temp[46] MAD temp[47].xyz, src0.xyz, src1.xxx, src0.000 LG2 temp[57].w, src0.w 29: src0.xyz = const[3], src0.w = temp[69], src1.xyz = temp[46], src2.xyz = temp[47] MAD temp[48].xyz, src0.xyz, src1.yyy, src2.xyz EX2 temp[70].w, src0.w 30: src0.xyz = temp[70], src0.w = temp[70], src1.xyz = const[0], src1.w = temp[57], src2.xyz = const[1] MAD temp[71].x, src0.w__, src1.x__, src0.000 MAD temp[58].w, src1.w, src2.y, src0.0 31: src0.xyz = const[4], src1.xyz = temp[46], src2.xyz = temp[48] MAD temp[49].xyz, src0.xyz, src1.zzz, src2.xyz 32: src0.w = temp[58] REPL_ALPHA temp[59].x EX2, src0.w 33: src0.xyz = temp[49], src1.xyz = const[5] MAD temp[50].xyz, src0.xyz, src0.111, src1.xyz 34: src0.xyz = temp[53], src1.xyz = temp[59], src2.xyz = const[1] MAD temp[60].w, src0.x, src1.x, src2.x 35: src0.xyz = temp[60], src0.w = temp[60] MAX temp[61].x, src0.w__, src0.0__ 36: BEGIN_TEX; 37: TEX temp[37].xyz, temp[36].xy__, 2D[1]; 38: TEX temp[51].xyz, temp[50].xyz_, CUBE[0] SEM_WAIT SEM_ACQUIRE; 39: src0.xyz = temp[22], src1.xyz = temp[37] SEM_WAIT MAD temp[39].xyz, src0.xyz, src1.xyz, src0.000 40: src0.xyz = temp[51], src1.xyz = temp[71] MAD temp[72].xyz, src0.xyz, src1.xxx, src0.000 41: src0.xyz = temp[51], src1.xyz = temp[61] MAD temp[62].xyz, src0.xyz, src1.xxx, src0.000 42: src0.xyz = temp[72], src1.xyz = const[8] MAD temp[73].xyz, src0.xyz, src1.xxx, src0.000 43: src0.xyz = temp[62], src1.xyz = const[8] MAD temp[63].xyz, src0.xyz, src1.xxx, src0.000 44: src0.xyz = temp[63], src1.xyz = const[7], src2.xyz = temp[39] MAD temp[64].xyz, src0.xyz, src1.xxx, src2.xyz 45: src0.xyz = temp[73], src1.xyz = const[7], src2.xyz = temp[64] MAD temp[19].xyz, src0.xyz, src1.xxx, src2.xyz 46: src0.xyz = temp[19], src0.w = temp[19] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[2] DP3 temp[40].x, src0.xyz, src0.xyz RCP temp[32].w, src0.z 1: src0.xyz = const[1], src1.xyz = temp[40] MAD temp[53].x, src0.1__, src0.111, -src0.x__ RSQ temp[41].w, |src1.x| 2: src0.xyz = input[2], src0.w = temp[41], src1.w = temp[32], src2.w = const[10] MAD temp[42].xyz, src0.xyz, src0.www, src0.000 MIN temp[33].w, src1.w, src2.w 3: src0.xyz = const[8], src0.w = input[0] MAD temp[21].x, src0.1__, src0.111, -src0.x__ RCP temp[13].w, src0.w 4: src0.xyz = input[0], src0.w = temp[13], src1.xyz = const[6], src1.w = temp[33] MAD temp[14].xy, src0.xy_, src0.ww_, src0.000 MAD temp[34].w, src1.x, src1.w, src0.0 5: src0.xyz = temp[14], src1.xyz = const[11], src2.xyz = const[12] MAD temp[15].xy, src0.xy_, src1.xy_, src2.xy_ 6: src0.xyz = temp[15], src1.xyz = const[9] MAD temp[16].y, src0._y_, src1._x_, src1._y_ 7: src0.xyz = temp[15] MAD temp[16].x, src0.x__, src0.111, src0.000 8: BEGIN_TEX; 9: TEX temp[17], input[1].xy__, 2D[3]; 10: TEX temp[23].xyz, input[1].xy__, 2D[2] SEM_WAIT SEM_ACQUIRE; 11: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = input[3], src1.w = input[3] SEM_WAIT MAD temp[18].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[18].w, src0.w, src1.w, src0.0 12: src0.xyz = temp[23], src0.w = temp[18], src1.xyz = const[10] MAD temp[25].xyz, src0.xyz, src1.yyy, -src0.111 MAD temp[19].w, src0.w, src0.1, src0.0 13: src0.xyz = temp[18] MAD temp[20].xyz, src0.111, src0.111, -src0.xyz 14: src0.xyz = temp[25], src1.xyz = input[5] MAD temp[26].xyz, src0.xxx, src1.xyz, src0.000 15: src0.xyz = temp[20], src1.xyz = temp[21], src2.xyz = temp[18] MAD temp[22].xyz, src0.xyz, src1.xxx, src2.xyz 16: src0.xyz = temp[25], src1.xyz = input[4], src2.xyz = temp[26] MAD temp[27].xyz, src0.yyy, src1.xyz, src2.xyz 17: src0.xyz = temp[25], src1.xyz = input[6], src2.xyz = temp[27] MAD temp[28].xyz, src0.zzz, src1.xyz, src2.xyz 18: src0.xyz = temp[28] DP3 temp[29].x, src0.xyz, src0.xyz 19: src0.xyz = temp[29] REPL_ALPHA temp[30].x RSQ, |src0.x| 20: src0.xyz = temp[28], src1.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.xxx, src0.000 21: src0.xyz = temp[31], src0.w = temp[34], src2.xyz = temp[16] MAD temp[35].xy, src0.xy_, src0.ww_, src2.xy_ 22: src0.xyz = temp[31], src1.xyz = const[14] DP3 temp[65].x, src0.xyz, src1.xyz 23: src0.xyz = temp[42], src1.xyz = temp[31], src2.xyz = temp[65] DP3 temp[54].x, -src0.xyz, src1.xyz MAD temp[67].w, src0.1, |src0.1|, -|src2.x| 24: src0.xyz = temp[31], src0.w = temp[67], src1.xyz = temp[42] DP3 temp[43].x, src0.xyz, src1.xyz LG2 temp[68].w, src0.w 25: src0.xyz = temp[35], src1.xyz = const[13], src2.xyz = temp[54] MAD temp[36].xy, src0.xy_, src1.xy_, src0.000 MAX temp[55].w, src2.x, src0.0 26: src0.xyz = temp[43], src0.w = temp[68], src1.xyz = temp[31], src2.xyz = const[0] MAD temp[45].xyz * 2, src0.xxx, src1.xyz, src0.000 MAD temp[69].w, src0.w, src2.y, src0.0 27: src0.xyz = temp[42], src0.w = temp[55], src1.xyz = temp[45] MAD temp[46].xyz, src0.xyz, src0.111, -src1.xyz MAD temp[56].w, src0.1, src0.1, -src0.w 28: src0.xyz = const[2], src0.w = temp[56], src1.xyz = temp[46] MAD temp[47].xyz, src0.xyz, src1.xxx, src0.000 LG2 temp[57].w, src0.w 29: src0.xyz = const[3], src0.w = temp[69], src1.xyz = temp[46], src2.xyz = temp[47] MAD temp[48].xyz, src0.xyz, src1.yyy, src2.xyz EX2 temp[70].w, src0.w 30: src0.w = temp[70], src1.xyz = const[0], src1.w = temp[57], src2.xyz = const[1] MAD temp[71].x, src0.w__, src1.x__, src0.000 MAD temp[58].w, src1.w, src2.y, src0.0 31: src0.xyz = const[4], src1.xyz = temp[46], src2.xyz = temp[48] MAD temp[49].xyz, src0.xyz, src1.zzz, src2.xyz 32: src0.w = temp[58] REPL_ALPHA temp[59].x EX2, src0.w 33: src0.xyz = temp[49], src1.xyz = const[5] MAD temp[50].xyz, src0.xyz, src0.111, src1.xyz 34: src0.xyz = temp[53], src1.xyz = temp[59], src2.xyz = const[1] MAD temp[60].w, src0.x, src1.x, src2.x 35: src0.w = temp[60] MAX temp[61].x, src0.w__, src0.0__ 36: BEGIN_TEX; 37: TEX temp[37].xyz, temp[36].xy__, 2D[1]; 38: TEX temp[51].xyz, temp[50].xyz_, CUBE[0] SEM_WAIT SEM_ACQUIRE; 39: src0.xyz = temp[22], src1.xyz = temp[37] SEM_WAIT MAD temp[39].xyz, src0.xyz, src1.xyz, src0.000 40: src0.xyz = temp[51], src1.xyz = temp[71] MAD temp[72].xyz, src0.xyz, src1.xxx, src0.000 41: src0.xyz = temp[51], src1.xyz = temp[61] MAD temp[62].xyz, src0.xyz, src1.xxx, src0.000 42: src0.xyz = temp[72], src1.xyz = const[8] MAD temp[73].xyz, src0.xyz, src1.xxx, src0.000 43: src0.xyz = temp[62], src1.xyz = const[8] MAD temp[63].xyz, src0.xyz, src1.xxx, src0.000 44: src0.xyz = temp[63], src1.xyz = const[7], src2.xyz = temp[39] MAD temp[64].xyz, src0.xyz, src1.xxx, src2.xyz 45: src0.xyz = temp[73], src1.xyz = const[7], src2.xyz = temp[64] MAD temp[19].xyz, src0.xyz, src1.xxx, src2.xyz 46: src0.xyz = temp[19], src0.w = temp[19] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[1] DP3 temp[0].z, src0.xyz, src0.xyz RCP temp[0].w, src0.z 1: src0.xyz = const[1], src1.xyz = temp[0] MAD temp[0].z, src0.__1, src0.__1, -src0.__x RSQ temp[1].w, |src1.z| 2: src0.xyz = input[1], src0.w = temp[1], src1.w = temp[0], src2.w = const[10] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 MIN temp[0].w, src1.w, src2.w 3: src0.xyz = const[8], src0.w = input[6] MAD temp[6].z, src0.__1, src0.__1, -src0.__x RCP temp[1].w, src0.w 4: src0.xyz = input[6], src0.w = temp[1], src1.xyz = const[6], src1.w = temp[0] MAD temp[6].xy, src0.xy_, src0.ww_, src0.00_ MAD temp[0].w, src1.x, src1.w, src0.0 5: src0.xyz = temp[6], src1.xyz = const[11], src2.xyz = const[12] MAD temp[6].xy, src0.xy_, src1.xy_, src2.xy_ 6: src0.xyz = temp[6], src1.xyz = const[9] MAD temp[7].y, src0._y_, src1._x_, src1._y_ 7: src0.xyz = temp[6] MAD temp[7].x, src0.x__, src0.11_, src0.00_ 8: BEGIN_TEX; 9: TEX temp[8], input[0].xy__, 2D[3]; 10: TEX temp[9].xyz, input[0].xy__, 2D[2] SEM_WAIT SEM_ACQUIRE; 11: src0.xyz = temp[8], src0.w = temp[8], src1.xyz = input[2], src1.w = input[2] SEM_WAIT MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[1].w, src0.w, src1.w, src0.0 12: src0.xyz = temp[9], src0.w = temp[1], src1.xyz = const[10] MAD temp[8].xyz, src0.xyz, src1.yyy, -src0.111 MAD temp[1].w, src0.w, src0.1, src0.0 13: src0.xyz = temp[2] MAD temp[9].xyz, src0.111, src0.111, -src0.xyz 14: src0.xyz = temp[8], src1.xyz = input[4] MAD temp[4].xyz, src0.xxx, src1.xyz, src0.000 15: src0.xyz = temp[9], src1.xyz = temp[6], src2.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.zzz, src2.xyz 16: src0.xyz = temp[8], src1.xyz = input[3], src2.xyz = temp[4] MAD temp[3].xyz, src0.yyy, src1.xyz, src2.xyz 17: src0.xyz = temp[8], src1.xyz = input[5], src2.xyz = temp[3] MAD temp[3].xyz, src0.zzz, src1.xyz, src2.xyz 18: src0.xyz = temp[3] DP3 temp[0].x, src0.xyz, src0.xyz 19: src0.xyz = temp[0] REPL_ALPHA temp[0].x RSQ, |src0.x| 20: src0.xyz = temp[3], src1.xyz = temp[0] MAD temp[3].xyz, src0.xyz, src1.xxx, src0.000 21: src0.xyz = temp[3], src0.w = temp[0], src2.xyz = temp[7] MAD temp[0].xy, src0.xy_, src0.ww_, src2.xy_ 22: src0.xyz = temp[3], src1.xyz = const[14] DP3 temp[4].x, src0.xyz, src1.xyz 23: src0.xyz = temp[1], src1.xyz = temp[3], src2.xyz = temp[4] DP3 temp[4].x, -src0.xyz, src1.xyz MAD temp[0].w, src0.1, |src0.1|, -|src2.x| 24: src0.xyz = temp[3], src0.w = temp[0], src1.xyz = temp[1] DP3 temp[4].y, src0.xyz, src1.xyz LG2 temp[0].w, src0.w 25: src0.xyz = temp[0], src1.xyz = const[13], src2.xyz = temp[4] MAD temp[0].xy, src0.xy_, src1.xy_, src0.00_ MAX temp[2].w, src2.x, src0.0 26: src0.xyz = temp[4], src0.w = temp[0], src1.xyz = temp[3], src2.xyz = const[0] MAD temp[3].xyz * 2, src0.yyy, src1.xyz, src0.000 MAD temp[0].w, src0.w, src2.y, src0.0 27: src0.xyz = temp[1], src0.w = temp[2], src1.xyz = temp[3] MAD temp[1].xyz, src0.xyz, src0.111, -src1.xyz MAD temp[2].w, src0.1, src0.1, -src0.w 28: src0.xyz = const[2], src0.w = temp[2], src1.xyz = temp[1] MAD temp[3].xyz, src0.xyz, src1.xxx, src0.000 LG2 temp[2].w, src0.w 29: src0.xyz = const[3], src0.w = temp[0], src1.xyz = temp[1], src2.xyz = temp[3] MAD temp[3].xyz, src0.xyz, src1.yyy, src2.xyz EX2 temp[0].w, src0.w 30: src0.w = temp[0], src1.xyz = const[0], src1.w = temp[2], src2.xyz = const[1] MAD temp[4].x, src0.w__, src1.x__, src0.0__ MAD temp[0].w, src1.w, src2.y, src0.0 31: src0.xyz = const[4], src1.xyz = temp[1], src2.xyz = temp[3] MAD temp[1].xyz, src0.xyz, src1.zzz, src2.xyz 32: src0.w = temp[0] REPL_ALPHA temp[3].x EX2, src0.w 33: src0.xyz = temp[1], src1.xyz = const[5] MAD temp[1].xyz, src0.xyz, src0.111, src1.xyz 34: src0.xyz = temp[0], src1.xyz = temp[3], src2.xyz = const[1] MAD temp[0].w, src0.z, src1.x, src2.x 35: src0.w = temp[0] MAX temp[0].z, src0.__w, src0.__0 36: BEGIN_TEX; 37: TEX temp[3].xyz, temp[0].xy__, 2D[1]; 38: TEX temp[5].xyz, temp[1].xyz_, CUBE[0] SEM_WAIT SEM_ACQUIRE; 39: src0.xyz = temp[2], src1.xyz = temp[3] SEM_WAIT MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 40: src0.xyz = temp[5], src1.xyz = temp[4] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 41: src0.xyz = temp[5], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.zzz, src0.000 42: src0.xyz = temp[2], src1.xyz = const[8] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 43: src0.xyz = temp[0], src1.xyz = const[8] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 44: src0.xyz = temp[0], src1.xyz = const[7], src2.xyz = temp[1] MAD temp[0].xyz, src0.xyz, src1.xxx, src2.xyz 45: src0.xyz = temp[2], src1.xyz = const[7], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xxx, src2.xyz 46: src0.xyz = temp[0], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=54************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 7, tex_end: 0 (code_addr: 000001c0) 0: xyz: t1 t0 t0 bias-> t0.z (02000001) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t1.xyz t1.xyz t1.xxx op: 00804000 w: t1.z t1.x t1.x op: 05000002 1: xyz: c1 t0 t0 bias-> t0.z (02000021) w: t0 t0 t0 bias-> t1.w (00840000) xyz: 1.0 1.0 -c1.xxx op: 00084a95 w: |t0.z| c1.x c1.x op: 05800045 2: xyz: t1 t32 t0 bias-> t1.xyz (03840001) w: t1 t0 c10 bias-> t0.w (0082a001) xyz: t1.xyz t1.www 0.0 op: 00050600 w: t0.w c10.w t1.x op: 0100058a 3: xyz: c8 t0 t0 bias-> t6.z (02180028) w: t6 t0 t0 bias-> t1.w (00840006) xyz: 1.0 1.0 -c8.xxx op: 00084a95 w: t6.w c8.x c8.x op: 05000009 4: xyz: t6 c6 t0 bias-> t6.xy (01980986) w: t1 t0 t0 bias-> t0.w (00800001) xyz: t6.xyz t1.www 0.0 op: 00050600 w: c6.x t0.w 0.0 op: 00040503 5: xyz: t6 c11 c12 bias-> t6.xy (019acac6) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz c11.xyz c12.xyz op: 00020200 w: t6.x t6.x t6.x op: 00000000 6: xyz: t6 c9 t0 bias-> t7.y (011c0a46) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz c9.xxx c9.xyz op: 00010280 w: t6.x t6.x t6.x op: 00000000 7: xyz: t6 t0 t0 bias-> t7.x (009c0006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz 1.0 0.0 op: 00050a80 w: t6.x t6.x t6.x op: 00000000 NODE 1: alu_offset: 8, tex_offset: 0, alu_end: 24, tex_end: 1 (code_addr: 00020608) TEX: TEX t8, t0, texture[3] (00009a00) TEX t9, t0, texture[2] (00009240) 8: xyz: t8 t2 t0 bias-> t2.xyz (03880088) w: t8 t2 t0 bias-> t1.w (00840088) xyz: t8.xyz t2.xyz 0.0 op: 00050200 w: t8.w t2.w 0.0 op: 00040509 9: xyz: t9 c10 t0 bias-> t8.xyz (03a00a89) w: t1 t0 t0 bias-> t1.w (00840001) xyz: t9.xyz c10.yyy -1.0 op: 000d4300 w: t1.w 1.0 0.0 op: 00040889 10: xyz: t2 t0 t0 bias-> t9.xyz (03a40002) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t2.xyz op: 00080a95 w: t2.x t2.x t2.x op: 00000000 11: xyz: t8 t4 t0 bias-> t4.xyz (03900108) w: t0 t0 t0 bias-> (00000000) xyz: t8.xxx t4.xyz 0.0 op: 00050201 w: t8.x t8.x t8.x op: 00000000 12: xyz: t9 t6 t2 bias-> t2.xyz (03882189) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz t6.zzz t2.xyz op: 00020380 w: t9.x t9.x t9.x op: 00000000 13: xyz: t8 t3 t4 bias-> t3.xyz (038c40c8) w: t0 t0 t0 bias-> (00000000) xyz: t8.yyy t3.xyz t4.xyz op: 00020202 w: t8.x t8.x t8.x op: 00000000 14: xyz: t8 t5 t3 bias-> t3.xyz (038c3148) w: t0 t0 t0 bias-> (00000000) xyz: t8.zzz t5.xyz t3.xyz op: 00020203 w: t8.x t8.x t8.x op: 00000000 15: xyz: t3 t0 t0 bias-> t0.x (00800003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t3.xyz t3.xxx op: 00804000 w: t3.x t3.x t3.x op: 00000000 16: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.x| t0.x t0.x op: 05800040 17: xyz: t3 t0 t0 bias-> t3.xyz (038c0003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t0.xxx 0.0 op: 00050280 w: t3.x t3.x t3.x op: 00000000 18: xyz: t3 t32 t7 bias-> t0.xy (01807003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t0.www t7.xyz op: 00020600 w: t3.x t3.x t3.x op: 00000000 19: xyz: t3 c14 t0 bias-> t4.x (00900b83) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c14.xyz t3.xxx op: 00804200 w: t3.x t3.x t3.x op: 00000000 20: xyz: t1 t3 t4 bias-> t4.x (009040c1) w: t0 t0 t0 bias-> t0.w (00800000) xyz: -t1.xyz t3.xyz t1.xxx op: 00804220 w: 1.0 |1.0| -|t4.x| op: 0019a891 21: xyz: t3 t1 t0 bias-> t4.y (01100043) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t3.xyz t1.xyz t3.xxx op: 00804200 w: t0.w t3.x t3.x op: 04800009 22: xyz: t0 c13 t4 bias-> t0.xy (01804b40) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t0.xyz c13.xyz 0.0 op: 00050200 w: t4.x 0.0 t0.x op: 01800806 23: xyz: t4 t3 c0 bias-> t3.xyz (038e00c4) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t4.yyy t3.xyz 0.0 op: 08050202 w: t0.w c0.y 0.0 op: 00040389 24: xyz: t1 t3 t0 bias-> t1.xyz (038400c1) w: t2 t0 t0 bias-> t2.w (00880002) xyz: t1.xyz 1.0 -t3.xyz op: 00090a80 w: 1.0 1.0 -t2.w op: 000a4891 25: xyz: c2 t1 t0 bias-> t3.xyz (038c0062) w: t2 t0 t0 bias-> t2.w (00880002) xyz: c2.xyz t1.xxx 0.0 op: 00050280 w: t2.w c2.x c2.x op: 04800009 26: xyz: c3 t1 t3 bias-> t3.xyz (038c3063) w: t0 t0 t0 bias-> t0.w (00800000) xyz: c3.xyz t1.yyy t3.xyz op: 00020300 w: t0.w c3.x c3.x op: 04000009 27: xyz: t32 c0 c1 bias-> t4.x (00921800) w: t0 t2 t0 bias-> t0.w (00800080) xyz: t0.www c0.xyz 0.0 op: 0005020c w: t2.w c1.y 0.0 op: 0004038a 28: xyz: c4 t1 t3 bias-> t1.xyz (03843064) w: t0 t0 t0 bias-> (00000000) xyz: c4.xyz t1.zzz t3.xyz op: 00020380 w: c4.x c4.x c4.x op: 00000000 29: xyz: t0 t0 t0 bias-> t3.x (008c0000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: t0.w t0.x t0.x op: 04000009 30: xyz: t1 c5 t0 bias-> t1.xyz (03840941) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 c5.xyz op: 00010a80 w: t1.x t1.x t1.x op: 00000000 31: xyz: t0 t3 c1 bias-> (000210c0) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: t0.z t3.x c1.x op: 00018182 32: xyz: t32 t0 t0 bias-> t0.z (02000000) w: t0 t0 t0 bias-> (00000000) xyz: t0.www 0.0 t32.xxx op: 02804a0c w: t32.x t32.x t32.x op: 00000000 NODE 2: alu_offset: 33, tex_offset: 2, alu_end: 7, tex_end: 1 (code_addr: 004221e1) TEX: TEX t3, t0, texture[1] (000088c0) TEX t5, t1, texture[0] (00008141) 33: xyz: t2 t3 t0 bias-> t1.xyz (038400c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t3.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 34: xyz: t5 t4 t0 bias-> t2.xyz (03880105) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t4.xxx 0.0 op: 00050280 w: t5.x t5.x t5.x op: 00000000 35: xyz: t5 t0 t0 bias-> t0.xyz (03800005) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t0.zzz 0.0 op: 00050380 w: t5.x t5.x t5.x op: 00000000 36: xyz: t2 c8 t0 bias-> t2.xyz (03880a02) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c8.xxx 0.0 op: 00050280 w: t2.x t2.x t2.x op: 00000000 37: xyz: t0 c8 t0 bias-> t0.xyz (03800a00) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c8.xxx 0.0 op: 00050280 w: t0.x t0.x t0.x op: 00000000 38: xyz: t0 c7 t1 bias-> t0.xyz (038019c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c7.xxx t1.xyz op: 00020280 w: t0.x t0.x t0.x op: 00000000 39: xyz: t2 c7 t0 bias-> t0.xyz (038009c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c7.xxx t0.xyz op: 00020280 w: t2.x t2.x t2.x op: 00000000 40: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t1 t0 t0 bias-> o0.w (01000001) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t1.w 1.0 0.0 op: 00040889